[jboss-cvs] JBossAS SVN: r86636 - in projects/jboss-man/branches/Branch_2_1/managed/src: test/java/org/jboss/test/managed/factory/support and 1 other directories.

jboss-cvs-commits at lists.jboss.org jboss-cvs-commits at lists.jboss.org
Thu Apr 2 02:32:25 EDT 2009


Author: scott.stark at jboss.org
Date: 2009-04-02 02:32:25 -0400 (Thu, 02 Apr 2009)
New Revision: 86636

Modified:
   projects/jboss-man/branches/Branch_2_1/managed/src/main/java/org/jboss/managed/plugins/factory/DeploymentTemplateInfoFactory.java
   projects/jboss-man/branches/Branch_2_1/managed/src/test/java/org/jboss/test/managed/factory/support/ObjectNameBean.java
   projects/jboss-man/branches/Branch_2_1/managed/src/test/java/org/jboss/test/managed/factory/test/DeploymentTemplateInfoUnitTestCase.java
Log:
JBMAN-70, DeploymentTemplateInfoFactory needs to honor @MetaMapping


Modified: projects/jboss-man/branches/Branch_2_1/managed/src/main/java/org/jboss/managed/plugins/factory/DeploymentTemplateInfoFactory.java
===================================================================
--- projects/jboss-man/branches/Branch_2_1/managed/src/main/java/org/jboss/managed/plugins/factory/DeploymentTemplateInfoFactory.java	2009-04-02 06:31:06 UTC (rev 86635)
+++ projects/jboss-man/branches/Branch_2_1/managed/src/main/java/org/jboss/managed/plugins/factory/DeploymentTemplateInfoFactory.java	2009-04-02 06:32:25 UTC (rev 86636)
@@ -46,11 +46,15 @@
 import org.jboss.managed.plugins.WritethroughManagedPropertyImpl;
 import org.jboss.managed.spi.factory.ManagedPropertyConstraintsPopulator;
 import org.jboss.managed.spi.factory.ManagedPropertyConstraintsPopulatorFactory;
+import org.jboss.metatype.api.annotations.MetaMapping;
+import org.jboss.metatype.api.annotations.MetaMappingFactory;
 import org.jboss.metatype.api.types.ArrayMetaType;
 import org.jboss.metatype.api.types.CollectionMetaType;
 import org.jboss.metatype.api.types.MetaType;
 import org.jboss.metatype.api.types.MetaTypeFactory;
 import org.jboss.metatype.api.values.MetaValueFactory;
