Advertisement
Guest User

Untitled

a guest
Nov 30th, 2015
75
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 5.01 KB | None | 0 0
  1. package eg.edu.alexu.csd.oop.db;
  2.  
  3. import java.io.File;
  4. import java.util.ArrayList;
  5. import java.util.HashMap;
  6. import java.util.Iterator;
  7. import java.util.LinkedList;
  8. import java.util.List;
  9. import java.util.Map;
  10. import java.util.Set;
  11.  
  12. import javax.xml.parsers.DocumentBuilder;
  13. import javax.xml.parsers.DocumentBuilderFactory;
  14. import javax.xml.parsers.ParserConfigurationException;
  15. import javax.xml.transform.OutputKeys;
  16. import javax.xml.transform.Transformer;
  17. import javax.xml.transform.TransformerException;
  18. import javax.xml.transform.TransformerFactory;
  19. import javax.xml.transform.dom.DOMSource;
  20. import javax.xml.transform.stream.StreamResult;
  21.  
  22. import org.w3c.dom.Document;
  23. import org.w3c.dom.NodeList;
  24. import org.w3c.dom.Node;
  25. import org.w3c.dom.Element;
  26.  
  27.  
  28. public class XMLtable {
  29.  
  30. public void saveXML(String tableName,String path,Map<String,LinkedList> m,List<String> names ) {
  31.  
  32. Set<String> keys = m.keySet();
  33. try {
  34.  
  35. DocumentBuilderFactory docFactory = DocumentBuilderFactory.newInstance();
  36. DocumentBuilder docBuilder = docFactory.newDocumentBuilder();
  37.  
  38. Document doc = docBuilder.newDocument();
  39. Element rootElement = doc.createElement("table");
  40. doc.appendChild(rootElement);
  41. rootElement.setAttribute("name", tableName);;
  42.  
  43. Element data = doc.createElement("data");
  44. rootElement.appendChild(data);
  45. for(String key:names)
  46. {
  47. Element col = doc.createElement("columnData");
  48. col.appendChild(doc.createTextNode(key));
  49. data.appendChild(col);
  50.  
  51. }
  52.  
  53. for(String key:keys)
  54. {
  55. Element col = doc.createElement("column");
  56. col.setAttribute("name", key);
  57. rootElement.appendChild(col);
  58. //
  59. Iterator<Object> iterate = m.get(key).iterator();
  60. while(iterate.hasNext())
  61. {
  62. Element item = doc.createElement("item");
  63. item.appendChild(doc.createTextNode((String) iterate.next()));
  64. col.appendChild(item);
  65. }
  66.  
  67. }
  68.  
  69. // write the content into xml file
  70. TransformerFactory transformerFactory = TransformerFactory.newInstance();
  71. Transformer transformer = transformerFactory.newTransformer();
  72. transformer.setOutputProperty(OutputKeys.INDENT, "yes");
  73. transformer.setOutputProperty(OutputKeys.METHOD, "xml");
  74. transformer.setOutputProperty("{http://xml.apache.org/xslt}indent-amount", "4");
  75. DOMSource source = new DOMSource(doc);
  76. StreamResult result = new StreamResult(new File(path));
  77.  
  78. // Output to console for testing
  79. // StreamResult result = new StreamResult(System.out);
  80.  
  81. transformer.transform(source, result);
  82.  
  83. System.out.println("File saved!");
  84.  
  85. } catch (ParserConfigurationException pce) {
  86. pce.printStackTrace();
  87. } catch (TransformerException tfe) {
  88. tfe.printStackTrace();
  89. }
  90.  
  91. }
  92.  
  93. public Table loadXML(String path) {
  94.  
  95. String tableName;
  96. Table t;
  97. Map<String, LinkedList> mapTable = new HashMap<String, LinkedList>();
  98. Map<String, String> mapDeclare = new HashMap<String, String>();
  99. ArrayList<String> names = new ArrayList<String>();
  100.  
  101. try {
  102.  
  103. File fXmlFile = new File(path);
  104. DocumentBuilderFactory dbFactory = DocumentBuilderFactory.newInstance();
  105. DocumentBuilder dBuilder = dbFactory.newDocumentBuilder();
  106. Document doc = dBuilder.parse(fXmlFile);
  107. doc.getDocumentElement().normalize();
  108.  
  109. Element root = doc.getDocumentElement();
  110. tableName = root.getAttribute("name");
  111.  
  112. Element data = (Element)root.getElementsByTagName("data").item(0);
  113.  
  114. NodeList dataList = data.getElementsByTagName("columnData");
  115.  
  116. for (int temp = 0; temp < dataList.getLength(); temp++) {
  117.  
  118. Node nNode = dataList.item(temp);
  119.  
  120. if (nNode.getNodeType() == Node.ELEMENT_NODE) {
  121. Element eElement = (Element) nNode;
  122. names.add(eElement.getTextContent());
  123. }
  124. }
  125.  
  126. NodeList colList = root.getElementsByTagName("column");
  127.  
  128. for (int temp = 0; temp < colList.getLength(); temp++) {
  129.  
  130. Node nNode = colList.item(temp);
  131.  
  132. if (nNode.getNodeType() == Node.ELEMENT_NODE) {
  133.  
  134. Element eElement = (Element) nNode;
  135. NodeList itemList = eElement.getElementsByTagName("item");
  136. String key = eElement.getAttribute("name");
  137. LinkedList<Object> l = new LinkedList<Object>();
  138. //get column type
  139. try{
  140. int colType = Integer.parseInt(itemList.item(0).getTextContent());
  141. mapDeclare.put(key, "int");
  142. }catch(Exception exc)
  143. {
  144. mapDeclare.put(key, "varchar");
  145. }
  146. //
  147. for(int i=0;i<itemList.getLength();i++)
  148. {
  149. Node n = itemList.item(i);
  150.  
  151. if(n.getNodeType() == Node.ELEMENT_NODE)
  152. {
  153. Element e = (Element)n;
  154. l.add(e.getTextContent());
  155. }
  156. }
  157.  
  158. mapTable.put(key, l);
  159.  
  160. }
  161.  
  162. }
  163. //return table
  164. t = new Table(tableName, mapDeclare,names);
  165. t.setTable(mapTable);
  166. return t;
  167. } catch (Exception e) {
  168. e.printStackTrace();
  169. }
  170. return null;
  171. }
  172.  
  173. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement