[jboss-cvs] JBossAS SVN: r68203 - in projects/microcontainer/trunk/metatype/src: tests/org/jboss/test/metatype/values/factory/test and 1 other directory.

jboss-cvs-commits at lists.jboss.org jboss-cvs-commits at lists.jboss.org
Wed Dec 12 16:26:27 EST 2007


Author: alesj
Date: 2007-12-12 16:26:26 -0500 (Wed, 12 Dec 2007)
New Revision: 68203

Modified:
   projects/microcontainer/trunk/metatype/src/main/org/jboss/metatype/plugins/values/DefaultMetaValueFactory.java
   projects/microcontainer/trunk/metatype/src/tests/org/jboss/test/metatype/values/factory/test/UnwrapValueUnitTestCase.java
Log:
Initial table type support.

Modified: projects/microcontainer/trunk/metatype/src/main/org/jboss/metatype/plugins/values/DefaultMetaValueFactory.java
===================================================================
--- projects/microcontainer/trunk/metatype/src/main/org/jboss/metatype/plugins/values/DefaultMetaValueFactory.java	2007-12-12 21:01:31 UTC (rev 68202)
+++ projects/microcontainer/trunk/metatype/src/main/org/jboss/metatype/plugins/values/DefaultMetaValueFactory.java	2007-12-12 21:26:26 UTC (rev 68203)
@@ -24,27 +24,28 @@
 import java.io.Serializable;
 import java.lang.ref.WeakReference;
 import java.lang.reflect.Array;
+import java.lang.reflect.InvocationHandler;
+import java.lang.reflect.Proxy;
 import java.lang.reflect.Type;
 import java.lang.reflect.UndeclaredThrowableException;
-import java.lang.reflect.Proxy;
-import java.lang.reflect.InvocationHandler;
 import java.security.AccessController;
 import java.security.PrivilegedAction;
 import java.util.Collection;
 import java.util.HashMap;
 import java.util.Iterator;
+import java.util.List;
 import java.util.Map;
+import java.util.Set;
+import java.util.SortedSet;
 import java.util.Stack;
 import java.util.WeakHashMap;
-import java.util.List;
-import java.util.Set;
-import java.util.SortedSet;
 
 import org.jboss.beans.info.spi.BeanInfo;
 import org.jboss.beans.info.spi.PropertyInfo;
 import org.jboss.config.plugins.property.PropertyConfiguration;
 import org.jboss.config.spi.Configuration;
 import org.jboss.metatype.api.types.ArrayMetaType;
+import org.jboss.metatype.api.types.CollectionMetaType;
 import org.jboss.metatype.api.types.CompositeMetaType;
 import org.jboss.metatype.api.types.EnumMetaType;
 import org.jboss.metatype.api.types.GenericMetaType;
@@ -52,26 +53,26 @@
 import org.jboss.metatype.api.types.MetaTypeFactory;
 import org.jboss.metatype.api.types.SimpleMetaType;
 import org.jboss.metatype.api.types.TableMetaType;
-import org.jboss.metatype.api.types.CollectionMetaType;
 import org.jboss.metatype.api.values.ArrayValue;
 import org.jboss.metatype.api.values.ArrayValueSupport;
+import org.jboss.metatype.api.values.CollectionValue;
+import org.jboss.metatype.api.values.CollectionValueSupport;
 import org.jboss.metatype.api.values.CompositeValue;
 import org.jboss.metatype.api.values.CompositeValueSupport;
 import org.jboss.metatype.api.values.EnumValue;
 import org.jboss.metatype.api.values.EnumValueSupport;
 import org.jboss.metatype.api.values.GenericValue;
 import org.jboss.metatype.api.values.GenericValueSupport;
+import org.jboss.metatype.api.values.InstanceFactory;
 import org.jboss.metatype.api.values.MetaValue;
 import org.jboss.metatype.api.values.MetaValueFactory;
 import org.jboss.metatype.api.values.SimpleValue;
 import org.jboss.metatype.api.values.SimpleValueSupport;
 import org.jboss.metatype.api.values.TableValue;
 import org.jboss.metatype.api.values.TableValueSupport;
-import org.jboss.metatype.api.values.CollectionValue;
-import org.jboss.metatype.api.values.CollectionValueSupport;
-import org.jboss.metatype.api.values.InstanceFactory;
 import org.jboss.metatype.plugins.types.DefaultMetaTypeFactory;
 import org.jboss.metatype.spi.values.MetaValueBuilder;
+import org.jboss.reflect.plugins.introspection.ParameterizedClassInfo;
 import org.jboss.reflect.spi.ArrayInfo;
 import org.jboss.reflect.spi.ClassInfo;
 import org.jboss.reflect.spi.TypeInfo;
