OSDN Git Service

47a812fb60daec65ee4e2107224d067eec2cffc4
[stigmata/stigmata.git] / src / main / java / jp / sourceforge / stigmata / command / CompareCommand.java
1 package jp.sourceforge.stigmata.command;
2
3 import java.io.PrintWriter;
4 import java.util.Iterator;
5
6 import jp.sourceforge.stigmata.BirthmarkContext;
7 import jp.sourceforge.stigmata.BirthmarkEngine;
8 import jp.sourceforge.stigmata.ComparisonMethod;
9 import jp.sourceforge.stigmata.ComparisonResultSet;
10 import jp.sourceforge.stigmata.ExtractionResultSet;
11 import jp.sourceforge.stigmata.Stigmata;
12 import jp.sourceforge.stigmata.event.BirthmarkEngineAdapter;
13 import jp.sourceforge.stigmata.event.BirthmarkEngineEvent;
14 import jp.sourceforge.stigmata.event.WarningMessages;
15 import jp.sourceforge.stigmata.printer.ComparisonResultSetPrinter;
16 import jp.sourceforge.stigmata.spi.ResultPrinterSpi;
17
18 /**
19  * 
20  * @author Haruaki Tamada
21  */
22 public class CompareCommand extends AbstractStigmataCommand{
23     @Override
24     public boolean isAvailableArguments(String[] args){
25         return args.length > 0;
26     }
27
28     @Override
29     public String getCommandString(){
30         return "compare";
31     }
32
33     @Override
34     public void perform(Stigmata stigmata, BirthmarkContext context, String[] args){
35         try{
36             BirthmarkEngine engine = new BirthmarkEngine(context.getEnvironment());
37             context.setComparisonMethod(ComparisonMethod.ROUND_ROBIN_SAME_PAIR);
38             engine.addBirthmarkEngineListener(new BirthmarkEngineAdapter(){
39                 @Override
40                 public void operationDone(BirthmarkEngineEvent e){
41                     WarningMessages warnings = e.getMessage();
42                     for(Iterator<Exception> i = warnings.exceptions(); i.hasNext(); ){
43                         i.next().printStackTrace();
44                     }
45                 }
46             });
47
48             ExtractionResultSet rs = engine.extract(args, context);
49             ComparisonResultSet resultset = engine.compare(rs);
50             if(context.hasFilter()){
51                 resultset = engine.filter(resultset);
52             }
53
54             ResultPrinterSpi spi = stigmata.getPrinterManager().getService(context.getFormat());
55             ComparisonResultSetPrinter formatter = spi.getComparisonResultSetPrinter();
56             formatter.printResult(new PrintWriter(System.out), resultset);
57         }catch(Exception e){
58             e.printStackTrace();
59         }
60     }
61 }