[jboss-cvs] JBossAS SVN: r93637 - in projects/jboss-man/trunk: managed/src/main/java/org/jboss/managed/plugins and 7 other directories.

jboss-cvs-commits at lists.jboss.org jboss-cvs-commits at lists.jboss.org
Thu Sep 17 07:40:17 EDT 2009


Author: emuckenhuber
Date: 2009-09-17 07:40:17 -0400 (Thu, 17 Sep 2009)
New Revision: 93637

Modified:
   projects/jboss-man/trunk/managed/src/main/java/org/jboss/managed/api/ManagedOperation.java
   projects/jboss-man/trunk/managed/src/main/java/org/jboss/managed/plugins/ManagedObjectImpl.java
   projects/jboss-man/trunk/managed/src/test/java/org/jboss/test/managed/factory/support/deployment/JmsDestination.java
   projects/jboss-man/trunk/managed/src/test/java/org/jboss/test/managed/factory/support/deployment/QueueDestination.java
   projects/jboss-man/trunk/managed/src/test/java/org/jboss/test/managed/factory/test/AbstractManagedObjectFactoryUnitTestCase.java
   projects/jboss-man/trunk/managed/src/test/java/org/jboss/test/managed/factory/test/ManagementObjectUnitTestCase.java
   projects/jboss-man/trunk/managed/src/test/java/org/jboss/test/managed/factory/test/ManagementPropertyUnitTestCase.java
   projects/jboss-man/trunk/metatype/src/main/java/org/jboss/metatype/api/types/MetaType.java
   projects/jboss-man/trunk/metatype/src/main/java/org/jboss/metatype/api/values/CompositeValue.java
   projects/jboss-man/trunk/metatype/src/main/java/org/jboss/metatype/api/values/CompositeValueSupport.java
   projects/jboss-man/trunk/metatype/src/main/java/org/jboss/metatype/api/values/MetaValueFactory.java
   projects/jboss-man/trunk/metatype/src/main/java/org/jboss/metatype/plugins/values/CompositeValueInvocationHandler.java
   projects/jboss-man/trunk/metatype/src/main/java/org/jboss/metatype/plugins/values/mappers/ObjectNameMetaMapper.java
   projects/jboss-man/trunk/metatype/src/test/java/org/jboss/test/metatype/values/factory/test/CompositeValueFactoryUnitTestCase.java
Log:
merge with 2_1 branch

Modified: projects/jboss-man/trunk/managed/src/main/java/org/jboss/managed/api/ManagedOperation.java
===================================================================
--- projects/jboss-man/trunk/managed/src/main/java/org/jboss/managed/api/ManagedOperation.java	2009-09-17 10:36:36 UTC (rev 93636)
+++ projects/jboss-man/trunk/managed/src/main/java/org/jboss/managed/api/ManagedOperation.java	2009-09-17 11:40:17 UTC (rev 93637)
@@ -44,6 +44,8 @@
       ReadWrite,
       /** The impact is to modify the ManagedObject */
       WriteOnly,
+      /** The operation affects the component life-cycle/runtime state */
+      Lifecycle,
       /** The impact is not known */
       Unknown
    };

Modified: projects/jboss-man/trunk/managed/src/main/java/org/jboss/managed/plugins/ManagedObjectImpl.java
===================================================================
--- projects/jboss-man/trunk/managed/src/main/java/org/jboss/managed/plugins/ManagedObjectImpl.java	2009-09-17 10:36:36 UTC (rev 93636)
+++ projects/jboss-man/trunk/managed/src/main/java/org/jboss/managed/plugins/ManagedObjectImpl.java	2009-09-17 11:40:17 UTC (rev 93637)
@@ -97,6 +97,12 @@
     * @param operations the operations
     */
    public ManagedObjectImpl(String name, Set<ManagedProperty> properties,
+         Set<ManagedOperation> operations)
+   {
+      this(name, name, null, properties, operations, null);
+   }
+   @Deprecated
+   public ManagedObjectImpl(String name, Set<ManagedProperty> properties,
          HashSet<ManagedOperation> operations)
    {
       this(name, name, null, properties, operations, null);
@@ -117,6 +123,18 @@
          String nameType,
          String attachmentName,
          Set<ManagedProperty> properties,
+         Set<ManagedOperation> operations,
+         Object attachment
+   )
+   {
+      this(name, nameType, attachmentName, toMap(properties), operations, attachment);
+   }
+   @Deprecated
+   public ManagedObjectImpl(
+         String name,
+         String nameType,
+         String attachmentName,
+         Set<ManagedProperty> properties,
          HashSet<ManagedOperation> operations,
          Serializable attachment
    )
