KickJava   Java API By Example, From Geeks To Geeks.

Java > Open Source Codes > org > columba > core > gui > docking > XMLPersister


1 package org.columba.core.gui.docking;
2
3 import java.io.IOException JavaDoc;
4 import java.io.InputStream JavaDoc;
5 import java.io.OutputStream JavaDoc;
6 import java.io.OutputStreamWriter JavaDoc;
7
8 import javax.xml.parsers.DocumentBuilder JavaDoc;
9 import javax.xml.parsers.DocumentBuilderFactory JavaDoc;
10 import javax.xml.parsers.ParserConfigurationException JavaDoc;
11 import javax.xml.transform.OutputKeys JavaDoc;
12 import javax.xml.transform.Transformer JavaDoc;
13 import javax.xml.transform.TransformerConfigurationException JavaDoc;
14 import javax.xml.transform.TransformerException JavaDoc;
15 import javax.xml.transform.TransformerFactory JavaDoc;
16 import javax.xml.transform.dom.DOMSource JavaDoc;
17 import javax.xml.transform.stream.StreamResult JavaDoc;
18
19 import org.flexdock.docking.DockingPort;
20 import org.flexdock.docking.state.LayoutNode;
21 import org.flexdock.docking.state.PersistenceException;
22 import org.flexdock.perspective.persist.xml.ISerializer;
23 import org.flexdock.perspective.persist.xml.SerializerRegistry;
24 import org.flexdock.util.Utilities;
25 import org.w3c.dom.Document JavaDoc;
26 import org.w3c.dom.Element JavaDoc;
27 import org.xml.sax.InputSource JavaDoc;
28 import org.xml.sax.SAXException JavaDoc;
29
30 public class XMLPersister {
31
32     private DocumentBuilder JavaDoc createDocumentBuilder() throws PersistenceException {
33         try {
34             DocumentBuilderFactory JavaDoc documentBuilderFactory = DocumentBuilderFactory.newInstance();
35             DocumentBuilder JavaDoc documentBuilder = documentBuilderFactory.newDocumentBuilder();
36
37             return documentBuilder;
38         } catch (ParserConfigurationException JavaDoc ex) {
39             throw new PersistenceException("Unable to create document builder", ex);
40         }
41     }
42     
43     public boolean store(OutputStream JavaDoc os, DockingPort dockingPort) throws IOException JavaDoc, PersistenceException {
44         DocumentBuilder JavaDoc documentBuilder = createDocumentBuilder();
45         Document JavaDoc document = documentBuilder.newDocument();
46         
47         ISerializer serializer = SerializerRegistry.getSerializer(LayoutNode.class);
48         Element JavaDoc layoutNodeElement = serializer.serialize(document, dockingPort.exportLayout());
49
50         document.appendChild(layoutNodeElement);
51
52         TransformerFactory JavaDoc transformerFactory = TransformerFactory.newInstance();
53         // the indent-number attribute causes an IllegalArgumentException under 1.4
54
if(Utilities.JAVA_1_5) {
55             transformerFactory.setAttribute("indent-number", new Integer JavaDoc(4));
56         }
57
58         try {
59             Transformer JavaDoc transformer = transformerFactory.newTransformer();
60             // this property is ignored under java 1.5.
61
transformer.setOutputProperty("{http://xml.apache.org/xslt}indent-amount", "4");
62             transformer.setOutputProperty(OutputKeys.INDENT, "yes");
63             
64             DOMSource JavaDoc source = new DOMSource JavaDoc(document);
65             StreamResult JavaDoc result = new StreamResult JavaDoc(new OutputStreamWriter JavaDoc(os));
66             
67             transformer.transform(source, result);
68         } catch (TransformerConfigurationException JavaDoc ex) {
69             throw new PersistenceException("Unable to serialize perspectiveModel", ex);
70         } catch (TransformerException JavaDoc ex) {
71             throw new PersistenceException("Unable to serialize perspectiveModel", ex);
72         }
73
74         return true;
75     }
76     
77     public void load(InputStream JavaDoc is, DockingPort dockingPort) throws IOException JavaDoc, PersistenceException {
78         try {
79             InputSource JavaDoc inputSource = new InputSource JavaDoc(is);
80             DocumentBuilder JavaDoc documentBuilder = createDocumentBuilder();
81             Document JavaDoc document = documentBuilder.parse(inputSource);
82
83             ISerializer layoutNodeSerializer = SerializerRegistry.getSerializer(LayoutNode.class);
84             LayoutNode layoutNode = (LayoutNode) layoutNodeSerializer.deserialize(document.getDocumentElement());
85             dockingPort.importLayout(layoutNode);
86
87         } catch (SAXException JavaDoc ex) {
88             throw new PersistenceException("Unable to deserialize perspectiveModel from xml", ex);
89         }
90     }
91     
92 }
93
Popular Tags