[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