tobrien 2003/03/10 13:10:11 Modified: digester project.xml digester/src/java/org/apache/commons/digester/xmlrules DigesterRuleParser.java digester-rules.dtd digester/src/test/org/apache/commons/digester/xmlrules DigesterLoaderTest.java TestObject.java test.xml testrules.xml digester/xdocs index.xml Log: Added patch with tests for bean-property-setter-rule Revision Changes Path 1.10 +7 -0 jakarta-commons/digester/project.xml Index: project.xml =================================================================== RCS file: /home/cvs/jakarta-commons/digester/project.xml,v retrieving revision 1.9 retrieving revision 1.10 diff -u -r1.9 -r1.10 --- project.xml 28 Feb 2003 08:22:51 -0000 1.9 +++ project.xml 10 Mar 2003 21:10:11 -0000 1.10 @@ -50,6 +50,13 @@ <email>[EMAIL PROTECTED]</email> </developer> </developers> + + <contributors> + <contributor> + <name>Bradley M. Handy</name> + <email>[EMAIL PROTECTED]</email> + </contributor> + </contributors> <dependencies> <dependency> 1.11 +25 -0 jakarta-commons/digester/src/java/org/apache/commons/digester/xmlrules/DigesterRuleParser.java Index: DigesterRuleParser.java =================================================================== RCS file: /home/cvs/jakarta-commons/digester/src/java/org/apache/commons/digester/xmlrules/DigesterRuleParser.java,v retrieving revision 1.10 retrieving revision 1.11 diff -u -r1.10 -r1.11 --- DigesterRuleParser.java 2 Feb 2003 15:53:56 -0000 1.10 +++ DigesterRuleParser.java 10 Mar 2003 21:10:11 -0000 1.11 @@ -81,6 +81,7 @@ * * @author David H. Martin - Initial Contribution * @author Scott Sanders - Added ASL, removed external dependencies + * @author Bradley M. Handy - Bean Property Setter Rule addition */ public class DigesterRuleParser extends RuleSetBase { @@ -223,6 +224,10 @@ digester.addRule("*/include", new IncludeRule()); + digester.addFactoryCreate("*/bean-property-setter-rule", new BeanPropertySetterRuleFactory()); + digester.addRule("*/bean-property-setter-rule", new PatternRule("pattern")); + digester.addSetNext("*/bean-property-setter-rule", "add", ruleClassName); + digester.addFactoryCreate("*/call-method-rule", new CallMethodRuleFactory()); digester.addRule("*/call-method-rule", new PatternRule("pattern")); digester.addSetNext("*/call-method-rule", "add", ruleClassName); @@ -488,6 +493,26 @@ // used to create Rule objects and initialize them from SAX attributes. /////////////////////////////////////////////////////////////////////// + /** + * Factory for creating a BeanPropertySetterRule. + */ + private class BeanPropertySetterRuleFactory extends AbstractObjectCreationFactory { + public Object createObject(Attributes attributes) throws Exception { + Rule beanPropertySetterRule = null; + String propertyname = attributes.getValue("propertyname"); + + if (propertyname == null) { + // call the setter method corresponding to the element name. + beanPropertySetterRule = new BeanPropertySetterRule(); + } else { + beanPropertySetterRule = new BeanPropertySetterRule(propertyname); + } + + return beanPropertySetterRule; + } + + } + /** * Factory for creating a CallMethodRule. */ 1.6 +10 -4 jakarta-commons/digester/src/java/org/apache/commons/digester/xmlrules/digester-rules.dtd Index: digester-rules.dtd =================================================================== RCS file: /home/cvs/jakarta-commons/digester/src/java/org/apache/commons/digester/xmlrules/digester-rules.dtd,v retrieving revision 1.5 retrieving revision 1.6 diff -u -r1.5 -r1.6 --- digester-rules.dtd 23 Aug 2002 13:42:56 -0000 1.5 +++ digester-rules.dtd 10 Mar 2003 21:10:11 -0000 1.6 @@ -10,13 +10,13 @@ Digester is a framework for pattern-matching-based parsing of XML into Java objects. See http://jakarta.apache.org/commons/digester.html. --> -<!ENTITY % rule-elements "call-method-rule | call-param-rule | +<!ENTITY % rule-elements "bean-property-setter-rule | call-method-rule | call-param-rule | factory-create-rule | object-create-rule | set-properties-rule | set-property-rule | set-top-rule | set-next-rule" > <!-- digester-rules is the root element. --> -<!ELEMENT digester-rules (pattern | include | call-method-rule | call-param-rule | factory-create-rule | object-create-rule | set-properties-rule | set-property-rule | set-top-rule | set-next-rule )*> +<!ELEMENT digester-rules (pattern | include | bean-property-setter-rule | call-method-rule | call-param-rule | factory-create-rule | object-create-rule | set-properties-rule | set-property-rule | set-top-rule | set-next-rule )*> <!-- <pattern> defines a matching pattern, or part of a matching pattern. Any @@ -34,7 +34,7 @@ Note that the use of pattern elements is optional; an alternative is for each rule element to contain a 'pattern' attribute. --> -<!ELEMENT pattern (pattern | include | call-method-rule | call-param-rule | +<!ELEMENT pattern (pattern | include | bean-property-setter-rule | call-method-rule | call-param-rule | factory-create-rule | object-create-rule | set-properties-rule | set-property-rule | set-top-rule | set-next-rule )*> @@ -65,6 +65,12 @@ is nested inside one or more <pattern> elements, those patterns will be prepended to the pattern specified in the rule's 'pattern' attribute. --> + +<!-- Bean Property Setter Rule --> +<!ELEMENT bean-property-setter-rule EMPTY> +<!ATTLIST bean-property-setter-rule + pattern CDATA #IMPLIED + propertyname CDATA #IMPLIED> <!-- CallMethodRule --> <!ELEMENT call-method-rule EMPTY> 1.10 +2 -1 jakarta-commons/digester/src/test/org/apache/commons/digester/xmlrules/DigesterLoaderTest.java Index: DigesterLoaderTest.java =================================================================== RCS file: /home/cvs/jakarta-commons/digester/src/test/org/apache/commons/digester/xmlrules/DigesterLoaderTest.java,v retrieving revision 1.9 retrieving revision 1.10 diff -u -r1.9 -r1.10 --- DigesterLoaderTest.java 2 Feb 2003 15:52:14 -0000 1.9 +++ DigesterLoaderTest.java 10 Mar 2003 21:10:11 -0000 1.10 @@ -89,7 +89,7 @@ } public static junit.framework.Test suite() { - TestSuite suite = new TestSuite(DigesterLoaderTestSuite.class); + TestSuite suite = new TestSuite(DigesterLoaderTest.class); return suite; } @@ -155,6 +155,7 @@ assertEquals("Wrong number of classes created", 2 , list.size()); assertEquals("Pushed first", true , ((TestObject)list.get(0)).isPushed()); assertEquals("Didn't push second", false , ((TestObject)list.get(1)).isPushed()); + assertTrue("Property was set properly", ((TestObject)list.get(0)).getProperty().equals("I am a property!") ); } 1.8 +11 -0 jakarta-commons/digester/src/test/org/apache/commons/digester/xmlrules/TestObject.java Index: TestObject.java =================================================================== RCS file: /home/cvs/jakarta-commons/digester/src/test/org/apache/commons/digester/xmlrules/TestObject.java,v retrieving revision 1.7 retrieving revision 1.8 diff -u -r1.7 -r1.8 --- TestObject.java 2 Feb 2003 15:49:54 -0000 1.7 +++ TestObject.java 10 Mar 2003 21:10:11 -0000 1.8 @@ -68,6 +68,7 @@ * * @author David H. Martin - Initial Contribution * @author Scott Sanders - Added ASL, removed external dependencies + * @author Tim O'Brien - Added bean property to test bean property setter rule */ public class TestObject { @@ -75,6 +76,8 @@ private String value = ""; private Long longValue = new Long(-1L); + private String property = ""; + private HashMap mapValue = new HashMap(); private boolean pushed = false; @@ -125,5 +128,13 @@ public String getMapValue( String name ) { return (String) this.mapValue.get( name ); + } + + public String getProperty() { + return property; + } + + public void setProperty(String pProperty) { + property = pProperty; } } 1.5 +2 -0 jakarta-commons/digester/src/test/org/apache/commons/digester/xmlrules/test.xml Index: test.xml =================================================================== RCS file: /home/cvs/jakarta-commons/digester/src/test/org/apache/commons/digester/xmlrules/test.xml,v retrieving revision 1.4 retrieving revision 1.5 diff -u -r1.4 -r1.5 --- test.xml 23 Aug 2002 13:42:57 -0000 1.4 +++ test.xml 10 Mar 2003 21:10:11 -0000 1.5 @@ -12,6 +12,7 @@ <mapValue name="test1">foo</mapValue> <mapValue name="test2">bar</mapValue> </call-method-rule-tests> + <property>I am a property!</property> </foo> <baz value="baz2"/> <foo value="foo3"> @@ -19,5 +20,6 @@ <baz value="baz3"/> <foo value="foo4"/> </bar> + <property>I am a property!</property> </foo> </root> 1.5 +1 -0 jakarta-commons/digester/src/test/org/apache/commons/digester/xmlrules/testrules.xml Index: testrules.xml =================================================================== RCS file: /home/cvs/jakarta-commons/digester/src/test/org/apache/commons/digester/xmlrules/testrules.xml,v retrieving revision 1.4 retrieving revision 1.5 diff -u -r1.4 -r1.5 --- testrules.xml 23 Aug 2002 13:42:57 -0000 1.4 +++ testrules.xml 10 Mar 2003 21:10:11 -0000 1.5 @@ -15,5 +15,6 @@ <call-param-rule pattern="mapValue" attrname="name" paramnumber="0" /> <call-param-rule pattern="mapValue" paramnumber="1"/> </pattern> + <bean-property-setter-rule pattern="property" name="property"/> </pattern> </digester-rules> 1.3 +4 -1 jakarta-commons/digester/xdocs/index.xml Index: index.xml =================================================================== RCS file: /home/cvs/jakarta-commons/digester/xdocs/index.xml,v retrieving revision 1.2 retrieving revision 1.3 diff -u -r1.2 -r1.3 --- index.xml 26 Feb 2003 20:39:32 -0000 1.2 +++ index.xml 10 Mar 2003 21:10:11 -0000 1.3 @@ -52,10 +52,13 @@ <section name="Releases"> <ul> + <li>Version 1.4.1 (from mirror) + <a href="http://jakarta.apache.org/site/binindex.cgi">binary</a> + <a href="http://jakarta.apache.org/site/sourceindex.cgi">source</a> (latest)</li> <li>Version 1.4 (from mirror) <a href="http://jakarta.apache.org/site/binindex.cgi">binary</a> <a href="http://jakarta.apache.org/site/sourceindex.cgi">source</a> - (latest)</li> + </li> <li><a href="http://jakarta.apache.org/builds/jakarta-commons/release/commons-digester/v1.3/">Version 1.3</a></li> <li><a href="http://jakarta.apache.org/builds/jakarta-commons/release/commons-digester/v1.2/">Version 1.2</a></li> <li><a href="http://jakarta.apache.org/builds/jakarta-commons/release/commons-digester/v1.1.1/">Version 1.1.1</a></li>
--------------------------------------------------------------------- To unsubscribe, e-mail: [EMAIL PROTECTED] For additional commands, e-mail: [EMAIL PROTECTED]