package org.atomnuke;
import java.io.File;
import javax.xml.bind.JAXBException;
import org.atomnuke.atombus.config.model.ServerConfiguration;
import org.atomnuke.cli.command.Root;
import org.atomnuke.cli.CliConfigurationHandler;
import org.atomnuke.fallout.config.server.ServerConfigurationFileManager;
import org.atomnuke.util.cli.CommandDriver;
import org.atomnuke.util.cli.command.Command;
import org.atomnuke.util.cli.command.result.CommandResult;
import org.atomnuke.util.config.ConfigurationException;
import org.atomnuke.util.config.io.ConfigurationManager;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
/**
*
* @author zinic
*/
public final class NukeMain {
private static final Logger LOG = LoggerFactory.getLogger(NukeMain.class);
private final NukeEnvironment environment;
private NukeMain(NukeEnvironment environment) {
this.environment = environment;
}
public void init(String[] args) throws ConfigurationException, JAXBException {
final File configurationLocation = new File(environment.configurationDirectory(), "nuke.cfg.xml");
final ConfigurationManager<ServerConfiguration> cfgManager = new ServerConfigurationFileManager(configurationLocation);
final ServerConfiguration previousCfg = cfgManager.read();
final CliConfigurationHandler handler = new CliConfigurationHandler(cfgManager, previousCfg != null ? previousCfg : new ServerConfiguration());
final Command rootCommand = new Root(handler);
final CommandResult result = new CommandDriver(rootCommand, args).go();
final String stringResult = result.getStringResult();
if (stringResult != null && stringResult.length() > 0) {
System.out.println(result.getStringResult());
}
if (result.shouldExit()) {
System.exit(result.getStatusCode());
}
}
public static void main(String[] args) {
try {
new NukeMain(StaticNukeEnvironment.get()).init(args);
} catch (ConfigurationException ce) {
LOG.error("Configuration error: " + ce.getMessage(), ce);
} catch (JAXBException jaxbe) {
LOG.error("JAXB Exception caught: " + jaxbe.getMessage(), jaxbe);
}
}
}