mschachter 01/06/21 18:30:51
Modified: resources build.xml
resources/src/java/org/apache/commons/resources
ConfigurationReader.java FileResource.java
LocalStrings.properties
MessageResourcesFactory.java ResourceManager.java
Added: resources/src/java/org/apache/commons/resources
FileResourceFactory.java
Log:
- add FileResourceFactory
- Made ConfigurationReader use Digester
- Updated build.xml to use digester package
- and whatnot
Revision Changes Path
1.2 +9 -2 jakarta-commons-sandbox/resources/build.xml
Index: build.xml
===================================================================
RCS file: /home/cvs/jakarta-commons-sandbox/resources/build.xml,v
retrieving revision 1.1
retrieving revision 1.2
diff -u -r1.1 -r1.2
--- build.xml 2001/05/30 16:45:37 1.1
+++ build.xml 2001/06/22 01:30:47 1.2
@@ -3,7 +3,7 @@
<!--
"Resource Facilities" component of the Jakarta Commons Subproject
- $Id: build.xml,v 1.1 2001/05/30 16:45:37 craigmcc Exp $
+ $Id: build.xml,v 1.2 2001/06/22 01:30:47 mschachter Exp $
-->
@@ -20,12 +20,15 @@
<!-- The home directory for the Commons collection classes distribution -->
<property name="commons-collections.home" value="../collections/dist"/>
+
+ <!-- The home directory for the Digester package -->
+ <property name="commons-digester.home" value="../digester/dist" />
<!-- The directory containing your binary distribution of JUnit,
version 3.2 or later -->
<property name="junit.home" value="/usr/local/junit3.5"/>
+
-
<!-- ========== Derived Values ============================================ -->
@@ -34,6 +37,9 @@
<!-- The pathname of the "junit.jar" JAR file -->
<property name="junit.jar" value="${junit.home}/junit.jar"/>
+
+ <!-- The pathname of the "digester.jar" JAR file -->
+ <property name="commons-digester.jar"
value="${commons-digester.home}/commons-digester.jar" />
<!-- ========== Component Declarations ==================================== -->
@@ -83,6 +89,7 @@
<path id="compile.classpath">
<pathelement location="${build.home}/classes"/>
<pathelement location="${commons-collections.jar}"/>
+ <pathelement location="${commons-digester.jar}"/>
</path>
1.2 +89 -2
jakarta-commons-sandbox/resources/src/java/org/apache/commons/resources/ConfigurationReader.java
Index: ConfigurationReader.java
===================================================================
RCS file:
/home/cvs/jakarta-commons-sandbox/resources/src/java/org/apache/commons/resources/ConfigurationReader.java,v
retrieving revision 1.1
retrieving revision 1.2
diff -u -r1.1 -r1.2
--- ConfigurationReader.java 2001/06/20 21:16:17 1.1
+++ ConfigurationReader.java 2001/06/22 01:30:48 1.2
@@ -6,6 +6,12 @@
import java.util.Map;
import java.util.Collection;
+import org.xml.sax.Attributes;
+import org.xml.sax.SAXException;
+
+import org.apache.commons.digester.Rule;
+import org.apache.commons.digester.Digester;
+
/**
* This class is responsible for reading configuration data for the resouces
* and exposing methods that the ResourceManager uses to get data from
@@ -14,6 +20,13 @@
public class ConfigurationReader {
/**
+ * The message resources for this class
+ */
+ protected static MessageResources messageResources =
+ MessageResourcesFactory.createFactory().createResources(
+ "org.apache.commons.resources.LocalStrings");
+
+ /**
* The Map that represents the resources, where the key is the name of the
* resource and the value is the uninitialized Resource object
*/
@@ -37,7 +50,81 @@
/**
* Read the URL "config" and populate the internal resource Map with data
*/
- public void read(InputStream inputStream) throws IOException {
- ;
+ public void read(InputStream inputStream) throws ResourceException, IOException
{
+ Digester digester = new Digester();
+ digester.addRule("resources-config/resources/resource",
+ new AddResourceRule(digester, this));
+ digester.addSetProperty("resources-config/resources/resource/set-property",
+ "name", "value");
+ try {
+ digester.parse(inputStream);
+ }
+ catch (SAXException sax) {
+ throw new ResourceException(
+ messageResources.getMessage("resources.config.sax"), sax);
+ }
+ }
+}
+
+/**
+ * This subclass of Rule creates a resource from a resource tag and
+ * pushes it to the top of the stack, then after the resource is populated
+ * with properties, pops the resource back out and puts it into the
+ * ConfigurationReader's resource Map
+ */
+class AddResourceRule extends Rule {
+
+ protected ConfigurationReader reader;
+
+ public AddResourceRule(Digester digester, ConfigurationReader reader) {
+ super(digester);
+ this.reader = reader;
+ }
+
+ public void begin(Attributes attributes) throws ResourceException {
+
+ //create instance of resource from factory instance
+ String factoryClass = attributes.getValue("", "factory");
+ String config = attributes.getValue("", "config");
+ Resource resource = null;
+ try {
+ ResourceFactory factory;
+ Class cFactory = Class.forName(factoryClass);
+ if (cFactory.isAssignableFrom(ResourceFactory.class)) {
+ factory = (ResourceFactory) cFactory.newInstance();
+ resource = factory.createResource(config);
+ }
+ else {
+ throw new ResourceException(
+ ConfigurationReader.messageResources.getMessage(
+ "resource.config.invalidfactory",
+ cFactory.getClass().getName()));
+ }
+ }
+ catch (ClassNotFoundException cnfe) {
+ throw new ResourceException(
+ ConfigurationReader.messageResources.getMessage(
+ "resources.config.classnotfound",
+ factoryClass), cnfe);
+ }
+ catch (IllegalAccessException iae) {
+ throw new ResourceException(
+ ConfigurationReader.messageResources.getMessage(
+ "resources.config.illegalaccess",
+ factoryClass), iae);
+ }
+ catch (InstantiationException ie) {
+ throw new ResourceException(
+ ConfigurationReader.messageResources.getMessage(
+ "resources.config.instantiation",
+ factoryClass), ie);
+ }
+ //push to top of digester stack for property population
+ digester.push(resource);
+ }
+
+ public void end() {
+ Resource resource = (Resource) digester.pop();
+ reader.getResourceMap().put(resource.getName(), resource);
}
}
1.3 +4 -20
jakarta-commons-sandbox/resources/src/java/org/apache/commons/resources/FileResource.java
Index: FileResource.java
===================================================================
RCS file:
/home/cvs/jakarta-commons-sandbox/resources/src/java/org/apache/commons/resources/FileResource.java,v
retrieving revision 1.2
retrieving revision 1.3
diff -u -r1.2 -r1.3
--- FileResource.java 2001/06/20 21:16:17 1.2
+++ FileResource.java 2001/06/22 01:30:48 1.3
@@ -40,22 +40,6 @@
*/
protected String baseDir = "";
- /**
- * Get the name of this resource
- * @return A logical String representation of the name of this resource
- */
- public String getName() {
- return name;
- }
-
- /**
- * Set the name of this resource
- * @param name The name of this resource
- */
- public void setName(String name) {
- this.name = name;
- }
-
/**
* Sets the base directory of this resource.
*/
@@ -95,7 +79,7 @@
}
catch (IOException ioe) {
throw new ResourceException(
- messageResources.getMessage("resource.file.ioexception",
+ messageResources.getMessage("resources.file.ioexception",
file.getAbsolutePath()), ioe);
}
return data;
@@ -123,18 +107,18 @@
}
catch (FileNotFoundException fnfe) {
throw new ResourceException(
- messageResources.getMessage("resource.file.filenotfound",
+ messageResources.getMessage("resources.file.filenotfound",
file.getAbsolutePath()), fnfe);
}
catch (IOException ioe) {
throw new ResourceException(
- messageResources.getMessage("resource.file.ioexception",
+ messageResources.getMessage("resources.file.ioexception",
file.getAbsolutePath()), ioe);
}
}
else {
throw new ResourceException(
- messageResources.getMessage("resource.file.filenotfound",
+ messageResources.getMessage("resources.file.filenotfound",
file.getAbsolutePath()));
}
return stream;
1.2 +8 -3
jakarta-commons-sandbox/resources/src/java/org/apache/commons/resources/LocalStrings.properties
Index: LocalStrings.properties
===================================================================
RCS file:
/home/cvs/jakarta-commons-sandbox/resources/src/java/org/apache/commons/resources/LocalStrings.properties,v
retrieving revision 1.1
retrieving revision 1.2
diff -u -r1.1 -r1.2
--- LocalStrings.properties 2001/06/20 21:16:18 1.1
+++ LocalStrings.properties 2001/06/22 01:30:48 1.2
@@ -1,3 +1,8 @@
-resource.file.ioexception=[FileResource] problem opening file {0}
-resource.file.filenotfound=[FileResource] file {0} not found
-resource.manager.ioexception=[ResourceManager] IOException
+resources.file.ioexception=[FileResource] problem opening file {0}
+resources.file.filenotfound=[FileResource] file {0} not found
+resources.manager.ioexception=[ResourceManager] IOException
+resources.config.invalidfactory=[ConfigurationReader] factory class is not of type
org.apache.commons.resources.ResourceFactory, but type {1}
+resources.config.classnotfound=[ConfigurationReader] class {0} not found
+resources.config.instantiation=InstantiationException for class {0}
+resources.config.sax=[ConfigurationReader]SAXException while parsing configuration
+resources.config.illegalaccess=[ConfigurationReader] IllegalAccessException
1.2 +14 -5
jakarta-commons-sandbox/resources/src/java/org/apache/commons/resources/MessageResourcesFactory.java
Index: MessageResourcesFactory.java
===================================================================
RCS file:
/home/cvs/jakarta-commons-sandbox/resources/src/java/org/apache/commons/resources/MessageResourcesFactory.java,v
retrieving revision 1.1
retrieving revision 1.2
diff -u -r1.1 -r1.2
--- MessageResourcesFactory.java 2001/05/30 16:45:49 1.1
+++ MessageResourcesFactory.java 2001/06/22 01:30:49 1.2
@@ -1,7 +1,7 @@
/*
- * $Header:
/home/cvs/jakarta-commons-sandbox/resources/src/java/org/apache/commons/resources/MessageResourcesFactory.java,v
1.1 2001/05/30 16:45:49 craigmcc Exp $
- * $Revision: 1.1 $
- * $Date: 2001/05/30 16:45:49 $
+ * $Header:
/home/cvs/jakarta-commons-sandbox/resources/src/java/org/apache/commons/resources/MessageResourcesFactory.java,v
1.2 2001/06/22 01:30:49 mschachter Exp $
+ * $Revision: 1.2 $
+ * $Date: 2001/06/22 01:30:49 $
*
* ====================================================================
*
@@ -81,10 +81,12 @@
* </ul>
*
* @author Craig R. McClanahan
- * @version $Revision: 1.1 $ $Date: 2001/05/30 16:45:49 $
+ * @version $Revision: 1.2 $ $Date: 2001/06/22 01:30:49 $
*/
-public abstract class MessageResourcesFactory implements Serializable {
+public abstract class MessageResourcesFactory
+ extends ResourceFactory
+ implements Serializable {
// ---------------------------------------------------- Instance Properties
@@ -115,6 +117,13 @@
* @param config Configuration parameter(s) for the requested bundle
*/
public abstract MessageResources createResources(String config);
+
+ /**
+ * Implementation of ResourceFactory method
+ */
+ public Resource createResource(String config) {
+ return createResources(config);
+ }
// ------------------------------------------------------ Static Properties
1.2 +1 -1
jakarta-commons-sandbox/resources/src/java/org/apache/commons/resources/ResourceManager.java
Index: ResourceManager.java
===================================================================
RCS file:
/home/cvs/jakarta-commons-sandbox/resources/src/java/org/apache/commons/resources/ResourceManager.java,v
retrieving revision 1.1
retrieving revision 1.2
diff -u -r1.1 -r1.2
--- ResourceManager.java 2001/06/20 21:16:18 1.1
+++ ResourceManager.java 2001/06/22 01:30:49 1.2
@@ -46,7 +46,7 @@
}
catch (IOException ioe) {
throw new ResourceException(
- messageResources.getMessage("resource.manager.ioexception", ioe));
+ messageResources.getMessage("resources.manager.ioexception", ioe));
}
resources = configReader.getResourceMap();
initResources();
1.1
jakarta-commons-sandbox/resources/src/java/org/apache/commons/resources/FileResourceFactory.java
Index: FileResourceFactory.java
===================================================================
package org.apache.commons.resources;
/**
* This is a Subclass of ResourceFactory that defines a method for
* creating FileResource objects
*/
public class FileResourceFactory extends ResourceFactory {
public Resource createResource(String config) {
return null;
}
}