1 19 package org.openharmonise.him.editors.preview; 20 21 import java.io.File ; 22 import java.io.FileReader ; 23 import java.io.IOException ; 24 import java.io.StringReader ; 25 import java.util.HashMap ; 26 import java.util.Iterator ; 27 import java.util.List ; 28 import java.util.Vector ; 29 30 import javax.xml.parsers.DocumentBuilderFactory ; 31 import javax.xml.parsers.FactoryConfigurationError ; 32 import javax.xml.parsers.ParserConfigurationException ; 33 34 import org.jaxen.dom.DOMXPath; 35 import org.openharmonise.commons.xml.*; 36 import org.w3c.dom.DOMException ; 37 import org.w3c.dom.Document ; 38 import org.w3c.dom.Element ; 39 import org.w3c.dom.NodeList ; 40 import org.w3c.dom.Text ; 41 import org.xml.sax.SAXException ; 42 43 44 52 public class StateContainer { 53 private HashMap m_states = null; 54 private HashMap m_members = null; 55 private Document m_stateDoc = null; 56 private XMLPrettyPrint m_printer = null; 57 private String m_vFilePath = null; 58 61 public StateContainer() { 62 super(); 63 setup(); 64 } 65 public StateContainer(String vFilePath) { 66 super(); 67 m_vFilePath = vFilePath; 68 setup(); 69 } 70 public void setVFilePath(String vFilePath) { 71 m_vFilePath = vFilePath; 72 } 73 private Document getBlankState() { 74 Document stateXml = null; 75 try { 76 stateXml = 77 DocumentBuilderFactory 78 .newInstance() 79 .newDocumentBuilder() 80 .newDocument(); 81 Element stateEl = stateXml.createElement("State"); 82 stateXml.appendChild(stateEl); 83 } catch (DOMException e) { 84 e.printStackTrace(); 85 } catch (ParserConfigurationException e) { 86 e.printStackTrace(); 87 } catch (FactoryConfigurationError e) { 88 e.printStackTrace(); 89 } 90 return stateXml; 91 } 92 96 private void setup() { 97 m_printer = new XMLPrettyPrint(); 98 m_states = new HashMap (); 99 m_members = new HashMap (); 100 File fXML = new File ("C:\\ContentManager\\states.xml"); 101 if (fXML.exists()) { 102 try { 103 Document xml = 104 DocumentBuilderFactory 105 .newInstance() 106 .newDocumentBuilder() 107 .parse( 108 new org.xml.sax.InputSource (new FileReader (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 scenarios = 114 xpScenarios.selectNodes(xml.getDocumentElement()); 115 Element stateEl; 116 Element docEl; 117 List documents; 118 Iterator itor = scenarios.iterator(); 119 Vector vMembers; 120 while (itor.hasNext()) { 121 Element scenarioEl = (Element ) itor.next(); 122 String sName = scenarioEl.getAttribute("name"); 123 stateEl = (Element ) xpStates.selectSingleNode(scenarioEl); 124 if (stateEl != null) { 125 Document stateXml = 126 DocumentBuilderFactory 127 .newInstance() 128 .newDocumentBuilder() 129 .newDocument(); 130 Element 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 docItor = documents.iterator(); 136 vMembers = new Vector (); 137 while (docItor.hasNext()) { 138 docEl = (Element ) docItor.next(); 139 NodeList nodes = docEl.getChildNodes(); 140 if(nodes.getLength()>0){ 141 String 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 e) { 152 e.printStackTrace(); 153 } 154 } else { 155 m_states.put("None", getBlankState()); 156 } 157 } 158 public Document getState(String scenario){ 159 return (Document ) m_states.get(scenario); 160 } 161 public Document getMemberState(String name){ 162 Iterator itor = m_members.keySet().iterator(); 163 Vector vMembers = null; 164 Document stateDoc = null; 165 String key = null; 166 while(itor.hasNext()){ 167 key = (String )itor.next(); 168 vMembers = (Vector )m_members.get(key); 169 if(vMembers.contains(name)){ 170 stateDoc = (Document )m_states.get(key); 171 break; 172 } 173 } 174 return stateDoc; 175 } 176 public String getMemberStateName(String name){ 177 Iterator itor = m_members.keySet().iterator(); 178 Vector vMembers = null; 179 String stateName = null; 180 String key = null; 181 while(itor.hasNext()){ 182 key = (String )itor.next(); 183 vMembers = (Vector )m_members.get(key); 184 if(vMembers.contains(name)){ 185 stateName = key; 186 break; 187 } 188 } 189 return stateName; 190 } 191 public HashMap getStates() { 192 return m_states; 193 } 194 public Document getState() { 195 return m_stateDoc; 196 } 197 public void addState(String sXml) throws SAXException { 198 Document stateXml = parseXml(sXml); 199 setState(stateXml); 200 } 201 public void setState(Document data) { 202 m_stateDoc = data; 203 } 204 public void save() { 205 try { 206 Document xml = 207 DocumentBuilderFactory 208 .newInstance() 209 .newDocumentBuilder() 210 .newDocument(); 211 212 Element elRoot = xml.createElement("Scenarios"); 213 214 Iterator itor = this.m_states.keySet().iterator(); 215 while (itor.hasNext()) { 216 String sScenario = (String ) itor.next(); 217 218 219 Element elScenario = xml.createElement("Scenario"); 220 elScenario.setAttribute("name", sScenario); 221 Element elState = xml.createElement("State"); 222 elScenario.appendChild(elState); 223 elRoot.appendChild(elScenario); 224 225 Document stateXml = (Document ) 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 elMemberRoot = xml.createElement("Members"); 235 Element elMember = null; 236 237 String sMemberPath = null; 238 String sMemberScenario = null; 239 Iterator itorDocs = m_members.keySet().iterator(); 240 Vector vMembers; 241 while (itorDocs.hasNext()) { 242 sMemberScenario = (String ) itorDocs.next(); 243 if (sMemberScenario.equals(sScenario)) { 244 vMembers = (Vector )m_members.get(sMemberScenario); 245 for(int i=0;i < vMembers.size();i++){ 246 sMemberPath = (String )vMembers.get(i); 247 elMember = xml.createElement("Member"); 248 Text 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 fXML = new File ("C:\\ContentManager\\states.xml"); 260 m_printer.printNodeToFile(elRoot, fXML); 261 262 } catch (ParserConfigurationException e) { 263 e.printStackTrace(); 264 } catch (FactoryConfigurationError e) { 265 e.printStackTrace(); 266 } 267 } 268 public void removeMemberFromScenarios(){ 269 Iterator iter = m_members.values().iterator(); 270 while(iter.hasNext()){ 271 Vector vMembers = (Vector )iter.next(); 272 if(vMembers.contains(m_vFilePath)){ 273 vMembers.remove(m_vFilePath); 274 } 275 } 276 } 277 public void addMemberToScenario(String scenario) { 278 Vector vMembers = (Vector )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 (); 285 vMembers.add(m_vFilePath); 286 } 287 m_members.put(scenario,vMembers); 288 } 289 public boolean addToStates(String sName, String sState) throws SAXException { 290 boolean success = false; 291 if (sName != null && sName.length() > 0 && sState != null) { 292 Document 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 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 parseXml(String sXml) throws SAXException { 311 Document xml = null; 312 try { 313 xml = 314 DocumentBuilderFactory 315 .newInstance() 316 .newDocumentBuilder() 317 .parse( 318 new org.xml.sax.InputSource ( 319 new StringReader (new String (sXml)))); 320 } catch (IOException e) { 321 e.getStackTrace(); 322 } catch (ParserConfigurationException e) { 323 e.getStackTrace(); 324 } catch (FactoryConfigurationError e) { 325 e.getStackTrace(); 326 } 327 return xml; 328 } 329 public String getScenario(String sVFilePath){ 330 String sScenario = null; 331 String sMemberScenario; 332 String sMemberPath; 333 Vector vMembers; 334 Iterator itorDocs = m_members.keySet().iterator(); 335 while (itorDocs.hasNext()) { 336 sMemberScenario = (String ) itorDocs.next(); 337 vMembers = (Vector )m_members.get(sMemberScenario); 338 for(int i=0;i < vMembers.size();i++){ 339 sMemberPath = (String )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 |