OSDN Git Service

d18408556cda5c1d7eca0b0cce763e5d8b46934f
[stigmata/stigmata.git] / src / main / java / jp / sourceforge / stigmata / printer / xml / ExtractionResultSetXmlPrinter.java
1 package jp.sourceforge.stigmata.printer.xml;
2
3 /*
4  * $Id$
5  */
6
7 import java.io.PrintWriter;
8 import java.util.Iterator;
9
10 import jp.sourceforge.stigmata.Birthmark;
11 import jp.sourceforge.stigmata.BirthmarkElement;
12 import jp.sourceforge.stigmata.BirthmarkSet;
13 import jp.sourceforge.stigmata.ExtractionResultSet;
14 import jp.sourceforge.stigmata.ExtractionTarget;
15 import jp.sourceforge.stigmata.printer.AbstractExtractionResultSetPrinter;
16
17 /**
18  * 
19  * 
20  *
21  * @author Haruaki TAMADA
22  */
23 public class ExtractionResultSetXmlPrinter extends AbstractExtractionResultSetPrinter{
24     @Override
25     public void printResult(PrintWriter out, ExtractionResultSet ers){
26         printHeader(out);
27
28         out.printf("    <unit>%s</unit>%n", ers.getExtractionUnit());
29         out.printf("    <birthmark-types>%n");
30         for(String type: ers.getBirthmarkTypes()){
31             out.printf("      <birthmark-type>%s</birthmark-type>%n", type);
32         }
33         out.printf("    </birthmark-types>%n");
34         for(Iterator<BirthmarkSet> i = ers.birthmarkSets(ExtractionTarget.TARGET_BOTH); i.hasNext(); ){
35             printBirthmarkSet(out, i.next());
36         }
37         printFooter(out);
38     }
39
40     @Override
41     public void printHeader(PrintWriter out){
42         out.println("<?xml version=\"1.0\" encoding=\"utf-8\"?>");
43         out.println("<birthmark-result-set>");
44         out.println("  <extracted-birthmarks>");
45     }
46
47     @Override
48     public void printFooter(PrintWriter out){
49         out.println("  </extracted-birthmarks>");
50         out.println("</birthmark-result-set>");
51         out.flush();
52     }
53
54     public void printBirthmarkSet(PrintWriter out, BirthmarkSet set){
55         out.println("    <extracted-birthmark>");
56         out.printf("      <name>%s</name>%n", escapeToXmlString(set.getName()));
57         out.printf("      <location>%s</location>%n", escapeToXmlString(set.getLocation()));
58         for(Iterator<String> i = set.birthmarkTypes(); i.hasNext(); ){
59             String type = i.next();
60             Birthmark birthmark = set.getBirthmark(type);
61             out.printf("      <birthmark type=\"%s\" count=\"%d\">%n",
62                        birthmark.getType(), birthmark.getElementCount());
63             for(Iterator<BirthmarkElement> elements = birthmark.iterator(); elements.hasNext(); ){
64                 out.printf("        <element>%s</element>%n",
65                            escapeToXmlString(String.valueOf(elements.next())));
66             }
67             out.println("      </birthmark>");
68         }
69         out.println("    </extracted-birthmark>");
70     }
71
72     public String escapeToXmlString(Object o){
73         if(o != null){
74             return escapeToXmlString(o.toString());
75         }
76         return null;
77     }
78
79     public String escapeToXmlString(String string){
80         string = string.replaceAll("&",  "&amp;");
81         string = string.replaceAll("\"", "&quot;");
82         string = string.replaceAll("<",  "&lt;");
83         string = string.replaceAll(">",  "&gt;");
84
85         return string;
86     }
87 }