1 package org.antmod.descriptor.impl; 2 3 import java.io.File ; 4 import java.io.IOException ; 5 6 import org.antmod.conf.AntmodProperties; 7 import org.antmod.descriptor.DescriptorStore; 8 import org.antmod.descriptor.ReleaseDescriptor; 9 import org.apache.commons.digester.Digester; 10 import org.xml.sax.SAXException ; 11 12 19 public class XmlFileDescriptorStoreImpl implements DescriptorStore { 20 21 private String localdir; 22 23 public XmlFileDescriptorStoreImpl() { 24 this(AntmodProperties.getProperty("antmod.descriptor.xml.localdir")); 25 } 26 27 public XmlFileDescriptorStoreImpl(String localdir) { 28 this.localdir = localdir; 29 } 30 31 32 public ReleaseDescriptor getReleaseDescriptor(String nameAndVersion) { 33 int versionStart = nameAndVersion.lastIndexOf("-"); 34 if (versionStart <= 0) { 35 versionStart = nameAndVersion.lastIndexOf("/"); 36 if (versionStart <= 0) { 37 versionStart = nameAndVersion.lastIndexOf(" "); 38 if (versionStart <= 0) { 39 throw new IllegalArgumentException ("Invalid release descriptor name \"" + nameAndVersion + "\": name and version need to be separated using '-' or '/'!"); 40 } 41 } 42 } 43 String descName = nameAndVersion.substring(0, versionStart); 44 String descVersion = nameAndVersion.substring(versionStart + 1); 45 return getReleaseDescriptor(descName, descVersion); 46 } 47 48 51 public ReleaseDescriptor getReleaseDescriptor(String name, String versionString) { 52 String relativePath = name + "-" + versionString + ".xml"; 53 File xmlFile = new File (this.localdir, relativePath); 54 if (!xmlFile.exists()) { 55 relativePath = name + File.separatorChar + versionString + ".xml"; 57 xmlFile = new File (this.localdir, relativePath); 58 if (!xmlFile.exists()) { 59 return null; 61 } 62 } 63 64 ReleaseDescriptor result = new ReleaseDescriptor(name, versionString); 66 Digester digester = new Digester(); 67 digester.setValidating(false); 68 digester.push(result); 69 70 digester.addObjectCreate("release/javalib", "org.antmod.descriptor.ReleaseDescriptor$JavaLib"); 71 digester.addCallMethod("release/javalib", "setName", 1); 72 digester.addCallParam("release/javalib", 0); 73 digester.addSetNext("release/javalib", "addJavaLib", "org.antmod.descriptor.ReleaseDescriptor$JavaLib"); 74 75 digester.addObjectCreate("release/module", "org.antmod.descriptor.ReleaseDescriptor$Module"); 76 digester.addSetProperties("release/module"); 77 digester.addSetNext("release/module", "addModule", "org.antmod.descriptor.ReleaseDescriptor$Module"); 78 79 digester.addObjectCreate("release/include", "org.antmod.descriptor.ReleaseDescriptor$Include"); 80 digester.addSetProperties("release/include"); 81 digester.addSetNext("release/include", "addInclude", "org.antmod.descriptor.ReleaseDescriptor$Include"); 82 83 digester.addCallMethod("release/properties", "setPropertiesFromText", 0, new Class [] { String .class }); 84 94 95 try { 96 digester.parse(xmlFile); 97 } catch (IOException e) { 98 e.printStackTrace(); 99 } catch (SAXException e) { 100 e.printStackTrace(); 101 } 102 103 result.verify(); 105 106 result.setXmlFile(xmlFile, relativePath); 108 return result; 109 } 110 111 } 112 | Popular Tags |