@@ -139,15 +157,15 @@
          String nameType,
          String attachmentName,
          Map<String, ManagedProperty> properties,
-         HashSet<ManagedOperation> operations,
-         Serializable attachment
+         Set<ManagedOperation> operations,
+         Object attachment
    )
    {
       if (name == null)
          throw new IllegalArgumentException("Null name");
       if (properties == null)
          throw new IllegalArgumentException("Null properties");
-      
+
       this.name = name;
       // todo - check for null?
       this.nameType = nameType;
@@ -156,6 +174,18 @@
       this.operations = operations;
       setAttachment(attachment);
    }
+   @Deprecated
+   public ManagedObjectImpl(
+         String name,
+         String nameType,
+         String attachmentName,
+         Map<String, ManagedProperty> properties,
+         HashSet<ManagedOperation> operations,
+         Serializable attachment
+   )
+   {
+      this(name, name, attachmentName, properties, (Set<ManagedOperation>)operations, attachment);      
+   }
 
    public String getName()
    {

Modified: projects/jboss-man/trunk/managed/src/test/java/org/jboss/test/managed/factory/support/deployment/JmsDestination.java
===================================================================
--- projects/jboss-man/trunk/managed/src/test/java/org/jboss/test/managed/factory/support/deployment/JmsDestination.java	2009-09-17 10:36:36 UTC (rev 93636)
+++ projects/jboss-man/trunk/managed/src/test/java/org/jboss/test/managed/factory/support/deployment/JmsDestination.java	2009-09-17 11:40:17 UTC (rev 93637)
@@ -25,7 +25,9 @@
 
 import javax.management.ObjectName;
 
+import org.jboss.managed.api.ManagedOperation.Impact;
 import org.jboss.managed.api.annotation.ManagementObject;
+import org.jboss.managed.api.annotation.ManagementOperation;
 import org.jboss.managed.api.annotation.ManagementProperty;
 import org.jboss.managed.api.annotation.RunStateProperty;
 import org.jboss.managed.api.annotation.ViewUse;
@@ -99,4 +101,15 @@
    {
       this.domain = domain;
    }
+
+   @ManagementOperation(description="start the destination", impact=Impact.Lifecycle)
+   public void start()
+   {
+      
+   }
+   @ManagementOperation(description="stop the destination", impact=Impact.Lifecycle)
+   public void stop()
+   {
+      
+   }
 }

Modified: projects/jboss-man/trunk/managed/src/test/java/org/jboss/test/managed/factory/support/deployment/QueueDestination.java
===================================================================
--- projects/jboss-man/trunk/managed/src/test/java/org/jboss/test/managed/factory/support/deployment/QueueDestination.java	2009-09-17 10:36:36 UTC (rev 93636)
+++ projects/jboss-man/trunk/managed/src/test/java/org/jboss/test/managed/factory/support/deployment/QueueDestination.java	2009-09-17 11:40:17 UTC (rev 93637)
@@ -27,6 +27,7 @@
 
 import javax.management.ObjectName;
 
+import org.jboss.managed.api.ManagedOperation.Impact;
 import org.jboss.managed.api.annotation.ManagementComponent;
 import org.jboss.managed.api.annotation.ManagementObject;
 import org.jboss.managed.api.annotation.ManagementOperation;
