KickJava   Java API By Example, From Geeks To Geeks.

Java > Open Source Codes > org > antmod > descriptor > impl > XmlFileDescriptorStoreImpl


1 package org.antmod.descriptor.impl;
2
3 import java.io.File JavaDoc;
4 import java.io.IOException JavaDoc;
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 JavaDoc;
11
12 /**
13  * Descriptor store implementation utilizing xml files.
14  *
15  * TODO: make cvs checkout of xml descriptors part of the descriptor store as well, so it becomes truly pluggable
16  *
17  * @author Klaas Waslander
18  */

19 public class XmlFileDescriptorStoreImpl implements DescriptorStore {
20     /** directory where XML files are stored locally */
21     private String JavaDoc localdir;
22     
23     public XmlFileDescriptorStoreImpl() {
24         this(AntmodProperties.getProperty("antmod.descriptor.xml.localdir"));
25     }
26
27     public XmlFileDescriptorStoreImpl(String JavaDoc localdir) {
28         this.localdir = localdir;
29     }
30
31
32     public ReleaseDescriptor getReleaseDescriptor(String JavaDoc 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 JavaDoc("Invalid release descriptor name \"" + nameAndVersion + "\": name and version need to be separated using '-' or '/'!");
40                 }
41             }
42         }
43         String JavaDoc descName = nameAndVersion.substring(0, versionStart);
44         String JavaDoc descVersion = nameAndVersion.substring(versionStart + 1);
45         return getReleaseDescriptor(descName, descVersion);
46     }
47
48     /**
49      * Reads the release descriptor from the appropriate directory locally.
50      */

51     public ReleaseDescriptor getReleaseDescriptor(String JavaDoc name, String JavaDoc versionString) {
52         String JavaDoc relativePath = name + "-" + versionString + ".xml";
53         File JavaDoc xmlFile = new File JavaDoc(this.localdir, relativePath);
54         if (!xmlFile.exists()) {
55             // try subdirectory...
56
relativePath = name + File.separatorChar + versionString + ".xml";
57             xmlFile = new File JavaDoc(this.localdir, relativePath);
58             if (!xmlFile.exists()) {
59                 //throw new IllegalArgumentException("Xml file descriptor \"" + xmlFile.getPath() + "\" does not exist");
60
return null;
61             }
62         }
63
64         // digest the xml file and create the "ReleaseDescriptor" object
65
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 JavaDoc[] { String JavaDoc.class });
84         //digester.addCallMethod("release/properties/*", "setPropertiesFromXml", 0, new Class[] { String.class });
85
/*
86         try {
87             digester.addRule("release/properties", new NodeCreateRule());
88             digester.addSetNext("release/properties", "setProperties", "org.w3c.dom.Element");
89         }
90         catch (ParserConfigurationException e1) {
91             e1.printStackTrace();
92         }
93         */

94
95         try {
96             digester.parse(xmlFile);
97         } catch (IOException JavaDoc e) {
98             e.printStackTrace();
99         } catch (SAXException JavaDoc e) {
100             e.printStackTrace();
101         }
102         
103         // verify the correctness
104
result.verify();
105
106         // if verified to be okay, return it
107
result.setXmlFile(xmlFile, relativePath);
108         return result;
109     }
110
111 }
112
Popular Tags