package edu.cmu.minorthird.ui; import java.io.File; import java.io.IOException; import org.apache.log4j.Logger; import edu.cmu.minorthird.text.NestedTextLabels; import edu.cmu.minorthird.text.TextLabels; import edu.cmu.minorthird.text.TextLabelsLoader; import edu.cmu.minorthird.text.mixup.Mixup; import edu.cmu.minorthird.text.mixup.MixupInterpreter; import edu.cmu.minorthird.text.mixup.MixupProgram; import edu.cmu.minorthird.util.CommandLineProcessor; import edu.cmu.minorthird.util.JointCommandLineProcessor; import edu.cmu.minorthird.util.StringUtil; import edu.cmu.minorthird.util.gui.SmartVanillaViewer; import edu.cmu.minorthird.util.gui.ViewerFrame; /** * Run a mixup program. * * @author William Cohen */ public class RunMixup extends UIMain{ private static Logger log=Logger.getLogger(RunMixup.class); // private data needed private CommandLineUtil.SaveParams save=new CommandLineUtil.SaveParams(); private CommandLineUtil.MixupParams mixup=new CommandLineUtil.MixupParams(); private CommandLineUtil.AnnotatorOutputParams output= new CommandLineUtil.AnnotatorOutputParams(); public TextLabels annotatedLabels=null; // for gui public CommandLineUtil.MixupParams getMixupParameters(){ return mixup; } public void setMixupParameters(CommandLineUtil.MixupParams p){ mixup=p; } public CommandLineUtil.SaveParams getSaveParameters(){ return save; } public void setSaveParameters(CommandLineUtil.SaveParams p){ save=p; } public CommandLineUtil.AnnotatorOutputParams getAnnotatorOutputParams(){ return output; } public void setAnnotatorOutputParams(CommandLineUtil.AnnotatorOutputParams p){ output=p; } public String getRunMixupHelp(){ return "<A HREF=\"http://minorthird.sourceforge.net/tutorials/Mixup%20Tutorial.htm\">Mixup Tutorial</A></html>"; } @Override public CommandLineProcessor getCLP(){ return new JointCommandLineProcessor(new CommandLineProcessor[]{gui,base, save,mixup,output}); } // // run the mixup program // @Override public void doMain(){ if(mixup.fileName==null) throw new IllegalArgumentException("need to specify -mixup"); // load the mixup program MixupProgram program=null; try{ program=new MixupProgram(new File(mixup.fileName)); }catch(Mixup.ParseException ex){ System.out.println("can't parse file "+mixup.fileName+": "+ex); }catch(IOException ex){ System.out.println("can't load file "+mixup.fileName+": "+ex); } // check that inputs are valid if(program==null){ log.error("Cannot runMixup unless a valid mixup program is specified."); return; } // echo the program System.out.println("Will execute this program:\n"+program); MixupInterpreter interpreter=new MixupInterpreter(program); // run the mixup on a copy annotatedLabels=new NestedTextLabels(base.labels); interpreter.eval((NestedTextLabels)annotatedLabels); if(base.showResult) new ViewerFrame("Result of "+mixup.fileName,new SmartVanillaViewer( annotatedLabels)); if(save.saveAs!=null){ try{ if("minorthird".equals(output.format)){ new TextLabelsLoader().saveTypesAsOps(annotatedLabels,save.saveAs); }else if("strings".equals(output.format)){ new TextLabelsLoader().saveTypesAsStrings(annotatedLabels, save.saveAs,true); }else if("xml".equals(output.format)){ new TextLabelsLoader().saveDocsWithEmbeddedTypes(annotatedLabels, save.saveAs); }else{ throw new IllegalArgumentException("illegal output format "+ output.format+" allowed values are "+ StringUtil.toString(output.getAllowedOutputFormatValues())); } System.out.println("saved to "+save.saveAs); }catch(IOException e){ throw new IllegalArgumentException("can't save to "+save.saveAs+": "+e); } } } @Override public Object getMainResult(){ return annotatedLabels; } public static void main(String args[]){ new RunMixup().callMain(args); } }