/*
* JBoss, Home of Professional Open Source
* Copyright 2011 Red Hat Inc. and/or its affiliates and other contributors
* as indicated by the @authors tag. All rights reserved.
* See the copyright.txt in the distribution for a
* full listing of individual contributors.
*
* Licensed 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.jboss.aerogear.test.container.manager;
import org.jboss.aerogear.test.container.manager.configuration.ContainerType;
import java.io.File;
import java.io.IOException;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;
/**
*
*
* @author <a href="mailto:aslak@redhat.com">Aslak Knutsen</a>
* @author <a href="mailto:aslak@redhat.com">Stefan Miklosovic</a>
*/
public class JBossManagerConfiguration {
private static final String[] DEFAULT_DOMAIN_SERVERS = new String[] { "server-one", "server-two" };
private File javaHome = null;
private File jbossHome = null;
private List<String> javaOpts = new ArrayList<String>();
private List<String> processControllerJavaOpts = new ArrayList<String>();
private List<String> hostControllerJavaOpts = new ArrayList<String>();
private List<String> serverJavaOpts = new ArrayList<String>();
private int startupTimeoutInSeconds = 120;
private boolean outputToConsole = true;
private String user;
private String password;
private ContainerType containerType = ContainerType.WILDFLY;
private String domainConfig = "domain.xml";
private String hostConfig = "host.xml";
private String standaloneConfig = "standalone.xml";
// domain specific
private boolean domain;
private String serverGroup = System.getProperty("server.group", "main-server-group");
private long domainStartTimeout = 60; // seconds
private List<String> domainServers = Arrays.asList(DEFAULT_DOMAIN_SERVERS);
private String domainMasterHostName = "master";
public JBossManagerConfiguration() {
// get either from system property or env variable
String javaHome = System.getProperty("java.home");
if (javaHome == null || javaHome.length() == 0) {
javaHome = System.getenv("JAVA_HOME");
}
if (javaHome != null) {
this.javaHome = new File(javaHome);
}
// get either from system property or env variable
String jbossHome = System.getProperty("jboss.home");
if (jbossHome == null || jbossHome.length() == 0) {
jbossHome = System.getenv("JBOSS_HOME");
}
if (jbossHome != null) {
this.jbossHome = new File(jbossHome);
}
}
/**
*
* @throws IllegalStateException if {@code jbossHome} or {@code javaHome} are not valid directories
*/
public void validate() throws IllegalStateException {
if (jbossHome != null) {
if (!jbossHome.exists() || !jbossHome.isDirectory()) {
throw new IllegalStateException("jbossHome '" + getJBossHome() + "' must exist!");
}
} else {
throw new IllegalStateException("Could not determine the value of JBoss home directory.");
}
if (!new File(getJBossBaseDir()).exists()) {
throw new IllegalStateException("Could not determine the value of JBoss base directory.");
}
if (!new File(getJBossConfigDir()).exists()) {
throw new IllegalStateException("Could not determine the value of JBoss configuration directory.");
}
if (javaHome != null) {
if (!javaHome.exists() || !javaHome.isDirectory()) {
throw new IllegalStateException("javaHome '" + javaHome.getAbsolutePath() + "' must exist!");
}
} else {
throw new IllegalStateException("Could not determine the value of Java home directory.");
}
}
public String getJavaHome() {
try {
return javaHome.getCanonicalPath();
}
catch(IOException e) {
throw new IllegalStateException("Unable to get canonical path of " + javaHome, e);
}
}
public JBossManagerConfiguration setJavaHome(String javaHome) {
if (javaHome != null && new File(javaHome).isDirectory()) {
this.javaHome = new File(javaHome);
}
return this;
}
public String getJavaBin() {
String javaExec = null;
if (getJavaHome() != null) {
return getJavaHome() + File.separatorChar + "bin" + File.separatorChar + "java";
} else {
return "java";
}
}
public String getJBossHome() {
try {
return jbossHome.getCanonicalPath();
}
catch(IOException e) {
throw new IllegalStateException("Unable to get canonical path of " + jbossHome, e);
}
}
public JBossManagerConfiguration setJBossHome(String jbossHome) {
if (jbossHome != null && new File(jbossHome).isDirectory()) {
this.jbossHome = new File(jbossHome);
}
return this;
}
// helpers
public String getJBossBaseDir() {
if (isDomain()) {
return getJBossHome() + "/domain";
} else {
return getJBossHome() + "/standalone";
}
}
public String getJBossLogDir() {
return getJBossBaseDir() + "/log";
}
public String getJBossConfigDir() {
return getJBossBaseDir() + "/configuration";
}
public String getJBossModuleDir() {
return getJBossHome() + "/modules";
}
public List<String> getJavaOpts() {
if(javaOpts.size()==0 && containerType!=null) {
return containerType.javaOptions(this);
}
return javaOpts;
}
public JBossManagerConfiguration setJavaOpts(String... javaOpts) {
this.javaOpts.addAll(Arrays.asList(javaOpts));
return this;
}
public int getStartupTimeoutInSeconds() {
return startupTimeoutInSeconds;
}
public JBossManagerConfiguration setStartupTimeoutInSeconds(int startupTimeoutInSeconds) {
if (startupTimeoutInSeconds > 0) {
this.startupTimeoutInSeconds = startupTimeoutInSeconds;
}
return this;
}
public JBossManagerConfiguration setOutputToConsole(boolean outputToConsole) {
this.outputToConsole = outputToConsole;
return this;
}
public boolean isOutputToConsole() {
return outputToConsole;
}
public List<String> getProcessControllerJavaOpts() {
if(processControllerJavaOpts.size()==0 && containerType!=null) {
return containerType.javaOptions(this);
}
return processControllerJavaOpts;
}
public JBossManagerConfiguration setProcessControllerJavaOpts(String... processControllerJavaOpts) {
this.processControllerJavaOpts.addAll(Arrays.asList(processControllerJavaOpts));
return this;
}
public List<String> getHostControllerJavaOpts() {
if(hostControllerJavaOpts.size() == 0 && containerType!=null) {
return containerType.javaOptions(this);
}
return hostControllerJavaOpts;
}
public JBossManagerConfiguration setHostControllerJavaOpts(String... hostControllerJavaOpts) {
this.hostControllerJavaOpts.addAll(Arrays.asList(hostControllerJavaOpts));
return this;
}
public List<String> getServerJavaOpts() {
return serverJavaOpts;
}
public JBossManagerConfiguration setServerJavaOpts(String... serverJavaOpts) {
this.serverJavaOpts.addAll(Arrays.asList(serverJavaOpts));
return this;
}
public JBossManagerConfiguration setUser(String user) {
if (user != null) {
this.user = user;
}
return this;
}
public String getUser() {
return user;
}
public JBossManagerConfiguration setPassword(String password) {
if (password != null) {
this.password = password;
}
return this;
}
public String getPassword() {
return password;
}
public ContainerType getContainerType() {
return containerType;
}
public JBossManagerConfiguration setContainerType(ContainerType containerType) {
if (containerType != null) {
this.containerType = containerType;
}
return this;
}
public JBossManagerConfiguration setContainerType(String containerType) throws IllegalArgumentException {
this.containerType = ContainerType.valueOf(containerType);
return this;
}
// configs
public String getDomainConfig() {
return domainConfig;
}
public JBossManagerConfiguration setDomainConfig(String domainConfig) {
if (domainConfig != null && domainConfig.length() != 0) {
this.domainConfig = domainConfig;
}
return this;
}
public String getHostConfig() {
return hostConfig;
}
public JBossManagerConfiguration setHostConfig(String hostConfig) {
if (hostConfig != null && hostConfig.length() != 0) {
this.hostConfig = hostConfig;
}
return this;
}
public String getStandaloneConfig() {
return standaloneConfig;
}
public JBossManagerConfiguration setStandaloneConfig(String standaloneConfig) {
if (standaloneConfig != null && standaloneConfig.length() != 0) {
this.standaloneConfig = standaloneConfig;
}
return this;
}
// domain specific
public boolean isDomain() {
return domain;
}
public JBossManagerConfiguration domain() {
domain = true;
return this;
}
public String getServerGroup() {
return serverGroup;
}
public JBossManagerConfiguration setServerGroup(String serverGroup) {
if (serverGroup != null && serverGroup.length() != 0) {
this.serverGroup = serverGroup;
}
return this;
}
public JBossManagerConfiguration setDomainStartTimeout(long domainStartTimeout) {
if (domainStartTimeout > 0) {
this.domainStartTimeout = domainStartTimeout;
}
return this;
}
public long getDomainStartTimeout() {
return domainStartTimeout;
}
public JBossManagerConfiguration setDomainServers(String domainServer, String... domainServers) {
if (domainServer != null && domainServer.length() != 0) {
this.domainServers.clear();
this.domainServers.add(domainServer);
}
for (String domainServerArg : domainServers) {
if (domainServer != null && domainServer.length() != 0) {
this.domainServers.add(domainServerArg);
}
}
return this;
}
public JBossManagerConfiguration setDomainServers(List<String> domainServers) {
if (domainServers != null) {
this.domainServers.clear();
for (String domainServer : domainServers) {
if (domainServer != null && domainServer.length() != 0) {
this.domainServers.add(domainServer);
}
}
}
return this;
}
public List<String> getDomainServers() {
return domainServers;
}
public JBossManagerConfiguration setDomainMasterHostName(String domainMasterHostName) {
if (domainMasterHostName != null) {
this.domainMasterHostName = domainMasterHostName;
}
return this;
}
public String getDomainMasterHostName() {
return domainMasterHostName;
}
@Override
public String toString() {
StringBuilder sb = new StringBuilder();
sb.append("jboss dir\t").append(getJBossHome()).append("\n")
.append("base dir\t").append(getJBossBaseDir()).append("\n")
.append("config dir\t").append(getJBossConfigDir()).append("\n")
.append("log dir\t\t").append(getJBossLogDir()).append("\n")
.append("module dir\t").append(getJBossModuleDir()).append("\n");
return sb.toString();
}
}