@@ -43,7 +44,7 @@
 {
    private static final long serialVersionUID = 1;
 
-   @ManagementOperation(description="List all undelivered msgs")
+   @ManagementOperation(description="List all undelivered msgs", impact=Impact.ReadOnly)
    @MetaMapping(MessageListMapper.class)
    public List listAllMessages()
    {
@@ -52,7 +53,7 @@
       return msgs;
    }
 
-   @ManagementOperation(description="List all undelivered msgs")
+   @ManagementOperation(description="List all undelivered msgs", impact=Impact.ReadOnly)
    @MetaMapping(MessageListMapper.class)
    public List listAllMessages(@MetaMapping(StringObjectNameMetaMapper.class) ObjectName x)
    {

Modified: projects/jboss-man/trunk/managed/src/test/java/org/jboss/test/managed/factory/test/AbstractManagedObjectFactoryUnitTestCase.java
===================================================================
--- projects/jboss-man/trunk/managed/src/test/java/org/jboss/test/managed/factory/test/AbstractManagedObjectFactoryUnitTestCase.java	2009-09-17 10:36:36 UTC (rev 93636)
+++ projects/jboss-man/trunk/managed/src/test/java/org/jboss/test/managed/factory/test/AbstractManagedObjectFactoryUnitTestCase.java	2009-09-17 11:40:17 UTC (rev 93637)
@@ -39,6 +39,7 @@
 import org.jboss.managed.api.ManagedOperation;
 import org.jboss.managed.api.ManagedParameter;
 import org.jboss.managed.api.ManagedProperty;
+import org.jboss.managed.api.ManagedOperation.Impact;
 import org.jboss.managed.api.annotation.ManagementComponent;
 import org.jboss.managed.api.annotation.ManagementObject;
 import org.jboss.managed.api.factory.ManagedObjectFactory;
@@ -271,7 +272,7 @@
       assertEquals("java:/jaas/JMS2", q1.getDomain().getDomain());
    }
    
-   public void testManagedObjectReturnType()
+   public void testManagedOperationReturnType()
    {
       QueueDestination q1 = new QueueDestination();
       q1.setJndiName("queues/Q1");
@@ -288,7 +289,7 @@
       assertTrue(returnTypeMapper instanceof MessageListMapper);
    }
 
-   public void testManagedObjectParamsType()
+   public void testManagedOperationParamsType()
    {
       QueueDestination q1 = new QueueDestination();
       q1.setJndiName("queues/Q1");
@@ -308,6 +309,25 @@
       assertTrue(mapper instanceof StringObjectNameMetaMapper);
    }
 
+   public void testManagedOperationImpact()
+   {
+      QueueDestination q1 = new QueueDestination();
+      q1.setJndiName("queues/Q1");
+      q1.setDomain(new SecurityDomain("java:/jaas/JMS"));
+
+      ManagedObject q1MO = initManagedObject(q1);
+      Set<ManagedOperation> ops = q1MO.getOperations();
+      ManagedOperation listAllMessages = ManagedOperationMatcher.findOperation(ops, "listAllMessages", SimpleMetaType.STRING);
+      assertNotNull(listAllMessages);
+      Impact lamImpact = listAllMessages.getImpact();
+      assertEquals(Impact.ReadOnly, lamImpact);
+
+      ManagedOperation start = ManagedOperationMatcher.findOperation(ops, "start");
+      assertNotNull(start);
+      Impact startImpact = start.getImpact();
+      assertEquals(Impact.Lifecycle, startImpact);      
+   }
+
    /**
     * Test the transformer value of the ManagementRuntimeRef annotation when
     * there is a custom ICF

Modified: projects/jboss-man/trunk/managed/src/test/java/org/jboss/test/managed/factory/test/ManagementObjectUnitTestCase.java
===================================================================
--- projects/jboss-man/trunk/managed/src/test/java/org/jboss/test/managed/factory/test/ManagementObjectUnitTestCase.java	2009-09-17 10:36:36 UTC (rev 93636)
+++ projects/jboss-man/trunk/managed/src/test/java/org/jboss/test/managed/factory/test/ManagementObjectUnitTestCase.java	2009-09-17 11:40:17 UTC (rev 93637)
@@ -21,9 +21,16 @@
 */
 package org.jboss.test.managed.factory.test;
 
+import java.io.Serializable;
+import java.util.HashSet;
+import java.util.Set;
+
 import junit.framework.Test;
 
 import org.jboss.managed.api.ManagedObject;
+import org.jboss.managed.api.ManagedOperation;
+import org.jboss.managed.api.ManagedProperty;
+import org.jboss.managed.plugins.ManagedObjectImpl;
 import org.jboss.test.managed.factory.AbstractManagedObjectFactoryTest;
 import org.jboss.test.managed.factory.support.ManagementObjectChangedName;
 
@@ -63,4 +70,22 @@
       ManagedObject managedObject = createManagedObject(ManagementObjectChangedName.class);
       checkManagedObject(ManagementObjectChangedName.class, managedObject, "changed", null);
    }
