[jboss-svn-commits] JBoss Common SVN: r2300 - in jbossxb/trunk: src/main/java/org/jboss/xb/binding and 1 other directory.

jboss-svn-commits at lists.jboss.org jboss-svn-commits at lists.jboss.org
Mon Mar 19 20:55:47 EDT 2007


Author: scott.stark at jboss.org
Date: 2007-03-19 20:55:47 -0400 (Mon, 19 Mar 2007)
New Revision: 2300

Modified:
   jbossxb/trunk/pom.xml
   jbossxb/trunk/src/main/java/org/jboss/xb/binding/DelegatingObjectModelFactory.java
Log:
JBXB-98, add property replacement support to ObjectModelFactory parsing

Modified: jbossxb/trunk/pom.xml
===================================================================
--- jbossxb/trunk/pom.xml	2007-03-17 18:56:25 UTC (rev 2299)
+++ jbossxb/trunk/pom.xml	2007-03-20 00:55:47 UTC (rev 2300)
@@ -8,7 +8,7 @@
   <modelVersion>4.0.0</modelVersion>
   <artifactId>jbossxb</artifactId>
   <packaging>jar</packaging>
-  <version>2.0.0-SNAPSHOT</version>
+  <version>2.0.0.CR2</version>
   <name>JBoss XML Binding</name>
   <url>http://www.jboss.org</url>
   <description>JBoss XML Binding</description>

Modified: jbossxb/trunk/src/main/java/org/jboss/xb/binding/DelegatingObjectModelFactory.java
===================================================================
--- jbossxb/trunk/src/main/java/org/jboss/xb/binding/DelegatingObjectModelFactory.java	2007-03-17 18:56:25 UTC (rev 2299)
+++ jbossxb/trunk/src/main/java/org/jboss/xb/binding/DelegatingObjectModelFactory.java	2007-03-20 00:55:47 UTC (rev 2300)
@@ -21,6 +21,7 @@
   */
 package org.jboss.xb.binding;
 
+import org.jboss.util.StringPropertyReplacer;
 import org.xml.sax.Attributes;
 
 import java.lang.reflect.Method;
@@ -28,9 +29,11 @@
 import java.util.HashMap;
 
 /**
- * todo come up with a nicer class name
+ * GenericObjectModelFactory that delegates to a ObjectModelFactory
+ * using reflection.
  *
  * @author <a href="mailto:alex at jboss.org">Alexey Loubyansky</a>
+ * @author Scott.Stark at jboss.org
  * @version <tt>$Revision$</tt>
  */
 public class DelegatingObjectModelFactory
@@ -38,10 +41,12 @@
 {
    private final ObjectModelFactory typedFactory;
    private final Map addMethodsByParent = new HashMap();
+   private boolean replaceProps;
 
    public DelegatingObjectModelFactory(ObjectModelFactory typedFactory)
    {
       this.typedFactory = typedFactory;
+      replaceProps = isReplacePropertyRefs(typedFactory);
 
       Method[] methods = typedFactory.getClass().getMethods();
       for(int i = 0; i < methods.length; ++i)
@@ -165,6 +170,9 @@
       // invoke the setValue method
       if (method != null)
       {
+         // property replacement
+         if( replaceProps )
+            value = StringPropertyReplacer.replaceProperties(value);
          Object[] objects = new Object[] { o, navigator, namespaceURI, localName, value };
          ObjectModelBuilder.invokeFactory(typedFactory, method, objects);
       }
@@ -175,6 +183,33 @@
       return root;
    }
 
+   /**
+    * Check whether gactory supports a boolean isReplacePropertyRefs()
+    * method that determins if property replacement is done.
+    * @return isReplacePropertyRefs value if found, true otherwise to
+    * default replacement to true.
+    */
+   static boolean isReplacePropertyRefs(ObjectModelFactory factory)
+   {
+      boolean replace = true;
+      try
+      {
+         Class[] sig = {};
+         Method isReplace = factory.getClass().getMethod("isReplacePropertyRefs", sig);
+         if( Boolean.class.isAssignableFrom(isReplace.getReturnType()))
+         {
+            Object[] args = {};
+            Boolean flag = (Boolean) isReplace.invoke(factory, args);
+            replace = flag.booleanValue();
+         }
+      }
+      catch(Exception e)
+      {
+         // Ignore
+      }
+      return replace;
+   }
+
    // Inner
 
    private static class AddMethods
@@ -213,7 +248,8 @@
             {
                return method;
             }
-            else if(param.isAssignableFrom(child) && (closestParam == null || closestParam.isAssignableFrom(param)))
+            else if(param.isAssignableFrom(child)
+                  && (closestParam == null || closestParam.isAssignableFrom(param)))
             {
                closestParam = param;
                closestMethod = method;




More information about the jboss-svn-commits mailing list