package xapi.dev.gwt;
import java.util.Arrays;
import xapi.dev.gwt.i18n.CodeServerDebugMessages.Debug;
import com.google.gwt.dev.ArgProcessorBase;
import com.google.gwt.util.tools.ArgHandlerFlag;
import com.google.gwt.util.tools.ArgHandlerInt;
public class CodeServerGuiOptions{
private int port = 9876;
private boolean unload;
//exposed for use in type-free cross-process communication.
public static final String
moduleParam = "module"
,portParam = "port"
,unloadParam = "unload"
,testParam = "testing"
;
private class ArgProcessor extends ArgProcessorBase{
public ArgProcessor(CodeServerGuiOptions opts) {
registerHandler(new PortFlag());
registerHandler(new UnloadFlag(opts));
}
@Override
protected String getName() {
return CodeServerMain.class.getName();
}
}
/**
*
* @param args
* @return non-null String to cause System.exit();
*/
public String parseArgs(String[] args) {
return new ArgProcessor(this).processArgs(args)
? null : Debug.unableToStartServer()+Arrays.asList(args);
}
public int getPort() {
return port;
}
public boolean isUnload() {
return unload;
}
public void setUnload(boolean unload) {
this.unload = unload;
}
private class PortFlag extends ArgHandlerInt {
@Override
public String getTag() {
return "-"+portParam;
}
@Override
public String[] getTagArgs() {
return new String[] {portParam};
}
@Override
public String getPurpose() {
return "The port where the code server will run.";
}
@Override
public void setInt(int newValue) {
port = newValue;
}
}
private class UnloadFlag extends ArgHandlerFlag{
private final CodeServerGuiOptions opts;
public UnloadFlag(CodeServerGuiOptions opts) {
this.opts = opts;
}
@Override
public boolean setFlag(boolean value) {
opts.setUnload(value);
return value;
}
@Override
public String getPurposeSnippet() {
return "When supplied, tell the CodeServerGui to unload the running modules, if any.";
}
@Override
public String getLabel() {
return unloadParam;
}
@Override
public boolean getDefaultValue() {
return false;
}
}
}