-}
\ No newline at end of file
+
+   /**
+    * JBMAN-79
+    */
+   public void testDeprecatedCtor()
+   {
+      String name = "testDeprecatedCtor";
+      String nameType = null;
+      String attachmentName = "testDeprecatedCtor.attachment";
+      Set<ManagedProperty> props = null;
+      HashSet<ManagedOperation> ops = null;
+      Serializable attachment = null;
+      ManagedObjectImpl mo = new ManagedObjectImpl(name, nameType, attachmentName, props, ops, attachment);
+      
+      Set<ManagedOperation> ops2 = ops;
+      Object attachment2 = attachment;
+      ManagedObjectImpl mo2 = new ManagedObjectImpl(name, nameType, attachmentName, props, ops2, attachment2);
+   }
+}

Modified: projects/jboss-man/trunk/managed/src/test/java/org/jboss/test/managed/factory/test/ManagementPropertyUnitTestCase.java
===================================================================
--- projects/jboss-man/trunk/managed/src/test/java/org/jboss/test/managed/factory/test/ManagementPropertyUnitTestCase.java	2009-09-17 10:36:36 UTC (rev 93636)
+++ projects/jboss-man/trunk/managed/src/test/java/org/jboss/test/managed/factory/test/ManagementPropertyUnitTestCase.java	2009-09-17 11:40:17 UTC (rev 93637)
@@ -22,11 +22,9 @@
 package org.jboss.test.managed.factory.test;
 
 import java.lang.annotation.Annotation;
-import java.util.ArrayList;
 import java.util.Collection;
 import java.util.HashMap;
 import java.util.HashSet;
-import java.util.List;
 import java.util.Map;
 import java.util.Set;
 

Modified: projects/jboss-man/trunk/metatype/src/main/java/org/jboss/metatype/api/types/MetaType.java
===================================================================
--- projects/jboss-man/trunk/metatype/src/main/java/org/jboss/metatype/api/types/MetaType.java	2009-09-17 10:36:36 UTC (rev 93636)
+++ projects/jboss-man/trunk/metatype/src/main/java/org/jboss/metatype/api/types/MetaType.java	2009-09-17 11:40:17 UTC (rev 93637)
@@ -71,37 +71,38 @@
     * {@link CompositeValue}<br>
     * {@link TableValue}
     */
