[seam-commits] Seam SVN: r12397 - in modules/xml/trunk: core/src/main/java/org/jboss/seam/xml/core and 7 other directories.
seam-commits at lists.jboss.org
seam-commits at lists.jboss.org
Mon Apr 5 17:35:25 EDT 2010
Author: swd847
Date: 2010-04-05 17:35:24 -0400 (Mon, 05 Apr 2010)
New Revision: 12397
Added:
modules/xml/trunk/core/src/test/java/org/jboss/seam/xml/test/iface/
modules/xml/trunk/core/src/test/java/org/jboss/seam/xml/test/iface/Interface1.java
modules/xml/trunk/core/src/test/java/org/jboss/seam/xml/test/iface/InterfaceBean.java
modules/xml/trunk/core/src/test/java/org/jboss/seam/xml/test/iface/InterfaceQualifier.java
modules/xml/trunk/core/src/test/java/org/jboss/seam/xml/test/iface/InterfaceTest.java
modules/xml/trunk/core/src/test/resources/org/jboss/seam/xml/test/iface/
modules/xml/trunk/core/src/test/resources/org/jboss/seam/xml/test/iface/interface-beans.xml
Modified:
modules/xml/trunk/core/src/main/java/org/jboss/seam/xml/bootstrap/XmlExtension.java
modules/xml/trunk/core/src/main/java/org/jboss/seam/xml/core/XmlResult.java
modules/xml/trunk/core/src/main/java/org/jboss/seam/xml/model/ModelBuilder.java
modules/xml/trunk/core/src/main/java/org/jboss/seam/xml/parser/namespace/RootNamespaceElementResolver.java
modules/xml/trunk/docs/
Log:
added interface config to XML extensions
Modified: modules/xml/trunk/core/src/main/java/org/jboss/seam/xml/bootstrap/XmlExtension.java
===================================================================
--- modules/xml/trunk/core/src/main/java/org/jboss/seam/xml/bootstrap/XmlExtension.java 2010-04-05 20:25:12 UTC (rev 12396)
+++ modules/xml/trunk/core/src/main/java/org/jboss/seam/xml/bootstrap/XmlExtension.java 2010-04-05 21:35:24 UTC (rev 12397)
@@ -33,6 +33,7 @@
import org.jboss.seam.xml.parser.SaxNode;
import org.jboss.seam.xml.util.FileDataReader;
import org.jboss.weld.extensions.util.AnnotationInstanceProvider;
+import org.jboss.weld.extensions.util.annotated.NewAnnotatedTypeBuilder;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
@@ -47,8 +48,6 @@
Set<Class<?>> veto = new HashSet<Class<?>>();
- Map<Class<?>, AnnotatedType<?>> types = new HashMap<Class<?>, AnnotatedType<?>>();
-
int count = 0;
private static final Logger log = LoggerFactory.getLogger(XmlExtension.class);
@@ -130,7 +129,6 @@
AnnotatedType<?> tp = bb.getBuilder().create();
log.info("Adding XML definied bean: " + tp.getJavaClass().getName());
event.addAnnotatedType(tp);
- types.put(tp.getJavaClass(), tp);
}
veto.addAll(r.getVeto());
@@ -146,6 +144,23 @@
log.info("Preventing installation of default bean: " + event.getAnnotatedType().getJavaClass().getName());
event.veto();
}
+ boolean found = false;
+ NewAnnotatedTypeBuilder builder = new NewAnnotatedTypeBuilder(event.getAnnotatedType());
+ for (XmlResult r : results)
+ {
+ for (BeanResult<?> i : r.getInterfaces())
+ {
+ if (i.getType().isAssignableFrom(event.getAnnotatedType().getJavaClass()))
+ {
+ found = true;
+ builder.mergeAnnotations(i.getBuilder().create(), true);
+ }
+ }
+ }
+ if (found)
+ {
+ event.setAnnotatedType(builder.create());
+ }
}
@@ -160,7 +175,18 @@
List<FieldValueObject> fvs = fieldValues.get(xid.value());
event.setInjectionTarget(new InjectionTargetWrapper<T>(event.getInjectionTarget(), fvs));
}
-
+ for (XmlResult r : results)
+ {
+ for (Entry<Class<?>, List<FieldValueObject>> e : r.getInterfaceFieldValues().entrySet())
+ {
+ if (e.getKey().isAssignableFrom(event.getAnnotatedType().getJavaClass()))
+ {
+ log.info("Wrapping InjectionTarget to set field values based on interface " + e.getKey().getName() + ": " + event.getAnnotatedType().getJavaClass().getName());
+ List<FieldValueObject> fvs = e.getValue();
+ event.setInjectionTarget(new InjectionTargetWrapper<T>(event.getInjectionTarget(), fvs));
+ }
+ }
+ }
}
public void processAfterBeanDeployment(@Observes AfterBeanDiscovery event)
Modified: modules/xml/trunk/core/src/main/java/org/jboss/seam/xml/core/XmlResult.java
===================================================================
--- modules/xml/trunk/core/src/main/java/org/jboss/seam/xml/core/XmlResult.java 2010-04-05 20:25:12 UTC (rev 12396)
+++ modules/xml/trunk/core/src/main/java/org/jboss/seam/xml/core/XmlResult.java 2010-04-05 21:35:24 UTC (rev 12397)
@@ -33,8 +33,12 @@
List<BeanResult<?>> beans = new ArrayList<BeanResult<?>>();
+ List<BeanResult<?>> interfaces = new ArrayList<BeanResult<?>>();
+
Map<BeanResult<?>, List<FieldValueObject>> fieldValues = new HashMap<BeanResult<?>, List<FieldValueObject>>();
+ Map<Class<?>, List<FieldValueObject>> interfaceFieldValues = new HashMap<Class<?>, List<FieldValueObject>>();
+
public Map<Class<? extends Annotation>, Annotation[]> getStereotypes()
{
return stereotypes;
@@ -80,4 +84,14 @@
return veto;
}
+ public List<BeanResult<?>> getInterfaces()
+ {
+ return interfaces;
+ }
+
+ public Map<Class<?>, List<FieldValueObject>> getInterfaceFieldValues()
+ {
+ return interfaceFieldValues;
+ }
+
}
Modified: modules/xml/trunk/core/src/main/java/org/jboss/seam/xml/model/ModelBuilder.java
===================================================================
--- modules/xml/trunk/core/src/main/java/org/jboss/seam/xml/model/ModelBuilder.java 2010-04-05 20:25:12 UTC (rev 12396)
+++ modules/xml/trunk/core/src/main/java/org/jboss/seam/xml/model/ModelBuilder.java 2010-04-05 21:35:24 UTC (rev 12397)
@@ -7,10 +7,8 @@
import java.lang.annotation.Annotation;
import java.lang.reflect.Constructor;
import java.lang.reflect.Method;
-import java.lang.reflect.Type;
import java.util.ArrayList;
import java.util.HashMap;
-import java.util.HashSet;
import java.util.List;
import java.util.Map;
import java.util.Set;
@@ -107,7 +105,14 @@
if (type == ResultType.BEAN)
{
BeanResult<?> tp = buildAnnotatedType((ClassXmlItem) rb);
- ret.getBeans().add(tp);
+ if (rb.getJavaClass().isInterface())
+ {
+ ret.getInterfaces().add(tp);
+ }
+ else
+ {
+ ret.getBeans().add(tp);
+ }
if (tp.isOverride() || tp.isExtend())
{
ret.addVeto(tp.getType());
@@ -131,7 +136,14 @@
}
if (!fields.isEmpty())
{
- ret.getFieldValues().put(tp, fields);
+ if (rb.getJavaClass().isInterface())
+ {
+ ret.getInterfaceFieldValues().put(tp.getType(), fields);
+ }
+ else
+ {
+ ret.getFieldValues().put(tp, fields);
+ }
}
}
else if (type == ResultType.QUALIFIER)
@@ -294,7 +306,6 @@
}
if (!types.isEmpty())
{
- Set<Type> fieldTypes = new HashSet<Type>();
List<ClassXmlItem> overridenTypes = types.get(0).getChildrenOfType(ClassXmlItem.class);
if (overridenTypes.size() != 1)
{
@@ -336,7 +347,6 @@
}
if (!types.isEmpty())
{
- Set<Type> fieldTypes = new HashSet<Type>();
List<ClassXmlItem> overridenTypes = types.get(0).getChildrenOfType(ClassXmlItem.class);
if (overridenTypes.size() != 1)
{
@@ -373,7 +383,6 @@
}
if (!types.isEmpty())
{
- Set<Type> fieldTypes = new HashSet<Type>();
List<ClassXmlItem> overridenTypes = types.get(0).getChildrenOfType(ClassXmlItem.class);
if (overridenTypes.size() != 1)
{
Modified: modules/xml/trunk/core/src/main/java/org/jboss/seam/xml/parser/namespace/RootNamespaceElementResolver.java
===================================================================
--- modules/xml/trunk/core/src/main/java/org/jboss/seam/xml/parser/namespace/RootNamespaceElementResolver.java 2010-04-05 20:25:12 UTC (rev 12396)
+++ modules/xml/trunk/core/src/main/java/org/jboss/seam/xml/parser/namespace/RootNamespaceElementResolver.java 2010-04-05 21:35:24 UTC (rev 12397)
@@ -76,7 +76,7 @@
// now deal with primitive types
- Class primType = null;
+ Class<?> primType = null;
if (item.equals("int"))
{
primType = int.class;
Added: modules/xml/trunk/core/src/test/java/org/jboss/seam/xml/test/iface/Interface1.java
===================================================================
--- modules/xml/trunk/core/src/test/java/org/jboss/seam/xml/test/iface/Interface1.java (rev 0)
+++ modules/xml/trunk/core/src/test/java/org/jboss/seam/xml/test/iface/Interface1.java 2010-04-05 21:35:24 UTC (rev 12397)
@@ -0,0 +1,9 @@
+package org.jboss.seam.xml.test.iface;
+
+public interface Interface1
+{
+ public String value();
+
+ public void setMessage(String value);
+
+}
Added: modules/xml/trunk/core/src/test/java/org/jboss/seam/xml/test/iface/InterfaceBean.java
===================================================================
--- modules/xml/trunk/core/src/test/java/org/jboss/seam/xml/test/iface/InterfaceBean.java (rev 0)
+++ modules/xml/trunk/core/src/test/java/org/jboss/seam/xml/test/iface/InterfaceBean.java 2010-04-05 21:35:24 UTC (rev 12397)
@@ -0,0 +1,18 @@
+package org.jboss.seam.xml.test.iface;
+
+public class InterfaceBean implements Interface1
+{
+
+ String message;
+
+ public void setMessage(String value)
+ {
+ this.message = value;
+ }
+
+ public String value()
+ {
+ return "hi world";
+ }
+
+}
Added: modules/xml/trunk/core/src/test/java/org/jboss/seam/xml/test/iface/InterfaceQualifier.java
===================================================================
--- modules/xml/trunk/core/src/test/java/org/jboss/seam/xml/test/iface/InterfaceQualifier.java (rev 0)
+++ modules/xml/trunk/core/src/test/java/org/jboss/seam/xml/test/iface/InterfaceQualifier.java 2010-04-05 21:35:24 UTC (rev 12397)
@@ -0,0 +1,13 @@
+package org.jboss.seam.xml.test.iface;
+
+import java.lang.annotation.Retention;
+import java.lang.annotation.RetentionPolicy;
+
+import javax.inject.Qualifier;
+
+ at Qualifier
+ at Retention(RetentionPolicy.RUNTIME)
+public @interface InterfaceQualifier
+{
+
+}
Added: modules/xml/trunk/core/src/test/java/org/jboss/seam/xml/test/iface/InterfaceTest.java
===================================================================
--- modules/xml/trunk/core/src/test/java/org/jboss/seam/xml/test/iface/InterfaceTest.java (rev 0)
+++ modules/xml/trunk/core/src/test/java/org/jboss/seam/xml/test/iface/InterfaceTest.java 2010-04-05 21:35:24 UTC (rev 12397)
@@ -0,0 +1,30 @@
+package org.jboss.seam.xml.test.iface;
+
+import javax.enterprise.util.AnnotationLiteral;
+
+import org.jboss.seam.xml.test.AbstractXMLTest;
+import org.testng.annotations.Test;
+
+public class InterfaceTest extends AbstractXMLTest
+{
+
+ @Override
+ protected String getXmlFileName()
+ {
+ return "interface-beans.xml";
+ }
+
+ @Test
+ public void testInterfaceConfig()
+ {
+ InterfaceBean x = getReference(InterfaceBean.class, new AnnotationLiteral<InterfaceQualifier>()
+ {
+ });
+ assert x.message.equals("hello world");
+ String s = getReference(String.class, new AnnotationLiteral<InterfaceQualifier>()
+ {
+ });
+ assert s.equals("hi world");
+ }
+
+}
\ No newline at end of file
Added: modules/xml/trunk/core/src/test/resources/org/jboss/seam/xml/test/iface/interface-beans.xml
===================================================================
--- modules/xml/trunk/core/src/test/resources/org/jboss/seam/xml/test/iface/interface-beans.xml (rev 0)
+++ modules/xml/trunk/core/src/test/resources/org/jboss/seam/xml/test/iface/interface-beans.xml 2010-04-05 21:35:24 UTC (rev 12397)
@@ -0,0 +1,13 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<beans xmlns="urn:java:seam:core"
+ xmlns:test="urn:java:org.jboss.seam.xml.test.iface">
+
+
+ <test:Interface1>
+ <test:InterfaceQualifier/>
+ <test:message>hello world</test:message>
+ <test:value><Produces/><test:InterfaceQualifier/></test:value>
+ </test:Interface1>
+
+
+</beans>
\ No newline at end of file
Property changes on: modules/xml/trunk/docs
___________________________________________________________________
Name: svn:ignore
- target
.classpath
.project
.settings
+ target
.classpath
.project
.settings
xml-reference.pdf
More information about the seam-commits
mailing list