Clover Coverage Report - Impex Parent 1.0.21-SNAPSHOT (Aggregated)
Coverage timestamp: Tue Feb 8 2011 11:33:53 EST
../../../../img/srcFileCovDistChart0.png 0% of files have more coverage
68   206   19   6.8
16   140   0.28   10
10     1.9  
1    
 
  TorqueMergeXMLDoc       Line # 35 68 0% 19 94 0% 0.0
 
No Tests
 
1    package org.apache.torque.task;
2   
3    import java.io.File;
4    import java.io.FileWriter;
5    import java.io.IOException;
6    import java.io.StringWriter;
7   
8    import javax.xml.parsers.DocumentBuilder;
9    import javax.xml.parsers.DocumentBuilderFactory;
10    import javax.xml.parsers.ParserConfigurationException;
11    import javax.xml.transform.OutputKeys;
12    import javax.xml.transform.Result;
13    import javax.xml.transform.Transformer;
14    import javax.xml.transform.TransformerFactory;
15    import javax.xml.transform.dom.DOMSource;
16    import javax.xml.transform.stream.StreamResult;
17    import javax.xml.xpath.XPath;
18    import javax.xml.xpath.XPathConstants;
19    import javax.xml.xpath.XPathFactory;
20   
21    import org.apache.tools.ant.BuildException;
22    import org.apache.tools.ant.Task;
23    import org.w3c.dom.Document;
24    import org.w3c.dom.Element;
25    import org.w3c.dom.NodeList;
26    import org.xml.sax.SAXException;
27   
28    /**
29    * This ant task will merge the schema-desc.xml with schema.xml, if
30    * schema-description.xml exists
31    *
32    * @author Kuali Rice Team (kuali-rice@googlegroups.com)
33    *
34    */
 