-   List<String> ALLOWED_CLASSNAMES = Collections.unmodifiableList(Arrays.asList(
-         Void.class.getName(),
-         Boolean.class.getName(),
-         Character.class.getName(),
-         Byte.class.getName(),
-         Short.class.getName(),
-         Integer.class.getName(),
-         Long.class.getName(),
-         Float.class.getName(),
-         Double.class.getName(),
-         boolean.class.getName(),
-         char.class.getName(),
-         byte.class.getName(),
-         short.class.getName(),
-         int.class.getName(),
-         long.class.getName(),
-         float.class.getName(),
-         double.class.getName(),
-         String.class.getName(),
-         Date.class.getName(),
-         BigDecimal.class.getName(),
-         BigInteger.class.getName(),
-         Properties.class.getName(),
-         Name.class.getName(),
-         SimpleValue.class.getName(),
-         EnumValue.class.getName(),
-         GenericValue.class.getName(),
-         ArrayValue.class.getName(),
-         CompositeValue.class.getName(),
-         TableValue.class.getName()
-   ));
+   List<String> ALLOWED_CLASSNAMES = Collections.unmodifiableList(Arrays.asList(new String[]
+   {
+      Void.class.getName(),
+      Boolean.class.getName(),
+      Character.class.getName(),
+      Byte.class.getName(),
+      Short.class.getName(),
+      Integer.class.getName(),
+      Long.class.getName(),
+      Float.class.getName(),
+      Double.class.getName(),
+      boolean.class.getName(),
+      char.class.getName(),
+      byte.class.getName(),
+      short.class.getName(),
+      int.class.getName(),
+      long.class.getName(),
+      float.class.getName(),
+      double.class.getName(),
+      String.class.getName(),
+      Date.class.getName(),
+      BigDecimal.class.getName(),
+      BigInteger.class.getName(),
+      Properties.class.getName(),
+      Name.class.getName(),
+      SimpleValue.class.getName(),
+      EnumValue.class.getName(),
+      GenericValue.class.getName(),
+      ArrayValue.class.getName(),
+      CompositeValue.class.getName(),
+      TableValue.class.getName()
+   }));
 
    /**
     * Retrieve the class name of the values of this meta

Modified: projects/jboss-man/trunk/metatype/src/main/java/org/jboss/metatype/api/values/CompositeValue.java
===================================================================
--- projects/jboss-man/trunk/metatype/src/main/java/org/jboss/metatype/api/values/CompositeValue.java	2009-09-17 10:36:36 UTC (rev 93636)
+++ projects/jboss-man/trunk/metatype/src/main/java/org/jboss/metatype/api/values/CompositeValue.java	2009-09-17 11:40:17 UTC (rev 93637)
@@ -26,7 +26,11 @@
 import org.jboss.metatype.api.types.CompositeMetaType;
 
 /**
- * CompositeValue.
+ * A {@link MetaValue} representing a <code>Map&lt;String,MetaValue&gt;</code>, where the set of allowed keys and
+ * their corresponding values' MetaTypes are specified by the associated {@link CompositeMetaType}.
+ *
+ * @see MapCompositeValueSupport
+ * @see CompositeValueSupport
  * 
  * @author <a href="adrian at jboss.com">Adrian Brock</a>
  * @version $Revision: 1.1 $

Modified: projects/jboss-man/trunk/metatype/src/main/java/org/jboss/metatype/api/values/CompositeValueSupport.java
===================================================================
--- projects/jboss-man/trunk/metatype/src/main/java/org/jboss/metatype/api/values/CompositeValueSupport.java	2009-09-17 10:36:36 UTC (rev 93636)
+++ projects/jboss-man/trunk/metatype/src/main/java/org/jboss/metatype/api/values/CompositeValueSupport.java	2009-09-17 11:40:17 UTC (rev 93637)
@@ -37,9 +37,16 @@
 
 import org.jboss.metatype.api.types.CompositeMetaType;
 import org.jboss.metatype.api.types.MetaType;
+import org.jboss.metatype.api.types.ImmutableCompositeMetaType;
+import org.jboss.metatype.plugins.types.MutableCompositeMetaType;
 
 /**
- * CompositeValueSupport.
+ * A {@link CompositeValue} representing a <code>Map&lt;String,MetaValue&gt;</code>, where the set of allowed keys and
+ * their corresponding values' MetaTypes are specified by the associated {@link ImmutableCompositeMetaType} or
+ * {@link MutableCompositeMetaType}.
+ *
+ * To represent a <code>Map&lt;String,MetaValue&gt;</code> where values must all have the same MetaType, use
+ * {@link MapCompositeValueSupport} instead.
  * 
  * @author <a href="adrian at jboss.com">Adrian Brock</a>
  * @version $Revision: 1.1 $
@@ -144,6 +151,11 @@
       init(compositeMetaType, items);
    }
 
+   /**
+    * Get the value's type - either a {@link ImmutableCompositeMetaType} or a {@link MutableCompositeMetaType}.
+    *
+    * @return the value's type - either a {@link ImmutableCompositeMetaType} or a {@link MutableCompositeMetaType}
+    */
    public CompositeMetaType getMetaType()
    {
       return metaType;

Modified: projects/jboss-man/trunk/metatype/src/main/java/org/jboss/metatype/api/values/MetaValueFactory.java
===================================================================
--- projects/jboss-man/trunk/metatype/src/main/java/org/jboss/metatype/api/values/MetaValueFactory.java	2009-09-17 10:36:36 UTC (rev 93636)
+++ projects/jboss-man/trunk/metatype/src/main/java/org/jboss/metatype/api/values/MetaValueFactory.java	2009-09-17 11:40:17 UTC (rev 93637)
@@ -66,16 +66,8 @@
     * @return the meta value
     */
    public abstract MetaValue create(Object value, Type type);
- 
+   
    /**
-    * Create a meta value given its MetaType
-    * @param value
-    * @param type the meta type
-    * @return the meta value
-    */
-   public abstract MetaValue create(Object value, MetaType type);
-
-   /**
     * Create a meta value
     * 
     * @param value the value
@@ -85,6 +77,14 @@
    public abstract MetaValue create(Object value, TypeInfo type);
    
    /**
+    * Create a meta value given its MetaType
+    * @param value
+    * @param type the meta type
+    * @return the meta value
+    */
+   public abstract MetaValue create(Object value, MetaType type);
+
+   /**
     * Set a meta value builder.
     * 
     * @param clazz the class

Modified: projects/jboss-man/trunk/metatype/src/main/java/org/jboss/metatype/plugins/values/CompositeValueInvocationHandler.java
===================================================================
--- projects/jboss-man/trunk/metatype/src/main/java/org/jboss/metatype/plugins/values/CompositeValueInvocationHandler.java	2009-09-17 10:36:36 UTC (rev 93636)
+++ projects/jboss-man/trunk/metatype/src/main/java/org/jboss/metatype/plugins/values/CompositeValueInvocationHandler.java	2009-09-17 11:40:17 UTC (rev 93637)
@@ -26,11 +26,17 @@
 import java.lang.reflect.Method;
 import java.lang.reflect.Proxy;
 import java.lang.reflect.Type;
+import java.util.Collection;
 import java.util.Collections;
+import java.util.HashSet;
 import java.util.Map;
+import java.util.Set;
 import java.util.WeakHashMap;
+import java.util.Map.Entry;
 
+import org.jboss.metatype.api.types.MapCompositeMetaType;
 import org.jboss.metatype.api.values.CompositeValue;
+import org.jboss.metatype.api.values.MapCompositeValueSupport;
 import org.jboss.metatype.api.values.MetaValue;
 import org.jboss.metatype.api.values.MetaValueFactory;
 import org.jboss.util.UnreachableStatementException;
@@ -80,15 +86,16 @@
 
    public Object invoke(Object proxy, Method method, Object[] args) throws Throwable
    {
-      if (Object.class.equals(method.getDeclaringClass()))
+      Class<?> declaringClass = method.getDeclaringClass();
+      if (Object.class.equals(declaringClass))
          return handleObjectInvocation(method.getName(), args);
 
-      // Map size
+      Type returnType = method.getGenericReturnType();
+      // size
       if(method.getName().equals("size"))
          return compositeValue.values().size();
 
       MetaValue value = compositeValue.get(getCompositeDataKey(method));
-      Type returnType = method.getGenericReturnType();
       return factory.unwrap(value, returnType);
    }
 
@@ -161,8 +168,136 @@
       return result;
    }
 
-   public String toString()
+   /*
+   static class MapCVProxy implements Map<String, Object>
    {
-      return compositeValue.getMetaType().getTypeName() + "InvocationHandler";
+      private CompositeValue delegate;
+
+      MapCVProxy(CompositeValue delegate)
+      {
+         this.delegate = delegate;
+      }
+
+      public void clear()
+      {
+      }
+
+      public boolean containsKey(Object key)
+      {
+         return delegate.containsKey(key.toString());
+      }
+
+      public boolean containsValue(Object value)
+      {
+         if ((value instanceof MetaValue) == false)
+         {
+            value = factory.create(value);
+         }
+         MetaValue mv = MetaValue.class.cast(value);
+         return delegate.containsValue(mv);
+      }
+
+      public Set<Entry<String, Object>> entrySet()
+      {
+         HashSet<Entry<String, MetaValue>> entrySet = new HashSet<Entry<String, MetaValue>>();
+         for(String key : delegate.getMetaType().itemSet())
+         {
+            MetaValue value = delegate.get(key);
+            Map.Entry<String, Object> entry = new MapCVProxyEntry(key, value);
+            entrySet.add(entry);
+         }
+         return entrySet;
+      }
+
+      public MetaValue get(Object key)
+      {
+         return delegate.get(key.toString());
+      }
+
+      public boolean isEmpty()
+      {
+         return delegate.values().size() == 0;
+      }
+
+      public Set<String> keySet()
+      {
+         return delegate.getMetaType().itemSet();
+      }
+
+      public MetaValue put(String key, MetaValue value)
+      {
+         MetaValue old = null;
+         if (delegate instanceof MapCompositeValueSupport)
+         {
+            MapCompositeValueSupport mcvs = (MapCompositeValueSupport) delegate;
+            old = mcvs.get(key);
+            if ((value instanceof MetaValue) == false)
+               
+            mcvs.put(key, value);
+         }
+         return old;
+      }
+
+      public void putAll(Map<? extends String, ? extends Object> map)
+      {
+         if (delegate instanceof MapCompositeValueSupport)
+         {
+            MapCompositeValueSupport mcvs = (MapCompositeValueSupport) delegate;
+            for(String key : map.keySet())
+            {
+               Object mv = map.get(key);
+               if ((mv instanceof MetaValue) == false)
+                  mv = factory.create(mv);
+               mcvs.put(key, (MetaValue) mv);
+            }
+         }
+      }
+
+      public Object remove(Object key)
+      {
+         if (delegate instanceof MapCompositeValueSupport)
+         {
+            MapCompositeValueSupport mcvs = (MapCompositeValueSupport) delegate;
+            return mcvs.remove(key.toString());
+         }
+         return null;
+      }
+
+      public int size()
+      {
+         return delegate.values().size();
+      }
+
+      public Collection<Object> values()
+      {
+         return delegate.values();
+      }
+      
    }
+   static class MapCVProxyEntry implements Entry<String, Object>
+   {
+      private String key;
+      private Object value;
+      MapCVProxyEntry(String key, Object value)
+      {
+         this.key = key;
+         this.value = value;
+      }
+      public String getKey()
+      {
+         return key;
+      }
+      public Object getValue()
+      {
+         return value;
+      }
+
+      public Object setValue(Object value)
+      {
+         Object old = value;
+         this.value = value;
+         return old;
+      }
+   }
+   */
 }

