Robert,

Thanks for the quick response. I think that I have solved the easy use case
that you mentioned (It works for my situation anyway).

I do have a few questions though:

1) In org.apache.commons.betwixt.XMLIntrospector line 330, should I add the
abilitiy to copy the ContentDescriptors?

2) In org.apache.commons.betwixt.digester.TextRule line 135, should we be
overriding the beanClass member variable with a local beanClass variable?

3) In org.apache.commons.betwixt.io.BeanRuleSet line 347, is that the
correct expression to make sure that we don't add duplicates? A better way
to handle it, starting at line 248, might be to just handle the
ElementDescriptors with the for loop and handle the non ElementDescriptors
(TextDescriptors) in afterwards, line 351 for example.


I have included the patch (diff -r -u -d on the src directories between the
060503-src.zip and what I changed) below.


diff -u -r -b
b/commons-betwixt/src/java/org/apache/commons/betwixt/digester/TextRule.java
commons-betwixt/src/java/org/apache/commons/betwixt/digester/TextRule.java
---
b/commons-betwixt/src/java/org/apache/commons/betwixt/digester/TextRule.java
2003-06-05 02:59:54.000000000 -0400
+++
commons-betwixt/src/java/org/apache/commons/betwixt/digester/TextRule.java
2003-06-11 14:58:48.000000000 -0400
@@ -63,6 +63,7 @@
 
 import org.apache.commons.betwixt.expression.MethodExpression;
 import org.apache.commons.betwixt.expression.ConstantExpression;
+import org.apache.commons.betwixt.expression.MethodUpdater;
 import org.apache.commons.betwixt.TextDescriptor;
 import org.apache.commons.betwixt.ElementDescriptor;
 import org.apache.commons.betwixt.XMLBeanInfo;
@@ -139,6 +140,8 @@
                 if ( propertyDescriptor != null ) { 
                         Method readMethod =
propertyDescriptor.getReadMethod();
                         descriptor.setTextExpression( new MethodExpression(
readMethod ) );
+                        Method writeMethod =
propertyDescriptor.getWriteMethod();
+                        descriptor.setUpdater( new MethodUpdater(
writeMethod ) );
                         getProcessedPropertyNameSet().add( name );
                 }
             }
diff -u -r -b
b/commons-betwixt/src/java/org/apache/commons/betwixt/io/BeanRuleSet.java
commons-betwixt/src/java/org/apache/commons/betwixt/io/BeanRuleSet.java
---
b/commons-betwixt/src/java/org/apache/commons/betwixt/io/BeanRuleSet.java
2003-06-05 02:59:56.000000000 -0400
+++ commons-betwixt/src/java/org/apache/commons/betwixt/io/BeanRuleSet.java
2003-06-11 15:16:59.000000000 -0400
@@ -67,6 +67,8 @@
 
 import org.apache.commons.betwixt.AttributeDescriptor;
 import org.apache.commons.betwixt.ElementDescriptor;
+import org.apache.commons.betwixt.TextDescriptor;
+import org.apache.commons.betwixt.Descriptor;
 import org.apache.commons.betwixt.XMLBeanInfo;
 import org.apache.commons.betwixt.XMLIntrospector;
 import org.apache.commons.betwixt.digester.XMLIntrospectorHelper;
@@ -243,10 +245,13 @@
             //ElementDescriptor typeDescriptor = descriptor;
     
             
-            ElementDescriptor[] childDescriptors =
typeDescriptor.getElementDescriptors();
+            Descriptor[] childDescriptors =
typeDescriptor.getContentDescriptors();
             if ( childDescriptors != null ) {
                 for ( int i = 0, size = childDescriptors.length; i < size;
i++ ) {
-                    final ElementDescriptor childDescriptor =
childDescriptors[i];
+                    if( childDescriptors[i] instanceof ElementDescriptor )
{
+
+                        final ElementDescriptor childDescriptor =
(ElementDescriptor)childDescriptors[i];
+
                     if (log.isTraceEnabled()) {
                         log.trace("Processing child " + childDescriptor);
                     }
@@ -336,8 +341,17 @@
                     } else if ( log.isTraceEnabled() ) {
                         log.trace( "No children for " + childDescriptor);
                     }
+
+                    } else {
+                        // 06/11/03 Abraham Fathman - Is this the correct
comparison?
+                        if (
currentDescriptor.getContentDescriptors().length < childDescriptors.length )
{
+                            currentDescriptor.addContentDescriptor(
childDescriptors[i] );
                 }
             }
+
+                }
+
+            }
         }
         
         /** Allows the navigation from a reference to a property object to
the 
@@ -635,6 +649,37 @@
             }
         
             /**
+             * Process the body of the element.
+             * @param text String value of the body of the element
+             */
+            public void body ( String text )
+            {
+                if ( createdBean ) {
+
+                    log.trace("text: " + text );
+
+                    Descriptor d[] = descriptor.getContentDescriptors();
+                    for( int x = 0; x < d.length; x++ ){
+                        if ( d[x] instanceof TextDescriptor ){
+                            Updater updater = d[x].getUpdater();
+
+                            log.trace( "updater: " + updater);
+
+                            if ( updater != null ) {
+                                updater.update( context, text );
+                            } else {
+                                if( log.isDebugEnabled() ) {
+                                    log.debug( "No updater for: " + d[x] +
" with: "
+                                       + " on bean: " + context.getBean()
);
+                                }
+
+                            }
+                        }
+                    }
+                }
+            }
+
+            /**
             * Process the end of this element.
             */
             public void end() {


Thanks for your help,

Abraham Fathman
eBusiness Architecture
513-534-4607


---------------------------------------------------------------------
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]

Reply via email to