KickJava   Java API By Example, From Geeks To Geeks.

Java > Open Source Codes > org > openharmonise > him > editors > preview > StateContainer


1 /*
2  * The contents of this file are subject to the
3  * Mozilla Public License Version 1.1 (the "License");
4  * you may not use this file except in compliance with the License.
5  * You may obtain a copy of the License at http://www.mozilla.org/MPL/
6  *
7  * Software distributed under the License is distributed on an "AS IS"
8  * basis, WITHOUT WARRANTY OF ANY KIND, either express or implied.
9  * See the License for the specific language governing rights and
10  * limitations under the License.
11  *
12  * The Initial Developer of the Original Code is Simulacra Media Ltd.
13  * Portions created by Simulacra Media Ltd are Copyright (C) Simulacra Media Ltd, 2004.
14  *
15  * All Rights Reserved.
16  *
17  * Contributor(s):
18  */

19 package org.openharmonise.him.editors.preview;
20
21 import java.io.File JavaDoc;
22 import java.io.FileReader JavaDoc;
23 import java.io.IOException JavaDoc;
24 import java.io.StringReader JavaDoc;
25 import java.util.HashMap JavaDoc;
26 import java.util.Iterator JavaDoc;
27 import java.util.List JavaDoc;
28 import java.util.Vector JavaDoc;
29
30 import javax.xml.parsers.DocumentBuilderFactory JavaDoc;
31 import javax.xml.parsers.FactoryConfigurationError JavaDoc;
32 import javax.xml.parsers.ParserConfigurationException JavaDoc;
33
34 import org.jaxen.dom.DOMXPath;
35 import org.openharmonise.commons.xml.*;
36 import org.w3c.dom.DOMException JavaDoc;
37 import org.w3c.dom.Document JavaDoc;
38 import org.w3c.dom.Element JavaDoc;
39 import org.w3c.dom.NodeList JavaDoc;
40 import org.w3c.dom.Text JavaDoc;
41 import org.xml.sax.SAXException JavaDoc;
42
43
44 /**
45  * Manages Page State XML documents, persisting them to the local
46  * file system.
47  *
48  * @author matt treanor
49  * @version $Revision: 1.1 $
50  *
51  */