Modified: projects/jboss-man/trunk/metatype/src/main/java/org/jboss/metatype/plugins/values/mappers/ObjectNameMetaMapper.java
===================================================================
--- projects/jboss-man/trunk/metatype/src/main/java/org/jboss/metatype/plugins/values/mappers/ObjectNameMetaMapper.java	2009-09-17 10:36:36 UTC (rev 93636)
+++ projects/jboss-man/trunk/metatype/src/main/java/org/jboss/metatype/plugins/values/mappers/ObjectNameMetaMapper.java	2009-09-17 11:40:17 UTC (rev 93637)
@@ -104,8 +104,6 @@
       for(String key : cv.getMetaType().itemSet())
       {
          SimpleValue svalue = (SimpleValue) cv.get(key);
-         if(svalue == null)
-            continue;
          String value = (String) svalue.getValue();
          if(key.equalsIgnoreCase("domain"))
             domain = value;

Modified: projects/jboss-man/trunk/metatype/src/test/java/org/jboss/test/metatype/values/factory/test/CompositeValueFactoryUnitTestCase.java
===================================================================
--- projects/jboss-man/trunk/metatype/src/test/java/org/jboss/test/metatype/values/factory/test/CompositeValueFactoryUnitTestCase.java	2009-09-17 10:36:36 UTC (rev 93636)
+++ projects/jboss-man/trunk/metatype/src/test/java/org/jboss/test/metatype/values/factory/test/CompositeValueFactoryUnitTestCase.java	2009-09-17 11:40:17 UTC (rev 93637)
@@ -249,4 +249,30 @@
       assertTrue("CV contains propertyReplace", cmv.containsKey("propertyReplace"));
       assertTrue("CV contains type", cmv.containsKey("type"));
    }