@@ -757,11 +758,48 @@
     */
    protected Object unwrapTable(TableValue tableValue, TypeInfo type)
    {
-      // TODO - impl this support
-      throw new UnsupportedOperationException("Cannot get unwrap value from " + tableValue + ", type unsupported.");
+      TableMetaType metaType = tableValue.getMetaType();
+      if (type instanceof ParameterizedClassInfo)
+      {
+         ParameterizedClassInfo parameterizedType = (ParameterizedClassInfo)type;
+         ClassInfo rawType = parameterizedType.getRawType();
+         if (Map.class.isAssignableFrom(rawType.getType()))
+         {
+            TypeInfo keyType = parameterizedType.getActualTypeArguments()[0];
+            TypeInfo valueType = parameterizedType.getActualTypeArguments()[1];
+            return createMap(metaType, keyType, valueType, tableValue);
+         }
+      }
+      throw new UnsupportedOperationException("Insufficient information to unwrap table: " + tableValue + ", " + type);
    }
 
    /**
+    * Create a map
+    *
+    * @param metaType the meta type
+    * @param keyType the key type
+    * @param valueType the value type
+    * @param tableValue the table value
+    * @param context the context
+    * @return the map
+    */
+   protected Map createMap(TableMetaType metaType, TypeInfo keyType, TypeInfo valueType, TableValue tableValue)
+   {
+      if (tableValue == null)
+         return null;
+
+      Map<Object, Object> result = new HashMap<Object, Object>();
+      Collection<CompositeValue> values = tableValue.values();
+      for (CompositeValue entry : values)
+      {
+         Object key = unwrap(entry.get(DefaultMetaTypeFactory.MAP_KEY), keyType);
+         Object val = unwrap(entry.get(DefaultMetaTypeFactory.MAP_VALUE), valueType);
+         result.put(key, val);
+      }
+      return result;
+   }
+
+   /**
     * Create new instance.
     *
     * @param beanInfo the bean info

Modified: projects/microcontainer/trunk/metatype/src/tests/org/jboss/test/metatype/values/factory/test/UnwrapValueUnitTestCase.java
===================================================================
--- projects/microcontainer/trunk/metatype/src/tests/org/jboss/test/metatype/values/factory/test/UnwrapValueUnitTestCase.java	2007-12-12 21:01:31 UTC (rev 68202)
+++ projects/microcontainer/trunk/metatype/src/tests/org/jboss/test/metatype/values/factory/test/UnwrapValueUnitTestCase.java	2007-12-12 21:26:26 UTC (rev 68203)
@@ -21,22 +21,26 @@
 */
 package org.jboss.test.metatype.values.factory.test;
 
+import java.lang.reflect.Method;
+import java.lang.reflect.Type;
 import java.util.ArrayList;
 import java.util.Arrays;
 import java.util.Collection;
+import java.util.Date;
+import java.util.HashMap;
 import java.util.HashSet;
 import java.util.List;
+import java.util.Map;
 import java.util.Set;
-import java.util.Date;
 
 import junit.framework.Test;
 import org.jboss.metatype.api.values.MetaValue;
+import org.jboss.test.metatype.values.factory.support.SimpleCompositeInterface;
 import org.jboss.test.metatype.values.factory.support.TestEnum;
 import org.jboss.test.metatype.values.factory.support.TestGeneric;
+import org.jboss.test.metatype.values.factory.support.TestRecursiveSimpleComposite;
 import org.jboss.test.metatype.values.factory.support.TestSimpleComposite;
-import org.jboss.test.metatype.values.factory.support.TestRecursiveSimpleComposite;
 import org.jboss.test.metatype.values.factory.support.TestSimpleCompositeInterface;
-import org.jboss.test.metatype.values.factory.support.SimpleCompositeInterface;
 
 /**
  * UnwrapValueUnitTestCase.
@@ -239,6 +243,21 @@
       checkArray(triple, false, tripleAsserter);
    }
 
+   public void testTableUnwrap() throws Exception
+   {
+      Method method = getClass().getMethod("compositeValueMap");
+      Type mapType = method.getGenericReturnType();
+
+      Map<Integer, String> map = new HashMap<Integer, String>();
+      map.put(123, "123");
+      checkSingle(map, mapType);
+   }
+
+   public Map<Integer, String> compositeValueMap()
+   {
+      return null;
+   }
+
    protected void checkSingle(Object object, boolean typeInfoFromObject)
    {
       MetaValue metaValue = createMetaValue(object);
@@ -251,11 +270,11 @@
       assertEquals(object, unwrapped);
    }
 
-   protected void checkSingle(Object object, Class<?> clazz)
+   protected void checkSingle(Object object, Type type)
    {
-      MetaValue metaValue = createMetaValue(object, clazz);
+      MetaValue metaValue = createMetaValue(object, type);
       assertNotNull(metaValue);
-      Object unwrapped = unwrapMetaValue(metaValue, clazz);
+      Object unwrapped = unwrapMetaValue(metaValue, type);
       assertEquals(object, unwrapped);
    }
 




More information about the jboss-cvs-commits mailing list