0
|
1 package middlewares;
|
|
2
|
|
3 import java.util.*;
|
|
4 import java.io.*;
|
|
5 import org.jdom.*;
|
|
6 import org.jdom.input.*;
|
|
7 import org.jdom.output.*;
|
|
8
|
|
9 /**
|
|
10 * Used to construct the summary file based on the computation of an
|
|
11 * EnrichmentStatsComputer object. It uses a file pattern to generate this file
|
|
12 * dynamically.
|
|
13 *
|
|
14 * @author Ali Abdallah
|
|
15 * @version 20.07.2011
|
|
16 * @since Java 1.6
|
|
17 */
|
|
18
|
|
19 public class XMLSummaryFileBuilder {
|
|
20
|
|
21 /**
|
|
22 * The pattern file containing the structure of the summary without real
|
|
23 * data.
|
|
24 */
|
|
25 static String xmlPatternFile;
|
|
26
|
|
27 /**
|
|
28 * The summary file containing the computed data.
|
|
29 */
|
|
30 static String xmlOutputFile;
|
|
31
|
|
32 /**
|
|
33 * An object with an abstract representation on an xml-file.
|
|
34 */
|
|
35 static Document doc;
|
|
36
|
|
37 /**
|
|
38 * The leaf-tags containing data as text.
|
|
39 */
|
|
40 List<Element> leafs;
|
|
41
|
|
42 /**
|
|
43 * The name of the current sample.
|
|
44 */
|
|
45 static String currSample;
|
|
46
|
|
47 /**
|
|
48 * Creates and initializes a XMLSummaryFileBuilder object.
|
|
49 *
|
|
50 * @param xmlPatternFile the pattern file.
|
|
51 * @param xmlOutputFile the output file.
|
|
52 * @param currSample the current read alignment sample name without
|
|
53 * the extension.
|
|
54 */
|
|
55 public XMLSummaryFileBuilder(String xmlPatternFile, String xmlOutputFile,
|
|
56 String currSample) {
|
|
57
|
|
58 leafs = new ArrayList<Element>();
|
|
59 XMLSummaryFileBuilder.xmlPatternFile = xmlPatternFile;
|
|
60 XMLSummaryFileBuilder.xmlOutputFile = xmlOutputFile;
|
|
61 XMLSummaryFileBuilder.currSample = currSample;
|
|
62 SAXBuilder builder = new SAXBuilder();
|
|
63 try {
|
|
64 doc = builder.build(xmlPatternFile);
|
|
65 } catch (JDOMException e) {
|
|
66 e.printStackTrace();
|
|
67 } catch (IOException e) {
|
|
68 e.printStackTrace();
|
|
69 }
|
|
70 }
|
|
71
|
|
72 /**
|
|
73 * Same as the constructor above but the pattern file is internally
|
|
74 * specified.
|
|
75 *
|
|
76 * @param xmlOutputFile the output file.
|
|
77 * @param currSample the current read alignment sample name without
|
|
78 * the extension.
|
|
79 */
|
|
80 public XMLSummaryFileBuilder(String xmlOutputFile,
|
|
81 String currSample) {
|
|
82 this(Misc.binDir()+"/xmlFilePattern.xml", xmlOutputFile, currSample);
|
|
83 }
|
|
84
|
|
85 /**
|
|
86 * Computes all the leafs of the subtree with root e.
|
|
87 *
|
|
88 * @param e an Element.
|
|
89 * @return all the leafs of the subtree with root e.
|
|
90 */
|
|
91 public Element[] getLeafs(Element e){
|
|
92 @SuppressWarnings("unchecked")
|
|
93 List<Element> children = e.getChildren();
|
|
94 for(int i = 0; i < children.size(); i++){
|
|
95 Element child = children.get(i);
|
|
96 if(child.getChildren().size() == 0)
|
|
97 leafs.add(child);
|
|
98 else
|
|
99 getLeafs(child);
|
|
100 }
|
|
101
|
|
102 Object[] oleafs = leafs.toArray();
|
|
103 Element[] eleafs = new Element[oleafs.length];
|
|
104 for(int i = 0; i < eleafs.length; i++)
|
|
105 eleafs[i] = (Element)oleafs[i];
|
|
106
|
|
107 return eleafs;
|
|
108 }
|
|
109
|
|
110 /**
|
|
111 * Same as the above method but the element is internally specified as the
|
|
112 * root of the document.
|
|
113 *
|
|
114 * @return an array with all leaf elements of the document.
|
|
115 */
|
|
116 public Element[] getLeafs(){
|
|
117 return getLeafs(doc.getRootElement());
|
|
118 }
|
|
119
|
|
120 /**
|
|
121 * Write the summary file created.
|
|
122 * @param name the name of the file.
|
|
123 */
|
|
124 public void writeXMLFile(String name) {
|
|
125 XMLOutputter outp = new XMLOutputter();
|
|
126 outp.setFormat(Format.getPrettyFormat());
|
|
127 try {
|
|
128 outp.output(doc, new FileOutputStream(name));
|
|
129 } catch (FileNotFoundException e) {
|
|
130 e.printStackTrace();
|
|
131 } catch (IOException e) {
|
|
132 e.printStackTrace();
|
|
133 }
|
|
134 }
|
|
135
|
|
136 }
|