001 package org.apache.torque.task;
002
003 import java.io.File;
004 import java.io.FileWriter;
005 import java.io.IOException;
006 import java.io.StringWriter;
007
008 import javax.xml.parsers.DocumentBuilder;
009 import javax.xml.parsers.DocumentBuilderFactory;
010 import javax.xml.parsers.ParserConfigurationException;
011 import javax.xml.transform.OutputKeys;
012 import javax.xml.transform.Result;
013 import javax.xml.transform.Transformer;
014 import javax.xml.transform.TransformerConfigurationException;
015 import javax.xml.transform.TransformerException;
016 import javax.xml.transform.TransformerFactory;
017 import javax.xml.transform.dom.DOMSource;
018 import javax.xml.transform.stream.StreamResult;
019
020 import org.apache.tools.ant.BuildException;
021 import org.apache.tools.ant.Task;
022 import org.w3c.dom.DOMImplementation;
023 import org.w3c.dom.Document;
024 import org.w3c.dom.Element;
025 import org.w3c.dom.Node;
026 import org.w3c.dom.NodeList;
027 import org.xml.sax.SAXException;
028
029 /**
030 * This class is task used to generate xml file with database information
031 * and its description.
032 * @author Kuali Rice Team (kuali-rice@googlegroups.com)
033 */
034 public class TorqueXMLWithDesc extends Task {
035 File outputFile;
036 File inputFile;
037 String inputFileString;
038 String outputFileString;
039 public void setOutputFileString(String outputFileString) {
040 this.outputFileString = outputFileString;
041 outputFile = new File(outputFileString);
042 }
043 public void setInputFileString(String inputFileString){
044 this.inputFileString = inputFileString;
045 inputFile = new File(inputFileString);
046 }
047
048 /**
049 * Returns a document object with table and
050 * column name from the input file and a blank description
051 * @return Document document object with table/column names and blank description added
052 * @throws ParserConfigurationException
053 * @throws SAXException
054 * @throws IOException
055 */
056 public Document createXMLWithDescription()
057 throws ParserConfigurationException, SAXException, IOException {
058 DocumentBuilderFactory documentBuilderFactory = DocumentBuilderFactory
059 .newInstance();
060 DocumentBuilder documentBuilder = documentBuilderFactory
061 .newDocumentBuilder();
062 Document inputDocument = documentBuilder.parse(inputFile);
063 DOMImplementation domImplementation = documentBuilder
064 .getDOMImplementation();
065 inputDocument.getDocumentElement().normalize();
066 Document outputDocument = domImplementation.createDocument(null, null,
067 null);
068 Element outputRootElement = outputDocument.createElement("database");
069 outputDocument.appendChild(outputRootElement);
070 NodeList listOfTableElementsInInput = inputDocument
071 .getElementsByTagName("table");
072
073 for (int i = 0; i < listOfTableElementsInInput.getLength(); i++) {
074 Node currentTableNode = listOfTableElementsInInput.item(i);
075 if ((currentTableNode.getNodeType() == Node.ELEMENT_NODE)) {
076 Element currentInputTableElement = (Element) currentTableNode;
077 Element currentOutputTableElement = outputDocument
078 .createElement("table");
079 System.out.println(currentTableNode.getAttributes().toString());
080 currentOutputTableElement.setAttribute("name",
081 currentInputTableElement.getAttribute("name"));
082 currentOutputTableElement.setAttribute("description", "");
083 currentOutputTableElement.setAttribute("javaName", "");
084 NodeList listOfChildNodesInCurrentTableNode = currentTableNode
085 .getChildNodes();
086 for (int j = 0; j < listOfChildNodesInCurrentTableNode
087 .getLength(); j++) {
088 Node currentChildNode = listOfChildNodesInCurrentTableNode
089 .item(j);
090 if (currentChildNode.getNodeName().equals("column")) {
091 if (currentChildNode.getNodeType() == Node.ELEMENT_NODE) {
092 Element currentInputColumnElement = (Element) currentChildNode;
093 Element currentOutputColumnElement = outputDocument
094 .createElement("column");
095 currentOutputColumnElement.setAttribute("name",
096 currentInputColumnElement
097 .getAttribute("name"));
098 currentOutputColumnElement.setAttribute(
099 "description", "");
100 currentOutputColumnElement.setAttribute("javaName", "");
101 currentOutputTableElement
102 .appendChild(currentOutputColumnElement);
103 }
104 }
105 }
106 outputRootElement.appendChild(currentOutputTableElement);
107 }
108 }
109 return outputDocument;
110 }
111
112 /**
113 * Writes the XMLDocument to an output file.
114 * @param newXMLDocument
115 */
116 public void writeXMLToFile(Document newXMLDocument) {
117
118 TransformerFactory tFactory = TransformerFactory.newInstance();
119 try {
120 Transformer transformer = tFactory.newTransformer();
121 transformer.setOutputProperty(OutputKeys.DOCTYPE_SYSTEM,
122 "database.dtd");
123 DOMSource domSource = new DOMSource(newXMLDocument);
124 StringWriter writer = new StringWriter();
125 Result result = new StreamResult(writer);
126 transformer.transform(domSource, result);
127 FileWriter fileWriter = new FileWriter(outputFile);
128
129 if (outputFile.exists()) {
130 StringBuffer bufferedWriter = new StringBuffer(writer
131 .toString());
132 fileWriter.write(bufferedWriter.toString());
133 fileWriter.close();
134 System.out.println("The data has been written");
135 } else
136 System.out.println("This file is not exist");
137
138 } catch (TransformerConfigurationException e) {
139 // TODO Auto-generated catch block
140 e.printStackTrace();
141 } catch (TransformerException e) {
142 // TODO Auto-generated catch block
143 e.printStackTrace();
144 } catch (IOException e) {
145 // TODO Auto-generated catch block
146 e.printStackTrace();
147 }
148
149 }
150
151 /**
152 * This is the exceute method of the Task called by the ant script
153 */
154 public void execute() throws BuildException{
155 try {
156 writeXMLToFile(createXMLWithDescription());
157 } catch (ParserConfigurationException e) {
158 // TODO Auto-generated catch block
159 e.printStackTrace();
160 } catch (SAXException e) {
161 // TODO Auto-generated catch block
162 e.printStackTrace();
163 } catch (IOException e) {
164 // TODO Auto-generated catch block
165 e.printStackTrace();
166 }
167 }
168 }