diff --git a/src/main/java/br/ufrgs/inf/prosoft/remoteexecutor/Server.java b/src/main/java/br/ufrgs/inf/prosoft/remoteexecutor/Server.java
index 684de58..9212268 100644
--- a/src/main/java/br/ufrgs/inf/prosoft/remoteexecutor/Server.java
+++ b/src/main/java/br/ufrgs/inf/prosoft/remoteexecutor/Server.java
@@ -14,11 +14,11 @@ import java.io.OutputStream;
import java.net.ServerSocket;
import java.net.Socket;
import java.util.ArrayList;
-import java.util.Arrays;
import java.util.Iterator;
import java.util.List;
import java.util.logging.Level;
import java.util.logging.Logger;
+import java.util.stream.Collectors;
/**
*
@@ -28,6 +28,62 @@ public class Server {
private static final Logger LOGGER = Logger.getLogger(Server.class.getName());
+ private static class Tokenizer {
+
+ private int index;
+ private final String string;
+
+ public Tokenizer(String string) {
+ this.index = 0;
+ this.string = string;
+ }
+
+ public static List<String> split(String string) {
+ Tokenizer tokenizer = new Tokenizer(string);
+ List<String> list = new ArrayList<>();
+ while (tokenizer.hasMoreTokens()) {
+ list.add(tokenizer.getNextToken());
+ }
+ return list;
+ }
+
+ private boolean hasMoreTokens() {
+ if (this.string == null) {
+ return false;
+ }
+ if (this.string.isEmpty()) {
+ return false;
+ }
+ return this.index < string.length();
+ }
+
+ private String getNextToken() {
+ if (!hasMoreTokens()) {
+ return null;
+ }
+ while (this.index < this.string.length() && this.string.charAt(this.index) == ' ') {
+ this.index++;
+ }
+ char quoted = ' ';
+ int baseIndex = this.index;
+ while (this.index < this.string.length()) {
+ char nextChar = this.string.charAt(this.index);
+ if (nextChar == ' ' && quoted == ' ') {
+ break;
+ }
+ this.index++;
+ if (nextChar == '\'' || nextChar == '\"') {
+ if (quoted == ' ') {
+ quoted = nextChar;
+ } else if (nextChar == quoted) {
+ break;
+ }
+ }
+ }
+ return this.string.substring(baseIndex, this.index);
+ }
+ }
+
public static void listen(File home, int port) {
ServerSocket serverSocket = null;
try {
@@ -56,8 +112,16 @@ public class Server {
try {
ProcessBuilder processBuilder = new ProcessBuilder();
processBuilder.directory(home);
- String[] commandArray = command.split(" ");
- List<String> commandList = new ArrayList<>(Arrays.asList(commandArray));
+ List<String> commandList = Tokenizer.split(command)
+ .stream().map(string -> {
+ if (string.charAt(0) == '\"' || string.charAt(0) == '\'') {
+ string = string.substring(1, string.length());
+ }
+ if (string.charAt(string.length()- 1) == '\"' || string.charAt(string.length()- 1) == '\'') {
+ string = string.substring(0, string.length()- 1);
+ }
+ return string;
+ }).collect(Collectors.toList());
for (Iterator<String> iterator = commandList.iterator(); iterator.hasNext();) {
String export = iterator.next();
if (!export.contains("=")) {