OSDN Git Service

ef0819c8592504e950561a4a80fa1f29e761a6eb
[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  * @version $Revision$ 
23  */
24 public class ExtractionResultSetXmlPrinter extends AbstractExtractionResultSetPrinter{
25     @Override
26     public void printResult(PrintWriter out, ExtractionResultSet ers){
27         printHeader(out);
28
29         out.printf("    <unit>%s</unit>%n", ers.getExtractionUnit());
30         out.printf("    <birthmark-types>%n");
31         for(String type: ers.getBirthmarkTypes()){
32             out.printf("      <birthmark-type>%s</birthmark-type>%n", type);
33         }
34         out.printf("    </birthmark-types>%n");
35         for(Iterator<BirthmarkSet> i = ers.birthmarkSets(ExtractionTarget.TARGET_BOTH); i.hasNext(); ){
36             printBirthmarkSet(out, i.next());
37         }
38         printFooter(out);
39     }
40
41     @Override
42     public void printHeader(PrintWriter out){
43         out.println("<?xml version=\"1.0\" encoding=\"utf-8\"?>");
44         out.println("<birthmark-result-set>");
45         out.println("  <extracted-birthmarks>");
46     }
47
48     @Override
49     public void printFooter(PrintWriter out){
50         out.println("  </extracted-birthmarks>");
51         out.println("</birthmark-result-set>");
52         out.flush();
53     }
54
55     public void printBirthmarkSet(PrintWriter out, BirthmarkSet set){
56         out.println("    <extracted-birthmark>");
57         out.printf("      <name>%s</name>%n", escapeToXmlString(set.getName()));
58         out.printf("      <location>%s</location>%n", escapeToXmlString(set.getLocation()));
59         for(Iterator<String> i = set.birthmarkTypes(); i.hasNext(); ){
60             String type = i.next();
61             Birthmark birthmark = set.getBirthmark(type);
62             out.printf("      <birthmark type=\"%s\" count=\"%d\">%n",
63                        birthmark.getType(), birthmark.getElementCount());
64             for(Iterator<BirthmarkElement> elements = birthmark.iterator(); elements.hasNext(); ){
65                 out.printf("        <element>%s</element>%n",
66                            escapeToXmlString(String.valueOf(elements.next())));
67             }
68             out.println("      </birthmark>");
69         }
70         out.println("    </extracted-birthmark>");
71     }
72
73     public String escapeToXmlString(Object o){
74         if(o != null){
75             return escapeToXmlString(o.toString());
76         }
77         return null;
78     }
79
80     public String escapeToXmlString(String string){
81         string = string.replaceAll("&",  "&amp;");
82         string = string.replaceAll("\"", "&quot;");
83         string = string.replaceAll("<",  "&lt;");
84         string = string.replaceAll(">",  "&gt;");
85
86         return string;
87     }
88 }