/*
* JBoss, Home of Professional Open Source.
* Copyright 2012, Red Hat, Inc., and individual contributors
* as indicated by the @author tags. See the copyright.txt file in the
* distribution for a full listing of individual contributors.
*
* This is free software; you can redistribute it and/or modify it
* under the terms of the GNU Lesser General Public License as
* published by the Free Software Foundation; either version 2.1 of
* the License, or (at your option) any later version.
*
* This software is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
* Lesser General Public License for more details.
*
* You should have received a copy of the GNU Lesser General Public
* License along with this software; if not, write to the Free
* Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA
* 02110-1301 USA, or see the FSF site: http://www.fsf.org.
*/
/**
*
*/
package org.jboss.as.host.controller.model.jvm;
import java.util.HashMap;
import java.util.Map;
import org.jboss.as.host.controller.logging.HostControllerLogger;
import org.jboss.dmr.ModelNode;
import org.jboss.dmr.ModelType;
import org.jboss.dmr.Property;
/**
* A Java Virtual Machine configuration.
*
* @author Brian Stansberry
*/
public class JvmElement {
private static final long serialVersionUID = 4963103173530602991L;
//Attributes
private final String name;
private JvmType type = JvmType.SUN;
private String javaHome;
private Boolean debugEnabled;
private String debugOptions;
private Boolean envClasspathIgnored;
//Elements
private String heapSize;
private String maxHeap;
private String permgenSize;
private String maxPermgen;
private String agentPath;
private String agentLib;
private String javaagent;
private String stack;
private String launchCommand;
private final JvmOptionsElement jvmOptionsElement = new JvmOptionsElement();
private Map<String, String> environmentVariables = new HashMap<String, String>();
public JvmElement(final String name) {
this.name = name;
}
public JvmElement(final String name, ModelNode ... toCombine) {
this.name = name;
if(name == null) {
heapSize = "64m";
maxHeap = "256m";
}
for(final ModelNode node : toCombine) {
if(node == null) {
continue;
}
if(node.hasDefined(JvmAttributes.JVM_AGENT_LIB)) {
agentLib = node.get(JvmAttributes.JVM_AGENT_LIB).asString();
}
if(node.hasDefined(JvmAttributes.JVM_AGENT_PATH)) {
agentPath = node.get(JvmAttributes.JVM_AGENT_PATH).asString();
}
if(node.hasDefined(JvmAttributes.JVM_DEBUG_ENABLED)) {
debugEnabled = node.get(JvmAttributes.JVM_DEBUG_ENABLED).asBoolean();
}
if(node.hasDefined(JvmAttributes.JVM_DEBUG_OPTIONS)) {
debugOptions = node.get(JvmAttributes.JVM_DEBUG_OPTIONS).asString();
}
if(node.hasDefined(JvmAttributes.JVM_ENV_CLASSPATH_IGNORED)) {
envClasspathIgnored = node.get(JvmAttributes.JVM_ENV_CLASSPATH_IGNORED).asBoolean();
}
if(node.hasDefined(JvmAttributes.JVM_ENV_VARIABLES)) {
for(Property property : node.get(JvmAttributes.JVM_ENV_VARIABLES).asPropertyList()) {
environmentVariables.put(property.getName(), property.getValue().asString());
}
}
if(node.hasDefined(JvmAttributes.JVM_LAUNCH_COMMAND)) {
launchCommand = node.get(JvmAttributes.JVM_LAUNCH_COMMAND).asString();
}
if(node.hasDefined(JvmAttributes.JVM_HEAP)) {
heapSize = node.get(JvmAttributes.JVM_HEAP).asString();
}
if(node.hasDefined(JvmAttributes.JVM_MAX_HEAP)) {
maxHeap = node.get(JvmAttributes.JVM_MAX_HEAP).asString();
}
if(node.hasDefined(JvmAttributes.JVM_JAVA_AGENT)) {
javaagent = node.get(JvmAttributes.JVM_JAVA_AGENT).asString();
}
if(node.hasDefined(JvmAttributes.JVM_JAVA_HOME)) {
javaHome = node.get(JvmAttributes.JVM_JAVA_HOME).asString();
}
if(node.hasDefined(JvmAttributes.JVM_OPTIONS)) {
for(final ModelNode option : node.get(JvmAttributes.JVM_OPTIONS).asList()) {
jvmOptionsElement.addOption(option.asString());
}
}
if(node.hasDefined(JvmAttributes.JVM_PERMGEN)) {
permgenSize = node.get(JvmAttributes.JVM_PERMGEN).asString();
}
if(node.hasDefined(JvmAttributes.JVM_MAX_PERMGEN)) {
maxPermgen = node.get(JvmAttributes.JVM_MAX_PERMGEN).asString();
}
if(node.hasDefined(JvmAttributes.JVM_STACK)) {
stack = node.get(JvmAttributes.JVM_STACK).asString();
}
}
}
public String getJavaHome() {
return javaHome;
}
void setJavaHome(String javaHome) {
this.javaHome = javaHome;
}
public JvmType getJvmType() {
return type;
}
void setJvmType(JvmType type) {
this.type = type;
}
public String getPermgenSize() {
return permgenSize;
}
void setPermgenSize(String permgenSize) {
this.permgenSize = permgenSize;
}
public String getMaxPermgen() {
return maxPermgen;
}
void setMaxPermgen(String maxPermgen) {
this.maxPermgen = maxPermgen;
}
public String getHeapSize() {
return heapSize;
}
void setHeapSize(String heapSize) {
this.heapSize = heapSize;
}
public String getMaxHeap() {
return maxHeap;
}
void setMaxHeap(String maxHeap) {
this.maxHeap = maxHeap;
}
public String getName() {
return name;
}
public Boolean isDebugEnabled() {
return debugEnabled;
}
void setDebugEnabled(Boolean debugEnabled) {
this.debugEnabled = debugEnabled;
}
public String getDebugOptions() {
return debugOptions;
}
void setDebugOptions(String debugOptions) {
this.debugOptions = debugOptions;
}
public String getStack() {
return stack;
}
void setStack(String stack) {
this.stack = stack;
}
public Boolean isEnvClasspathIgnored() {
return envClasspathIgnored;
}
void setEnvClasspathIgnored(Boolean envClasspathIgnored) {
this.envClasspathIgnored = envClasspathIgnored;
}
public JvmOptionsElement getJvmOptions() {
return jvmOptionsElement;
}
public Map<String, String> getEnvironmentVariables() {
return environmentVariables;
}
public String getAgentPath() {
return agentPath;
}
void setAgentPath(String agentPath) {
if (agentLib != null) {
throw HostControllerLogger.ROOT_LOGGER.attemptingToSet("agent-path", "agent-lib");
}
this.agentPath = agentPath;
}
public String getAgentLib() {
return agentLib;
}
void setAgentLib(String agentLib) {
if (agentPath != null) {
throw HostControllerLogger.ROOT_LOGGER.attemptingToSet("agent-lib", "agent-path");
}
this.agentLib = agentLib;
}
public String getLaunchCommand() {
return launchCommand;
}
void setLaunchCommand(String launchCommand) {
this.launchCommand = launchCommand;
}
public String getJavaagent() {
return javaagent;
}
void setJavaagent(String javaagent) {
this.javaagent = javaagent;
}
static boolean isDefined(final ModelNode node) {
return node.getType() != ModelType.UNDEFINED;
}
}