[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