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

Reply via email to