package com.github.dreamhead.moco.bootstrap.arg; import com.github.dreamhead.moco.HttpsCertificate; import com.github.dreamhead.moco.bootstrap.HttpsArg; import com.github.dreamhead.moco.bootstrap.ServerType; import com.github.dreamhead.moco.bootstrap.ShutdownPortOption; import com.google.common.base.Function; import com.google.common.base.Optional; import static com.google.common.base.Optional.fromNullable; public abstract class StartArgs extends ShutdownPortOption { private final ServerType type; private final Optional<Integer> port; private final Optional<String> configurationFile; private final Optional<String> settings; private final Optional<String> env; private final Optional<HttpsArg> httpsArg; protected StartArgs(final ServerType type, final Integer port, final Integer shutdownPort, final String configurationFile, final String globalSettings, final String env, final HttpsArg httpsArg) { super(shutdownPort); this.type = type; this.port = fromNullable(port); this.configurationFile = fromNullable(configurationFile); this.settings = fromNullable(globalSettings); this.env = fromNullable(env); this.httpsArg = fromNullable(httpsArg); } public Optional<Integer> getPort() { return port; } public Optional<String> getConfigurationFile() { return configurationFile; } public boolean hasConfigurationFile() { return this.configurationFile.isPresent(); } public Optional<String> getSettings() { return settings; } public Optional<String> getEnv() { return env; } public boolean isHttps() { return httpsArg.isPresent(); } public Optional<HttpsCertificate> getHttpsCertificate() { return httpsArg.transform(toCertificate()); } private Function<HttpsArg, HttpsCertificate> toCertificate() { return new Function<HttpsArg, HttpsCertificate>() { @Override public HttpsCertificate apply(final HttpsArg input) { return input.getCertificate(); } }; } public static String help() { String separator = System.getProperty("line.separator"); return "Moco Options:" + separator + "moco [server type] -p port -c [configuration file]" + separator + separator + "server type: http, https, socket"; } public boolean isSocket() { return this.type == ServerType.SOCKET; } }