1 package jp.sourceforge.stigmata.command;
7 import java.io.PrintWriter;
8 import java.util.Iterator;
10 import jp.sourceforge.stigmata.BirthmarkContext;
11 import jp.sourceforge.stigmata.BirthmarkEngine;
12 import jp.sourceforge.stigmata.ComparisonMethod;
13 import jp.sourceforge.stigmata.ComparisonResultSet;
14 import jp.sourceforge.stigmata.ExtractionResultSet;
15 import jp.sourceforge.stigmata.Stigmata;
16 import jp.sourceforge.stigmata.event.BirthmarkEngineAdapter;
17 import jp.sourceforge.stigmata.event.BirthmarkEngineEvent;
18 import jp.sourceforge.stigmata.event.WarningMessages;
19 import jp.sourceforge.stigmata.printer.ComparisonResultSetPrinter;
20 import jp.sourceforge.stigmata.spi.ResultPrinterSpi;
24 * @author Haruaki Tamada
26 public class CompareCommand extends AbstractStigmataCommand{
28 public boolean isAvailableArguments(String[] args){
29 return args.length > 0;
33 public String getCommandString(){
38 public void perform(Stigmata stigmata, BirthmarkContext context, String[] args){
40 BirthmarkEngine engine = new BirthmarkEngine(context.getEnvironment());
41 context.setComparisonMethod(ComparisonMethod.ROUND_ROBIN_SAME_PAIR);
42 engine.addBirthmarkEngineListener(new BirthmarkEngineAdapter(){
44 public void operationDone(BirthmarkEngineEvent e){
45 WarningMessages warnings = e.getMessage();
46 for(Iterator<Exception> i = warnings.exceptions(); i.hasNext(); ){
47 i.next().printStackTrace();
52 ExtractionResultSet rs = engine.extract(args, context);
53 ComparisonResultSet resultset = engine.compare(rs);
54 if(context.hasFilter()){
55 resultset = engine.filter(resultset);
58 ResultPrinterSpi spi = stigmata.getPrinterManager().getService(context.getFormat());
59 ComparisonResultSetPrinter formatter = spi.getComparisonResultSetPrinter();
60 formatter.printResult(new PrintWriter(System.out), resultset);