package org.waarp.xample; /* * Copyright (c) 2003 Felix Golubov */ import java.util.*; import java.io.*; import org.w3c.dom.*; import org.apache.xerces.parsers.DOMParser; import org.apache.xerces.dom.DocumentImpl; import org.apache.xml.serialize.OutputFormat; import org.apache.xml.serialize.XMLSerializer; /** * A helper class for the XAmple application which reads and writes history * of accessed XSD and XML files. The history is stored in the XML format. * * @author Felix Golubov * @version 2.0 */ public class HistoryIO { public static final String HISTORY_FILE_NAME = "history.xml"; public static final String HISTORY = "history"; public static final String XSD_DOC = "xsd-doc"; public static final String XML_DOC = "xml-doc"; public static final String FILE = "file"; static void populateHistory(History history, Element element) { NodeList lst = element.getChildNodes(); history.items = new ArrayList(); for (int i = lst.getLength() - 1; i >= 0; i--) { if (!(lst.item(i) instanceof Element)) continue; Element child = (Element)lst.item(i); String path = child.getAttribute(FILE); if (path != null && path.length() > 0) { History childHistory = history.put(path); populateHistory(childHistory, child); } } } public static void load(History history) { File file = new File(HISTORY_FILE_NAME); if (!file.exists()) return; Element root = null; try { DOMParser parser = new DOMParser(); parser.parse(file.toURI().toURL().toString()); Document doc = parser.getDocument(); root = doc.getDocumentElement(); populateHistory(history, root); } catch (Exception ex) { ex.printStackTrace(); } } public static void save(History history) { Document doc = new DocumentImpl(); Element root = doc.createElement(HISTORY); doc.appendChild(root); if (history.items != null) { for (int i = 0; i < history.items.size(); i++) { History hXSD = (History)history.items.get(i); Element eXSD = doc.createElement(XSD_DOC); eXSD.setAttribute(FILE, hXSD.path); root.appendChild(eXSD); if (hXSD.items == null) continue; for (int j = 0; j < hXSD.items.size(); j++) { History hXML = (History)hXSD.items.get(j); Element eXML = doc.createElement(XML_DOC); eXML.setAttribute(FILE, hXML.path); eXSD.appendChild(eXML); } } } File file = new File(HISTORY_FILE_NAME); FileOutputStream out = null; try { file.createNewFile(); out = new FileOutputStream(file); OutputFormat format = new OutputFormat(doc, "UTF-8", true); Writer writer = new OutputStreamWriter(out); XMLSerializer serial = new XMLSerializer(writer, format); serial.asDOMSerializer(); serial.serialize(doc); } catch (Exception ex) { } finally { try { out.close(); } catch (Exception ignore) {} } } }