BuildProject.java

  1. /*
  2.  * @copyright defined in LICENSE.txt
  3.  */

  4. package ship.command;

  5. import com.beust.jcommander.Parameter;
  6. import java.util.function.Function;
  7. import lombok.Getter;
  8. import lombok.Setter;
  9. import lombok.ToString;
  10. import ship.build.web.model.BuildDetails;

  11. public class BuildProject extends AbstractCommand {

  12.   protected static final int COMMAND_MODE = 1;
  13.   protected static final int CONSOLE_MODE = 2;
  14.   protected static final int WEB_MODE = 3;

  15.   @Getter
  16.   @Setter
  17.   protected Function<Options, BuildProjectCommandMode> commandFactory = options -> {
  18.     switch (options.getMode()) {
  19.       case COMMAND_MODE:
  20.         return new BuildProjectCommandMode();
  21.       case WEB_MODE:
  22.         return new BuildProjectWebMode(options.getPort());
  23.       case CONSOLE_MODE:
  24.         return new BuildProjectConsoleMode();
  25.       default:
  26.         throw new IllegalStateException();
  27.     }
  28.   };

  29.   @Getter
  30.   protected BuildDetails lastBuildResult;


  31.   @ToString
  32.   class Options {
  33.     @Parameter(names = "--watch", description = "Run command as server mode")
  34.     @Getter
  35.     @Setter
  36.     protected boolean watch = false;

  37.     @Parameter(names = "--port", description = "Specify a port for web service")
  38.     @Getter
  39.     @Setter
  40.     protected int port = -1;

  41.     public int getMode() {
  42.       return (0 < port) ? WEB_MODE : (watch) ? CONSOLE_MODE : COMMAND_MODE;
  43.     }
  44.   }

  45.   @Override
  46.   public void execute() throws Exception {
  47.     logger.trace("Starting {}...", this);
  48.     final Options options = parse(new Options());
  49.     final BuildProjectCommandMode buildProjectCommandMode = commandFactory.apply(options);
  50.     buildProjectCommandMode.setPrinter(getPrinter());
  51.     buildProjectCommandMode.execute();
  52.     this.lastBuildResult = buildProjectCommandMode.getLastBuildResult();
  53.   }
  54. }