[seam-commits] Seam SVN: r12100 - in modules/xml/trunk: src/main/java/org/jboss/seam/xml/core and 6 other directories.
seam-commits at lists.jboss.org
seam-commits at lists.jboss.org
Thu Mar 4 23:48:02 EST 2010
Author: swd847
Date: 2010-03-04 23:48:01 -0500 (Thu, 04 Mar 2010)
New Revision: 12100
Added:
modules/xml/trunk/src/main/java/org/jboss/seam/xml/model/ParametersXmlItem.java
Modified:
modules/xml/trunk/docs/en-US/xml-general.xml
modules/xml/trunk/src/main/java/org/jboss/seam/xml/core/XmlId.java
modules/xml/trunk/src/main/java/org/jboss/seam/xml/fieldset/DirectFieldSetter.java
modules/xml/trunk/src/main/java/org/jboss/seam/xml/fieldset/FieldValueObject.java
modules/xml/trunk/src/main/java/org/jboss/seam/xml/fieldset/FieldValueSetter.java
modules/xml/trunk/src/main/java/org/jboss/seam/xml/fieldset/MethodFieldSetter.java
modules/xml/trunk/src/main/java/org/jboss/seam/xml/model/ClassXmlItem.java
modules/xml/trunk/src/main/java/org/jboss/seam/xml/model/MethodXmlItem.java
modules/xml/trunk/src/main/java/org/jboss/seam/xml/model/ModelBuilder.java
modules/xml/trunk/src/main/java/org/jboss/seam/xml/model/XmlItemType.java
modules/xml/trunk/src/main/java/org/jboss/seam/xml/parser/ParserMain.java
modules/xml/trunk/src/main/java/org/jboss/seam/xml/parser/SaxNode.java
modules/xml/trunk/src/main/java/org/jboss/seam/xml/parser/namespace/PackageNamespaceElementResolver.java
modules/xml/trunk/src/main/java/org/jboss/seam/xml/parser/namespace/RootNamespaceElementResolver.java
modules/xml/trunk/src/main/java/org/jboss/seam/xml/util/XmlObjectConverter.java
modules/xml/trunk/src/test/resources/org/jboss/seam/xml/test/method/method-beans.xml
modules/xml/trunk/src/test/resources/org/jboss/seam/xml/test/method/primitive-method-beans.xml
Log:
added <parameters> element
Modified: modules/xml/trunk/docs/en-US/xml-general.xml
===================================================================
--- modules/xml/trunk/docs/en-US/xml-general.xml 2010-03-05 04:30:50 UTC (rev 12099)
+++ modules/xml/trunk/docs/en-US/xml-general.xml 2010-03-05 04:48:01 UTC (rev 12100)
@@ -240,17 +240,21 @@
<test:method>
<Produces/>
<test:Qualifier1/>
- <test:MethodValueBean>
- <test:Qualifier2/>
- </test:MethodValueBean>
+ <parameters>
+ <test:MethodValueBean>
+ <test:Qualifier2/>
+ </test:MethodValueBean>
+ </parameters>
</test:method>
<test:method>
<Produces/>
<test:Qualifier1/>
- <array dimensions="2">
- <test:Qualifier2/>
- <test:MethodValueBean/>
- </array>
+ <parameters>
+ <array dimensions="2">
+ <test:Qualifier2/>
+ <test:MethodValueBean/>
+ </array>
+ </parameters>
</test:method>
</test:MethodBean>
</Beans>
@@ -267,6 +271,11 @@
{
return bean.value + 1;
}
+
+ public void method(MethodValueBean[][] beans)
+ {
+ //do stuff
+ }
}
Modified: modules/xml/trunk/src/main/java/org/jboss/seam/xml/core/XmlId.java
===================================================================
--- modules/xml/trunk/src/main/java/org/jboss/seam/xml/core/XmlId.java 2010-03-05 04:30:50 UTC (rev 12099)
+++ modules/xml/trunk/src/main/java/org/jboss/seam/xml/core/XmlId.java 2010-03-05 04:48:01 UTC (rev 12100)
@@ -8,8 +8,11 @@
import java.lang.annotation.RetentionPolicy;
/**
- * Annotation that allows tracing of annotated types through the startup proces
+ * Annotation that allows tracing of annotated types through the startup process
*
+ * TODO: This approach currently breaks replication as the id's are non
+ * deterministic
+ *
* @author stuart
*
*/
Modified: modules/xml/trunk/src/main/java/org/jboss/seam/xml/fieldset/DirectFieldSetter.java
===================================================================
--- modules/xml/trunk/src/main/java/org/jboss/seam/xml/fieldset/DirectFieldSetter.java 2010-03-05 04:30:50 UTC (rev 12099)
+++ modules/xml/trunk/src/main/java/org/jboss/seam/xml/fieldset/DirectFieldSetter.java 2010-03-05 04:48:01 UTC (rev 12100)
@@ -4,6 +4,12 @@
import java.lang.reflect.InvocationTargetException;
import java.lang.reflect.Type;
+/**
+ * class that can set a field value directly
+ *
+ * @author Stuart Douglas <stuart at baileyroberts.com.au>
+ *
+ */
public class DirectFieldSetter implements FieldValueSetter
{
Modified: modules/xml/trunk/src/main/java/org/jboss/seam/xml/fieldset/FieldValueObject.java
===================================================================
--- modules/xml/trunk/src/main/java/org/jboss/seam/xml/fieldset/FieldValueObject.java 2010-03-05 04:30:50 UTC (rev 12099)
+++ modules/xml/trunk/src/main/java/org/jboss/seam/xml/fieldset/FieldValueObject.java 2010-03-05 04:48:01 UTC (rev 12100)
@@ -4,6 +4,12 @@
*/
package org.jboss.seam.xml.fieldset;
+/**
+ * FieldValueObjects set field values for a given instance
+ *
+ * @author Stuart Douglas <stuart at baileyroberts.com.au>
+ *
+ */
public interface FieldValueObject
{
Modified: modules/xml/trunk/src/main/java/org/jboss/seam/xml/fieldset/FieldValueSetter.java
===================================================================
--- modules/xml/trunk/src/main/java/org/jboss/seam/xml/fieldset/FieldValueSetter.java 2010-03-05 04:30:50 UTC (rev 12099)
+++ modules/xml/trunk/src/main/java/org/jboss/seam/xml/fieldset/FieldValueSetter.java 2010-03-05 04:48:01 UTC (rev 12100)
@@ -3,6 +3,13 @@
import java.lang.reflect.InvocationTargetException;
import java.lang.reflect.Type;
+/**
+ * Class that knows how to set a field value, either directly or by calling a
+ * getter
+ *
+ * @author Stuart Douglas <stuart at baileyroberts.com.au>
+ *
+ */
public interface FieldValueSetter
{
Modified: modules/xml/trunk/src/main/java/org/jboss/seam/xml/fieldset/MethodFieldSetter.java
===================================================================
--- modules/xml/trunk/src/main/java/org/jboss/seam/xml/fieldset/MethodFieldSetter.java 2010-03-05 04:30:50 UTC (rev 12099)
+++ modules/xml/trunk/src/main/java/org/jboss/seam/xml/fieldset/MethodFieldSetter.java 2010-03-05 04:48:01 UTC (rev 12100)
@@ -4,6 +4,12 @@
import java.lang.reflect.Method;
import java.lang.reflect.Type;
+/**
+ * class that sets a field value by calling a setter method
+ *
+ * @author Stuart Douglas <stuart at baileyroberts.com.au>
+ *
+ */
public class MethodFieldSetter implements FieldValueSetter
{
Method method;
Modified: modules/xml/trunk/src/main/java/org/jboss/seam/xml/model/ClassXmlItem.java
===================================================================
--- modules/xml/trunk/src/main/java/org/jboss/seam/xml/model/ClassXmlItem.java 2010-03-05 04:30:50 UTC (rev 12099)
+++ modules/xml/trunk/src/main/java/org/jboss/seam/xml/model/ClassXmlItem.java 2010-03-05 04:48:01 UTC (rev 12100)
@@ -18,7 +18,7 @@
allowed.add(XmlItemType.ANNOTATION);
allowed.add(XmlItemType.FIELD);
allowed.add(XmlItemType.METHOD);
- allowed.add(XmlItemType.PARAMETER);
+ allowed.add(XmlItemType.PARAMETERS);
}
Modified: modules/xml/trunk/src/main/java/org/jboss/seam/xml/model/MethodXmlItem.java
===================================================================
--- modules/xml/trunk/src/main/java/org/jboss/seam/xml/model/MethodXmlItem.java 2010-03-05 04:30:50 UTC (rev 12099)
+++ modules/xml/trunk/src/main/java/org/jboss/seam/xml/model/MethodXmlItem.java 2010-03-05 04:48:01 UTC (rev 12100)
@@ -23,6 +23,10 @@
public MethodXmlItem(XmlItem parent, String methodName, String document, int lineno)
{
super(XmlItemType.METHOD, parent, parent.getJavaClass(), null, null, document, lineno);
+
+ allowed.add(XmlItemType.ANNOTATION);
+ allowed.add(XmlItemType.PARAMETERS);
+
// methods are lazily resolved once we know the parameter types
this.methodName = methodName;
Method found = null;
@@ -43,8 +47,6 @@
}
}
method = found;
- allowed.add(XmlItemType.ANNOTATION);
- allowed.add(XmlItemType.PARAMETER);
}
/**
@@ -64,9 +66,14 @@
}
List<Class<?>> rtList = new ArrayList<Class<?>>();
- for (XmlItem c : children)
+ List<ParametersXmlItem> parameters = getChildrenOfType(ParametersXmlItem.class);
+ if (parameters.size() > 1)
{
- if (c.getType() == XmlItemType.PARAMETER)
+ throw new XmlConfigurationException("A method may only have a single <parameters> element", document, lineno);
+ }
+ else if (!parameters.isEmpty())
+ {
+ for (ParameterXmlItem c : parameters.get(0).getChildrenOfType(ParameterXmlItem.class))
{
Class<?> cl = c.getJavaClass();
rtList.add(cl);
Modified: modules/xml/trunk/src/main/java/org/jboss/seam/xml/model/ModelBuilder.java
===================================================================
--- modules/xml/trunk/src/main/java/org/jboss/seam/xml/model/ModelBuilder.java 2010-03-05 04:30:50 UTC (rev 12099)
+++ modules/xml/trunk/src/main/java/org/jboss/seam/xml/model/ModelBuilder.java 2010-03-05 04:48:01 UTC (rev 12100)
@@ -284,13 +284,21 @@
Annotation a = createAnnotation(fi);
type.addToMethod(item.getMethod(), a);
}
- for (ParameterXmlItem fi : item.getChildrenOfType(ParameterXmlItem.class))
+ List<ParametersXmlItem> parameters = item.getChildrenOfType(ParametersXmlItem.class);
+ if (parameters.size() > 1)
{
- int param = paramCount++;
- for (AnnotationXmlItem pan : fi.getChildrenOfType(AnnotationXmlItem.class))
+ throw new XmlConfigurationException("A method may only have a single <parameters> element", item.getDocument(), item.getLineno());
+ }
+ else if (!parameters.isEmpty())
+ {
+ for (ParameterXmlItem fi : parameters.get(0).getChildrenOfType(ParameterXmlItem.class))
{
- Annotation a = createAnnotation(pan);
- type.addToMethodParameter(item.getMethod(), param, a);
+ int param = paramCount++;
+ for (AnnotationXmlItem pan : fi.getChildrenOfType(AnnotationXmlItem.class))
+ {
+ Annotation a = createAnnotation(pan);
+ type.addToMethodParameter(item.getMethod(), param, a);
+ }
}
}
Added: modules/xml/trunk/src/main/java/org/jboss/seam/xml/model/ParametersXmlItem.java
===================================================================
--- modules/xml/trunk/src/main/java/org/jboss/seam/xml/model/ParametersXmlItem.java (rev 0)
+++ modules/xml/trunk/src/main/java/org/jboss/seam/xml/model/ParametersXmlItem.java 2010-03-05 04:48:01 UTC (rev 12100)
@@ -0,0 +1,24 @@
+/*
+ * Distributed under the LGPL License
+ *
+ */
+package org.jboss.seam.xml.model;
+
+import java.util.Collections;
+import java.util.Set;
+
+public class ParametersXmlItem extends AbstractXmlItem
+{
+
+ public ParametersXmlItem(XmlItem parent, String document, int lineno)
+ {
+ super(XmlItemType.PARAMETERS, parent, null, null, null, document, lineno);
+
+ }
+
+ public Set<XmlItemType> getAllowedItem()
+ {
+ return Collections.singleton(XmlItemType.PARAMETER);
+ }
+
+}
Modified: modules/xml/trunk/src/main/java/org/jboss/seam/xml/model/XmlItemType.java
===================================================================
--- modules/xml/trunk/src/main/java/org/jboss/seam/xml/model/XmlItemType.java 2010-03-05 04:30:50 UTC (rev 12099)
+++ modules/xml/trunk/src/main/java/org/jboss/seam/xml/model/XmlItemType.java 2010-03-05 04:48:01 UTC (rev 12100)
@@ -6,5 +6,5 @@
public enum XmlItemType
{
- CLASS, METHOD, FIELD, ANNOTATION, VALUE, VETO, ENTRY, KEY, DEPENDENCY, PARAMETER, ARRAY, OVERRIDE, EXTENDS;
+ CLASS, METHOD, FIELD, ANNOTATION, VALUE, VETO, ENTRY, KEY, DEPENDENCY, PARAMETERS, PARAMETER, ARRAY, OVERRIDE, EXTENDS;
}
Modified: modules/xml/trunk/src/main/java/org/jboss/seam/xml/parser/ParserMain.java
===================================================================
--- modules/xml/trunk/src/main/java/org/jboss/seam/xml/parser/ParserMain.java 2010-03-05 04:30:50 UTC (rev 12099)
+++ modules/xml/trunk/src/main/java/org/jboss/seam/xml/parser/ParserMain.java 2010-03-05 04:48:01 UTC (rev 12100)
@@ -20,7 +20,8 @@
import org.xml.sax.helpers.XMLReaderFactory;
/**
- * Parser for xml configration, this class should only be used once
+ * Parser for xml configration, this class should only be used once and then
+ * discarded
*
* @author Stuart Douglas <stuart at baileyroberts.com.au>
*
@@ -46,15 +47,11 @@
document = fileUrl;
try
{
-
XMLReader xr = XMLReaderFactory.createXMLReader();
-
xr.setContentHandler(this);
xr.setErrorHandler(this);
xr.parse(inputSource);
-
return parentNode;
-
}
catch (SAXException e)
{
Modified: modules/xml/trunk/src/main/java/org/jboss/seam/xml/parser/SaxNode.java
===================================================================
--- modules/xml/trunk/src/main/java/org/jboss/seam/xml/parser/SaxNode.java 2010-03-05 04:30:50 UTC (rev 12099)
+++ modules/xml/trunk/src/main/java/org/jboss/seam/xml/parser/SaxNode.java 2010-03-05 04:48:01 UTC (rev 12100)
@@ -9,6 +9,12 @@
import java.util.List;
import java.util.Map;
+/**
+ * represents an XML element
+ *
+ * @author Stuart Douglas <stuart at baileyroberts.com.au>
+ *
+ */
public class SaxNode
{
Modified: modules/xml/trunk/src/main/java/org/jboss/seam/xml/parser/namespace/PackageNamespaceElementResolver.java
===================================================================
--- modules/xml/trunk/src/main/java/org/jboss/seam/xml/parser/namespace/PackageNamespaceElementResolver.java 2010-03-05 04:30:50 UTC (rev 12099)
+++ modules/xml/trunk/src/main/java/org/jboss/seam/xml/parser/namespace/PackageNamespaceElementResolver.java 2010-03-05 04:48:01 UTC (rev 12100)
@@ -53,8 +53,8 @@
}
else
{
- //if it is a method or constructor parameter
- if(parent != null && (parent.getType() == XmlItemType.METHOD || parent.getType() == XmlItemType.CLASS))
+ // if it is a method or constructor parameter
+ if (parent != null && parent.getType() == XmlItemType.PARAMETERS)
{
return new ParameterXmlItem(parent, c, node.getDocument(), node.getLineNo());
}
Modified: modules/xml/trunk/src/main/java/org/jboss/seam/xml/parser/namespace/RootNamespaceElementResolver.java
===================================================================
--- modules/xml/trunk/src/main/java/org/jboss/seam/xml/parser/namespace/RootNamespaceElementResolver.java 2010-03-05 04:30:50 UTC (rev 12099)
+++ modules/xml/trunk/src/main/java/org/jboss/seam/xml/parser/namespace/RootNamespaceElementResolver.java 2010-03-05 04:48:01 UTC (rev 12100)
@@ -11,6 +11,7 @@
import org.jboss.seam.xml.model.KeyXmlItem;
import org.jboss.seam.xml.model.OverrideXmlItem;
import org.jboss.seam.xml.model.ParameterXmlItem;
+import org.jboss.seam.xml.model.ParametersXmlItem;
import org.jboss.seam.xml.model.ValueXmlItem;
import org.jboss.seam.xml.model.VetoXmlItem;
import org.jboss.seam.xml.model.XmlItem;
@@ -21,7 +22,7 @@
{
CompositeNamespaceElementResolver delegate;
- static final String[] namspaces = { "java.lang", "java.util", "javax.annotation", "javax.inject", "javax.enterprise.inject", "javax.enterprise.context", "javax.enterprise.event", "javax.decorator", "javax.interceptor", "javax.persistence", "javax.xml.ws", "javax.jms", "javax.sql" };
+ static final String[] namspaces = { "java.lang", "java.util", "javax.annotation", "javax.inject", "javax.enterprise.inject", "javax.enterprise.context", "javax.enterprise.event", "javax.decorator", "javax.interceptor" };
public RootNamespaceElementResolver()
{
@@ -68,6 +69,10 @@
{
return new ExtendsXmlItem(parent, node.getDocument(), node.getLineNo());
}
+ else if (item.equals("parameters"))
+ {
+ return new ParametersXmlItem(parent, node.getDocument(), node.getLineNo());
+ }
// now deal with primitive types
@@ -106,7 +111,7 @@
}
if (primType != null)
{
- if (parent != null && (parent.getType() == XmlItemType.METHOD || parent.getType() == XmlItemType.CLASS))
+ if (parent != null && parent.getType() == XmlItemType.PARAMETERS)
{
return new ParameterXmlItem(parent, primType, node.getDocument(), node.getLineNo());
}
Modified: modules/xml/trunk/src/main/java/org/jboss/seam/xml/util/XmlObjectConverter.java
===================================================================
--- modules/xml/trunk/src/main/java/org/jboss/seam/xml/util/XmlObjectConverter.java 2010-03-05 04:30:50 UTC (rev 12099)
+++ modules/xml/trunk/src/main/java/org/jboss/seam/xml/util/XmlObjectConverter.java 2010-03-05 04:48:01 UTC (rev 12100)
@@ -31,8 +31,6 @@
}
else if (target == Class.class)
{
- Class dval = null;
-
try
{
return XmlObjectConverter.class.getClassLoader().loadClass(value);
@@ -56,13 +54,11 @@
{
java.util.Date dval = DateFormat.getDateTimeInstance().parse(value);
return new java.sql.Date(dval.getYear(), dval.getMonth(), dval.getDay());
-
}
catch (ParseException e)
{
throw new RuntimeException("Cannot parse javax.sql.Date field value: " + value, e);
}
-
}
else if (java.sql.Time.class == target)
{
@@ -75,7 +71,6 @@
{
throw new RuntimeException("Cannot parse javax.sql.Date field value: " + value, e);
}
-
}
else if (java.sql.Timestamp.class == target)
{
@@ -83,7 +78,6 @@
{
java.util.Date dval = DateFormat.getDateTimeInstance().parse(value);
return new java.sql.Timestamp(dval.getYear(), dval.getMonth(), dval.getDay(), dval.getHours(), dval.getMinutes(), dval.getSeconds(), 0);
-
}
catch (ParseException e)
{
@@ -104,20 +98,17 @@
{
throw new RuntimeException("Cannot parse Calendar field value: " + value, e);
}
-
}
else if (java.util.Date.class == target)
{
try
{
return DateFormat.getDateTimeInstance().parse(value);
-
}
catch (ParseException e)
{
throw new RuntimeException("Cannot parse Calendar field value: " + value, e);
}
-
}
else if (target == BigDecimal.class)
{
@@ -139,12 +130,10 @@
else if (target == int.class || target == Integer.class)
{
return Integer.parseInt(value);
-
}
else if (target == short.class || target == Short.class)
{
return new Short(value);
-
}
else if (target == long.class || target == Long.class)
{
@@ -153,7 +142,6 @@
else if (target == byte.class || target == byte.class)
{
return new Byte(value);
-
}
else if (target == double.class || target == Double.class)
{
Modified: modules/xml/trunk/src/test/resources/org/jboss/seam/xml/test/method/method-beans.xml
===================================================================
--- modules/xml/trunk/src/test/resources/org/jboss/seam/xml/test/method/method-beans.xml 2010-03-05 04:30:50 UTC (rev 12099)
+++ modules/xml/trunk/src/test/resources/org/jboss/seam/xml/test/method/method-beans.xml 2010-03-05 04:48:01 UTC (rev 12100)
@@ -1,50 +1,61 @@
<?xml version="1.0" encoding="UTF-8"?>
-<Beans xmlns="urn:seam:core"
- xmlns:test="urn:java:org.jboss.seam.xml.test.method">
-
- <veto>
- <test:MethodTarget/>
- </veto>
-
- <test:Qualifier1>
- <Qualifier/>
- </test:Qualifier1>
-
- <test:Qualifier2>
- <Qualifier/>
- </test:Qualifier2>
-
+<Beans xmlns="urn:seam:core" xmlns:test="urn:java:org.jboss.seam.xml.test.method">
+
+ <veto>
+ <test:MethodTarget />
+ </veto>
+
+ <test:Qualifier1>
+ <Qualifier />
+ </test:Qualifier1>
+
+ <test:Qualifier2>
+ <Qualifier />
+ </test:Qualifier2>
+
<test:MethodBean>
<test:method>
- <Produces/>
+ <Produces />
</test:method>
-
+
<test:method>
- <Produces/>
- <test:Qualifier1/>
- <test:MethodValueBean>
- <test:Qualifier2/>
- </test:MethodValueBean>
+ <Produces />
+ <test:Qualifier1 />
+ <parameters>
+ <test:MethodValueBean>
+ <test:Qualifier2 />
+ </test:MethodValueBean>
+ </parameters>
</test:method>
-
+
<test:method>
- <Produces/>
- <test:Qualifier1/>
- <array dimensions="2">
- <test:Qualifier2/>
- <test:MethodValueBean/>
- </array>
+ <Produces />
+ <test:Qualifier1 />
+ <parameters>
+ <array dimensions="2">
+ <test:Qualifier2 />
+ <test:MethodValueBean />
+ </array>
+ </parameters>
</test:method>
-
+
</test:MethodBean>
-
+
<test:MethodTarget>
- <test:value1><Inject/></test:value1>
- <test:value2><Inject/><test:Qualifier1/></test:value2>
- <test:longValue><Inject/><test:Qualifier1/></test:longValue>
+ <test:value1>
+ <Inject />
+ </test:value1>
+ <test:value2>
+ <Inject />
+ <test:Qualifier1 />
+ </test:value2>
+ <test:longValue>
+ <Inject />
+ <test:Qualifier1 />
+ </test:longValue>
</test:MethodTarget>
-
+
<test:MethodValueBean>
- <test:Qualifier2/>
+ <test:Qualifier2 />
</test:MethodValueBean>
</Beans>
\ No newline at end of file
Modified: modules/xml/trunk/src/test/resources/org/jboss/seam/xml/test/method/primitive-method-beans.xml
===================================================================
--- modules/xml/trunk/src/test/resources/org/jboss/seam/xml/test/method/primitive-method-beans.xml 2010-03-05 04:30:50 UTC (rev 12099)
+++ modules/xml/trunk/src/test/resources/org/jboss/seam/xml/test/method/primitive-method-beans.xml 2010-03-05 04:48:01 UTC (rev 12100)
@@ -15,14 +15,18 @@
<test:add>
<Produces/>
<test:Qualifier1/>
- <int/>
+ <parameters>
+ <int/>
+ </parameters>
</test:add>
<test:add>
<Produces/>
- <test:Qualifier2/>
- <array>
- <int/>
- </array>
+ <test:Qualifier2/>
+ <parameters>
+ <array>
+ <int/>
+ </array>
+ </parameters>
</test:add>
</test:PrimitiveBean>
More information about the seam-commits
mailing list