[seam-commits] Seam SVN: r8656 - trunk/src/main/org/jboss/seam.

seam-commits at lists.jboss.org seam-commits at lists.jboss.org
Mon Aug 11 16:55:35 EDT 2008


Author: norman.richards at jboss.com
Date: 2008-08-11 16:55:35 -0400 (Mon, 11 Aug 2008)
New Revision: 8656

Modified:
   trunk/src/main/org/jboss/seam/Component.java
Log:
JBSEAM-3163

Modified: trunk/src/main/org/jboss/seam/Component.java
===================================================================
--- trunk/src/main/org/jboss/seam/Component.java	2008-08-11 19:45:50 UTC (rev 8655)
+++ trunk/src/main/org/jboss/seam/Component.java	2008-08-11 20:55:35 UTC (rev 8656)
@@ -502,7 +502,11 @@
       }
       else if ( propertyValue.isMultiValued() )
       {
-         return new ListInitialValue(propertyValue, parameterClass, parameterType);
+          if (Set.class.isAssignableFrom(parameterClass)) {
+             return new SetInitialValue(propertyValue, parameterClass, parameterType);
+          } else {
+             return new ListInitialValue(propertyValue, parameterClass, parameterType);
+          }
       }
       else if ( propertyValue.isAssociativeValued() )
       {
@@ -2464,6 +2468,39 @@
 
    }
 
+   static class SetInitialValue implements InitialValue
+   {
+      private InitialValue[] initialValues;
+      private Class elementType;
+
+      public SetInitialValue(PropertyValue propertyValue, Class collectionClass, Type collectionType)
+      {
+         String[] expressions = propertyValue.getMultiValues();
+         initialValues = new InitialValue[expressions.length];
+         elementType = Reflections.getCollectionElementType(collectionType);
+         for ( int i=0; i<expressions.length; i++ )
+         {
+            PropertyValue elementValue = new Conversions.FlatPropertyValue( expressions[i] );
+            initialValues[i] = getInitialValue(elementValue, elementType, elementType);
+         }
+      }
+
+      public Object getValue(Class type)
+      {
+          Set set = new HashSet(initialValues.length);
+          for (InitialValue iv: initialValues) {
+              set.add( iv.getValue(elementType) );
+          }
+          return set;
+      }
+      
+      @Override
+      public String toString()
+      {
+         return "SetInitialValue(" + elementType.getSimpleName() + ")";
+      }
+   }
+   
    static class ListInitialValue implements InitialValue
    {
       private InitialValue[] initialValues;




More information about the seam-commits mailing list