package org.jboss.aerogear.test.container.manager;
import java.io.File;
import org.arquillian.spacelift.process.Command;
import org.arquillian.spacelift.process.CommandBuilder;
/**
*
* @author <a href="mailto:smikloso@redhat.com">Stefan Miklosovic</a>
*
*/
public class JBossCommandBuilder {
public Command build(JBossManagerConfiguration configuration) throws Exception {
validate(configuration);
if (configuration.isDomain()) {
return buildDomainCommand(configuration);
} else {
return buildStandaloneCommand(configuration);
}
}
private Command buildStandaloneCommand(JBossManagerConfiguration configuration) {
final CommandBuilder cb = new CommandBuilder(configuration.getJavaBin());
cb.parameter("-D[Standalone]");
cb.parameters(configuration.getJavaOpts());
cb.parameter("-Dorg.jboss.boot.log.file=" + configuration.getJBossLogDir() + "/server.log");
cb.parameter("-Dlogging.configuration=file:" + configuration.getJBossConfigDir() + "/logging.properties");
if (new File(configuration.getJBossModuleDir() + "/bundles").exists()) {
cb.parameter("-Djboss.bundles.dir=" + configuration.getJBossModuleDir() + "/bundles");
}
cb.parameters("-jar", configuration.getJBossHome() + "/jboss-modules.jar");
cb.parameters("-mp", configuration.getJBossModuleDir());
cb.parameters("-jaxpmodule", "javax.xml.jaxp-provider");
cb.parameters("org.jboss.as.standalone");
cb.parameter("-Djboss.home.dir=" + configuration.getJBossHome());
cb.parameter("-Djboss.server.base.dir=" + configuration.getJBossBaseDir());
cb.parameters(configuration.getServerJavaOpts());
return cb.build();
}
private Command buildDomainCommand(JBossManagerConfiguration configuration) {
final CommandBuilder cb = new CommandBuilder(configuration.getJavaBin());
cb.parameter("-D[Process Controller]");
cb.parameters(configuration.getProcessControllerJavaOpts());
cb.parameter("-Dorg.jboss.boot.log.file=" + configuration.getJBossLogDir() + "/process-controller.log");
cb.parameter("-Dlogging.configuration=file:" + configuration.getJBossConfigDir() + "/logging.properties");
if (new File(configuration.getJBossModuleDir() + "/bundles").exists()) {
cb.parameter("-Djboss.bundles.dir=" + configuration.getJBossModuleDir() + "/bundles");
}
cb.parameter("-jar")
.parameter(configuration.getJBossHome() + "/jboss-modules.jar");
cb.parameter("-mp")
.parameter(configuration.getJBossModuleDir());
cb.parameter("org.jboss.as.process-controller");
cb.parameter("-jboss-home")
.parameter(configuration.getJBossHome());
cb.parameter("-jvm")
.parameter(configuration.getJavaBin());
cb.parameter("-mp")
.parameter(configuration.getJBossModuleDir());
cb.parameter("--");
cb.parameter("-Dorg.jboss.boot.log.file=" + configuration.getJBossLogDir() + "/host-controller.log");
cb.parameter("-Dlogging.configuration=file:" + configuration.getJBossConfigDir() + "/logging.properties");
cb.parameters(configuration.getHostControllerJavaOpts());
cb.parameter("--");
cb.parameters("-default-jvm", configuration.getJavaBin());
return cb.build();
}
/**
*
* @param configuration
* @throws IllegalArgumentException iff {@code configuration} is null object.
* @throws IllegalStateException iff {@link JBossManagerConfiguration#getJBossHome()} returns null.
*/
private void validate(JBossManagerConfiguration configuration) throws RuntimeException {
if (configuration == null) {
throw new IllegalArgumentException("Configuration set to JBossCommandBuilder is null.");
}
if (configuration.getJBossHome() == null) {
throw new IllegalStateException("JBOSS_HOME is set to null for JBossCommandBuilder");
}
}
}