+import org.jboss.metatype.spi.values.MetaMapper;
+import org.jboss.metatype.spi.values.MetaMapperFactory;
 import org.jboss.reflect.spi.TypeInfo;
 
 /**
@@ -252,21 +256,63 @@
          if (managementProperty != null)
             managed = managementProperty.managed();
          
-         MetaType metaType;
-         if (managed)
+         // The managed property type
+         MetaType metaType = null;
+         MetaMapper<?> metaMapper = null;
+         MetaMapping metaMapping = propertyInfo.getUnderlyingAnnotation(MetaMapping.class);
+         MetaMappingFactory metaMappingFactory = propertyInfo.getUnderlyingAnnotation(MetaMappingFactory.class);
+         if(metaMappingFactory != null)
          {
-            TypeInfo typeInfo = propertyInfo.getType();
-            if(typeInfo.isArray())
-               metaType = new ArrayMetaType(1, AbstractManagedObjectFactory.MANAGED_OBJECT_META_TYPE);
-            else if (typeInfo.isCollection())
-               metaType = new CollectionMetaType(typeInfo.getName(), AbstractManagedObjectFactory.MANAGED_OBJECT_META_TYPE);
-            else
-               metaType = AbstractManagedObjectFactory.MANAGED_OBJECT_META_TYPE;
+            Class<? extends MetaMapperFactory<?>> mmfClass = metaMappingFactory.value();
+            try
+            {
+               MetaMapperFactory<?> mmf = mmfClass.newInstance();
+               String[] args = metaMappingFactory.args();
+               if(args.length > 0)
+                  metaMapper = mmf.newInstance(args);
+               else
+                  metaMapper = mmf.newInstance();
+            }
+            catch(Exception e)
+            {
+               log.debug("Failed to create MetaMapperFactory: "+metaMappingFactory, e);
+            }
          }
-         else
+         if(metaMapping != null)
          {
-            metaType = metaTypeFactory.resolve(propertyInfo.getType());
+            // Use the mapping for the type
+            Class<? extends MetaMapper<?>> mapperClass = metaMapping.value();
+            try
+            {
+               metaMapper = mapperClass.newInstance();
+            }
+            catch(Exception e)
+            {
+               log.debug("Failed to create MetaMapper: "+metaMapping, e);
+            }
          }
+         if(metaMapper != null)
+            metaType = metaMapper.getMetaType();
+
+         // Determine meta type based on property type
+         if(metaType == null)
+         {
+            if (managed)
+            {
+               TypeInfo typeInfo = propertyInfo.getType();
+               if(typeInfo.isArray())
+                  metaType = new ArrayMetaType(1, AbstractManagedObjectFactory.MANAGED_OBJECT_META_TYPE);
+               else if (typeInfo.isCollection())
+                  metaType = new CollectionMetaType(typeInfo.getName(), AbstractManagedObjectFactory.MANAGED_OBJECT_META_TYPE);
+               else
+                  metaType = AbstractManagedObjectFactory.MANAGED_OBJECT_META_TYPE;
+            }
+            else
+            {
+               metaType = metaTypeFactory.resolve(propertyInfo.getType());
+            }
+         }
+
          fields.setField(Fields.META_TYPE, metaType);
          if (propAnnotations.isEmpty() == false)
             fields.setField(Fields.ANNOTATIONS, propAnnotations);

Modified: projects/jboss-man/branches/Branch_2_1/managed/src/test/java/org/jboss/test/managed/factory/support/ObjectNameBean.java
===================================================================
--- projects/jboss-man/branches/Branch_2_1/managed/src/test/java/org/jboss/test/managed/factory/support/ObjectNameBean.java	2009-04-02 06:31:06 UTC (rev 86635)
+++ projects/jboss-man/branches/Branch_2_1/managed/src/test/java/org/jboss/test/managed/factory/support/ObjectNameBean.java	2009-04-02 06:32:25 UTC (rev 86636)
@@ -46,7 +46,7 @@
    private ObjectName nameAsProperties;
    private ObjectName nameAsDefault;
 
-   @ManagementProperty()
+   @ManagementProperty(includeInTemplate=true)
    @MetaMapping(StringObjectNameMetaMapper.class)
    public ObjectName getNameAsString()
    {

Modified: projects/jboss-man/branches/Branch_2_1/managed/src/test/java/org/jboss/test/managed/factory/test/DeploymentTemplateInfoUnitTestCase.java
===================================================================
--- projects/jboss-man/branches/Branch_2_1/managed/src/test/java/org/jboss/test/managed/factory/test/DeploymentTemplateInfoUnitTestCase.java	2009-04-02 06:31:06 UTC (rev 86635)
+++ projects/jboss-man/branches/Branch_2_1/managed/src/test/java/org/jboss/test/managed/factory/test/DeploymentTemplateInfoUnitTestCase.java	2009-04-02 06:32:25 UTC (rev 86636)
@@ -29,10 +29,12 @@
 import org.jboss.managed.api.ManagedObject;
 import org.jboss.managed.api.ManagedProperty;
 import org.jboss.managed.plugins.factory.DeploymentTemplateInfoFactory;
+import org.jboss.metatype.api.types.SimpleMetaType;
 import org.jboss.metatype.api.values.MetaValue;
 import org.jboss.metatype.api.values.SimpleValueSupport;
 import org.jboss.test.managed.factory.AbstractManagedObjectFactoryTest;
 import org.jboss.test.managed.factory.support.JmsDestinationTemplateInfo;
+import org.jboss.test.managed.factory.support.ObjectNameBean;
 import org.jboss.test.managed.factory.support.template.ManagementObjectExplicit;
 
 
@@ -89,6 +91,22 @@
       assertEquals("testReflectionOfExplicit", info.getDescription());
       assertTrue("property1 is in template info", info.getProperties().containsKey("property1"));      
    }
+   /**
+    * Validate that the template factory honors the MetaMappings for ObjectName
+    */
+   public void testReflectionOfObjectName()
+      throws Exception
+   {
+      DeploymentTemplateInfoFactory factory = new DeploymentTemplateInfoFactory();
+      DeploymentTemplateInfo info = factory.createTemplateInfo(ObjectNameBean.class, "testReflectionOfObjectName", "testReflectionOfObjectName");
+      log.info(info);
+      assertEquals("testReflectionOfObjectName", info.getName());
+      assertEquals("testReflectionOfObjectName", info.getDescription());
+      Map<String, ManagedProperty> props = info.getProperties();
+      ManagedProperty nameAsString = props.get("nameAsString");
+      assertNotNull(nameAsString);
+      assertEquals(SimpleMetaType.STRING, nameAsString.getMetaType());
+   }
 
    public void testCopy()
    {




More information about the jboss-cvs-commits mailing list