+   
+   /**
+    * JBMAN-61, validate proxy for MapCompositeValue unwrapping intercepts the
+    * Map.get(key) calls.
+    */
+   public void testMapCompositeValueProxy()
+   {
+      Properties props = System.getProperties();
+      log.debug(props);
+      // Convert to MetaValue
+      MetaValue propsMV = createMetaValue(props);
+      assertNotNull(propsMV);
+      assertTrue(propsMV instanceof CompositeValue);
+      // Unwrap to excercise the proxy via a Map interface
+      Map map = (Map) unwrapMetaValue(propsMV);
+      assertEquals(props.size(), map.size());
+      assertEquals(props.getProperty("java.runtime.name"), map.get("java.runtime.name"));
+      assertEquals(props.getProperty("java.library.path"), map.get("java.library.path"));
+      assertTrue("java.runtime.name", map.containsKey("java.runtime.name"));
+      assertTrue("java.runtime.name", map.containsValue(props.getProperty("java.runtime.name")));
+      assertFalse(map.isEmpty());
+      assertEquals(map.keySet(), props.keySet());
+      map.put("testMapCompositeValueProxy", "testMapCompositeValueProxy-value");
+      assertTrue("testMapCompositeValueProxy", map.containsKey("java.runtime.name"));
+      assertEquals("testMapCompositeValueProxy-value", map.get("testMapCompositeValueProxy"));
+   }
 }




More information about the jboss-cvs-commits mailing list