Author: mrdon Date: Sun Dec 11 21:52:17 2005 New Revision: 356164 URL: http://svn.apache.org/viewcvs?rev=356164&view=rev Log: Adding DynaBean support in Ognl
Added: struts/sandbox/trunk/ti/phase1/jars/legacy/ - copied from r356010, struts/sandbox/trunk/ti/phase1/jars/compat/ struts/sandbox/trunk/ti/phase1/jars/legacy/project.properties - copied unchanged from r356014, struts/sandbox/trunk/ti/phase1/jars/compat/project.properties struts/sandbox/trunk/ti/phase1/jars/legacy/project.xml - copied unchanged from r356014, struts/sandbox/trunk/ti/phase1/jars/compat/project.xml struts/sandbox/trunk/ti/phase1/jars/legacy/src/ - copied from r356014, struts/sandbox/trunk/ti/phase1/jars/compat/src/ struts/sandbox/trunk/ti/phase1/jars/legacy/src/java/org/apache/ti/ struts/sandbox/trunk/ti/phase1/jars/legacy/src/java/org/apache/ti/legacy/ struts/sandbox/trunk/ti/phase1/jars/legacy/src/java/org/apache/ti/legacy/DynaBeanPropertyAccessor.java struts/sandbox/trunk/ti/phase1/jars/legacy/src/test/org/ struts/sandbox/trunk/ti/phase1/jars/legacy/src/test/org/apache/ struts/sandbox/trunk/ti/phase1/jars/legacy/src/test/org/apache/ti/ struts/sandbox/trunk/ti/phase1/jars/legacy/src/test/org/apache/ti/legacy/ struts/sandbox/trunk/ti/phase1/jars/legacy/src/test/org/apache/ti/legacy/TestDynaBeanPropertyAccessor.java Added: struts/sandbox/trunk/ti/phase1/jars/legacy/src/java/org/apache/ti/legacy/DynaBeanPropertyAccessor.java URL: http://svn.apache.org/viewcvs/struts/sandbox/trunk/ti/phase1/jars/legacy/src/java/org/apache/ti/legacy/DynaBeanPropertyAccessor.java?rev=356164&view=auto ============================================================================== --- struts/sandbox/trunk/ti/phase1/jars/legacy/src/java/org/apache/ti/legacy/DynaBeanPropertyAccessor.java (added) +++ struts/sandbox/trunk/ti/phase1/jars/legacy/src/java/org/apache/ti/legacy/DynaBeanPropertyAccessor.java Sun Dec 11 21:52:17 2005 @@ -0,0 +1,55 @@ +/* + * $Id$ + * Copyright 2004 The Apache Software Foundation. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + */ +package org.apache.ti.legacy; + +import java.io.Serializable; +import org.apache.commons.beanutils.DynaBean; +import org.apache.commons.beanutils.DynaClass; +import ognl.OgnlException; +import ognl.PropertyAccessor; +import java.util.Map; + +/** + * + * @todo Finish documenting me! + */ +public class DynaBeanPropertyAccessor implements PropertyAccessor { + + public Object getProperty(Map context, Object target, Object name) throws OgnlException { + + if (target instanceof DynaBean && name != null) { + DynaBean bean = (DynaBean)target; + DynaClass cls = bean.getDynaClass(); + String key = name.toString(); + if (cls.getDynaProperty(key) != null) { + return bean.get(key); + } + } + return null; + } + + public void setProperty(Map context, Object target, Object name, Object value) throws OgnlException { + + if (target instanceof DynaBean && name != null) { + DynaBean bean = (DynaBean)target; + String key = name.toString(); + bean.set(key, value); + } + } + +} Added: struts/sandbox/trunk/ti/phase1/jars/legacy/src/test/org/apache/ti/legacy/TestDynaBeanPropertyAccessor.java URL: http://svn.apache.org/viewcvs/struts/sandbox/trunk/ti/phase1/jars/legacy/src/test/org/apache/ti/legacy/TestDynaBeanPropertyAccessor.java?rev=356164&view=auto ============================================================================== --- struts/sandbox/trunk/ti/phase1/jars/legacy/src/test/org/apache/ti/legacy/TestDynaBeanPropertyAccessor.java (added) +++ struts/sandbox/trunk/ti/phase1/jars/legacy/src/test/org/apache/ti/legacy/TestDynaBeanPropertyAccessor.java Sun Dec 11 21:52:17 2005 @@ -0,0 +1,134 @@ +package org.apache.ti.legacy; + +import junit.framework.*; +import java.io.*; +import java.util.*; +import org.apache.commons.beanutils.*; + +import ognl.*; + +/** Description of the Class */ +public class TestDynaBeanPropertyAccessor extends TestCase { + + protected DynaBean bean = null; + + public TestDynaBeanPropertyAccessor(String name) throws Exception { + super(name); + } + + + public static void main(String args[]) { + junit.textui.TestRunner.run(TestDynaBeanPropertyAccessor.class); + } + + /** + * Set up instance variables required by this test case. + */ + public void setUp() throws Exception { + + // Instantiate a new DynaBean instance + DynaClass dynaClass = createDynaClass(); + bean = dynaClass.newInstance(); + + // Initialize the DynaBean's property values (like TestBean) + bean.set("booleanProperty", new Boolean(true)); + bean.set("booleanSecond", new Boolean(true)); + bean.set("doubleProperty", new Double(321.0)); + bean.set("floatProperty", new Float((float) 123.0)); + int intArray[] = { 0, 10, 20, 30, 40 }; + bean.set("intArray", intArray); + int intIndexed[] = { 0, 10, 20, 30, 40 }; + bean.set("intIndexed", intIndexed); + bean.set("intProperty", new Integer(123)); + List listIndexed = new ArrayList(); + listIndexed.add("String 0"); + listIndexed.add("String 1"); + listIndexed.add("String 2"); + listIndexed.add("String 3"); + listIndexed.add("String 4"); + bean.set("listIndexed", listIndexed); + bean.set("longProperty", new Long((long) 321)); + HashMap mappedProperty = new HashMap(); + mappedProperty.put("First Key", "First Value"); + mappedProperty.put("Second Key", "Second Value"); + bean.set("mappedProperty", mappedProperty); + HashMap mappedIntProperty = new HashMap(); + mappedIntProperty.put("One", new Integer(1)); + mappedIntProperty.put("Two", new Integer(2)); + bean.set("mappedIntProperty", mappedIntProperty); + // Property "nullProperty" is not initialized, so it should return null + bean.set("shortProperty", new Short((short) 987)); + String stringArray[] = + { "String 0", "String 1", "String 2", "String 3", "String 4" }; + bean.set("stringArray", stringArray); + String stringIndexed[] = + { "String 0", "String 1", "String 2", "String 3", "String 4" }; + bean.set("stringIndexed", stringIndexed); + bean.set("stringProperty", "This is a string"); + + } + + + + + public void testGetProperty() throws Exception { + + DynaBeanPropertyAccessor trans = new DynaBeanPropertyAccessor(); + assertTrue("This is a string".equals(trans.getProperty(null, bean, "stringProperty"))); + assertTrue(trans.getProperty(null, bean, "listIndexed") instanceof List); + + } + + public void testSetProperty() throws Exception { + + DynaBeanPropertyAccessor trans = new DynaBeanPropertyAccessor(); + trans.setProperty(null, bean, "stringProperty", "bob"); + assertTrue("bob".equals(trans.getProperty(null, bean, "stringProperty"))); + + } + + public void testOGNL() throws Exception { + + OgnlRuntime.setPropertyAccessor(DynaBean.class, new DynaBeanPropertyAccessor()); + + assertTrue("This is a string".equals(Ognl.getValue("stringProperty", bean))); + + } + + + /** + * Create and return a <code>DynaClass</code> instance for our test + * <code>DynaBean</code>. + */ + protected DynaClass createDynaClass() { + + int intArray[] = new int[0]; + String stringArray[] = new String[0]; + + DynaClass dynaClass = new BasicDynaClass + ("TestDynaClass", null, + new DynaProperty[]{ + new DynaProperty("booleanProperty", Boolean.TYPE), + new DynaProperty("booleanSecond", Boolean.TYPE), + new DynaProperty("doubleProperty", Double.TYPE), + new DynaProperty("floatProperty", Float.TYPE), + new DynaProperty("intArray", intArray.getClass()), + new DynaProperty("intIndexed", intArray.getClass()), + new DynaProperty("intProperty", Integer.TYPE), + new DynaProperty("listIndexed", List.class), + new DynaProperty("longProperty", Long.TYPE), + new DynaProperty("mappedProperty", Map.class), + new DynaProperty("mappedIntProperty", Map.class), + new DynaProperty("nullProperty", String.class), + new DynaProperty("shortProperty", Short.TYPE), + new DynaProperty("stringArray", stringArray.getClass()), + new DynaProperty("stringIndexed", stringArray.getClass()), + new DynaProperty("stringProperty", String.class), + }); + return (dynaClass); + + } + + +} + --------------------------------------------------------------------- To unsubscribe, e-mail: [EMAIL PROTECTED] For additional commands, e-mail: [EMAIL PROTECTED]