[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