package grails.plugin.lightweightdeploy; import grails.plugin.lightweightdeploy.connector.HttpConfiguration; import grails.plugin.lightweightdeploy.jmx.JmxConfiguration; import grails.plugin.lightweightdeploy.logging.HttpLoggingConfiguration; import grails.plugin.lightweightdeploy.logging.LoggingConfiguration; import java.io.File; import java.io.FileReader; import java.io.IOException; import java.util.Map; import org.yaml.snakeyaml.Yaml; /** * Stores the configuration for the jetty server */ public class Configuration { private HttpConfiguration httpConfiguration; private HttpLoggingConfiguration requestLogConfiguration; private LoggingConfiguration serverLogConfiguration; private File workDir; private JmxConfiguration jmxConfiguration; private String appName; public Configuration(Map<String, ?> config) throws IOException { init(config); } public Configuration(String ymlFilePath) throws IOException { Map<String, ?> config = (Map<String, ?>) new Yaml().load(new FileReader(new File(ymlFilePath))); init(config); } protected void init(Map<String, ?> config) throws IOException { initHttp(config); initLogging(config); initJmx(config); initAppName(config); } protected void initAppName(Map<String, ?> config) throws IOException { this.appName = (String) config.get("appname"); } protected void initHttp(Map<String, ?> config) throws IOException { Map<String, ?> httpConfig = (Map<String, ?>) config.get("http"); this.httpConfiguration = new HttpConfiguration(httpConfig); } protected void initJmx(Map<String, ?> config) { if (config.containsKey("jmx")) { Map<String, ?> jmxConfig = (Map<String, ?>) config.get("jmx"); Integer registryPort = (Integer) jmxConfig.get("registryPort"); Integer serverPort = (Integer) jmxConfig.get("serverPort"); if (registryPort == null || serverPort == null) { throw new IllegalArgumentException("Both server and registry port must be present for jmx"); } this.jmxConfiguration = new JmxConfiguration(registryPort, serverPort); } } protected void initLogging(Map<String, ?> config) { initRequestLogging(config); initServerLogging(config); initWorkDir(config); } protected void initRequestLogging(Map<String, ?> config) { Map<String, ?> httpConfig = (Map<String, ?>) config.get("http"); if (httpConfig.containsKey("requestLog")) { requestLogConfiguration = new HttpLoggingConfiguration((Map<String, ?>) httpConfig.get("requestLog")); } } protected void initServerLogging(Map<String, ?> config) { if (config.containsKey("logging")) { serverLogConfiguration = new LoggingConfiguration((Map<String, ?>) config.get("logging")); } } protected void initWorkDir(Map<String, ?> config) { if (config.containsKey("workDir")) { this.workDir = new File((String) config.get("workDir")); } else { this.workDir = new File(System.getProperty("java.io.tmpdir")); } } public HttpConfiguration getHttpConfiguration() { return httpConfiguration; } public JmxConfiguration getJmxConfiguration() { return jmxConfiguration; } public boolean isJmxEnabled() { return (this.jmxConfiguration != null); } public boolean isRequestLoggingEnabled() { return (this.requestLogConfiguration != null); } public boolean isServerLoggingEnabled() { return (this.serverLogConfiguration != null); } public LoggingConfiguration getServerLogConfiguration() { return serverLogConfiguration; } public HttpLoggingConfiguration getRequestLogConfiguration() { return requestLogConfiguration; } public File getWorkDir() { return workDir; } public String getAppName() { return appName; } @Override public String toString() { return "Configuration{" + "port=" + httpConfiguration.getPort() + ", adminPort=" + httpConfiguration.getAdminPort() + ", ssl=" + httpConfiguration.isSsl() + '}'; } }