/* * Licensed to the Apache Software Foundation (ASF) under one or more * contributor license agreements. See the NOTICE file distributed with * this work for additional information regarding copyright ownership. * The ASF licenses this file to You under the Apache License, Version 2.0 * (the "License"); you may not use this file except in compliance with * the License. You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package org.apache.sling.maven.slingstart.run; import java.io.File; import java.io.Serializable; /** * A server configuration */ public class ServerConfiguration implements Serializable { private static final long serialVersionUID = 1922175510880318125L; private static final String DEFAULT_VM_OPTS = "-Xmx1024m -XX:MaxPermSize=256m -Djava.awt.headless=true"; // http://docs.oracle.com/javase/7/docs/technotes/guides/jpda/conninv.html#Invocation private static final String DEFAULT_VM_DEBUG_OPTS = "-agentlib:jdwp=transport=dt_socket,server=y,suspend=n,address=8000"; /** The unique id. */ private String id; /** The run mode string. */ private String runmode; /** The port to use. */ private String port; /** The control port to use. */ private String controlPort; /** The context path. */ private String contextPath; /** The vm options. */ private String vmOpts = DEFAULT_VM_OPTS; /** * If set to {@code "true"}, the process will allow a debugger to connect on port 8000. * If set to some other string, that string will be appended to this server's {@code vmOpts}, allowing you to configure arbitrary debugging options. * If the global configuration property {@link StartMojo#debug} is set on the mojo itself, it will be used instead. */ private String debug; /** Additional application options. */ private String opts; /** Number of instances. */ private int instances = 1; /** The folder to use. */ private File folder; /** * The relative filename of the file which receives both the standard output (stdout) and standard error (stderr) of the server processes. * If null or empty string the server process inherits stdout from the parent process (i.e. the Maven process). * The given filename must be relative to the working directory of the according server. */ private String stdOutFile; /** * Get the instance id * @return The instance id */ public String getId() { return id; } /** * Set the instance id * @param id New instance id */ public void setId(String id) { this.id = id; } public String getRunmode() { return runmode; } public void setRunmode(final String runmode) { this.runmode = runmode; } public String getPort() { return port; } public void setPort(final String port) { this.port = port; } public String getContextPath() { return contextPath; } public void setContextPath(final String contextPath) { this.contextPath = contextPath; } public String getVmOpts() { return vmOpts; } public void setVmOpts(final String vmOpts) { this.vmOpts = vmOpts; } /** * Returns the debugging options derived from the passed globalDebug parameter and the debug field (where the globalDebug parameter has precedence over the local field) * @param globalDebug the global debug options (may be {@code null}). * @return the debugging options to use or {@code null}. Should be appended to the ones being returned by {@link #getVmOpts()}. * @see <a href="http://docs.oracle.com/javase/7/docs/technotes/guides/jpda/conninv.html#Invocation">JPDA Sun VM Invocation Options</a> */ public String getVmDebugOpts(String globalDebug) { if (globalDebug != null) { if (Boolean.valueOf(globalDebug).equals(Boolean.TRUE)) { return DEFAULT_VM_DEBUG_OPTS; } return globalDebug; } if (Boolean.valueOf(debug).equals(Boolean.TRUE)) { return DEFAULT_VM_DEBUG_OPTS; } return debug; } public void setDebug(final String debug) { this.debug = debug; } public String getOpts() { return opts; } public void setOpts(final String opts) { this.opts = opts; } public int getInstances() { return this.instances; } public void setInstances(final int value) { this.instances = value; } public File getFolder() { return folder; } public void setFolder(final File folder) { this.folder = folder.getAbsoluteFile(); } public String getControlPort() { return controlPort; } public void setControlPort(String controlPort) { this.controlPort = controlPort; } public String getStdOutFile() { return stdOutFile; } public void setStdOutFile(String stdOutFile) { this.stdOutFile = stdOutFile; } /** * Get the server * @return The server */ public String getServer() { // hard coded for now return "localhost"; } public ServerConfiguration copy() { final ServerConfiguration copy = new ServerConfiguration(); // we do not copy the id copy.setRunmode(this.getRunmode()); copy.setPort(this.getPort()); copy.setContextPath(this.getContextPath()); copy.setVmOpts(this.getVmOpts()); copy.setDebug(this.debug); copy.setOpts(this.getOpts()); copy.setInstances(1); copy.setFolder(this.getFolder()); copy.setControlPort(this.getControlPort()); copy.setStdOutFile(this.stdOutFile); return copy; } @Override public String toString() { return "LaunchpadConfiguration [id=" + id + ", runmode=" + runmode + ", port=" + port + ", controlPort=" + controlPort + ", contextPath=" + contextPath + ", vmOpts=" + vmOpts + ", vmDebugOpts=" + getVmDebugOpts(null) + ", opts=" + opts + ", instances=" + instances + ", folder=" + folder + ", stdout=" + stdOutFile + "]"; } }