/* * This file is part of ALOE. * * ALOE is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * ALOE is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * You should have received a copy of the GNU General Public License * along with ALOE. If not, see <http://www.gnu.org/licenses/>. * * Copyright (c) 2012 SCCL, University of Washington (http://depts.washington.edu/sccl) */ package etc.aloe; import etc.aloe.options.ModeOptions; import java.util.Arrays; import org.kohsuke.args4j.Argument; import org.kohsuke.args4j.CmdLineException; import org.kohsuke.args4j.CmdLineParser; /** * Main controller for ALOE. Does parsing of primary mode option and then * delegates to one of the mode controllers. * * @author Michael Brooks <mjbrooks@uw.edu> * @version 1.0 - using CSCW2013 implementations */ public class Main { final String[] cmdLineArgs; public Main(String[] cmdLineArgs) { this.cmdLineArgs = cmdLineArgs; } private void printUsage() { System.err.println("For specific usage: java -jar aloe.jar PIPELINE_CLASS MODE"); System.err.println("List of modes: "); for (ModeName cmd : ModeName.values()) { System.err.println("\t" + cmd.name()); } } private void run(String[] args) { Aloe aloe = null; ModeOptions options = null; switch (mode) { case train: aloe = new AloeTrain(); aloe.setPipeline(pipelineClassName); options = aloe.factory.constructTrainOptions(); break; case label: aloe = new AloeLabel(); aloe.setPipeline(pipelineClassName); options = aloe.factory.constructLabelOptions(); break; case interactive: aloe = new AloeInteractive(); aloe.setPipeline(pipelineClassName); options = aloe.factory.constructInteractiveOptions(); break; case single: aloe = new AloeSingle(); aloe.setPipeline(pipelineClassName); options = aloe.factory.constructSingleOptions(); break; } aloe.setCmdLineArgs(cmdLineArgs); CmdLineParser parser = new CmdLineParser(options); try { parser.parseArgument(args); } catch (CmdLineException e) { System.err.println(e.getMessage()); options.printUsage(); parser.printUsage(System.err); return; } aloe.factory.setOptions(options); aloe.factory.initialize(); aloe.run(options); } private static enum ModeName { train, label, interactive, single } @Argument(index = 1, usage = "mode", required = true, metaVar = "MODE") private ModeName mode; @Argument(index = 0, usage = "name of pipeline class (default 'CSCW2013')", required = true, metaVar = "PIPELINE_CLASS") private String pipelineClassName; public static void main(String[] args) { //Parse the command line arguments Main main = new Main(args); CmdLineParser parser = new CmdLineParser(main); if (args.length < 1) { System.err.println("PIPELINE_CLASS is required."); main.printUsage(); return; } if (args.length < 2) { System.err.println("MODE is required."); main.printUsage(); return; } //Separate the first argument from the rest of the arguments String[] restOfArgs = Arrays.copyOfRange(args, 2, args.length); String[] firstArgs = Arrays.copyOfRange(args, 0, 2); try { parser.parseArgument(firstArgs); } catch (CmdLineException e) { System.err.println(e.getMessage()); main.printUsage(); return; } //And go! main.run(restOfArgs); } }