KickJava   Java API By Example, From Geeks To Geeks.

Java > Open Source Codes > com > memoire > vainstall > builder > util > JavaBuilderPersister


1 /*
2  * $RCSfile: JavaBuilderPersister.java,v $
3  * @modification $Date: 2001/09/28 19:41:42 $
4  * @version $Id: JavaBuilderPersister.java,v 1.1 2001/09/28 19:41:42 hfalk Exp $
5  *
6  */

7
8 package com.memoire.vainstall.builder.util;
9
10 import com.memoire.vainstall.builder.*;
11
12 import java.awt.Rectangle JavaDoc;
13 import java.io.File JavaDoc;
14 import java.io.IOException JavaDoc;
15 import java.util.*;
16
17 import javax.xml.parsers.*;
18 import org.xml.sax.*;
19 import org.xml.sax.helpers.*;
20 import org.w3c.dom.*;
21
22 import javax.xml.transform.*;
23 import javax.xml.transform.dom.*;
24 import javax.xml.transform.stream.*;
25
26 /**
27  * This class performs the persistance of the VAInstall Builder
28  *
29  * @see com.memoire.vainstall.VAIBuilderModel
30  * @see com.memoire.vainstall.util.BuilderPersisterInterface
31  *
32  * @author Henrik Falk
33  * @version $Id: JavaBuilderPersister.java,v 1.1 2001/09/28 19:41:42 hfalk Exp $
34  */

