[jboss-cvs] JBossAS SVN: r63379 - projects/microcontainer/trunk/managed/src/tests/org/jboss/test/managed/mock.

jboss-cvs-commits at lists.jboss.org jboss-cvs-commits at lists.jboss.org
Wed Jun 6 17:12:07 EDT 2007


Author: scott.stark at jboss.org
Date: 2007-06-06 17:12:07 -0400 (Wed, 06 Jun 2007)
New Revision: 63379

Modified:
   projects/microcontainer/trunk/managed/src/tests/org/jboss/test/managed/mock/MockDOMFields.java
   projects/microcontainer/trunk/managed/src/tests/org/jboss/test/managed/mock/MockDataSourceManagedObject.java
   projects/microcontainer/trunk/managed/src/tests/org/jboss/test/managed/mock/MockTest.java
Log:
Update to test a CompositeType property

Modified: projects/microcontainer/trunk/managed/src/tests/org/jboss/test/managed/mock/MockDOMFields.java
===================================================================
--- projects/microcontainer/trunk/managed/src/tests/org/jboss/test/managed/mock/MockDOMFields.java	2007-06-06 21:06:52 UTC (rev 63378)
+++ projects/microcontainer/trunk/managed/src/tests/org/jboss/test/managed/mock/MockDOMFields.java	2007-06-06 21:12:07 UTC (rev 63379)
@@ -22,15 +22,26 @@
 package org.jboss.test.managed.mock;
 
 import java.io.Serializable;
+import java.util.ArrayList;
 
 import org.jboss.managed.api.Fields;
+import org.jboss.metatype.api.types.CompositeMetaType;
+import org.jboss.metatype.api.types.MetaType;
+import org.jboss.metatype.api.types.SimpleMetaType;
+import org.jboss.metatype.api.values.CompositeValue;
+import org.jboss.metatype.api.values.CompositeValueSupport;
+import org.jboss.metatype.api.values.MetaValue;
+import org.jboss.metatype.api.values.SimpleValue;
+import org.jboss.metatype.api.values.SimpleValueSupport;
 import org.w3c.dom.Element;
+import org.w3c.dom.Node;
 import org.w3c.dom.NodeList;
 
 /**
- * DOMFields.
+ * DOMFields illustrates a Fields implementation backed by a DOM element.
  * 
  * @author <a href="adrian at jboss.com">Adrian Brock</a>
+ * @author Scott.Stark at jboss.org
  * @version $Revision: 1.1 $
  */
 public class MockDOMFields implements Fields
@@ -43,6 +54,7 @@
    
    /** The element name */
    private String elementName;
+   private MetaType elementType;
    
    /**
     * Create a new DOMFields.
@@ -52,38 +64,74 @@
     */
    public MockDOMFields(Element element, String elementName)
    {
+      this(element, elementName, SimpleMetaType.STRING);
+   }
+   public MockDOMFields(Element element, String elementName, MetaType elementType)
+   {
       this.element = element;
       this.elementName = elementName;
+      this.elementType = elementType;
    }
    
    public Serializable getField(String name)
    {
+      Serializable field = null;
       if (NAME.equals(name))
-         return elementName;
-      if (VALUE.equals(name))
+         field = elementName;
+      else if (VALUE.equals(name))
       {
          NodeList nodes = element.getElementsByTagName(elementName);
          if (nodes.getLength() == 0)
             return null;
-         else
+         else if (elementType instanceof SimpleMetaType)
          {
             Element element = (Element) nodes.item(0);
             return element.getTextContent();
          }
+         else if (elementType instanceof CompositeMetaType)
+         {
+            Element element = (Element) nodes.item(0);
+            NodeList propNodes = element.getChildNodes();
+            ArrayList<String> keys = new ArrayList<String>();
+            ArrayList<MetaValue> values = new ArrayList<MetaValue>();
+            for(int n = 0; n < propNodes.getLength(); n ++)
+            {
+               Node node = propNodes.item(n);
+               if( node.getNodeType() != Node.ELEMENT_NODE )
+                  continue;
+               Element prop = (Element) node;
+               keys.add(prop.getNodeName());
+               values.add(SimpleValueSupport.wrap(prop.getTextContent()));
+            }
+            CompositeMetaType propsType = (CompositeMetaType) elementType;
+            String[] propsKeys = new String[keys.size()];
+            keys.toArray(propsKeys);
+            MetaValue[] propsValues = new MetaValue[values.size()];
+            values.toArray(propsValues);
+            field = new CompositeValueSupport(propsType, propsKeys, propsValues);
+         }
+         else
+         {
+            throw new IllegalStateException("Unable to build value for type: "+elementType);
+         }
       }
-      return null;
+      else if (META_TYPE.equals(name))
+         field = elementType;
+      return field;
    }
 
