BuildProject.java
/*
* @copyright defined in LICENSE.txt
*/
package ship.command;
import com.beust.jcommander.Parameter;
import java.util.function.Function;
import lombok.Getter;
import lombok.Setter;
import lombok.ToString;
import ship.build.web.model.BuildDetails;
public class BuildProject extends AbstractCommand {
protected static final int COMMAND_MODE = 1;
protected static final int CONSOLE_MODE = 2;
protected static final int WEB_MODE = 3;
@Getter
@Setter
protected Function<Options, BuildProjectCommandMode> commandFactory = options -> {
switch (options.getMode()) {
case COMMAND_MODE:
return new BuildProjectCommandMode();
case WEB_MODE:
return new BuildProjectWebMode(options.getPort());
case CONSOLE_MODE:
return new BuildProjectConsoleMode();
default:
throw new IllegalStateException();
}
};
@Getter
protected BuildDetails lastBuildResult;
@ToString
class Options {
@Parameter(names = "--watch", description = "Run command as server mode")
@Getter
@Setter
protected boolean watch = false;
@Parameter(names = "--port", description = "Specify a port for web service")
@Getter
@Setter
protected int port = -1;
public int getMode() {
return (0 < port) ? WEB_MODE : (watch) ? CONSOLE_MODE : COMMAND_MODE;
}
}
@Override
public void execute() throws Exception {
logger.trace("Starting {}...", this);
final Options options = parse(new Options());
final BuildProjectCommandMode buildProjectCommandMode = commandFactory.apply(options);
buildProjectCommandMode.setPrinter(getPrinter());
buildProjectCommandMode.execute();
this.lastBuildResult = buildProjectCommandMode.getLastBuildResult();
}
}