- 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>