jstrachan 02/05/28 06:38:27
Modified: betwixt/src/test/org/apache/commons/betwixt
TestMavenProject.java
betwixt build.xml .cvsignore
betwixt/src/java/org/apache/commons/betwixt
XMLIntrospector.java
betwixt/src/java/org/apache/commons/betwixt/digester
AddDefaultsRule.java RuleSupport.java
XMLIntrospectorHelper.java
Added: betwixt/src/java/org/apache/commons/betwixt/strategy
package.html DefaultPluralStemmer.java
PluralStemmer.java
Log:
Added support for a pluggable Strategy for matching plural properties with singular
adder methods.
The default implementation seems to work for Maven's immediate requirements (or at
least I've not found a case where it doesn't work ;-).
It should be easy to plugin more comprehensive / complex strategies later on.
Right now betwixt is close to being able to round trip Maven's Project object model;
just need configurable extra wrapping elements around collections for Turbine/Maven
style XML documents.
Revision Changes Path
1.2 +21 -0
jakarta-commons-sandbox/betwixt/src/test/org/apache/commons/betwixt/TestMavenProject.java
Index: TestMavenProject.java
===================================================================
RCS file:
/home/cvs/jakarta-commons-sandbox/betwixt/src/test/org/apache/commons/betwixt/TestMavenProject.java,v
retrieving revision 1.1
retrieving revision 1.2
diff -u -r1.1 -r1.2
--- TestMavenProject.java 28 May 2002 11:49:29 -0000 1.1
+++ TestMavenProject.java 28 May 2002 13:38:26 -0000 1.2
@@ -68,6 +68,7 @@
import java.io.StringWriter;
import java.io.Writer;
import java.net.URL;
+import java.util.List;
import junit.framework.Test;
import junit.framework.TestCase;
@@ -77,6 +78,8 @@
import org.apache.commons.betwixt.io.BeanReader;
import org.apache.commons.betwixt.io.BeanWriter;
+import org.apache.maven.project.Dependency;
+import org.apache.maven.project.Developer;
import org.apache.maven.project.Project;
import org.apache.commons.logging.Log;
@@ -112,6 +115,9 @@
// create a BeanReader
BeanReader reader = new BeanReader();
+ // set elements for attributes to true
+ reader.getXMLIntrospector().setAttributesForPrimitives(false);
+
// #### remove the need to name the element, via a lower-case-naming
strategy
reader.registerBeanClass( "project", Project.class );
@@ -123,6 +129,21 @@
assertEquals( "commons-betwixt", project.getId() );
assertEquals( "org.apache.commons.betwixt", project.getPackage() );
assertEquals( "jakarta.apache.org", project.getSiteAddress() );
+
+ List developers = project.getDevelopers();
+ assertTrue( "Found at least one developer", developers.size() > 0 );
+
+ Developer developer = (Developer) developers.get(0);
+ assertEquals( "James Strachan", developer.getName() );
+ assertEquals( "[EMAIL PROTECTED]", developer.getEmail() );
+
+ List dependencies = project.getDependencies();
+ assertTrue( "Found at least one dependency", dependencies.size() > 0 );
+
+ Dependency dependency = (Dependency) dependencies.get(0);
+ assertEquals( "commons-logging", dependency.getName() );
+ assertEquals( "required", dependency.getType() );
+
}
/*
1.1
jakarta-commons-sandbox/betwixt/src/java/org/apache/commons/betwixt/strategy/package.html
Index: package.html
===================================================================
<html>
<head>
</head>
<body>
<p>This package contains a variety of plugin Strategy patterns that can be used to
customize the
default behaviour.of the XMLIntrospector
</p>
</body>
</html>
1.1
jakarta-commons-sandbox/betwixt/src/java/org/apache/commons/betwixt/strategy/DefaultPluralStemmer.java
Index: DefaultPluralStemmer.java
===================================================================
/*
* $Header:
/home/cvs/jakarta-commons-sandbox/betwixt/src/java/org/apache/commons/betwixt/NodeDescriptor.java,v
1.8 2002/05/17 15:24:09 jstrachan Exp $
* $Revision: 1.8 $
* $Date: 2002/05/17 15:24:09 $
*
* ====================================================================
*
* The Apache Software License, Version 1.1
*
* Copyright (c) 1999-2002 The Apache Software Foundation. All rights
* reserved.
*
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions
* are met:
*
* 1. Redistributions of source code must retain the above copyright
* notice, this list of conditions and the following disclaimer.
*
* 2. Redistributions in binary form must reproduce the above copyright
* notice, this list of conditions and the following disclaimer in
* the documentation and/or other materials provided with the
* distribution.
*
* 3. The end-user documentation included with the redistribution, if
* any, must include the following acknowlegement:
* "This product includes software developed by the
* Apache Software Foundation (http://www.apache.org/)."
* Alternately, this acknowlegement may appear in the software itself,
* if and wherever such third-party acknowlegements normally appear.
*
* 4. The names "The Jakarta Project", "Commons", and "Apache Software
* Foundation" must not be used to endorse or promote products derived
* from this software without prior written permission. For written
* permission, please contact [EMAIL PROTECTED]
*
* 5. Products derived from this software may not be called "Apache"
* nor may "Apache" appear in their names without prior written
* permission of the Apache Group.
*
* THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
* WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
* OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
* DISCLAIMED. IN NO EVENT SHALL THE APACHE SOFTWARE FOUNDATION OR
* ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
* SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
* LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
* USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
* ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
* OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
* OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
* SUCH DAMAGE.
* ====================================================================
*
* This software consists of voluntary contributions made by many
* individuals on behalf of the Apache Software Foundation. For more
* information on the Apache Software Foundation, please see
* <http://www.apache.org/>.
*
* $Id: NodeDescriptor.java,v 1.8 2002/05/17 15:24:09 jstrachan Exp $
*/
package org.apache.commons.betwixt.strategy;
/**
* A default implementation of the plural name stemmer which
* uses a simple starts-with algorithm and then tests for some common
* english plural/singular patterns.
*
* @author <a href="mailto:[EMAIL PROTECTED]">James Strachan</a>
* @version $Revision: 1.8 $
*/
public class DefaultPluralStemmer implements PluralStemmer {
/**
* @return true if the given plural name matches the singular name
*/
public boolean isPluralNameFor(String pluralName, String singularName) {
if ( pluralName.startsWith( singularName ) ) {
return true;
}
// test for common english singlular/plural endings
if ( pluralName.endsWith( "ies" ) && singularName.endsWith( "y" ) ) {
String pluralStart = pluralName.substring(0, pluralName.length() - 3 );
String singularStart = singularName.substring(0, singularName.length() -
1 );
if ( pluralStart.equals( singularStart ) ) {
return true;
}
}
// None of the tests detected a plural
return false;
}
}
1.1
jakarta-commons-sandbox/betwixt/src/java/org/apache/commons/betwixt/strategy/PluralStemmer.java
Index: PluralStemmer.java
===================================================================
/*
* $Header:
/home/cvs/jakarta-commons-sandbox/betwixt/src/java/org/apache/commons/betwixt/NodeDescriptor.java,v
1.8 2002/05/17 15:24:09 jstrachan Exp $
* $Revision: 1.8 $
* $Date: 2002/05/17 15:24:09 $
*
* ====================================================================
*
* The Apache Software License, Version 1.1
*
* Copyright (c) 1999-2002 The Apache Software Foundation. All rights
* reserved.
*
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions
* are met:
*
* 1. Redistributions of source code must retain the above copyright
* notice, this list of conditions and the following disclaimer.
*
* 2. Redistributions in binary form must reproduce the above copyright
* notice, this list of conditions and the following disclaimer in
* the documentation and/or other materials provided with the
* distribution.
*
* 3. The end-user documentation included with the redistribution, if
* any, must include the following acknowlegement:
* "This product includes software developed by the
* Apache Software Foundation (http://www.apache.org/)."
* Alternately, this acknowlegement may appear in the software itself,
* if and wherever such third-party acknowlegements normally appear.
*
* 4. The names "The Jakarta Project", "Commons", and "Apache Software
* Foundation" must not be used to endorse or promote products derived
* from this software without prior written permission. For written
* permission, please contact [EMAIL PROTECTED]
*
* 5. Products derived from this software may not be called "Apache"
* nor may "Apache" appear in their names without prior written
* permission of the Apache Group.
*
* THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
* WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
* OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
* DISCLAIMED. IN NO EVENT SHALL THE APACHE SOFTWARE FOUNDATION OR
* ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
* SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
* LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
* USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
* ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
* OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
* OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
* SUCH DAMAGE.
* ====================================================================
*
* This software consists of voluntary contributions made by many
* individuals on behalf of the Apache Software Foundation. For more
* information on the Apache Software Foundation, please see
* <http://www.apache.org/>.
*
* $Id: NodeDescriptor.java,v 1.8 2002/05/17 15:24:09 jstrachan Exp $
*/
package org.apache.commons.betwixt.strategy;
/**
* A plugin Strategy pattern for detecting matching singular and plural
* names on bean properties. When composite properties (such as properties
* of type Collection, List, Iterator, Enumeration) are used we need to
* match the adder-method, which typically uses a singular name.
* This interface allows a variety of different implementations to be used.
*
* @author <a href="mailto:[EMAIL PROTECTED]">James Strachan</a>
* @version $Revision: 1.8 $
*/
public interface PluralStemmer {
/**
* @return true if the given plural name matches the singular name
*/
boolean isPluralNameFor(String pluralName, String singularName);
}
1.18 +4 -4 jakarta-commons-sandbox/betwixt/build.xml
Index: build.xml
===================================================================
RCS file: /home/cvs/jakarta-commons-sandbox/betwixt/build.xml,v
retrieving revision 1.17
retrieving revision 1.18
diff -u -r1.17 -r1.18
--- build.xml 28 May 2002 11:49:29 -0000 1.17
+++ build.xml 28 May 2002 13:38:26 -0000 1.18
@@ -1,6 +1,6 @@
<?xml version="1.0"?>
-<!-- $Id: build.xml,v 1.17 2002/05/28 11:49:29 jstrachan Exp $ -->
+<!-- $Id: build.xml,v 1.18 2002/05/28 13:38:26 jstrachan Exp $ -->
<project name="betwixt" default="maven:jar" basedir=".">
@@ -247,14 +247,14 @@
</target>
<target name="test.maven"
- description="Runs the RSS round trip unit tests">
+ description="Runs the Maven unit test">
<property name="maven.testcase"
value="org.apache.commons.betwixt.TestMavenProject"/>
<maven-ant antfile="${maven.home}/plugins/test/build.xml"
target="run-singletest"/>
</target>
- <target name="test.maven2" depends="compile.tests"
- description="Runs the RSS round trip unit tests">
+ <target name="test.maven.debug" depends="compile.tests"
+ description="Runs the Maven unit test, with debugging on">
<java classname="org.apache.commons.betwixt.TestMavenProject" fork="yes">
<classpath refid="test.classpath"/>
<sysproperty key="org.apache.commons.logging.simplelog.defaultlog"
value="debug"/>
1.3 +1 -0 jakarta-commons-sandbox/betwixt/.cvsignore
Index: .cvsignore
===================================================================
RCS file: /home/cvs/jakarta-commons-sandbox/betwixt/.cvsignore,v
retrieving revision 1.2
retrieving revision 1.3
diff -u -r1.2 -r1.3
--- .cvsignore 22 May 2002 18:13:40 -0000 1.2
+++ .cvsignore 28 May 2002 13:38:26 -0000 1.3
@@ -4,3 +4,4 @@
velocity.log
.project
+foo.txt
1.23 +47 -9
jakarta-commons-sandbox/betwixt/src/java/org/apache/commons/betwixt/XMLIntrospector.java
Index: XMLIntrospector.java
===================================================================
RCS file:
/home/cvs/jakarta-commons-sandbox/betwixt/src/java/org/apache/commons/betwixt/XMLIntrospector.java,v
retrieving revision 1.22
retrieving revision 1.23
diff -u -r1.22 -r1.23
--- XMLIntrospector.java 17 May 2002 15:24:09 -0000 1.22
+++ XMLIntrospector.java 28 May 2002 13:38:26 -0000 1.23
@@ -1,7 +1,7 @@
/*
- * $Header:
/home/cvs/jakarta-commons-sandbox/betwixt/src/java/org/apache/commons/betwixt/XMLIntrospector.java,v
1.22 2002/05/17 15:24:09 jstrachan Exp $
- * $Revision: 1.22 $
- * $Date: 2002/05/17 15:24:09 $
+ * $Header:
/home/cvs/jakarta-commons-sandbox/betwixt/src/java/org/apache/commons/betwixt/XMLIntrospector.java,v
1.23 2002/05/28 13:38:26 jstrachan Exp $
+ * $Revision: 1.23 $
+ * $Date: 2002/05/28 13:38:26 $
*
* ====================================================================
*
@@ -57,7 +57,7 @@
* information on the Apache Software Foundation, please see
* <http://www.apache.org/>.
*
- * $Id: XMLIntrospector.java,v 1.22 2002/05/17 15:24:09 jstrachan Exp $
+ * $Id: XMLIntrospector.java,v 1.23 2002/05/28 13:38:26 jstrachan Exp $
*/
package org.apache.commons.betwixt;
@@ -91,6 +91,8 @@
import org.apache.commons.betwixt.expression.StringExpression;
import org.apache.commons.betwixt.digester.XMLBeanInfoDigester;
import org.apache.commons.betwixt.digester.XMLIntrospectorHelper;
+import org.apache.commons.betwixt.strategy.DefaultPluralStemmer;
+import org.apache.commons.betwixt.strategy.PluralStemmer;
/** <p><code>XMLIntrospector</code> an introspector of beans to create a
XMLBeanInfo instance.</p>
*
@@ -100,20 +102,28 @@
* Later requests for the same class will return the cached value.</p>
*
* @author <a href="mailto:[EMAIL PROTECTED]">James Strachan</a>
- * @version $Revision: 1.22 $
+ * @version $Revision: 1.23 $
*/
public class XMLIntrospector {
+ /** Log used for logging (Doh!) */
+ protected Log log = LogFactory.getLog( XMLIntrospector.class );
+
/** should attributes or elements be used for primitive types */
private boolean attributesForPrimitives = false;
- /** Log used for logging (Doh!) */
- protected Log log = LogFactory.getLog( XMLIntrospector.class );
+
/** Maps classes to <code>XMLBeanInfo</code>'s */
protected HashMap cacheXMLBeanInfos = new HashMap();
+
/** Is <code>XMLBeanInfo</code> caching enabled? */
boolean cachingEnabled = true;
+
/** Digester used to parse the XML descriptor files */
private XMLBeanInfoDigester digester;
+
+ /** The strategy used to detect matching singular and plural properties */
+ private PluralStemmer pluralStemmer;
+
/** Base constructor */
public XMLIntrospector() {
}
@@ -261,10 +271,14 @@
answer.setElementDescriptor( elementDescriptor );
// default any addProperty() methods
- XMLIntrospectorHelper.defaultAddMethods( elementDescriptor, beanClass );
+ XMLIntrospectorHelper.defaultAddMethods( this, elementDescriptor, beanClass
);
return answer;
}
+
+
+ // Properties
+ //-------------------------------------------------------------------------
/** Should attributes (or elements) be used for primitive types.
*/
@@ -277,9 +291,33 @@
this.attributesForPrimitives = attributesForPrimitives;
}
+ /**
+ * @return the strategy used to detect matching singular and plural properties
+ */
+ public PluralStemmer getPluralStemmer() {
+ if ( pluralStemmer == null ) {
+ pluralStemmer = createPluralStemmer();
+ }
+ return pluralStemmer;
+ }
+
+ /**
+ * Sets the strategy used to detect matching singular and plural properties
+ */
+ public void setPluralStemmer(PluralStemmer pluralStemmer) {
+ this.pluralStemmer = pluralStemmer;
+ }
+
// Implementation methods
- //-------------------------------------------------------------------------
+ //-------------------------------------------------------------------------
+
+ /**
+ * A Factory method to lazily create a new strategy to detect matching singular
and plural properties
+ */
+ protected PluralStemmer createPluralStemmer() {
+ return new DefaultPluralStemmer();
+ }
/**
* Attempt to lookup the XML descriptor for the given class using the
1.5 +6 -6
jakarta-commons-sandbox/betwixt/src/java/org/apache/commons/betwixt/digester/AddDefaultsRule.java
Index: AddDefaultsRule.java
===================================================================
RCS file:
/home/cvs/jakarta-commons-sandbox/betwixt/src/java/org/apache/commons/betwixt/digester/AddDefaultsRule.java,v
retrieving revision 1.4
retrieving revision 1.5
diff -u -r1.4 -r1.5
--- AddDefaultsRule.java 17 May 2002 15:24:12 -0000 1.4
+++ AddDefaultsRule.java 28 May 2002 13:38:26 -0000 1.5
@@ -1,7 +1,7 @@
/*
- * $Header:
/home/cvs/jakarta-commons-sandbox/betwixt/src/java/org/apache/commons/betwixt/digester/AddDefaultsRule.java,v
1.4 2002/05/17 15:24:12 jstrachan Exp $
- * $Revision: 1.4 $
- * $Date: 2002/05/17 15:24:12 $
+ * $Header:
/home/cvs/jakarta-commons-sandbox/betwixt/src/java/org/apache/commons/betwixt/digester/AddDefaultsRule.java,v
1.5 2002/05/28 13:38:26 jstrachan Exp $
+ * $Revision: 1.5 $
+ * $Date: 2002/05/28 13:38:26 $
*
* ====================================================================
*
@@ -57,7 +57,7 @@
* information on the Apache Software Foundation, please see
* <http://www.apache.org/>.
*
- * $Id: AddDefaultsRule.java,v 1.4 2002/05/17 15:24:12 jstrachan Exp $
+ * $Id: AddDefaultsRule.java,v 1.5 2002/05/28 13:38:26 jstrachan Exp $
*/
package org.apache.commons.betwixt.digester;
@@ -87,7 +87,7 @@
* to the current element.</p>
*
* @author <a href="mailto:[EMAIL PROTECTED]">James Strachan</a>
- * @version $Revision: 1.4 $
+ * @version $Revision: 1.5 $
*/
public class AddDefaultsRule extends RuleSupport {
@@ -138,7 +138,7 @@
}
// default any addProperty() methods
- XMLIntrospectorHelper.defaultAddMethods( getRootElementDescriptor(),
beanClass );
+ XMLIntrospectorHelper.defaultAddMethods( getXMLIntrospector(),
getRootElementDescriptor(), beanClass );
}
1.3 +9 -5
jakarta-commons-sandbox/betwixt/src/java/org/apache/commons/betwixt/digester/RuleSupport.java
Index: RuleSupport.java
===================================================================
RCS file:
/home/cvs/jakarta-commons-sandbox/betwixt/src/java/org/apache/commons/betwixt/digester/RuleSupport.java,v
retrieving revision 1.2
retrieving revision 1.3
diff -u -r1.2 -r1.3
--- RuleSupport.java 17 May 2002 15:24:12 -0000 1.2
+++ RuleSupport.java 28 May 2002 13:38:26 -0000 1.3
@@ -1,7 +1,7 @@
/*
- * $Header:
/home/cvs/jakarta-commons-sandbox/betwixt/src/java/org/apache/commons/betwixt/digester/RuleSupport.java,v
1.2 2002/05/17 15:24:12 jstrachan Exp $
- * $Revision: 1.2 $
- * $Date: 2002/05/17 15:24:12 $
+ * $Header:
/home/cvs/jakarta-commons-sandbox/betwixt/src/java/org/apache/commons/betwixt/digester/RuleSupport.java,v
1.3 2002/05/28 13:38:26 jstrachan Exp $
+ * $Revision: 1.3 $
+ * $Date: 2002/05/28 13:38:26 $
*
* ====================================================================
*
@@ -57,7 +57,7 @@
* information on the Apache Software Foundation, please see
* <http://www.apache.org/>.
*
- * $Id: RuleSupport.java,v 1.2 2002/05/17 15:24:12 jstrachan Exp $
+ * $Id: RuleSupport.java,v 1.3 2002/05/28 13:38:26 jstrachan Exp $
*/
package org.apache.commons.betwixt.digester;
@@ -89,7 +89,7 @@
* helper methods.</p>
*
* @author <a href="mailto:[EMAIL PROTECTED]">James Strachan</a>
- * @version $Revision: 1.2 $
+ * @version $Revision: 1.3 $
*/
public class RuleSupport extends Rule {
@@ -106,6 +106,10 @@
//-------------------------------------------------------------------------
protected XMLBeanInfoDigester getXMLInfoDigester() {
return (XMLBeanInfoDigester) getDigester();
+ }
+
+ protected XMLIntrospector getXMLIntrospector() {
+ return getXMLInfoDigester().getXMLIntrospector();
}
protected Class getBeanClass() {
1.5 +17 -13
jakarta-commons-sandbox/betwixt/src/java/org/apache/commons/betwixt/digester/XMLIntrospectorHelper.java
Index: XMLIntrospectorHelper.java
===================================================================
RCS file:
/home/cvs/jakarta-commons-sandbox/betwixt/src/java/org/apache/commons/betwixt/digester/XMLIntrospectorHelper.java,v
retrieving revision 1.4
retrieving revision 1.5
diff -u -r1.4 -r1.5
--- XMLIntrospectorHelper.java 17 May 2002 15:24:12 -0000 1.4
+++ XMLIntrospectorHelper.java 28 May 2002 13:38:26 -0000 1.5
@@ -1,7 +1,7 @@
/*
- * $Header:
/home/cvs/jakarta-commons-sandbox/betwixt/src/java/org/apache/commons/betwixt/digester/XMLIntrospectorHelper.java,v
1.4 2002/05/17 15:24:12 jstrachan Exp $
- * $Revision: 1.4 $
- * $Date: 2002/05/17 15:24:12 $
+ * $Header:
/home/cvs/jakarta-commons-sandbox/betwixt/src/java/org/apache/commons/betwixt/digester/XMLIntrospectorHelper.java,v
1.5 2002/05/28 13:38:26 jstrachan Exp $
+ * $Revision: 1.5 $
+ * $Date: 2002/05/28 13:38:26 $
*
* ====================================================================
*
@@ -57,7 +57,7 @@
* information on the Apache Software Foundation, please see
* <http://www.apache.org/>.
*
- * $Id: XMLIntrospectorHelper.java,v 1.4 2002/05/17 15:24:12 jstrachan Exp $
+ * $Id: XMLIntrospectorHelper.java,v 1.5 2002/05/28 13:38:26 jstrachan Exp $
*/
package org.apache.commons.betwixt.digester;
@@ -86,18 +86,20 @@
import org.apache.commons.betwixt.ElementDescriptor;
import org.apache.commons.betwixt.NodeDescriptor;
import org.apache.commons.betwixt.XMLBeanInfo;
+import org.apache.commons.betwixt.XMLIntrospector;
import org.apache.commons.betwixt.expression.EmptyExpression;
import org.apache.commons.betwixt.expression.Expression;
import org.apache.commons.betwixt.expression.IteratorExpression;
import org.apache.commons.betwixt.expression.MethodExpression;
import org.apache.commons.betwixt.expression.MethodUpdater;
import org.apache.commons.betwixt.expression.StringExpression;
+import org.apache.commons.betwixt.strategy.PluralStemmer;
/** <p><code>XMLIntrospectorHelper</code> a helper class for
* common code shared between the digestor and introspector.</p>
*
* @author <a href="mailto:[EMAIL PROTECTED]">James Strachan</a>
- * @version $Revision: 1.4 $
+ * @version $Revision: 1.5 $
*/
public class XMLIntrospectorHelper {
@@ -311,7 +313,7 @@
* the string. This should work for most use cases.
* e.g. addChild() would match the children property.
*/
- public static void defaultAddMethods( ElementDescriptor rootDescriptor, Class
beanClass ) {
+ public static void defaultAddMethods( XMLIntrospector introspector,
ElementDescriptor rootDescriptor, Class beanClass ) {
// lets iterate over all methods looking for one of the form
// add*(PropertyType)
if ( beanClass != null ) {
@@ -330,7 +332,7 @@
// a property which starts with propertyName
// and if so, we'll set a new Updater on it if there
// is not one already
- ElementDescriptor descriptor = findGetCollectionDescriptor(
rootDescriptor, propertyName );
+ ElementDescriptor descriptor = findGetCollectionDescriptor(
introspector, rootDescriptor, propertyName );
if ( descriptor != null ) {
if ( descriptor.getUpdater() == null ) {
if ( log.isDebugEnabled() ) {
@@ -390,16 +392,19 @@
* to match. e.g. if an addChild() method is detected the
* descriptor for the 'children' getter property should be returned.
*/
- protected static ElementDescriptor findGetCollectionDescriptor(
ElementDescriptor rootDescriptor, String propertyName ) {
+ protected static ElementDescriptor findGetCollectionDescriptor( XMLIntrospector
introspector, ElementDescriptor rootDescriptor, String propertyName ) {
+ PluralStemmer stemmer = introspector.getPluralStemmer();
ElementDescriptor[] children = rootDescriptor.getElementDescriptors();
if ( children != null ) {
for ( int i = 0, size = children.length; i < size; i++ ) {
ElementDescriptor child = children[i];
- String childPropertyName = child.getPropertyName();
- if ( childPropertyName != null && childPropertyName.startsWith(
propertyName ) ) {
- return child;
+ String childPropertyName = child.getPropertyName();
+ if ( childPropertyName != null ) {
+ if ( stemmer.isPluralNameFor(childPropertyName, propertyName) )
{
+ return child;
+ }
}
- ElementDescriptor answer = findGetCollectionDescriptor( child,
propertyName );
+ ElementDescriptor answer = findGetCollectionDescriptor(
introspector, child, propertyName );
if ( answer != null ) {
return answer;
}
@@ -407,5 +412,4 @@
}
return null;
}
-
}
--
To unsubscribe, e-mail: <mailto:[EMAIL PROTECTED]>
For additional commands, e-mail: <mailto:[EMAIL PROTECTED]>