OSDN Git Service

change internal process method, which introducing ExtractionResultSet
[stigmata/stigmata.git] / src / main / java / jp / naist / se / stigmata / format / csv / BirthmarkComparisonResultCsvFormat.java
1 package jp.naist.se.stigmata.format.csv;\r
2 \r
3 /*\r
4  * $Id$\r
5  */\r
6 \r
7 import java.io.PrintWriter;\r
8 import java.util.ArrayList;\r
9 import java.util.HashMap;\r
10 import java.util.LinkedHashMap;\r
11 import java.util.List;\r
12 import java.util.Map;\r
13 \r
14 import jp.naist.se.stigmata.ComparisonPair;\r
15 import jp.naist.se.stigmata.ComparisonPairElement;\r
16 import jp.naist.se.stigmata.ComparisonResultSet;\r
17 import jp.naist.se.stigmata.format.AbstractBirthmarkComparisonResultFormat;\r
18 import jp.naist.se.stigmata.result.CertainPairComparisonResultSet;\r
19 \r
20 /**\r
21  * \r
22  * \r
23  *\r
24  * @author Haruaki TAMADA\r
25  * @version $Revision$ $Date$\r
26  */\r
27 public class BirthmarkComparisonResultCsvFormat extends AbstractBirthmarkComparisonResultFormat{\r
28     private BirthmarkExtractionResultCsvFormat list;\r
29 \r
30     public BirthmarkComparisonResultCsvFormat(BirthmarkExtractionResultCsvFormat list){\r
31         this.list = list;\r
32     }\r
33 \r
34     @Override\r
35     public void printResult(PrintWriter out, ComparisonPair pair){\r
36         list.printBirthmarkSet(out, pair.getTarget1());\r
37         list.printBirthmarkSet(out, pair.getTarget2());\r
38 \r
39         for(ComparisonPairElement element: pair){\r
40             out.print("compare,");\r
41             out.print(element.getType());\r
42             out.print(",");\r
43             out.println(element.getSimilarity());\r
44         }\r
45         out.flush();\r
46     }\r
47 \r
48     @Override\r
49     public void printResult(PrintWriter out, ComparisonResultSet resultset){\r
50         if(resultset instanceof CertainPairComparisonResultSet){\r
51             printResultImpl(out, (CertainPairComparisonResultSet)resultset);\r
52         }\r
53         else{\r
54             printResultImpl(out, resultset);\r
55         }\r
56     }\r
57 \r
58     private void printResultImpl(PrintWriter out, CertainPairComparisonResultSet resultset){\r
59         for(ComparisonPair pair: resultset){\r
60             out.print(pair.getTarget1().getName());\r
61             out.print(",");\r
62             out.print(pair.getTarget1().getName());\r
63             out.print(",");\r
64             out.println(pair.calculateSimilarity());\r
65         }\r
66     }\r
67 \r
68     private void printResultImpl(PrintWriter out, ComparisonResultSet resultset){\r
69         Map<String, Map<String, Double>> map = new LinkedHashMap<String, Map<String, Double>>();\r
70         List<String> names = new ArrayList<String>();\r
71 \r
72         for(ComparisonPair pair: resultset){\r
73             Map<String, Double> val = map.get(pair.getTarget1().getName());\r
74             if(val == null){\r
75                 val = new HashMap<String, Double>();\r
76             }\r
77             val.put(pair.getTarget2().getName(), new Double(pair.calculateSimilarity()));\r
78             if(!names.contains(pair.getTarget2().getName())){\r
79                 names.add(pair.getTarget2().getName());\r
80             }\r
81             map.put(pair.getTarget1().getName(), val);\r
82         }\r
83 \r
84         for(String name: names){\r
85             out.print(",");\r
86             out.print(name);\r
87         }\r
88         out.println();\r
89         for(Map.Entry<String, Map<String, Double>> entry: map.entrySet()){\r
90             out.print(entry.getKey());\r
91             Map<String, Double> element = entry.getValue();\r
92             for(String name: names){\r
93                 out.print(",");\r
94                 Double v = element.get(name);\r
95                 if(v != null){\r
96                     out.print(v.doubleValue());\r
97                 }\r
98             }\r
99             out.println();\r
100         }\r
101         out.flush();\r
102     }\r
103 }\r