35    public class TorqueMergeXMLDoc extends Task {
36   
37    private static final String DESCRIPTION_ATTR = "description";
38    private static final String JAVA_NAME_ATTR = "javaName";
39    private static final String NAME_ATTR = "name";
40    private static final String COLUMN_ELEMENT = "column";
41   
42    private File schemaWithDesc;
43    private File dbSchema;
44    private String schemaWithDescString;
45    private String dbSchemaString;
46    private Document schemaWithDescDoc;
47    private Document dbSchemaDoc;
48   
49   
 
50  0 toggle public void setDbSchemaString(String dbSchemaString) {
51  0 this.dbSchemaString = dbSchemaString;
52  0 dbSchema = new File(dbSchemaString);
53   
54    }
55   
 
56  0 toggle public void setSchemaWithDescString(String schemaWithDescString) {
57  0 this.schemaWithDescString = schemaWithDescString;
58  0 schemaWithDesc = new File(schemaWithDescString);
59   
60    }
61   
 
62  0 toggle public File getDbSchema() {
63  0 return dbSchema;
64    }
65   
 
66  0 toggle public void setSchemaWithDesc(String schemaWithDescString) {
67  0 this.schemaWithDesc = new File(schemaWithDescString);
68   
69    }
70   
 
71  0 toggle public void setDbSchema(String dbSchemaString) {
72  0 this.dbSchema = new File(dbSchemaString);
73    }
74   
75    /**
76    * creates a document object from an input file
77    *
78    * @param file
79    * @return Document object
80    * @throws ParserConfigurationException
81    * @throws SAXException
82    * @throws IOException
83    */
 
84  0 toggle public static Document setDocument(File file)
85    throws ParserConfigurationException, SAXException, IOException {
86  0 DocumentBuilderFactory documentBuilderFactory = DocumentBuilderFactory
87    .newInstance();
88  0 DocumentBuilder documentBuilder;
89  0 documentBuilder = documentBuilderFactory.newDocumentBuilder();
90  0 Document XMLdocument = documentBuilder.parse(file);
91  0 XMLdocument.getDocumentElement().normalize();
92  0 return XMLdocument;
93    }
94   
95    /**
96    * performs the merge operation by taking two input files as input and then
97    * merges the file with description into the existing schema.xml file
98    *
99    * @param schemaWithDesc
100    * @param dbSchema
101    */
 
102  0 toggle public void mergeSchemas(File schemaWithDesc, File dbSchema) throws Exception {
103   
104  0 schemaWithDescDoc = setDocument(schemaWithDesc);
105  0 dbSchemaDoc = setDocument(dbSchema);
106  0 dbSchemaDoc = createNewXML(dbSchemaDoc, schemaWithDescDoc);
107   
108    }
109   
110    /**
111    * merges the two xml document. The resulting document will be same as
112    * schema.xml except it will have a description attribute for all its tables
113    * and columns.
114    */
 
115  0 toggle public Document createNewXML(Document dbSchemaDoc,
116    Document schemaWithDescDoc) throws Exception {
117   
118  0 XPath xpath = XPathFactory.newInstance().newXPath();
119   
120  0 NodeList listOfTablesInSchema = (NodeList)xpath.evaluate("/database/table", dbSchemaDoc, XPathConstants.NODESET);
121   
122  0 for (int tableIndex = 0; tableIndex < listOfTablesInSchema.getLength(); tableIndex++) {
123  0 Element tableElementInSchema = (Element)listOfTablesInSchema.item(tableIndex);
124  0 String tableName = tableElementInSchema.getAttribute(NAME_ATTR);
125    // search the schema-description.xml file for a corresponding entry that contains the description
126  0 Element tableDescElem = (Element)xpath.evaluate("/database/table[@" + NAME_ATTR + "='" + tableName + "']", schemaWithDescDoc, XPathConstants.NODE);
127  0 if (tableDescElem != null) {
128  0 String tableDescription = tableDescElem.getAttribute(DESCRIPTION_ATTR);
129  0 String tableJavaName = tableDescElem.getAttribute(JAVA_NAME_ATTR);
130  0 tableElementInSchema.setAttribute(DESCRIPTION_ATTR, tableDescription);
131  0 tableElementInSchema.setAttribute(JAVA_NAME_ATTR, tableJavaName);
132  0 NodeList columnElements = tableElementInSchema.getElementsByTagName(COLUMN_ELEMENT);
133  0 for (int columnIndex = 0; columnIndex < columnElements.getLength(); columnIndex++) {
134    // look for the column in the schema description file
135  0 Element columnElementInSchema = (Element)columnElements.item(columnIndex);
136  0 String columnName = columnElementInSchema.getAttribute(NAME_ATTR);
137  0 Element columnDescElement = null;
138  0 NodeList columnDescElements = tableDescElem.getElementsByTagName(COLUMN_ELEMENT);
139  0 for (int columnDescIndex = 0; columnDescIndex < columnDescElements.getLength(); columnDescIndex++) {
140  0 Element element = (Element)columnDescElements.item(columnDescIndex);
141  0 if (columnName.equals(element.getAttribute(NAME_ATTR))) {
142  0 columnDescElement = element;
143  0 break;
144    }
145    }
146  0 if (columnDescElement != null) {
147  0 String columnDescription = columnDescElement.getAttribute(DESCRIPTION_ATTR);
148  0 String columnJavaName = columnDescElement.getAttribute(JAVA_NAME_ATTR);
149  0 columnElementInSchema.setAttribute(DESCRIPTION_ATTR, columnDescription);
150  0 columnElementInSchema.setAttribute(JAVA_NAME_ATTR, columnJavaName);
151    }
152    }
153    }
154    }
155  0 return dbSchemaDoc;
156    }
157   
158    /**
159    * writes the document object to an output file
160    *
161    * @param newXMLDocument
162    * output xml document
163    */
 
164  0 toggle public void writeXMLToFile(Document newXMLDocument) throws Exception {
165  0 File dbSchema = this.getDbSchema();
166  0 TransformerFactory tFactory = TransformerFactory.newInstance();
167   
168  0 Transformer transformer = tFactory.newTransformer();
169  0 transformer.setOutputProperty(OutputKeys.DOCTYPE_SYSTEM,
170    "database.dtd");
171  0 DOMSource domSource = new DOMSource(newXMLDocument);
172  0 StringWriter writer = new StringWriter();
173  0 Result result = new StreamResult(writer);
174  0 transformer.transform(domSource, result);
175  0 FileWriter fileWriter = new FileWriter(dbSchema);
176   
177  0 if (dbSchema.exists()) {
178  0 StringBuffer bufferedWriter = new StringBuffer(writer
179    .toString());
180  0 fileWriter.write(bufferedWriter.toString());
181  0 fileWriter.close();
182  0 System.out.println("The data has been written");
183    } else {
184  0 System.out.println("This file is not exist");
185    }
186    }
187   
 
188  0 toggle @Override
189    public void execute() throws BuildException {
190  0 setDbSchema(dbSchemaString);
191  0 setSchemaWithDesc(schemaWithDescString);
192  0 if (!schemaWithDesc.exists()) {
193  0 System.out.println("no schema file with description can be located");
194  0 return;
195    }
196  0 try {
197  0 mergeSchemas(schemaWithDesc, dbSchema);
198  0 writeXMLToFile(dbSchemaDoc);
199    } catch (Exception e) {
200  0 throw new BuildException(e);
201    }
202    }
203   
204   
205   
206    }