1 7 8 package com.memoire.vainstall.builder.util; 9 10 import com.memoire.vainstall.VAGlobals; 11 import com.memoire.vainstall.builder.*; 12 13 import java.io.File ; 14 import java.util.*; 15 16 import javax.xml.parsers.*; 17 import org.xml.sax.*; 18 import org.xml.sax.helpers.*; 19 import org.w3c.dom.*; 20 21 import javax.xml.transform.*; 22 import javax.xml.transform.dom.*; 23 import javax.xml.transform.stream.*; 24 25 33 public class JavaProductPersister implements ProductPersisterInterface { 34 35 VAIProductModel model = null; 36 37 public JavaProductPersister() { 38 super(); 39 } 40 41 public void initialize(VAIProductModel model) { 42 this.model = model; 43 } 44 45 public void load() throws VAIBuilderException { 46 47 if (model == null) { 49 throw new VAIBuilderException(VAGlobals.getResource("com.memoire.vainstall.builder.Language","JavaProductPersister_Load"), 50 VAGlobals.getResource("com.memoire.vainstall.builder.Language","JavaProductPersister_NotInit"), 51 VAGlobals.getResource("com.memoire.vainstall.builder.Language","JavaProductPersister_ProgramError") 52 + VAGlobals.getResource("com.memoire.vainstall.builder.Language","JavaProductPersister_PleaseReport")); 53 } 54 55 String project_file = model.getProductDirectory() + File.separator 57 +"vainstall.xml"; 58 if (new File (project_file).exists() == false) { 59 throw new VAIBuilderException(VAGlobals.getResource("com.memoire.vainstall.builder.Language","JavaProductPersister_Load"), 60 VAGlobals.getResource("com.memoire.vainstall.builder.Language","JavaProductPersister_NotFound"), 61 VAGlobals.getResource("com.memoire.vainstall.builder.Language","JavaProductPersister_MaybeError") 62 + VAGlobals.getResource("com.memoire.vainstall.builder.Language","JavaProductPersister_PleaseReport")); 63 } 64 65 Document doc = null; 66 try { 67 doc = XmlUtil.parse(project_file,null); 68 } catch (XmlParseException exc) { 69 throw new VAIBuilderException(VAGlobals.getResource("com.memoire.vainstall.builder.Language","JavaProductPersister_Load"), 70 VAGlobals.getResource("com.memoire.vainstall.builder.Language","JavaProductPersister_NotParse"), 71 VAGlobals.getResource("com.memoire.vainstall.builder.Language","JavaProductPersister_MaybeError") 72 + VAGlobals.getResource("com.memoire.vainstall.builder.Language","JavaProductPersister_PleaseReport")); 73 } 74 75 importData(doc); 76 } 77 78 public void save() throws VAIBuilderException { 79 80 if (model == null) { 82 return; 83 } 84 85 Document doc = null; 86 try { 87 DocumentBuilder builder = DocumentBuilderFactory.newInstance().newDocumentBuilder(); 88 doc = builder.newDocument(); 89 90 } catch(ParserConfigurationException exc) { 91 return; 92 } 93 94 exportData(doc); 95 96 Transformer transformer = null; 97 try { 98 transformer = TransformerFactory.newInstance().newTransformer(); 99 transformer.setOutputProperty("indent","yes"); 100 } catch(TransformerConfigurationException exc) { 101 exc.printStackTrace(); 102 return; 103 } 104 105 String project_file = model.getProductDirectory() + File.separator 106 +"vainstall.xml"; 107 try { 108 transformer.transform(new DOMSource(doc),new StreamResult(new File (project_file))); 109 } catch (TransformerException exc) { 110 exc.printStackTrace(); 111 } 112 } 113 114 private void importData(Document doc) throws VAIBuilderException { 115 116 NodeList nodelist; 117 118 Element rootElement = doc.getDocumentElement(); 119 120 nodelist = rootElement.getElementsByTagName("property"); 122 for(int i = 0 ; i < nodelist.getLength() ; i++) { 123 Node propertyNode = (Node)nodelist.item(i); 124 125 NamedNodeMap map = propertyNode.getAttributes(); 126 127 String name = XmlUtil.getAttribute(map,"name"); 128 129 if (name.equals("vainstall.product.name") == true) { 130 model.setProductName(XmlUtil.getAttribute(map,"value")); 131 } 132 133 if (name.equals("vainstall.product.version") == true) { 134 model.setProductVersion(XmlUtil.getAttribute(map,"value")); 135 } 136 137 if (name.equals("vainstall.product.type") == true) { 138 model.setProductType(XmlUtil.getAttribute(map,"value")); 139 } 140 141 if (name.equals("vainstall.archiver.package.name") == true) { 142 model.setPackageName(XmlUtil.getAttribute(map,"value")); 143 } 144 145 if (name.equals("vainstall.archiver.license.name") == true) { 146 model.setLicenseName(XmlUtil.getAttribute(map,"value")); 147 } 148 149 if (name.equals("vainstall.archiver.license.encoding") == true) { 150 model.setLicenseEncoding(XmlUtil.getAttribute(map,"value")); 151 } 152 153 if (name.equals("vainstall.archiver.readme.name") == true) { 154 model.setReadmeName(XmlUtil.getAttribute(map,"value")); 155 } 156 157 if (name.equals("vainstall.archiver.readme.encoding") == true) { 158 model.setReadmeEncoding(XmlUtil.getAttribute(map,"value")); 159 } 160 161 if (name.equals("vainstall.installer.ui.bluescreen") == true) { 162 model.putProperty(name,XmlUtil.getAttribute(map,"value")); 163 } 164 165 if (name.equals("vainstall.installer.ui.bluescreen.colour") == true) { 166 model.putProperty(name,XmlUtil.getAttribute(map,"value")); 167 } 168 169 if (name.equals("vainstall.installer.ui.mode") == true) { 170 model.putProperty(name,XmlUtil.getAttribute(map,"value")); 171 } 172 173 if (name.equals("vainstall.installer.ui.banner") == true) { 174 model.putProperty(name,XmlUtil.getAttribute(map,"value")); 175 } 176 177 if (name.equals("vainstall.user.dir") == true) { 178 model.putProperty(name,XmlUtil.getAttribute(map,"value")); 179 } 180 181 if (name.equals("vainstall.installer.link.section.name") == true) { 182 model.putProperty(name,XmlUtil.getAttribute(map,"value")); 183 } 184 185 if (name.equals("vainstall.installer.link.section.icon") == true) { 186 model.putProperty(name,XmlUtil.getAttribute(map,"value")); 187 } 188 189 if (name.equals("vainstall.installer.link.entry.name") == true) { 190 model.putProperty(name,XmlUtil.getAttribute(map,"value")); 191 } 192 193 if (name.equals("vainstall.installer.link.entry.icon") == true) { 194 model.putProperty(name,XmlUtil.getAttribute(map,"value")); 195 } 196 197 if (name.equals("vainstall.installer.default.directory") == true) { 198 model.putProperty(name,XmlUtil.getAttribute(map,"value")); 199 } 200 201 } 202 203 nodelist = rootElement.getElementsByTagName("steps"); 205 for(int i = 0 ; i < nodelist.getLength() ; i++) { 206 Node stepsNode = (Node)nodelist.item(i); 207 208 NamedNodeMap map = stepsNode.getAttributes(); 209 210 String type = XmlUtil.getAttribute(map,"type"); 211 212 if (type.equals("uninstall") == false) { 213 NodeList steplist = ((Element)stepsNode).getElementsByTagName("step"); 215 for(int j = 0 ; j < steplist.getLength() ; j++) { 216 Node stepNode = (Node)steplist.item(j); 217 218 NamedNodeMap stepMap = stepNode.getAttributes(); 219 220 String stepType = XmlUtil.getAttribute(stepMap,"type"); 221 model.getStepsList().add(stepType); 222 223 if (stepType.equals("license") == true) { 226 model.removeRequirement("Required Steps"); 227 } 228 } 229 } else { 230 } 232 } 233 234 nodelist = rootElement.getElementsByTagName("targets"); 236 for(int i = 0 ; i < nodelist.getLength() ; i++) { 237 Node targetsNode = (Node)nodelist.item(i); 238 239 NodeList targetlist = rootElement.getElementsByTagName("target"); 240 for(int j = 0 ; i < targetlist.getLength() ; i++) { 241 Node targetNode = (Node)targetlist.item(i); 242 243 NamedNodeMap targetMap = targetNode.getAttributes(); 244 String targetType = XmlUtil.getAttribute(targetMap,"type"); 245 if (targetType.equals("jar") == true) { 246 String signerAliasType = XmlUtil.getAttribute(targetMap,"signeralias"); 247 if(signerAliasType != null) { 248 model.getPropertyList().put("vainstall.archiver.target.jar.signer.alias",signerAliasType); 249 } 250 String signerPassphraseType = XmlUtil.getAttribute(targetMap,"signerpassphrase"); 251 if(signerPassphraseType != null) { 252 model.getPropertyList().put("vainstall.archiver.target.jar.signer.passphrase",signerPassphraseType); 253 } 254 } 255 if (targetType.equals("jnlp") == true) { 256 String codebaseType = XmlUtil.getAttribute(targetMap,"codebase"); 257 if(codebaseType != null) { 258 model.getPropertyList().put("vainstall.archiver.target.jnlp.codebase",codebaseType); 259 } 260 String homepageType = XmlUtil.getAttribute(targetMap,"homepage"); 261 if(homepageType != null) { 262 model.getPropertyList().put("vainstall.archiver.target.jnlp.homepage",homepageType); 263 } 264 String vendorType = XmlUtil.getAttribute(targetMap,"vendor"); 265 if(vendorType != null) { 266 model.getPropertyList().put("vainstall.archiver.target.jnlp.vendor",vendorType); 267 } 268 } 269 model.addTarget(targetType); 270 } 271 } 272 273 nodelist = rootElement.getElementsByTagName("language"); 275 for(int i = 0 ; i < nodelist.getLength() ; i++) { 276 Node languageNode = (Node)nodelist.item(i); 277 278 if (languageNode.hasChildNodes() == true) { 279 Node language = languageNode.getFirstChild(); 280 if (language.getNodeType() == Node.TEXT_NODE) { 281 model.addLanguage(language.getNodeValue()); 283 } 284 } 285 } 286 287 } 288 289 private void exportData(Document doc) throws VAIBuilderException { 290 291 Element root = doc.createElement("vainstall"); 293 root.setAttribute("version","1.0"); 294 doc.appendChild(root); 295 296 298 Element projectNameElement = doc.createElement("property"); 299 projectNameElement.setAttribute("name","vainstall.product.name"); 300 projectNameElement.setAttribute("value",model.getProductName()); 301 root.appendChild(projectNameElement); 302 303 Element projectVersionElement = doc.createElement("property"); 304 projectVersionElement.setAttribute("name","vainstall.product.version"); 305 projectVersionElement.setAttribute("value",model.getProductVersion()); 306 root.appendChild(projectVersionElement); 307 308 if (model.getProductType() != null) { 309 Element projectTypeElement = doc.createElement("property"); 310 projectTypeElement.setAttribute("name","vainstall.product.type"); 311 projectTypeElement.setAttribute("value",model.getProductType()); 312 root.appendChild(projectTypeElement); 313 } 314 315 if (model.getPackageName() != null) { 316 Element packageNameElement = doc.createElement("property"); 317 packageNameElement.setAttribute("name","vainstall.archiver.package.name"); 318 packageNameElement.setAttribute("value",model.getPackageName()); 319 root.appendChild(packageNameElement); 320 } 321 322 if (model.getLicenseName() != null) { 323 Element licenseNameElement = doc.createElement("property"); 324 licenseNameElement.setAttribute("name","vainstall.archiver.license.name"); 325 licenseNameElement.setAttribute("value",model.getLicenseName()); 326 root.appendChild(licenseNameElement); 327 } 328 329 if (model.getLicenseEncoding() != null) { 330 Element licenseEncodingElement = doc.createElement("property"); 331 licenseEncodingElement.setAttribute("name","vainstall.archiver.license.encoding"); 332 licenseEncodingElement.setAttribute("value",model.getLicenseEncoding()); 333 root.appendChild(licenseEncodingElement); 334 } 335 336 if (model.getReadmeName() != null) { 337 Element readmeNameElement = doc.createElement("property"); 338 readmeNameElement.setAttribute("name","vainstall.archiver.readme.name"); 339 readmeNameElement.setAttribute("value",model.getReadmeName()); 340 root.appendChild(readmeNameElement); 341 } 342 343 if (model.getReadmeEncoding() != null) { 344 Element readmeEncodingElement = doc.createElement("property"); 345 readmeEncodingElement.setAttribute("name","vainstall.archiver.readme.encoding"); 346 readmeEncodingElement.setAttribute("value",model.getReadmeEncoding()); 347 root.appendChild(readmeEncodingElement); 348 } 349 350 if (model.getProperty("vainstall.installer.ui.bluescreen") != null) { 352 Element blueScreenElement = doc.createElement("property"); 353 blueScreenElement.setAttribute("name","vainstall.installer.ui.bluescreen"); 354 blueScreenElement.setAttribute("value",model.getProperty("vainstall.installer.ui.bluescreen")); 355 root.appendChild(blueScreenElement); 356 } 357 358 if (model.getProperty("vainstall.installer.ui.bluescreen.colour") != null) { 359 Element blueScreenColorElement = doc.createElement("property"); 360 blueScreenColorElement.setAttribute("name","vainstall.installer.ui.bluescreen.colour"); 361 blueScreenColorElement.setAttribute("value",model.getProperty("vainstall.installer.ui.bluescreen.colour")); 362 root.appendChild(blueScreenColorElement); 363 } 364 365 if (model.getProperty("vainstall.installer.ui.mode") != null) { 366 Element uiModeElement = doc.createElement("property"); 367 uiModeElement.setAttribute("name","vainstall.installer.ui.mode"); 368 uiModeElement.setAttribute("value",model.getProperty("vainstall.installer.ui.mode")); 369 root.appendChild(uiModeElement); 370 } 371 372 if (model.getProperty("vainstall.installer.ui.banner") != null) { 373 Element uiBannerElement = doc.createElement("property"); 374 uiBannerElement.setAttribute("name","vainstall.installer.ui.banner"); 375 uiBannerElement.setAttribute("value",model.getProperty("vainstall.installer.ui.banner")); 376 root.appendChild(uiBannerElement); 377 } 378 379 if (model.getProperty("vainstall.installer.link.section.name") != null) { 380 Element sectionNameElement = doc.createElement("property"); 381 sectionNameElement.setAttribute("name","vainstall.installer.link.section.name"); 382 sectionNameElement.setAttribute("value",model.getProperty("vainstall.installer.link.section.name")); 383 root.appendChild(sectionNameElement); 384 } 385 386 if (model.getProperty("vainstall.installer.link.section.icon") != null) { 387 Element sectionIconElement = doc.createElement("property"); 388 sectionIconElement.setAttribute("name","vainstall.installer.link.section.icon"); 389 sectionIconElement.setAttribute("value",model.getProperty("vainstall.installer.link.section.icon")); 390 root.appendChild(sectionIconElement); 391 } 392 393 if (model.getProperty("vainstall.installer.link.entry.name") != null) { 394 Element entryNameElement = doc.createElement("property"); 395 entryNameElement.setAttribute("name","vainstall.installer.link.entry.name"); 396 entryNameElement.setAttribute("value",model.getProperty("vainstall.installer.link.entry.name")); 397 root.appendChild(entryNameElement); 398 } 399 400 if (model.getProperty("vainstall.installer.link.entry.icon") != null) { 401 Element entryIconElement = doc.createElement("property"); 402 entryIconElement.setAttribute("name","vainstall.installer.link.entry.icon"); 403 entryIconElement.setAttribute("value",model.getProperty("vainstall.installer.link.entry.icon")); 404 root.appendChild(entryIconElement); 405 } 406 407 if (model.getProperty("vainstall.installer.default.directory") != null) { 408 Element defaultDirectoryElement = doc.createElement("property"); 409 defaultDirectoryElement.setAttribute("name","vainstall.installer.default.directory"); 410 defaultDirectoryElement.setAttribute("value",model.getProperty("vainstall.installer.default.directory")); 411 root.appendChild(defaultDirectoryElement); 412 } 413 414 415 if (model.getProperty("vainstall.user.dir") != null) { 417 Element uiBannerElement = doc.createElement("property"); 418 uiBannerElement.setAttribute("name","vainstall.user.dir"); 419 uiBannerElement.setAttribute("value",model.getProperty("vainstall.user.dir")); 420 root.appendChild(uiBannerElement); 421 } 422 423 if (model.getProductType() != null) { 425 Element stepsElement = doc.createElement("steps"); 426 stepsElement.setAttribute("type",model.getProductType()); 427 root.appendChild(stepsElement); 428 429 ListIterator iterator = model.getStepsList().listIterator(); 431 while (iterator.hasNext() == true) { 432 String type = (String )iterator.next(); 433 434 Element stepElement = doc.createElement("step"); 435 stepElement.setAttribute("type",type); 436 stepsElement.appendChild(stepElement); 437 } 438 } 439 440 Element targetsElement = doc.createElement("targets"); 442 root.appendChild(targetsElement); 443 444 ListIterator targetIterator = model.getTargetList().listIterator(); 446 while (targetIterator.hasNext() == true) { 447 String type = (String )targetIterator.next(); 448 449 Element targetElement = doc.createElement("target"); 450 targetElement.setAttribute("type",type); 451 if (type.equals("jar") == true) { 452 if (model.getPropertyList().get("vainstall.archiver.target.jar.signer.alias") != null && 453 model.getPropertyList().get("vainstall.archiver.target.jar.signer.passphrase") != null) { 454 targetElement.setAttribute("signeralias",(String )model.getProperty("vainstall.archiver.target.jar.signer.alias")); 455 targetElement.setAttribute("signerpassphrase",(String )model.getProperty("vainstall.archiver.target.jar.signer.passphrase")); 456 } 457 } 458 if (type.equals("jnlp") == true) { 459 if (model.getPropertyList().get("vainstall.archiver.target.jnlp.codebase") != null && 460 model.getPropertyList().get("vainstall.archiver.target.jnlp.homepage") != null && 461 model.getPropertyList().get("vainstall.archiver.target.jnlp.vendor") != null) { 462 targetElement.setAttribute("codebase",(String )model.getProperty("vainstall.archiver.target.jnlp.codebase")); 463 targetElement.setAttribute("homepage",(String )model.getProperty("vainstall.archiver.target.jnlp.homepage")); 464 targetElement.setAttribute("vendor",(String )model.getProperty("vainstall.archiver.target.jnlp.vendor")); 465 } 466 } 467 targetsElement.appendChild(targetElement); 468 } 469 470 ListIterator iterator = model.getLanguageList().listIterator(); 472 while (iterator.hasNext() == true) { 473 String language = (String )iterator.next(); 474 475 Element languageElement = doc.createElement("language"); 476 Node languageNode = doc.createTextNode(language); 477 languageElement.appendChild(languageNode); 478 root.appendChild(languageElement); 479 } 480 481 } 482 483 } 484 | Popular Tags |