diff options
Diffstat (limited to 'tools/control/src/uk/ac/cam/cl/xeno/xenctl/XML.java')
-rw-r--r-- | tools/control/src/uk/ac/cam/cl/xeno/xenctl/XML.java | 126 |
1 files changed, 126 insertions, 0 deletions
diff --git a/tools/control/src/uk/ac/cam/cl/xeno/xenctl/XML.java b/tools/control/src/uk/ac/cam/cl/xeno/xenctl/XML.java new file mode 100644 index 0000000000..cf62466ff7 --- /dev/null +++ b/tools/control/src/uk/ac/cam/cl/xeno/xenctl/XML.java @@ -0,0 +1,126 @@ +/* + * XML.java + * 03.03.26 aho creation + */ + +package uk.ac.cam.cl.xeno.xenctl; + +import java.io.File; +import java.io.IOException; +import java.io.PrintWriter; +import java.io.FileWriter; +import java.io.BufferedWriter; +import java.io.FileNotFoundException; +import javax.xml.parsers.DocumentBuilder; +import javax.xml.parsers.DocumentBuilderFactory; +import javax.xml.parsers.FactoryConfigurationError; +import javax.xml.parsers.ParserConfigurationException; +import org.w3c.dom.Document; +import org.w3c.dom.DOMException; +import org.w3c.dom.NodeList; +import org.xml.sax.SAXException; +import org.xml.sax.SAXParseException; + +public class +XML +{ + static Document document = null; + + /* + * dump partition manager and virtual disk manager state to filename + */ + + static void + dump_state (PartitionManager pm, VirtualDiskManager vdm, String filename) + { + PrintWriter out; + + try + { + out = new PrintWriter(new BufferedWriter(new FileWriter(filename))); + } + catch (IOException e) + { + System.err.println ("XML.dump_state error [" + filename + "]"); + System.err.println (e); + return; + } + + out.println("<?xml version=\"1.0\"?>"); + out.println("<vdmanager>"); + pm.dump_xml(out); + vdm.dump_xml(out); + out.println("</vdmanager>"); + + out.close(); + return; + } + + /* + * load partition manager and virtual disk manager state from filename + */ + static void + load_state (PartitionManager pm, VirtualDiskManager vdm, String filename) + { + if (document == null) + { + load_file (filename); + } + + XMLHelper.parse(pm, vdm, document); + } + + /* + * load XML from disk + */ + static void + load_file (String filename) + { + DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance(); + // factory.setNamespaceAware(true); + // factory.setValidating(true); + + try + { + File file = new File(filename); + + DocumentBuilder builder = factory.newDocumentBuilder(); + document = builder.parse(file); + } + catch (SAXParseException spe) /* error generated by parser */ + { + System.err.println ("xml parser exception on line " + + spe.getLineNumber() + + " for uri " + spe.getSystemId()); + System.err.println (spe.getMessage()); + + Exception x = spe; + if (spe.getException() != null) + x = spe.getException(); + x.printStackTrace(); + System.exit(1); + } + catch (SAXException sxe) + { + Exception e = sxe; + if (sxe.getException() != null) + e = sxe.getException(); + e.printStackTrace(); + System.exit(1); + } + catch (ParserConfigurationException pce) + { + pce.printStackTrace(); + } + catch (FileNotFoundException fnfe) + { + System.err.println ("warning: state file not found [" + + filename + "]"); + } + catch (IOException ioe) + { + ioe.printStackTrace(); + } + return; + } +} |