[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