blob: 5ddb553ab38b0c484a0ae6f26e6411d7fc9d5b0f [file] [log] [blame]
package org.jetbrains.plugins.groovy.mvc;
import com.intellij.execution.configurations.ParametersList;
import org.jetbrains.annotations.NotNull;
import org.jetbrains.annotations.Nullable;
import java.util.*;
/**
* @author Sergey Evdokimov
*/
public class MvcCommand {
public static final Collection<String> ourEnvironments = Arrays.asList("prod", "test", "dev");
private String myEnv;
private String myCommand;
private final ArrayList<String> myArgs = new ArrayList<String>();
private final ArrayList<String> myProperties = new ArrayList<String>();
public MvcCommand() {
}
public MvcCommand(String command, String ... args) {
myCommand = command;
Collections.addAll(myArgs, args);
}
@Nullable
public String getEnv() {
return myEnv;
}
public void setEnv(@Nullable String env) {
myEnv = env;
}
@Nullable
public String getCommand() {
return myCommand;
}
public void setCommand(@Nullable String command) {
myCommand = command;
}
/**
* Returns MODIFIABLE list of arguments
*/
public ArrayList<String> getArgs() {
return myArgs;
}
public void setArgs(List<String> args) {
if (args == myArgs) return;
myArgs.clear();
myArgs.addAll(args);
}
/**
* Returns MODIFIABLE list of system properties definition written before command (e.g. -Dgrails.port=9090 run-app)
*/
public ArrayList<String> getProperties() {
return myProperties;
}
public void setProperties(List<String> properties) {
if (myProperties == properties) return;
myProperties.clear();
myProperties.addAll(properties);
}
public void addToParametersList(@NotNull ParametersList list) {
if (myEnv != null) {
list.add(myEnv);
}
list.addAll(myProperties);
if (myCommand != null) {
list.add(myCommand);
}
list.addAll(myArgs);
}
@NotNull
public static MvcCommand parse(@NotNull String cmd) {
String[] args = ParametersList.parse(cmd);
MvcCommand res = new MvcCommand();
int i = 0;
while (res.myCommand == null && i < args.length) {
String s = args[i];
if (s.startsWith("-D")) {
res.myProperties.add(s);
}
else if (res.myEnv == null && ourEnvironments.contains(s)) {
res.myEnv = s;
}
else {
res.myCommand = s;
}
i++;
}
res.myArgs.addAll(Arrays.asList(args).subList(i, args.length));
return res;
}
}