+   /**
+    * Handle setting the VALUE field. 
+    */
    public void setField(String name, Serializable value)
    {
       if (VALUE.equals(name))
       {
-         String string = (String) value;
          NodeList nodes = element.getElementsByTagName(elementName);
          Element childElement = null;
          if (nodes.getLength() == 0)
          {
-            if (string == null || string.length() == 0)
+            if (value == null)
                return;
             childElement = element.getOwnerDocument().createElement(elementName);
             element.appendChild(childElement);
@@ -91,15 +139,94 @@
          else
          {
             childElement = (Element) nodes.item(0);
-            if (string == null || string.length() == 0)
+            if (value == null)
             {
                element.removeChild(childElement);
                return;
             }
          }
-         childElement.setTextContent(string);
+
+         if( value instanceof CompositeValue )
+            handleCompositeValue(childElement, (CompositeValue)value);
+         else if( value instanceof SimpleValue )
+            handleSimpleValue(childElement, (SimpleValue)value);
+         else
+         {
+            String string = value.toString();
+            if (value == null || string.length() == 0)
+            {
+               element.removeChild(childElement);
+            }
+            else
+            {
+               childElement.setTextContent(string);
+            }
+         }
          return;
       }
       throw new UnsupportedOperationException("setField " + name);
    }
+
+   /**
+    * Map a CompositeValue into a text element structure
+    * @param childElement
+    * @param cvalue
+    */
+   protected void handleCompositeValue(Element childElement, CompositeValue cvalue)
+   {
+      if (cvalue == null || cvalue.values().size() == 0)
+      {
+         element.removeChild(childElement);
+         return;
+      }
+
+      
+      for(String key : cvalue.getMetaType().keySet())
+      {
+         if( cvalue.containsKey(key) )
+         {
+            MetaValue value = cvalue.get(key);
+            Element keyElement = null;
+            NodeList nodes = childElement.getElementsByTagName(key);
+            if (nodes.getLength() == 0)
+            {
+               keyElement = childElement.getOwnerDocument().createElement(key);
+               childElement.appendChild(keyElement);
+            }
+            else
+            {
+               keyElement = (Element) nodes.item(0);
+               if (value == null)
+               {
+                  childElement.removeChild(keyElement);
+                  continue;
+               }
+            }
+            // We only handle SimpleValue types
+            if( !(value instanceof SimpleValue) )
+               throw new IllegalArgumentException(key+" value type is not a SimpleValue, "+value);
+            SimpleValue svalue = (SimpleValue) value;
+            handleSimpleValue(keyElement, svalue);
+         }
+      }
+   }
+
+   /**
+    * Map a SimpleValue to a text element
+    * @param childElement
+    * @param svalue
+    */
+   protected void handleSimpleValue(Element childElement, SimpleValue svalue)
+   {
+      Serializable value = svalue.getValue();
+      if (value == null)
+      {
+         element.removeChild(childElement);
+      }
+      else
+      {
+         String string = value.toString();
+         childElement.setTextContent(string);
+      }
+   }
 }

Modified: projects/microcontainer/trunk/managed/src/tests/org/jboss/test/managed/mock/MockDataSourceManagedObject.java
===================================================================
--- projects/microcontainer/trunk/managed/src/tests/org/jboss/test/managed/mock/MockDataSourceManagedObject.java	2007-06-06 21:06:52 UTC (rev 63378)
+++ projects/microcontainer/trunk/managed/src/tests/org/jboss/test/managed/mock/MockDataSourceManagedObject.java	2007-06-06 21:12:07 UTC (rev 63379)
@@ -29,6 +29,10 @@
 import org.jboss.managed.api.ManagedProperty;
 import org.jboss.managed.plugins.ManagedObjectImpl;
 import org.jboss.managed.plugins.ManagedPropertyImpl;
+import org.jboss.metatype.api.types.CompositeMetaType;
+import org.jboss.metatype.api.types.ImmutableCompositeMetaType;
+import org.jboss.metatype.api.types.MetaType;
+import org.jboss.metatype.api.types.SimpleMetaType;
 import org.jboss.util.xml.DOMWriter;
 import org.w3c.dom.DOMImplementation;
 import org.w3c.dom.Document;
@@ -79,8 +83,16 @@
       properties.add(new ManagedPropertyImpl(this, new MockDOMFields(element, "connection-url")));
       properties.add(new ManagedPropertyImpl(this, new MockDOMFields(element, "user")));
       properties.add(new ManagedPropertyImpl(this, new MockDOMFields(element, "password")));
+      // Add a CompositeMetaType field
+      String[] itemNames = {"conn-prop1", "conn-prop2"};
+      String[] itemDescriptions = {"conn-prop1 description", "conn-prop2 description"};
+      MetaType[] itemTypes = {SimpleMetaType.STRING, SimpleMetaType.STRING};
+      CompositeMetaType propsType = new ImmutableCompositeMetaType("java.lang.Properties", "DS connection properties",
+            itemNames, itemDescriptions, itemTypes);
+      MockDOMFields cpField = new MockDOMFields(element, "connection-props", propsType);
+      properties.add(new ManagedPropertyImpl(this, cpField));
    }