52 public class StateContainer {
53     private HashMap JavaDoc m_states = null;
54     private HashMap JavaDoc m_members = null;
55     private Document JavaDoc m_stateDoc = null;
56     private XMLPrettyPrint m_printer = null;
57     private String JavaDoc m_vFilePath = null;
58     /**
59      *
60      */

61     public StateContainer() {
62         super();
63         setup();
64     }
65     public StateContainer(String JavaDoc vFilePath) {
66         super();
67         m_vFilePath = vFilePath;
68         setup();
69     }
70     public void setVFilePath(String JavaDoc vFilePath) {
71         m_vFilePath = vFilePath;
72     }
73     private Document JavaDoc getBlankState() {
74         Document JavaDoc stateXml = null;
75         try {
76             stateXml =
77                 DocumentBuilderFactory
78                     .newInstance()
79                     .newDocumentBuilder()
80                     .newDocument();
81             Element JavaDoc stateEl = stateXml.createElement("State");
82             stateXml.appendChild(stateEl);
83         } catch (DOMException JavaDoc e) {
84             e.printStackTrace();
85         } catch (ParserConfigurationException JavaDoc e) {
86             e.printStackTrace();
87         } catch (FactoryConfigurationError JavaDoc e) {
88             e.printStackTrace();
89         }
90         return stateXml;
91     }
92     /**
93      * 'borrowed' from matt's workflowlayout store
94      *
95      */

96     private void setup() {
97         m_printer = new XMLPrettyPrint();
98         m_states = new HashMap JavaDoc();
99         m_members = new HashMap JavaDoc();
100         File JavaDoc fXML = new File JavaDoc("C:\\ContentManager\\states.xml");
101         if (fXML.exists()) {
102             try {
103                 Document JavaDoc xml =
104                     DocumentBuilderFactory
105                         .newInstance()
106                         .newDocumentBuilder()
107                         .parse(
108                         new org.xml.sax.InputSource JavaDoc(new FileReader JavaDoc(fXML)));
109
110                 DOMXPath xpScenarios = new DOMXPath("child::Scenario");
111                 DOMXPath xpStates = new DOMXPath("child::State");
112                 DOMXPath xpDocs = new DOMXPath("child::Members/Member");
113                 List JavaDoc scenarios =
114                     xpScenarios.selectNodes(xml.getDocumentElement());
115                 Element JavaDoc stateEl;
116                 Element JavaDoc docEl;
117                 List JavaDoc documents;
118                 Iterator JavaDoc itor = scenarios.iterator();
119                 Vector JavaDoc vMembers;
120                 while (itor.hasNext()) {
121                     Element JavaDoc scenarioEl = (Element JavaDoc) itor.next();
122                     String JavaDoc sName = scenarioEl.getAttribute("name");
123                     stateEl = (Element JavaDoc) xpStates.selectSingleNode(scenarioEl);
124                     if (stateEl != null) {
125                         Document JavaDoc stateXml =
126                             DocumentBuilderFactory
127                                 .newInstance()
128                                 .newDocumentBuilder()
129                                 .newDocument();
130                         Element JavaDoc newStateEl = stateXml.createElement("State");
131                         XMLUtils.copyChildren(newStateEl, stateEl, stateXml);
132                         stateXml.appendChild(newStateEl);
133                         m_states.put(sName, stateXml);
134                         documents = xpDocs.selectNodes(scenarioEl);
135                         Iterator JavaDoc docItor = documents.iterator();
136                         vMembers = new Vector JavaDoc();
137                         while (docItor.hasNext()) {
138                             docEl = (Element JavaDoc) docItor.next();
139                             NodeList JavaDoc nodes = docEl.getChildNodes();
140                             if(nodes.getLength()>0){
141                                 String JavaDoc path = nodes.item(0).getNodeValue();
142                                 vMembers.add(path);
143                             }
144                         }
145                         if(vMembers.size()>0){
146                             m_members.put(sName,vMembers);
147                         }
148                     }
149                 }
150
151             } catch (Exception JavaDoc e) {
152                 e.printStackTrace();
153             }
154         } else {
155             m_states.put("None", getBlankState());
156         }
157     }
158     public Document JavaDoc getState(String JavaDoc scenario){
159         return (Document JavaDoc) m_states.get(scenario);
160     }
161     public Document JavaDoc getMemberState(String JavaDoc name){
162         Iterator JavaDoc itor = m_members.keySet().iterator();
163         Vector JavaDoc vMembers = null;
164         Document JavaDoc stateDoc = null;
165         String JavaDoc key = null;
166         while(itor.hasNext()){
167             key = (String JavaDoc)itor.next();
168             vMembers = (Vector JavaDoc)m_members.get(key);
169             if(vMembers.contains(name)){
170                 stateDoc = (Document JavaDoc)m_states.get(key);
171                 break;
172             }
173         }
174         return stateDoc;
175     }
176     public String JavaDoc getMemberStateName(String JavaDoc name){
177         Iterator JavaDoc itor = m_members.keySet().iterator();
178         Vector JavaDoc vMembers = null;
179         String JavaDoc stateName = null;
180         String JavaDoc key = null;
181         while(itor.hasNext()){
182             key = (String JavaDoc)itor.next();
183             vMembers = (Vector JavaDoc)m_members.get(key);
184             if(vMembers.contains(name)){
185                 stateName = key;
186                 break;
187             }
188         }
189         return stateName;
190     }
191     public HashMap JavaDoc getStates() {
192         return m_states;
193     }
194     public Document JavaDoc getState() {
195         return m_stateDoc;
196     }
197     public void addState(String JavaDoc sXml) throws SAXException JavaDoc {
198         Document JavaDoc stateXml = parseXml(sXml);
199         setState(stateXml);
200     }
201     public void setState(Document JavaDoc data) {
202         m_stateDoc = data;
203     }
204     public void save() {
205         try {
206             Document JavaDoc xml =
207                 DocumentBuilderFactory
208                     .newInstance()
209                     .newDocumentBuilder()
210                     .newDocument();
211
212             Element JavaDoc elRoot = xml.createElement("Scenarios");
213
214             Iterator JavaDoc itor = this.m_states.keySet().iterator();
215             while (itor.hasNext()) {
216                 String JavaDoc sScenario = (String JavaDoc) itor.next();
217
218
219                 Element JavaDoc elScenario = xml.createElement("Scenario");
220                 elScenario.setAttribute("name", sScenario);
221                 Element JavaDoc elState = xml.createElement("State");
222                 elScenario.appendChild(elState);
223                 elRoot.appendChild(elScenario);
224
225                 Document JavaDoc stateXml = (Document JavaDoc) this.m_states.get(sScenario);
226                 XMLUtils.copyChildren(
227                     elState,
228                     stateXml.getDocumentElement(),
229                     xml);
230                 elScenario.appendChild(elState);
231                 
232                 if(m_members != null && m_members.size() > 0){
233                     if(m_members.containsKey(sScenario)){
234                         Element JavaDoc elMemberRoot = xml.createElement("Members");
235                         Element JavaDoc elMember = null;
236                         
237                         String JavaDoc sMemberPath = null;
238                         String JavaDoc sMemberScenario = null;
239                         Iterator JavaDoc itorDocs = m_members.keySet().iterator();
240                         Vector JavaDoc vMembers;
241                         while (itorDocs.hasNext()) {
242                             sMemberScenario = (String JavaDoc) itorDocs.next();
243                             if (sMemberScenario.equals(sScenario)) {
244                                 vMembers = (Vector JavaDoc)m_members.get(sMemberScenario);
245                                 for(int i=0;i < vMembers.size();i++){
246                                     sMemberPath = (String JavaDoc)vMembers.get(i);
247                                     elMember = xml.createElement("Member");
248                                     Text JavaDoc txt = xml.createTextNode(sMemberPath);
249                                     elMember.appendChild(txt);
250                                     elMemberRoot.appendChild(elMember);
251                                 }
252                             }
253                         }
254                         elScenario.appendChild(elMemberRoot);
255                     }
256                 }
257             }
258
259             File JavaDoc fXML = new File JavaDoc("C:\\ContentManager\\states.xml");
260             m_printer.printNodeToFile(elRoot, fXML);
261
262         } catch (ParserConfigurationException JavaDoc e) {
263             e.printStackTrace();
264         } catch (FactoryConfigurationError JavaDoc e) {
265             e.printStackTrace();
266         }
267     }
268     public void removeMemberFromScenarios(){
269         Iterator JavaDoc iter = m_members.values().iterator();
270         while(iter.hasNext()){
271             Vector JavaDoc vMembers = (Vector JavaDoc)iter.next();
272             if(vMembers.contains(m_vFilePath)){
273                 vMembers.remove(m_vFilePath);
274             }
275         }
276     }
277     public void addMemberToScenario(String JavaDoc scenario) {
278         Vector JavaDoc vMembers = (Vector JavaDoc)m_members.get(scenario);
279         if (vMembers != null) {
280             if(vMembers.contains(m_vFilePath)==false){
281                 vMembers.add(m_vFilePath);
282             }
283         } else {
284             vMembers = new Vector JavaDoc();
285             vMembers.add(m_vFilePath);
286         }
287         m_members.put(scenario,vMembers);
288     }
289     public boolean addToStates(String JavaDoc sName, String JavaDoc sState) throws SAXException JavaDoc {
290         boolean success = false;
291         if (sName != null && sName.length() > 0 && sState != null) {
292             Document JavaDoc stateXml = parseXml(sState);
293             if (stateXml != null) {
294                 m_states.put(sName, stateXml);
295                 success = true;
296             }
297         }
298         return success;
299     }
300     public boolean removeFromStates(String JavaDoc sName) {
301         boolean success = false;
302         if (sName != null
303             && sName.length() > 0
304             && sName.equalsIgnoreCase("None") == false) {
305             m_states.remove(sName);
306             success = true;
307         }
308         return success;
309     }
310     private Document JavaDoc parseXml(String JavaDoc sXml) throws SAXException JavaDoc {
311         Document JavaDoc xml = null;
312         try {
313             xml =
314                 DocumentBuilderFactory
315                     .newInstance()
316                     .newDocumentBuilder()
317                     .parse(
318                     new org.xml.sax.InputSource JavaDoc(
319                         new StringReader JavaDoc(new String JavaDoc(sXml))));
320         } catch (IOException JavaDoc e) {
321             e.getStackTrace();
322         } catch (ParserConfigurationException JavaDoc e) {
323             e.getStackTrace();
324         } catch (FactoryConfigurationError JavaDoc e) {
325             e.getStackTrace();
326         }
327         return xml;
328     }
329     public String JavaDoc getScenario(String JavaDoc sVFilePath){
330         String JavaDoc sScenario = null;
331         String JavaDoc sMemberScenario;
332         String JavaDoc sMemberPath;
333         Vector JavaDoc vMembers;
334         Iterator JavaDoc itorDocs = m_members.keySet().iterator();
335         while (itorDocs.hasNext()) {
336             sMemberScenario = (String JavaDoc) itorDocs.next();
337             vMembers = (Vector JavaDoc)m_members.get(sMemberScenario);
338             for(int i=0;i < vMembers.size();i++){
339                 sMemberPath = (String JavaDoc)vMembers.get(i);
340                 if(sVFilePath.equals(sMemberPath)){
341                     sScenario = sMemberScenario;
342                     break;
343                 }
344             }
345             if(sScenario != null){
346                 break;
347             }
348         }
349         return sScenario;
350     }
351 }
Popular Tags