35 public class JavaBuilderPersister implements BuilderPersisterInterface {
36
37     /**
38      * The Builder data model
39      */

40     VAIBuilderModel model = null;
41
42     /**
43      * A not so elegant way to find out where the VAInstall shared
44      * directory is located.
45      * Used for saving the vaibuilder.xml file which contains data
46      * from the builder data model.
47      */

48     String JavaDoc vai_home = XmlUtil.findVAISharedDir().getAbsolutePath();
49
50     /**
51      * Default constructor
52      */

53     public JavaBuilderPersister() {
54         super();
55     }
56
57     /**
58      * Initializes this class in order to know which datamodel to save
59      * and load.
60      * @param model The builder model
61      */

62     public void initialize(VAIBuilderModel model) {
63         this.model = model;
64     }
65
66     /**
67      * Loads the data from datastore
68      */

69     public void load() {
70
71         // check if we are initialized
72
if (model == null) {
73             return;
74         }
75
76         // Check if vaibuilder.xml exists
77
String JavaDoc vaibuilder = vai_home + java.io.File.separator + "vaibuilder.xml";
78         if (new File JavaDoc(vaibuilder).exists() == false) {
79             // this is the first time we run the builder
80
return;
81         }
82
83         // Parse the XML file at the moment non-validating
84
Document doc = null;
85         try {
86             doc = XmlUtil.parse(vaibuilder,null);
87         } catch (XmlParseException exc) {
88 // System.out.println("Could not load preferences.");
89
return;
90         }
91
92         // extract data from the Document to the data model
93
importData(doc);
94     }
95
96     /**
97      * Saves the data in datastore
98      */

99     public void save() {
100
101         // check if we are initialized
102
if (model == null) {
103             return;
104         }
105
106         // create a new Document
107
Document doc = null;
108         try {
109             DocumentBuilder builder = DocumentBuilderFactory.newInstance().newDocumentBuilder();
110             doc = builder.newDocument();
111
112         } catch(ParserConfigurationException exc) {
113             return;
114         }
115
116         // Extract data from the model to the Document
117
exportData(doc);
118
119         // Create a Transformer which enables us to export the Document
120
Transformer transformer = null;
121         try {
122             transformer = TransformerFactory.newInstance().newTransformer();
123             transformer.setOutputProperty("indent","yes");
124         } catch(TransformerConfigurationException exc) {
125             exc.printStackTrace();
126             return;
127         }
128
129         // Export the Document
130
String JavaDoc vaibuilder = vai_home + java.io.File.separator + "vaibuilder.xml";
131         try {
132             transformer.transform(new DOMSource(doc),new StreamResult(new File JavaDoc(vaibuilder)));
133         } catch (TransformerException exc) {
134             exc.printStackTrace();
135         }
136
137     }
138
139     /**
140      * Extract data from a Document and updates the data model
141      * @param doc a Document
142      */

143     private void importData(Document doc) {
144
145         NodeList nodelist;
146
147         Element rootElement = doc.getDocumentElement();
148
149         // get saved window positions
150
nodelist = rootElement.getElementsByTagName("window");
151         for(int i = 0 ; i < nodelist.getLength() ; i++) {
152             Node window = (Node)nodelist.item(i);
153
154             NamedNodeMap map = window.getAttributes();
155
156             Rectangle JavaDoc rect = new Rectangle JavaDoc(XmlUtil.getAttributeAsInt(map,"x"),
157                                            XmlUtil.getAttributeAsInt(map,"y"),
158                                            XmlUtil.getAttributeAsInt(map,"width"),
159                                            XmlUtil.getAttributeAsInt(map,"height"));
160             model.getWindowList().put(XmlUtil.getAttribute(map,"name"),rect);
161         }
162
163         // get saved last opened projects
164
nodelist = rootElement.getElementsByTagName("lastfile");
165
166         LinkedList tmpList = new LinkedList();
167         for(int i = 0 ; i < nodelist.getLength() ; i++) {
168             tmpList.add("");
169         }
170         for(int i = 0 ; i < nodelist.getLength() ; i++) {
171             int number = new Integer JavaDoc(XmlUtil.getAttribute(nodelist.item(i),"number")).intValue();
172             String JavaDoc lastproject = XmlUtil.getAttribute(nodelist.item(i),"file");
173             tmpList.set(number,lastproject);
174         }
175
176         for(int i = tmpList.size()-1 ; i >= 0 ; i--) {
177             model.addLastOpenedProject((String JavaDoc)tmpList.get(i));
178         }
179
180         // get builder properties
181
nodelist = rootElement.getElementsByTagName("property");
182
183         for(int i = 0 ; i < nodelist.getLength() ; i++) {
184             String JavaDoc name = XmlUtil.getAttribute(nodelist.item(i),"name");
185             String JavaDoc value = XmlUtil.getAttribute(nodelist.item(i),"value");
186             model.getPropertyList().put(name,value);
187         }
188     }
189
190     /**
191      * Extract data from the data model and updates a Document
192      * @param doc a Document
193      */

194     private void exportData(Document doc) {
195
196         // create root element
197
Element root = doc.createElement("vaibuilder");
198         doc.appendChild(root);
199
200         // create <window> elements
201
Hashtable windowList = model.getWindowList();
202
203         Enumeration keys = windowList.keys();
204         while (keys.hasMoreElements() == true) {
205             String JavaDoc key = (String JavaDoc)keys.nextElement();
206             Rectangle JavaDoc rect = (Rectangle JavaDoc)windowList.get(key);
207
208             Element element = doc.createElement("window");
209             element.setAttribute("name",key);
210             element.setAttribute("x",String.valueOf(rect.x));
211             element.setAttribute("y",String.valueOf(rect.y));
212             element.setAttribute("width",String.valueOf(rect.width));
213             element.setAttribute("height",String.valueOf(rect.height));
214
215             root.appendChild(element);
216         }
217
218         // create <lastproject> elements
219
LinkedList lastproject = model.getLastOpenedProjectList();
220
221         for (int i = 0; i < lastproject.size() ; i++) {
222
223             Element element = doc.createElement("lastfile");
224             element.setAttribute("number",String.valueOf(i));
225             element.setAttribute("file",String.valueOf(lastproject.get(i)));
226
227             root.appendChild(element);
228         }
229
230         // create <property> elements
231
Hashtable propertyList = model.getPropertyList();
232
233         Enumeration propertyKeys = propertyList.keys();
234         while (propertyKeys.hasMoreElements() == true) {
235             String JavaDoc name = (String JavaDoc)propertyKeys.nextElement();
236             String JavaDoc value = (String JavaDoc)propertyList.get(name);
237
238             Element element = doc.createElement("property");
239             element.setAttribute("name",name);
240             element.setAttribute("value",value);
241
242             root.appendChild(element);
243         }
244
245     }
246 }
247
Popular Tags