-   
+
    public String prettyPrint()
    {
       return DOMWriter.printNode(document, true);

Modified: projects/microcontainer/trunk/managed/src/tests/org/jboss/test/managed/mock/MockTest.java
===================================================================
--- projects/microcontainer/trunk/managed/src/tests/org/jboss/test/managed/mock/MockTest.java	2007-06-06 21:06:52 UTC (rev 63378)
+++ projects/microcontainer/trunk/managed/src/tests/org/jboss/test/managed/mock/MockTest.java	2007-06-06 21:12:07 UTC (rev 63379)
@@ -29,6 +29,11 @@
 import org.jboss.managed.api.ManagedObject;
 import org.jboss.managed.api.ManagedProperty;
 import org.jboss.managed.plugins.advice.WrapperAdvice;
+import org.jboss.metatype.api.types.CompositeMetaType;
+import org.jboss.metatype.api.types.MetaType;
+import org.jboss.metatype.api.values.CompositeValueSupport;
+import org.jboss.metatype.api.values.MetaValue;
+import org.jboss.metatype.api.values.SimpleValueSupport;
 import org.jboss.test.managed.ManagedTest;
 
 /**
@@ -62,7 +67,10 @@
       getLog().debug(mock.prettyPrint());
       
       getLog().debug("Adding jndi-name...");
-      mo.getProperty("jndi-name").setValue("DefaultDS");
+      ManagedProperty jndiName = mo.getProperty("jndi-name");
+      MetaType jndiType = jndiName.getMetaType();
+      assertTrue("jndi-name MetaType is not null", jndiType != null);
+      jndiName.setValue("DefaultDS");
       getLog().debug(mock.prettyPrint());
 
       getLog().debug("Adding user and password...");
@@ -70,6 +78,17 @@
       mo.getProperty("password").setValue("Tiger");
       getLog().debug(mock.prettyPrint());
 
+      getLog().debug("Adding connection-props...");
+      ManagedProperty connProps = mo.getProperty("connection-props");
+      CompositeMetaType connPropsType = (CompositeMetaType) connProps.getMetaType();
+      String[] propsKeys = {"conn-prop2", "conn-prop1"};
+      MetaValue[] propsValues = {SimpleValueSupport.wrap("conn-prop2-value"),
+            SimpleValueSupport.wrap("conn-prop1-value")};
+      CompositeValueSupport connPropsValue = new CompositeValueSupport(connPropsType,
+            propsKeys, propsValues);
+      mo.getProperty("connection-props").setValue(connPropsValue);
+      getLog().debug(mock.prettyPrint());
+      
       getLog().debug("Changing jndi-name...");
       mo.getProperty("jndi-name").setValue("ChangedDS");
       getLog().debug(mock.prettyPrint());
@@ -82,11 +101,12 @@
       for (ManagedProperty property : mo.getProperties())
          getLog().debug(property.getName() + "=" + property.getValue());
       
-      ManagedProperty jndiName = mo.getProperty("jndi-name");
+      jndiName = mo.getProperty("jndi-name");
       
       getLog().debug("Displaying jndi-name field values...");
       getLog().debug("jndi-name name  field is: " + jndiName.getFields().getField(Fields.NAME));
       getLog().debug("jndi-name value field is: " + jndiName.getFields().getField(Fields.VALUE));
+      getLog().debug("jndi-name type field is: " + jndiName.getFields().getField(Fields.META_TYPE));
       
       assertEquals(mo, jndiName.getManagedObject());
    }
@@ -101,6 +121,14 @@
       mo.getProperty("user").setValue("Scott");
       mo.getProperty("password").setValue("Tiger");
       mo.getProperty("jndi-name").setValue("ChangedDS");
+      ManagedProperty connProps = mo.getProperty("connection-props");
+      CompositeMetaType connPropsType = (CompositeMetaType) connProps.getMetaType();
+      String[] propsKeys = {"conn-prop2", "conn-prop1"};
+      MetaValue[] propsValues = {SimpleValueSupport.wrap("conn-prop2-value"),
+            SimpleValueSupport.wrap("conn-prop1-value")};
+      CompositeValueSupport connPropsValue = new CompositeValueSupport(connPropsType,
+            propsKeys, propsValues);
+      mo.getProperty("connection-props").setValue(connPropsValue);
 
       getLog().debug(mock.prettyPrint());
       
@@ -110,6 +138,8 @@
       assertEquals("jndiName", "ChangedDS", mo2.getProperty("jndi-name").getValue());
       assertEquals("user", "Scott", mo2.getProperty("user").getValue());
       assertEquals("password", "Tiger", mo2.getProperty("password").getValue());
+      ManagedProperty connProps2 = mo2.getProperty("connection-props");
+      assertEquals("connPropsValue", connPropsValue, connProps2.getValue());
    }
    public void testManagedPropertyMapSerialization()
       throws Exception




More information about the jboss-cvs-commits mailing list