package org.maltparser;
import java.io.File;
import java.util.Date;
import org.maltparser.core.exception.MaltChainedException;
import org.maltparser.core.helper.SystemInfo;
import org.maltparser.core.helper.SystemLogger;
import org.maltparser.core.options.OptionManager;
import org.maltparser.core.plugin.PluginLoader;
/**
* MaltConsoleEngine controls the MaltParser system using the console version.
*
* @author Johan Hall
* @since 1.0
*
*/
public class MaltConsoleEngine {
public static final int OPTION_CONTAINER = 0;
/**
* Creates a MaltConsoleEngine object
*
*/
public MaltConsoleEngine() {
try {
/*
* Option and Plug-in management
*/
OptionManager.instance().loadOptionDescriptionFile();
if (SystemInfo.getMaltJarPath() != null) {
PluginLoader.instance().loadPlugins(new File(SystemInfo.getMaltJarPath().getParent() + "/plugin"));
}
OptionManager.instance().generateMaps();
} catch (MaltChainedException e) {
if (SystemLogger.logger().isDebugEnabled()) {
SystemLogger.logger().debug("", e);
} else {
SystemLogger.logger().error(e.getMessageChain());
}
System.exit(1);
}
}
/**
* Starts the console engine.
*
* @param args command-line arguments
*/
public void startEngine(String[] args) {
try {
final OptionManager om = OptionManager.instance();
final boolean hasArg = om.parseCommandLine(args, OPTION_CONTAINER);
/*
* Update the verbosity level according to the verbosity option
*/
String verbosity;
if (hasArg) {
verbosity = (String) OptionManager.instance().getOptionValue(OPTION_CONTAINER, "system", "verbosity");
} else {
verbosity = (String) OptionManager.instance().getOptionDefaultValue("system", "verbosity");
}
if (verbosity != null) {
SystemLogger.instance().setSystemVerbosityLevel(verbosity.toUpperCase());
}
/*
* Help or reading the option file
*/
if (!hasArg || om.getNumberOfOptionValues(OPTION_CONTAINER) == 0) {
SystemLogger.logger().info(SystemInfo.header());
SystemLogger.logger().info(SystemInfo.shortHelp());
return;
} else if (om.getOptionValue(OPTION_CONTAINER, "system", "help") != null) {
SystemLogger.logger().info(SystemInfo.header());
SystemLogger.logger().info(om.getOptionDescriptions());
return;
} else {
if (om.getOptionValue(OPTION_CONTAINER, "system", "option_file") != null && om.getOptionValue(0, "system", "option_file").toString().length() > 0) {
om.parseOptionInstanceXMLfile((String) om.getOptionValue(OPTION_CONTAINER, "system", "option_file"));
}
}
maltParser();
} catch (MaltChainedException e) {
if (SystemLogger.logger().isDebugEnabled()) {
SystemLogger.logger().debug("", e);
} else {
SystemLogger.logger().error(e.getMessageChain());
}
System.exit(1);
}
}
/**
* Creates and executes a MaltParser configuration
*
* @throws MaltChainedException
*/
private void maltParser() throws MaltChainedException {
if (SystemLogger.logger() != null && SystemLogger.logger().isInfoEnabled()) {
SystemLogger.logger().info(SystemInfo.header() + "\n");
SystemLogger.logger().info("Started: " + new Date(System.currentTimeMillis()) + "\n");
}
Engine engine = new Engine();
engine.initialize(OPTION_CONTAINER);
engine.process(OPTION_CONTAINER);
engine.terminate(OPTION_CONTAINER);
if (SystemLogger.logger().isInfoEnabled()) {
SystemLogger.logger().info("Finished: " + new Date(System.currentTimeMillis()) + "\n");
}
}
}