001 package org.maltparser;
002
003 import java.io.File;
004 import java.util.Date;
005
006 import org.maltparser.core.exception.MaltChainedException;
007 import org.maltparser.core.helper.SystemInfo;
008 import org.maltparser.core.helper.SystemLogger;
009 import org.maltparser.core.options.OptionManager;
010 import org.maltparser.core.plugin.PluginLoader;
011
012 /**
013 * MaltConsoleEngine controls the MaltParser system using the console version.
014 *
015 * @author Johan Hall
016 * @since 1.0
017 **/
018 public class MaltConsoleEngine {
019 public static final int OPTION_CONTAINER = 0;
020
021 /**
022 * Creates a MaltConsoleEngine object
023 *
024 */
025 public MaltConsoleEngine() {
026 try {
027 /* Option and Plug-in management */
028 OptionManager.instance().loadOptionDescriptionFile();
029 if (SystemInfo.getMaltJarPath() != null) {
030 PluginLoader.instance().loadPlugins(new File(SystemInfo.getMaltJarPath().getParent()+"/plugin"));
031 }
032 OptionManager.instance().generateMaps();
033 } catch (MaltChainedException e) {
034 if (SystemLogger.logger().isDebugEnabled()) {
035 SystemLogger.logger().debug("",e);
036 } else {
037 SystemLogger.logger().error(e.getMessageChain());
038 }
039 System.exit(1);
040 }
041 }
042
043 /**
044 * Starts the console engine.
045 *
046 * @param args command-line arguments
047 */
048 public void startEngine(String[] args) {
049 try {
050 final OptionManager om = OptionManager.instance();
051 final boolean hasArg = om.parseCommandLine(args,OPTION_CONTAINER);
052 /* Update the verbosity level according to the verbosity option */
053 String verbosity = null;
054 if (hasArg) {
055 verbosity = (String)OptionManager.instance().getOptionValue(OPTION_CONTAINER,"system", "verbosity");
056 } else {
057 verbosity = (String)OptionManager.instance().getOptionDefaultValue("system", "verbosity");
058 }
059 if (verbosity != null) {
060 SystemLogger.instance().setSystemVerbosityLevel(verbosity.toUpperCase());
061 }
062 /* Help or reading the option file */
063 if (!hasArg || om.getNumberOfOptionValues(OPTION_CONTAINER) == 0) {
064 SystemLogger.logger().info(SystemInfo.header());
065 SystemLogger.logger().info(SystemInfo.shortHelp());
066 return;
067 } else if (om.getOptionValue(OPTION_CONTAINER,"system", "help") != null) {
068 SystemLogger.logger().info(SystemInfo.header());
069 SystemLogger.logger().info(om.getOptionDescriptions());
070 return;
071 } else {
072 if (om.getOptionValue(OPTION_CONTAINER,"system", "option_file") != null && om.getOptionValue(0,"system", "option_file").toString().length() > 0) {
073 om.parseOptionInstanceXMLfile((String)om.getOptionValue(OPTION_CONTAINER,"system", "option_file"));
074 }
075 }
076 maltParser();
077 } catch (MaltChainedException e) {
078 if (SystemLogger.logger().isDebugEnabled()) {
079 SystemLogger.logger().debug("",e);
080 } else {
081 SystemLogger.logger().error(e.getMessageChain());
082 }
083 System.exit(1);
084 }
085 }
086
087 /**
088 * Creates and executes a MaltParser configuration
089 *
090 * @throws MaltChainedException
091 */
092 private void maltParser() throws MaltChainedException {
093 if (SystemLogger.logger() != null && SystemLogger.logger().isInfoEnabled()) {
094 SystemLogger.logger().info(SystemInfo.header() +"\n");
095 SystemLogger.logger().info("Started: " + new Date(System.currentTimeMillis()) +"\n");
096 }
097 Engine engine = new Engine();
098 engine.initialize(OPTION_CONTAINER);
099 engine.process(OPTION_CONTAINER);
100 engine.terminate(OPTION_CONTAINER);
101 if (SystemLogger.logger().isInfoEnabled()) {
102 SystemLogger.logger().info("Finished: " + new Date(System.currentTimeMillis())+"\n");
103 }
104 }
105 }