- Added Attribute-interface to start converge towards
XRAI.
- Added usecases to documentation.
- Added Ara Abrahamson (from XDoclet-team) to
team-members.
- Added link to XDoclet.
_____________________________________________________
Gratis e-mail resten av livet p� www.yahoo.se/mail
Busenkelt!
? commons-attributes.ipr
? commons-attributes.iws
? patchfile.txt
? src/java/org/apache/commons/attributes/Attribute.java
? src/java/org/apache/commons/attributes/impl/DefaultAttribute.java
? xdocs/usecases.xml
Index: project.xml
===================================================================
RCS file: /home/cvspublic/jakarta-commons-sandbox/attributes/project.xml,v
retrieving revision 1.2
diff -u -r1.2 project.xml
--- project.xml 14 Nov 2002 12:50:09 -0000 1.2
+++ project.xml 15 Nov 2002 14:07:22 -0000
@@ -63,7 +63,7 @@
<name>Jon Tirsen</name>
<id>tirsen</id>
<email>[EMAIL PROTECTED]</email>
- <organization></organization>
+ <organization>Lecando AB</organization>
</developer>
<developer>
@@ -71,6 +71,13 @@
<id>jstrachan</id>
<email>[EMAIL PROTECTED]</email>
<organization>SpiritSoft, Inc.</organization>
+ </developer>
+
+ <developer>
+ <name>Ara Abrahamian</name>
+ <id>ara</id>
+ <email>[EMAIL PROTECTED]</email>
+ <organization></organization>
</developer>
</developers>
Index: src/java/org/apache/commons/attributes/AttributeFinder.java
===================================================================
RCS file:
/home/cvspublic/jakarta-commons-sandbox/attributes/src/java/org/apache/commons/attributes/AttributeFinder.java,v
retrieving revision 1.1
diff -u -r1.1 AttributeFinder.java
--- src/java/org/apache/commons/attributes/AttributeFinder.java 14 Nov 2002 08:09:56
-0000 1.1
+++ src/java/org/apache/commons/attributes/AttributeFinder.java 15 Nov 2002 14:07:22
+-0000
@@ -74,9 +74,9 @@
*/
public interface AttributeFinder {
- String getAttribute(Class aClass, String attribute);
+ Attribute getAttribute(Class aClass, String attribute);
- String getAttribute(Method method, String attribute);
+ Attribute getAttribute(Method method, String attribute);
- String getAttribute(Field field, String attribute);
+ Attribute getAttribute(Field field, String attribute);
}
Index: src/java/org/apache/commons/attributes/Attributes.java
===================================================================
RCS file:
/home/cvspublic/jakarta-commons-sandbox/attributes/src/java/org/apache/commons/attributes/Attributes.java,v
retrieving revision 1.1
diff -u -r1.1 Attributes.java
--- src/java/org/apache/commons/attributes/Attributes.java 14 Nov 2002 08:09:56
-0000 1.1
+++ src/java/org/apache/commons/attributes/Attributes.java 15 Nov 2002 14:07:22
+-0000
@@ -114,16 +114,31 @@
Attributes.finder = finder;
}
- public static String getAttribute(Class aClass, String attribute) {
+ public static Attribute getAttribute(Class aClass, String attribute) {
return getAttributeFinder().getAttribute(aClass, attribute);
}
- public static String getAttribute(Method method, String attribute) {
+ public static Attribute getAttribute(Method method, String attribute) {
return getAttributeFinder().getAttribute(method, attribute);
}
- public static String getAttribute(Field field, String attribute) {
+ public static Attribute getAttribute(Field field, String attribute) {
return getAttributeFinder().getAttribute(field, attribute);
+ }
+
+ public static String getString(Class aClass, String attributeName) {
+ Attribute attribute = getAttribute(aClass, attributeName);
+ return attribute == null ? null : attribute.getValue();
+ }
+
+ public static String getString(Method method, String attributeName) {
+ Attribute attribute = getAttribute(method, attributeName);
+ return attribute == null ? null : attribute.getValue();
+ }
+
+ public static String getString(Field field, String attributeName) {
+ Attribute attribute = getAttribute(field, attributeName);
+ return attribute == null ? null : attribute.getValue();
}
public static boolean hasAttribute(Class aClass, String attribute) {
Index: src/java/org/apache/commons/attributes/impl/DefaultAttributeFinder.java
===================================================================
RCS file:
/home/cvspublic/jakarta-commons-sandbox/attributes/src/java/org/apache/commons/attributes/impl/DefaultAttributeFinder.java,v
retrieving revision 1.1
diff -u -r1.1 DefaultAttributeFinder.java
--- src/java/org/apache/commons/attributes/impl/DefaultAttributeFinder.java 14 Nov
2002 08:09:55 -0000 1.1
+++ src/java/org/apache/commons/attributes/impl/DefaultAttributeFinder.java 15 Nov
+2002 14:07:22 -0000
@@ -63,6 +63,7 @@
import org.apache.commons.attributes.AttributesException;
import org.apache.commons.attributes.AttributeFinder;
+import org.apache.commons.attributes.Attribute;
import java.io.IOException;
import java.io.InputStream;
@@ -82,24 +83,25 @@
private static List searchPaths = new ArrayList();
- private Map propertiesCache = new HashMap();
+ private Map attributesCache = new HashMap();
+ public static final char SEPARATOR = '_';
- public String getAttribute(Class aClass, String attribute) {
- return getProperty(aClass, attributeName(aClass, attribute));
+ public Attribute getAttribute(Class aClass, String attribute) {
+ return getAttributeByKey(aClass, attributeName(aClass, attribute));
}
private String attributeName(Class aClass, String attribute) {
- return "class." + attribute;
+ return "class" + SEPARATOR + attribute;
}
- private String getProperty(Class aClass, String key) {
- Properties properties = getProperties(aClass);
- return properties.getProperty(key);
+ private Attribute getAttributeByKey(Class aClass, String key) {
+ Map attributes = getAttributes(aClass);
+ return (Attribute) attributes.get(key);
}
- private Properties getProperties(Class aClass) {
- Properties properties = (Properties) propertiesCache.get(aClass);
- if (properties == null) {
+ private Map getAttributes(Class aClass) {
+ Map attributes = (Map) attributesCache.get(aClass);
+ if (attributes == null) {
InputStream inputStream = null;
try {
String className = aClass.getName();
@@ -127,10 +129,19 @@
}
}
+ Properties properties;
if (inputStream != null) {
- properties = new Properties();
- properties.load(inputStream);
- propertiesCache.put(aClass, properties);
+ properties = new Properties();
+ properties.load(inputStream);
+ attributes = new HashMap();
+ for (Iterator iterator = properties.entrySet().iterator();
+iterator.hasNext();) {
+ Map.Entry entry = (Map.Entry) iterator.next();
+ String property = (String) entry.getKey();
+ String value = (String) entry.getValue();
+ String name = property.substring(property.indexOf(SEPARATOR)
++ 1);
+ attributes.put(property, new DefaultAttribute(name, value));
+ }
+ attributesCache.put(aClass, attributes);
} else {
throw new AttributesException(
"Could not find attributes for " +
aClass);
@@ -147,12 +158,12 @@
}
}
}
- return properties;
+ return attributes;
}
- public String getAttribute(Method method, String attribute) {
+ public Attribute getAttribute(Method method, String attribute) {
String name = attributeName(method, attribute);
- return getProperty(method.getDeclaringClass(), name);
+ return getAttributeByKey(method.getDeclaringClass(), name);
}
private String attributeName(Method method, String attribute) {
@@ -168,20 +179,20 @@
}
}
stringBuffer.append(')');
- stringBuffer.append('.');
+ stringBuffer.append(SEPARATOR);
stringBuffer.append(attribute);
String name = stringBuffer.toString();
return name;
}
- public String getAttribute(Field field, String attribute) {
- return getProperty(
+ public Attribute getAttribute(Field field, String attribute) {
+ return getAttributeByKey(
field.getDeclaringClass(),
attributeName(field, attribute));
}
private String attributeName(Field field, String attribute) {
- return field.getName() + '.' + attribute;
+ return field.getName() + SEPARATOR + attribute;
}
public static void addSearchPath(URL searchPath) {
Index: src/java/org/apache/commons/attributes/task/AttributesCompiler.java
===================================================================
RCS file:
/home/cvspublic/jakarta-commons-sandbox/attributes/src/java/org/apache/commons/attributes/task/AttributesCompiler.java,v
retrieving revision 1.1
diff -u -r1.1 AttributesCompiler.java
--- src/java/org/apache/commons/attributes/task/AttributesCompiler.java 14 Nov 2002
08:09:56 -0000 1.1
+++ src/java/org/apache/commons/attributes/task/AttributesCompiler.java 15 Nov 2002
+14:07:22 -0000
@@ -72,6 +72,7 @@
import org.apache.tools.ant.Task;
import org.apache.tools.ant.BuildException;
+import org.apache.commons.attributes.impl.DefaultAttributeFinder;
/**
* <p><code>AttributesCompiler</code> is an Ant Task which
@@ -178,7 +179,7 @@
Properties properties) {
for (int i = 0; i < tags.length; i++) {
DocletTag tag = tags[i];
- properties.put(prefix + '.' + tag.getName(), tag.getValue());
+ properties.put(prefix + DefaultAttributeFinder.SEPARATOR +
+tag.getName(), tag.getValue());
}
}
Index: src/test/org/apache/commons/attributes/AttributesTest.java
===================================================================
RCS file:
/home/cvspublic/jakarta-commons-sandbox/attributes/src/test/org/apache/commons/attributes/AttributesTest.java,v
retrieving revision 1.1
diff -u -r1.1 AttributesTest.java
--- src/test/org/apache/commons/attributes/AttributesTest.java 14 Nov 2002 08:09:56
-0000 1.1
+++ src/test/org/apache/commons/attributes/AttributesTest.java 15 Nov 2002 14:07:22
+-0000
@@ -130,17 +130,17 @@
assertSame(expectField, actualField);
}
- public String getAttribute(Class aClass, String attribute) {
+ public Attribute getAttribute(Class aClass, String attribute) {
actualClass = aClass;
return null;
}
- public String getAttribute(Method method, String attribute) {
+ public Attribute getAttribute(Method method, String attribute) {
actualMethod = method;
return null;
}
- public String getAttribute(Field field, String attribute) {
+ public Attribute getAttribute(Field field, String attribute) {
actualField = field;
return null;
}
@@ -163,9 +163,9 @@
testAttributesLoader.expectClass(testClass);
testAttributesLoader.expectMethod(testMethod);
testAttributesLoader.expectField(testField);
- Attributes.getAttribute(testClass, "testAttribute");
- Attributes.getAttribute(testMethod, "testAttribute");
- Attributes.getAttribute(testField, "testAttribute");
+ Attributes.getString(testClass, "testAttribute");
+ Attributes.getString(testMethod, "testAttribute");
+ Attributes.getString(testField, "testAttribute");
testAttributesLoader.verify();
} finally {
// clear the pluggability for coming tests
@@ -179,7 +179,7 @@
// maybe this shouldn't actually fail like this in the future
// but that's what happens now so I write a test for it
try {
- Attributes.getAttribute(Object.class, "someAttribute");
+ Attributes.getString(Object.class, "someAttribute");
//fail("didn't fail when asking for the attributes of unsupported class");
} catch (AttributesException shouldHappen) {
}
@@ -194,7 +194,7 @@
assertEquals(
"classValue",
- Attributes.getAttribute(
+ Attributes.getString(
AttributesTestClass.class,
"classAttribute"));
assertTrue(
@@ -207,12 +207,18 @@
"stupidAttribute"));
assertEquals(
"fieldValue",
- Attributes.getAttribute(testField, "fieldAttribute"));
+ Attributes.getString(testField, "fieldAttribute"));
+ assertEquals(
+ "fieldAttribute",
+ Attributes.getAttribute(testField,
+"fieldAttribute").getName());
assertTrue(Attributes.hasAttribute(testField, "fieldAttribute"));
assertFalse(Attributes.hasAttribute(testField, "stupidAttribute"));
assertEquals(
"methodValue",
- Attributes.getAttribute(testMethod, "methodAttribute"));
+ Attributes.getString(testMethod, "methodAttribute"));
+ assertEquals(
+ "methodAttribute",
+ Attributes.getAttribute(testMethod,
+"methodAttribute").getName());
assertTrue(Attributes.hasAttribute(testMethod, "methodAttribute"));
assertFalse(Attributes.hasAttribute(testMethod, "stupidAttribute"));
Method argMethod =
@@ -221,8 +227,11 @@
new Class[] { String.class, String.class });
assertEquals(
"argMethodValue",
- Attributes.getAttribute(argMethod, "methodAttribute"));
- assertTrue(Attributes.hasAttribute(argMethod, "methodAttribute"));
+ Attributes.getString(argMethod, "argMethodAttribute"));
+ assertEquals(
+ "argMethodAttribute",
+ Attributes.getAttribute(argMethod,
+"argMethodAttribute").getName());
+ assertTrue(Attributes.hasAttribute(argMethod, "argMethodAttribute"));
assertFalse(Attributes.hasAttribute(argMethod, "stupidAttribute"));
}
}
Index: src/test/org/apache/commons/attributes/AttributesTestClass.java
===================================================================
RCS file:
/home/cvspublic/jakarta-commons-sandbox/attributes/src/test/org/apache/commons/attributes/AttributesTestClass.java,v
retrieving revision 1.1
diff -u -r1.1 AttributesTestClass.java
--- src/test/org/apache/commons/attributes/AttributesTestClass.java 14 Nov 2002
08:09:56 -0000 1.1
+++ src/test/org/apache/commons/attributes/AttributesTestClass.java 15 Nov 2002
+14:07:22 -0000
@@ -86,7 +86,7 @@
}
/**
- * @methodAttribute argMethodValue
+ * @argMethodAttribute argMethodValue
*/
public void method(String arg, String arg2) {
}
Index: xdocs/navigation.xml
===================================================================
RCS file: /home/cvspublic/jakarta-commons-sandbox/attributes/xdocs/navigation.xml,v
retrieving revision 1.1
diff -u -r1.1 navigation.xml
--- xdocs/navigation.xml 14 Nov 2002 08:10:01 -0000 1.1
+++ xdocs/navigation.xml 15 Nov 2002 14:07:22 -0000
@@ -5,12 +5,14 @@
<body>
<links>
+ <item name="XDoclet" href="http://xdoclet.sourceforge.net/"/>
<item name="Nanning" href="http://nanning.sourceforge.net/"/>
<item name="Maven" href="http://jakarta.apache.org/turbine/maven/"/>
<item name="QDox" href="http://qdox.sourceforge.net/"/>
</links>
<menu name="Commons Attributes">
<item name="Usage" href="/usage.html"/>
+ <item name="Sample Usecases" href="/usecases.html"/>
</menu>
</body>
</project>
Index: xdocs/usage.xml
===================================================================
RCS file: /home/cvspublic/jakarta-commons-sandbox/attributes/xdocs/usage.xml,v
retrieving revision 1.1
diff -u -r1.1 usage.xml
--- xdocs/usage.xml 14 Nov 2002 08:10:00 -0000 1.1
+++ xdocs/usage.xml 15 Nov 2002 14:07:22 -0000
@@ -10,10 +10,26 @@
<section name="Using runtime attributes">
<p>
- This is an example from the unit-tests:
+ Accessing runtime attributes is very simple.
+ </p>
+ <source><![CDATA[
+Field field = AttributesTestClass.class.getDeclaredField("field");
+String fieldAttribute = Attributes.getString(field, "fieldAttribute");
+
+Method method = AttributesTestClass.class.getMethod("method", null);
+String methodAttribute = Attributes.getString(method, "methodAttribute");
+
+Method argMethod = AttributesTestClass.class.getMethod("method", new
+Class[]{String.class});
+String argMethodAttribute = Attributes.getString(argMethod, "methodAttribute");
+ ]]></source>
+ </section>
+ <section name="Using the default implementation">
+ <p>
+ Commons-attributes ships with a default implementation but you can
+also plug in your own. This is
+ how to specify attributes and compile them for the default
+implementation.
</p>
<p>
- The class (with the attributes):
+ You specify your attributes like JavaDoc-tags in the source-code.
+Like this:
</p>
<source><![CDATA[
/**
@@ -42,29 +58,15 @@
}
]]></source>
<p>
- The code that compiles and accesses these attributes:
+ You can use the compiler in Java or as an Ant-task. (TODO: sample of
+ant-task.) An upcoming Maven-plugin
+ will also support this. This shows how to use the compiler in Java.
</p>
<source><![CDATA[
AttributesCompiler attributesCompiler = new AttributesCompiler();
attributesCompiler.setSrc(new File("src" + File.separator + "test"));
attributesCompiler.setDest(targetDir);
attributesCompiler.execute();
-
-assertEquals("classValue", Attributes.getAttribute(AttributesTestClass.class,
"classAttribute"));
-Field field = AttributesTestClass.class.getDeclaredField("field");
-assertEquals("fieldValue", Attributes.getAttribute(field, "fieldAttribute"));
-Method method = AttributesTestClass.class.getMethod("method", null);
-assertEquals("methodValue", Attributes.getAttribute(method, "methodAttribute"));
-Method argMethod = AttributesTestClass.class.getMethod("method", new
Class[]{String.class});
-assertEquals("argMethodValue", Attributes.getAttribute(argMethod, "methodAttribute"));
]]></source>
- <p>
- The attributes-compiler can also be used as an ant-task (or better
yet! inside
- <a
- href="http://jakarta.apache.org/maven">maven</a>). This is left
as an exercise
- for the interested reader (yeah, yeah, I'm lazy...).
- </p>
-
</section>
</body>
--
To unsubscribe, e-mail: <mailto:commons-dev-unsubscribe@;jakarta.apache.org>
For additional commands, e-mail: <mailto:commons-dev-help@;jakarta.apache.org>