You are viewing a plain text version of this content. The canonical link for it is here.
Posted to dev@commons.apache.org by rd...@apache.org on 2004/08/06 21:40:25 UTC

cvs commit: jakarta-commons/betwixt/src/java/org/apache/commons/betwixt/digester MappedPropertyRule.java

rdonkin     2004/08/06 12:40:25

  Modified:    betwixt/src/java/org/apache/commons/betwixt
                        XMLIntrospector.java
               betwixt/src/java/org/apache/commons/betwixt/digester
                        MappedPropertyRule.java
  Log:
  Improved support for superinterface introspection
  
  Revision  Changes    Path
  1.32      +31 -0     jakarta-commons/betwixt/src/java/org/apache/commons/betwixt/XMLIntrospector.java
  
  Index: XMLIntrospector.java
  ===================================================================
  RCS file: /home/cvs/jakarta-commons/betwixt/src/java/org/apache/commons/betwixt/XMLIntrospector.java,v
  retrieving revision 1.31
  retrieving revision 1.32
  diff -u -r1.31 -r1.32
  --- XMLIntrospector.java	14 Jul 2004 21:38:17 -0000	1.31
  +++ XMLIntrospector.java	6 Aug 2004 19:40:25 -0000	1.32
  @@ -1320,6 +1320,9 @@
                           }
                       }            
                   }
  +                
  +                addAllSuperinterfaces(beanClass, propertyDescriptors);
  +                
                   // what happens when size is zero?
                   properties = new BeanProperty[ propertyDescriptors.size() ];
                   int count = 0;
  @@ -1330,6 +1333,34 @@
               }
               return properties;
           }
  +        
  +        /**
  +         * Adds all super interfaces.
  +         * Super interface methods are not returned within the usual 
  +         * bean info for an interface.
  +         * @param clazz <code>Class</code>, not null
  +         * @param propertyDescriptors <code>ArrayList</code> of <code>PropertyDescriptor</code>s', not null
  +         */
  +        private void addAllSuperinterfaces(Class clazz, ArrayList propertyDescriptors) {
  +            if (clazz.isInterface()) {
  +                Class[] superinterfaces = clazz.getInterfaces();
  +                for (int i=0, size=superinterfaces.length; i<size; i++) {
  +                    try {
  +                        
  +                        BeanInfo beanInfo = Introspector.getBeanInfo(superinterfaces[i]);
  +                        PropertyDescriptor[] descriptors = beanInfo.getPropertyDescriptors();
  +                        for (int j=0, descriptorLength=descriptors.length; j<descriptorLength ; j++) {
  +                            propertyDescriptors.add(descriptors[j]);
  +                        }
  +                        addAllSuperinterfaces(superinterfaces[i], propertyDescriptors);
  +                        
  +                    } catch (IntrospectionException ex) {
  +                        log.info("Introspection on superinterface failed.", ex);
  +                    }
  +                }
  +            }
  +        }
  +        
       }
       
       /** Implementation for DynaClasses */
  
  
  
  1.8       +15 -0     jakarta-commons/betwixt/src/java/org/apache/commons/betwixt/digester/MappedPropertyRule.java
  
  Index: MappedPropertyRule.java
  ===================================================================
  RCS file: /home/cvs/jakarta-commons/betwixt/src/java/org/apache/commons/betwixt/digester/MappedPropertyRule.java,v
  retrieving revision 1.7
  retrieving revision 1.8
  diff -u -r1.7 -r1.8
  --- MappedPropertyRule.java	4 Jul 2004 16:40:49 -0000	1.7
  +++ MappedPropertyRule.java	6 Aug 2004 19:40:25 -0000	1.8
  @@ -60,6 +60,9 @@
                   log.trace("Searching for property " + propertyName + " on " + beanClass);
               }
               try {
  +                // TODO: replace this call to introspector to an object call
  +                // which finds all property descriptors for a class
  +                // this allows extra property descriptors to be added 
                   BeanInfo beanInfo = Introspector.getBeanInfo( beanClass );
                   PropertyDescriptor[] descriptors = 
                       beanInfo.getPropertyDescriptors();
  @@ -72,6 +75,18 @@
                           }
                       }
                   }
  +                // for interfaces, check all super interfaces
  +                if (beanClass.isInterface()) {
  +                    Class[] superinterfaces = beanClass.getInterfaces();
  +                    for (int i=0, size=superinterfaces.length; i<size; i++) {
  +                        PropertyDescriptor descriptor = getPropertyDescriptor(superinterfaces[i], propertyName);
  +                        if (descriptor != null)
  +                        {
  +                            return descriptor;
  +                        }
  +                    }
  +                }
  +                
                   log.trace("No match found.");
                   return null;
               } catch (Exception e) {
  
  
  

---------------------------------------------------------------------
To unsubscribe, e-mail: commons-dev-unsubscribe@jakarta.apache.org
For additional commands, e-mail: commons-dev-help@jakarta.apache.org