Author: musachy
Date: Sat Nov 7 01:18:15 2009
New Revision: 833625
URL:
http://svn.apache.org/viewvc?rev=833625&view=revLog:
add tests, and array el resolver
Added:
struts/sandbox/trunk/struts2-uel-plugin/src/main/java/org/apache/struts2/uelplugin/elresolvers/XWorkArrayELResolver.java
struts/sandbox/trunk/struts2-uel-plugin/src/main/java/org/apache/struts2/uelplugin/elresolvers/XWorkMapELResolver.java
Removed:
struts/sandbox/trunk/struts2-uel-plugin/src/test/java/org/apache/struts2/uelplugin/DummyTypeConverter.java
Modified:
struts/sandbox/trunk/struts2-uel-plugin/src/main/java/org/apache/struts2/uelplugin/CompoundRootELContext.java
struts/sandbox/trunk/struts2-uel-plugin/src/main/java/org/apache/struts2/uelplugin/elresolvers/XWorkBeanELResolver.java
struts/sandbox/trunk/struts2-uel-plugin/src/main/java/org/apache/struts2/uelplugin/elresolvers/XWorkListELResolver.java
struts/sandbox/trunk/struts2-uel-plugin/src/test/java/org/apache/struts2/uelplugin/AbstractUelBaseTest.java
struts/sandbox/trunk/struts2-uel-plugin/src/test/java/org/apache/struts2/uelplugin/ParametersTest.java
struts/sandbox/trunk/struts2-uel-plugin/src/test/java/org/apache/struts2/uelplugin/TestObject.java
struts/sandbox/trunk/struts2-uel-plugin/src/test/java/org/apache/struts2/uelplugin/UelTest.java
Modified: struts/sandbox/trunk/struts2-uel-plugin/src/main/java/org/apache/struts2/uelplugin/CompoundRootELContext.java
URL:
http://svn.apache.org/viewvc/struts/sandbox/trunk/struts2-uel-plugin/src/main/java/org/apache/struts2/uelplugin/CompoundRootELContext.java?rev=833625&r1=833624&r2=833625&view=diff==============================================================================
--- struts/sandbox/trunk/struts2-uel-plugin/src/main/java/org/apache/struts2/uelplugin/CompoundRootELContext.java (original)
+++ struts/sandbox/trunk/struts2-uel-plugin/src/main/java/org/apache/struts2/uelplugin/CompoundRootELContext.java Sat Nov 7 01:18:15 2009
@@ -2,10 +2,7 @@
import com.opensymphony.xwork2.inject.Container;
import de.odysseus.el.util.SimpleContext;
-import org.apache.struts2.uelplugin.elresolvers.CompoundRootELResolver;
-import org.apache.struts2.uelplugin.elresolvers.ValueStackContextResolver;
-import org.apache.struts2.uelplugin.elresolvers.XWorkBeanELResolver;
-import org.apache.struts2.uelplugin.elresolvers.XWorkListELResolver;
+import org.apache.struts2.uelplugin.elresolvers.*;
import javax.el.*;
@@ -19,13 +16,12 @@
public CompoundRootELContext(final Container container) {
super(new CompositeELResolver() {
{
- add(new ValueStackContextResolver());
- add(new XWorkListELResolver(container));
add(new CompoundRootELResolver(container));
- add(new ArrayELResolver(false));
- add(new MapELResolver(false));
- add(new ResourceBundleELResolver());
+ add(new ValueStackContextResolver());
add(new XWorkBeanELResolver(container));
+ add(new XWorkListELResolver(container));
+ add(new XWorkMapELResolver(container));
+ add(new XWorkArrayELResolver(container));
add(new BeanELResolver());
}});
}
Added: struts/sandbox/trunk/struts2-uel-plugin/src/main/java/org/apache/struts2/uelplugin/elresolvers/XWorkArrayELResolver.java
URL:
http://svn.apache.org/viewvc/struts/sandbox/trunk/struts2-uel-plugin/src/main/java/org/apache/struts2/uelplugin/elresolvers/XWorkArrayELResolver.java?rev=833625&view=auto==============================================================================
--- struts/sandbox/trunk/struts2-uel-plugin/src/main/java/org/apache/struts2/uelplugin/elresolvers/XWorkArrayELResolver.java (added)
+++ struts/sandbox/trunk/struts2-uel-plugin/src/main/java/org/apache/struts2/uelplugin/elresolvers/XWorkArrayELResolver.java Sat Nov 7 01:18:15 2009
@@ -0,0 +1,119 @@
+package org.apache.struts2.uelplugin.elresolvers;
+
+import com.opensymphony.xwork2.inject.Container;
+import com.opensymphony.xwork2.conversion.impl.XWorkConverter;
+import com.opensymphony.xwork2.util.reflection.ReflectionContextState;
+
+import javax.el.ELContext;
+import javax.el.ELException;
+import java.util.List;
+import java.util.Map;
+import java.lang.reflect.Array;
+
+
+public class XWorkArrayELResolver extends AbstractResolver {
+ public XWorkArrayELResolver(Container container) {
+ super(container);
+ }
+
+ public Object getValue(ELContext elContext, Object target, Object property) {
+ if (target != null && property != null && target.getClass().isArray()) {
+
+ Map<String, Object> context = (Map) elContext.getContext(AccessorsContextKey.class);
+
+ Class lastClass = (Class) context.get(XWorkConverter.LAST_BEAN_CLASS_ACCESSED);
+ String lastProperty = (String) context.get(XWorkConverter.LAST_BEAN_PROPERTY_ACCESSED);
+
+ Integer index = null;
+
+ if (property instanceof Number)
+ index = ((Number) property).intValue();
+ else {
+ try {
+ index = Integer.valueOf(property.toString());
+ } catch (NumberFormatException e) {
+ //ignore
+ }
+ }
+
+ if (index != null) {
+ if (ReflectionContextState.isCreatingNullObjects(context) && objectTypeDeterminer.shouldCreateIfNew(lastClass, lastProperty, target, null, true)) {
+ Class clazz = target.getClass().getComponentType();
+
+ if (index < 0 || index >= Array.getLength(target)) {
+ //nothing to do here, as we cannot set a new array
+ throw new ELException("Index [" + index + "] is out of bounds");
+ } else {
+ //valid index
+ Object obj = Array.get(target, index);
+ if (obj == null) {
+ try {
+ obj = objectFactory.buildBean(clazz, context);
+ Array.set(target, index, obj);
+ } catch (Exception e) {
+ throw new ELException("unable to instantiate a new object for property [" + lastProperty + "]", e);
+ }
+ }
+
+ elContext.setPropertyResolved(true);
+ return obj;
+ }
+ } else {
+ //try normal list
+ if (index < Array.getLength(target)) {
+ elContext.setPropertyResolved(true);
+ return Array.get(target, index);
+ }
+ }
+ }
+ }
+
+ return null;
+ }
+
+ public void setValue(ELContext elContext, Object target, Object property, Object value) {
+ if (target != null && property != null && target.getClass().isArray()) {
+
+ Map<String, Object> context = (Map) elContext.getContext(AccessorsContextKey.class);
+
+ Class lastClass = (Class) context.get(XWorkConverter.LAST_BEAN_CLASS_ACCESSED);
+ String lastProperty = (String) context.get(XWorkConverter.LAST_BEAN_PROPERTY_ACCESSED);
+
+ Integer index = null;
+
+ if (property instanceof Number)
+ index = ((Number) property).intValue();
+ else {
+ try {
+ index = Integer.valueOf(property.toString());
+ } catch (NumberFormatException e) {
+ //ignore
+ }
+ }
+
+ Class clazz = target.getClass().getComponentType();
+
+ if (index != null) {
+ if (ReflectionContextState.isCreatingNullObjects(context) && objectTypeDeterminer.shouldCreateIfNew(lastClass, lastProperty, target, null, true)) {
+
+ if (index < 0 || index >= Array.getLength(target)) {
+ //nothing to do here, as we cannot set a new array
+ throw new ELException("Index [" + index + "] is out of bounds");
+ } else {
+ //valid index
+ Object convertedValue = xworkConverter.convertValue(context, value, clazz);
+ Array.set(target, index, convertedValue);
+ elContext.setPropertyResolved(true);
+ }
+ }
+ } else {
+ //try normal list
+ if (index < Array.getLength(target)) {
+ Object convertedValue = xworkConverter.convertValue(context, value, clazz);
+ Array.set(target, index, convertedValue);
+ elContext.setPropertyResolved(true);
+ }
+ }
+ }
+ }
+}
Modified: struts/sandbox/trunk/struts2-uel-plugin/src/main/java/org/apache/struts2/uelplugin/elresolvers/XWorkBeanELResolver.java
URL:
http://svn.apache.org/viewvc/struts/sandbox/trunk/struts2-uel-plugin/src/main/java/org/apache/struts2/uelplugin/elresolvers/XWorkBeanELResolver.java?rev=833625&r1=833624&r2=833625&view=diff==============================================================================
--- struts/sandbox/trunk/struts2-uel-plugin/src/main/java/org/apache/struts2/uelplugin/elresolvers/XWorkBeanELResolver.java (original)
+++ struts/sandbox/trunk/struts2-uel-plugin/src/main/java/org/apache/struts2/uelplugin/elresolvers/XWorkBeanELResolver.java Sat Nov 7 01:18:15 2009
@@ -1,16 +1,12 @@
package org.apache.struts2.uelplugin.elresolvers;
import com.opensymphony.xwork2.conversion.impl.XWorkConverter;
-import com.opensymphony.xwork2.parameters.accessor.ParametersPropertyAccessor;
-import com.opensymphony.xwork2.util.reflection.ReflectionProvider;
-import com.opensymphony.xwork2.util.reflection.ReflectionContextState;
import com.opensymphony.xwork2.inject.Container;
+import com.opensymphony.xwork2.util.reflection.ReflectionContextState;
import org.apache.commons.beanutils.PropertyUtils;
import org.apache.struts2.StrutsException;
-import javax.el.BeanELResolver;
import javax.el.ELContext;
-import java.lang.reflect.InvocationTargetException;
import java.util.Map;
public class XWorkBeanELResolver extends AbstractResolver {
Modified: struts/sandbox/trunk/struts2-uel-plugin/src/main/java/org/apache/struts2/uelplugin/elresolvers/XWorkListELResolver.java
URL:
http://svn.apache.org/viewvc/struts/sandbox/trunk/struts2-uel-plugin/src/main/java/org/apache/struts2/uelplugin/elresolvers/XWorkListELResolver.java?rev=833625&r1=833624&r2=833625&view=diff==============================================================================
--- struts/sandbox/trunk/struts2-uel-plugin/src/main/java/org/apache/struts2/uelplugin/elresolvers/XWorkListELResolver.java (original)
+++ struts/sandbox/trunk/struts2-uel-plugin/src/main/java/org/apache/struts2/uelplugin/elresolvers/XWorkListELResolver.java Sat Nov 7 01:18:15 2009
@@ -16,9 +16,9 @@
}
public Object getValue(ELContext elContext, Object target, Object property) {
- Map<String, Object> context = (Map) elContext.getContext(AccessorsContextKey.class);
-
if (target != null && property != null && target instanceof List) {
+
+ Map<String, Object> context = (Map) elContext.getContext(AccessorsContextKey.class);
List list = (List) target;
Class lastClass = (Class) context.get(XWorkConverter.LAST_BEAN_CLASS_ACCESSED);
@@ -31,49 +31,49 @@
//ignore
}
- if (numericValue != null
- && ReflectionContextState.isCreatingNullObjects(context)
- && objectTypeDeterminer.shouldCreateIfNew(lastClass, lastProperty, target, null, true)) {
- int index = numericValue.intValue();
- int listSize = list.size();
-
- /*if (lastClass == null || lastProperty == null) {
- return super.getProperty(context, target, name);
- }*/
- Class beanClass = objectTypeDeterminer.getElementClass(lastClass, lastProperty, property);
- if (listSize <= index) {
- Object result = null;
-
- for (int i = listSize; i < index; i++) {
- list.add(null);
+ if (numericValue != null) {
+ if (ReflectionContextState.isCreatingNullObjects(context) && objectTypeDeterminer.shouldCreateIfNew(lastClass, lastProperty, target, null, true)) {
+ int index = numericValue.intValue();
+ int listSize = list.size();
+
+ /*if (lastClass == null || lastProperty == null) {
+ return super.getProperty(context, target, name);
+ }*/
+ Class beanClass = objectTypeDeterminer.getElementClass(lastClass, lastProperty, property);
+ if (listSize <= index) {
+ Object result = null;
+
+ for (int i = listSize; i < index; i++) {
+ list.add(null);
+ }
+ try {
+ list.add(index, result = objectFactory.buildBean(beanClass, context));
+ } catch (Exception exc) {
+ throw new XWorkException(exc);
+ }
+
+ elContext.setPropertyResolved(true);
+ return result;
+ } else if (list.get(index) == null) {
+ Object result = null;
+ try {
+ list.set(index, result = objectFactory.buildBean(beanClass, context));
+ } catch (Exception exc) {
+ throw new XWorkException(exc);
+ }
+
+ elContext.setPropertyResolved(true);
+ return result;
+ } else {
+ elContext.setPropertyResolved(true);
+ return list.get(index);
}
- try {
- list.add(index, result = objectFactory.buildBean(beanClass, context));
- } catch (Exception exc) {
- throw new XWorkException(exc);
- }
-
- elContext.setPropertyResolved(true);
- return result;
- } else if (list.get(index) == null) {
- Object result = null;
- try {
- list.set(index, result = objectFactory.buildBean(beanClass, context));
- } catch (Exception exc) {
- throw new XWorkException(exc);
- }
-
- elContext.setPropertyResolved(true);
- return result;
} else {
- elContext.setPropertyResolved(true);
- return list.get(index);
- }
- } else {
- //try normal list
- if (numericValue < list.size()) {
- elContext.setPropertyResolved(true);
- return list.get(numericValue);
+ //try normal list
+ if (numericValue < list.size()) {
+ elContext.setPropertyResolved(true);
+ return list.get(numericValue);
+ }
}
}
}
Added: struts/sandbox/trunk/struts2-uel-plugin/src/main/java/org/apache/struts2/uelplugin/elresolvers/XWorkMapELResolver.java
URL:
http://svn.apache.org/viewvc/struts/sandbox/trunk/struts2-uel-plugin/src/main/java/org/apache/struts2/uelplugin/elresolvers/XWorkMapELResolver.java?rev=833625&view=auto==============================================================================
--- struts/sandbox/trunk/struts2-uel-plugin/src/main/java/org/apache/struts2/uelplugin/elresolvers/XWorkMapELResolver.java (added)
+++ struts/sandbox/trunk/struts2-uel-plugin/src/main/java/org/apache/struts2/uelplugin/elresolvers/XWorkMapELResolver.java Sat Nov 7 01:18:15 2009
@@ -0,0 +1,137 @@
+package org.apache.struts2.uelplugin.elresolvers;
+
+import com.opensymphony.xwork2.util.reflection.ReflectionContextState;
+import com.opensymphony.xwork2.conversion.impl.XWorkConverter;
+import com.opensymphony.xwork2.inject.Container;
+
+import javax.el.ELContext;
+import java.util.Map;
+import java.util.List;
+import java.util.WeakHashMap;
+
+public class XWorkMapELResolver extends AbstractResolver {
+ private final Map<Key, Class> keyClassCache = new WeakHashMap<Key, Class>();
+
+ public XWorkMapELResolver(Container container) {
+ super(container);
+ }
+
+ public Object getValue(ELContext elContext, Object target, Object property) {
+ Map<String, Object> context = (Map) elContext.getContext(AccessorsContextKey.class);
+
+ if (target != null && property != null && target instanceof Map) {
+ Object result = null;
+
+ //find the key class and convert the name to that class
+ Class lastClass = (Class) context.get(XWorkConverter.LAST_BEAN_CLASS_ACCESSED);
+ String lastProperty = (String) context.get(XWorkConverter.LAST_BEAN_PROPERTY_ACCESSED);
+
+ Class keyClass = objectTypeDeterminer.getKeyClass(lastClass, lastProperty);
+
+ if (keyClass == null)
+ keyClass = String.class;
+
+ Object key = getKey(context, property);
+ Map map = (Map) target;
+ result = map.get(key);
+
+ if (result == null &&
+ context.get(ReflectionContextState.CREATE_NULL_OBJECTS) != null
+ && objectTypeDeterminer.shouldCreateIfNew(lastClass, lastProperty, target, null, false)) {
+ Class valueClass = objectTypeDeterminer.getElementClass(lastClass, lastProperty, key);
+
+ try {
+ result = objectFactory.buildBean(valueClass, context);
+ map.put(key, result);
+ } catch (Exception exc) {
+ }
+
+ }
+
+ elContext.setPropertyResolved(true);
+ return result;
+ }
+ return null;
+ }
+
+ private Object getKey(Map context, Object name) {
+ Class lastClass = (Class) context.get(XWorkConverter.LAST_BEAN_CLASS_ACCESSED);
+ String lastProperty = (String) context.get(XWorkConverter.LAST_BEAN_PROPERTY_ACCESSED);
+ if (lastClass == null || lastProperty == null) {
+ // return java.lang.String.class;
+ // commented out the above -- it makes absolutely no sense for when setting basic maps!
+ return name;
+ }
+
+ Key key = new Key(lastClass, lastProperty);
+ //lookup in the cache first
+ Class keyClass = keyClassCache.get(key);
+
+ if (keyClass == null) {
+ keyClass = objectTypeDeterminer.getKeyClass(lastClass, lastProperty);
+
+ if (keyClass != null)
+ keyClassCache.put(key, keyClass);
+ }
+
+ if (keyClass == null) {
+ keyClass = String.class;
+ keyClassCache.put(key, String.class);
+ }
+
+ return xworkConverter.convertValue(context, name, keyClass);
+
+ }
+
+ public void setValue(ELContext elContext, Object target, Object property, Object value) {
+ Map<String, Object> context = (Map) elContext.getContext(AccessorsContextKey.class);
+
+ if (target != null && property != null && target instanceof Map) {
+ Object key = getKey(context, property);
+ Map map = (Map) target;
+ map.put(key, getValue(context, value));
+ }
+ }
+
+ private Object getValue(Map context, Object value) {
+ Class lastClass = (Class) context.get(XWorkConverter.LAST_BEAN_CLASS_ACCESSED);
+ String lastProperty = (String) context.get(XWorkConverter.LAST_BEAN_PROPERTY_ACCESSED);
+ if (lastClass == null || lastProperty == null) {
+ return value;
+ }
+ Class elementClass = objectTypeDeterminer.getElementClass(lastClass, lastProperty, null);
+ if (elementClass == null) {
+ return value; // nothing is specified, we assume it will be the value passed in.
+ }
+ return xworkConverter.convertValue(context, value, elementClass);
+ }
+}
+
+class Key {
+ Class clazz;
+ String property;
+
+ Key(Class clazz, String property) {
+ this.clazz = clazz;
+ this.property = property;
+ }
+
+ public boolean equals(Object o) {
+ if (this == o) return true;
+ if (o == null || getClass() != o.getClass()) return false;
+
+ Key key = (Key) o;
+
+ if (clazz != null ? !clazz.equals(key.clazz) : key.clazz != null) return false;
+ if (property != null ? !property.equals(key.property) : key.property != null) return false;
+
+ return true;
+ }
+
+ public int hashCode() {
+ int result = clazz != null ? clazz.hashCode() : 0;
+ result = 31 * result + (property != null ? property.hashCode() : 0);
+ return result;
+ }
+}
+
Modified: struts/sandbox/trunk/struts2-uel-plugin/src/test/java/org/apache/struts2/uelplugin/AbstractUelBaseTest.java
URL:
http://svn.apache.org/viewvc/struts/sandbox/trunk/struts2-uel-plugin/src/test/java/org/apache/struts2/uelplugin/AbstractUelBaseTest.java?rev=833625&r1=833624&r2=833625&view=diff==============================================================================
--- struts/sandbox/trunk/struts2-uel-plugin/src/test/java/org/apache/struts2/uelplugin/AbstractUelBaseTest.java (original)
+++ struts/sandbox/trunk/struts2-uel-plugin/src/test/java/org/apache/struts2/uelplugin/AbstractUelBaseTest.java Sat Nov 7 01:18:15 2009
@@ -66,6 +66,7 @@
builder.factory(ValueStack.class, UelValueStack.class);
builder.factory(ValueStackFactory.class, UelValueStackFactory.class);
builder.factory(ReflectionProvider.class, GenericReflectionProvider.class);
+ //builder.factory(StrutsTypeConverter)
}
});
Modified: struts/sandbox/trunk/struts2-uel-plugin/src/test/java/org/apache/struts2/uelplugin/ParametersTest.java
URL:
http://svn.apache.org/viewvc/struts/sandbox/trunk/struts2-uel-plugin/src/test/java/org/apache/struts2/uelplugin/ParametersTest.java?rev=833625&r1=833624&r2=833625&view=diff==============================================================================
--- struts/sandbox/trunk/struts2-uel-plugin/src/test/java/org/apache/struts2/uelplugin/ParametersTest.java (original)
+++ struts/sandbox/trunk/struts2-uel-plugin/src/test/java/org/apache/struts2/uelplugin/ParametersTest.java Sat Nov 7 01:18:15 2009
@@ -8,6 +8,7 @@
import java.util.Map;
import java.util.List;
import java.util.ArrayList;
+import java.util.HashMap;
import java.lang.reflect.InvocationTargetException;
@@ -44,15 +45,43 @@
assertEquals("val", obj.getTypedList().get(1).getValue());
}
- public void testAnnotatedTypeConverter() {
- TestAction action = new TestAction();
- assertNull(action.getConverted());
- root.push(action);
+ public void testWriteArray() throws IllegalAccessException, InvocationTargetException, NoSuchMethodException {
+ //not null
+ Object[] array = new Object[2];
+ TestObject obj = new TestObject();
+ //obj.setObjectArray(array);
+ //assertNotNull(obj.getObjectArray());
+ root.push(obj);
- stack.setValue("converted", "someval");
- assertEquals("converted", action.getConverted());
+ stack.setValue("objectArray[0].value", "val");
+ assertEquals("val", ((TestObject)array[0]).getValue());
}
+ public void testWriteMap() throws IllegalAccessException, InvocationTargetException, NoSuchMethodException {
+ //not null
+ Map map = new HashMap();
+ TestObject obj = new TestObject();
+ obj.setMap(map);
+ assertNotNull(obj.getMap());
+ root.push(obj);
+
+ stack.setValue("map['str']", "val");
+ assertEquals(1, map.size());
+ assertEquals("val", map.get("str"));
+
+ //null list
+ obj.setMap(null);
+ assertNull(obj.getMap());
+ stack.setValue("map['str']", "val");
+ assertNotNull(obj.getMap());
+ assertEquals("val", stack.findValue("map['str']"));
+
+ //test type determiner
+ obj.setTypedMap(null);
+ stack.setValue("typedMap[1].value", "val");
+ assertEquals(1, obj.getTypedMap().size());
+ assertEquals("val", obj.getTypedMap().get(1).getValue());
+ }
public void testSetPropertiesOnNestedNullObject() {
TestObject obj = new TestObject();
Modified: struts/sandbox/trunk/struts2-uel-plugin/src/test/java/org/apache/struts2/uelplugin/TestObject.java
URL:
http://svn.apache.org/viewvc/struts/sandbox/trunk/struts2-uel-plugin/src/test/java/org/apache/struts2/uelplugin/TestObject.java?rev=833625&r1=833624&r2=833625&view=diff==============================================================================
--- struts/sandbox/trunk/struts2-uel-plugin/src/test/java/org/apache/struts2/uelplugin/TestObject.java (original)
+++ struts/sandbox/trunk/struts2-uel-plugin/src/test/java/org/apache/struts2/uelplugin/TestObject.java Sat Nov 7 01:18:15 2009
@@ -3,6 +3,7 @@
import java.util.Date;
import java.util.Map;
import java.util.List;
+import java.util.Set;
public class TestObject {
@@ -14,6 +15,51 @@
private Object object;
private List list;
private List<TestObject> typedList;
+ private Map map;
+ private Map<Integer, TestObject> typedMap;
+ private Object[] objectArray;
+ private Integer[] typedArray;
+ private Set set;
+
+ public Set getSet() {
+ return set;
+ }
+
+ public void setSet(Set set) {
+ this.set = set;
+ }
+
+ public Object[] getObjectArray() {
+ return objectArray;
+ }
+
+ public void setObjectArray(Object[] objectArray) {
+ this.objectArray = objectArray;
+ }
+
+ public Integer[] getTypedArray() {
+ return typedArray;
+ }
+
+ public void setTypedArray(Integer[] typedArray) {
+ this.typedArray = typedArray;
+ }
+
+ public Map getMap() {
+ return map;
+ }
+
+ public void setMap(Map map) {
+ this.map = map;
+ }
+
+ public Map<Integer, TestObject> getTypedMap() {
+ return typedMap;
+ }
+
+ public void setTypedMap(Map<Integer, TestObject> typedMap) {
+ this.typedMap = typedMap;
+ }
public List<TestObject> getTypedList() {
return typedList;
Modified: struts/sandbox/trunk/struts2-uel-plugin/src/test/java/org/apache/struts2/uelplugin/UelTest.java
URL:
http://svn.apache.org/viewvc/struts/sandbox/trunk/struts2-uel-plugin/src/test/java/org/apache/struts2/uelplugin/UelTest.java?rev=833625&r1=833624&r2=833625&view=diff==============================================================================
--- struts/sandbox/trunk/struts2-uel-plugin/src/test/java/org/apache/struts2/uelplugin/UelTest.java (original)
+++ struts/sandbox/trunk/struts2-uel-plugin/src/test/java/org/apache/struts2/uelplugin/UelTest.java Sat Nov 7 01:18:15 2009
@@ -43,6 +43,28 @@
assertEquals(10, stack.findValue("object[0]"));
}
+ public void testReadArray() throws IllegalAccessException, InvocationTargetException, NoSuchMethodException {
+ TestObject obj = new TestObject();
+ Integer[] ints = {10, 20};
+ obj.setTypedArray(ints);
+ root.push(obj);
+
+ //list
+ assertEquals(20, stack.findValue("typedArray[1]"));
+ }
+
+
+ public void testMap() throws IllegalAccessException, InvocationTargetException, NoSuchMethodException {
+ HashMap map = new HashMap();
+ map.put("nameValue", "Lex");
+ TestObject obj = new TestObject();
+ obj.setParameters(map);
+ root.add(obj);
+
+ assertEquals("Lex", stack.findValue("parameters.nameValue"));
+ assertEquals("Lex", stack.findValue("parameters['nameValue']"));
+ }
+
public void testContextReferencesWithSameObjectInStack() throws IllegalAccessException, InvocationTargetException, NoSuchMethodException {
//if there as object in the stack with the property "X" and there is an object in the
@@ -189,17 +211,6 @@
assertEquals(stack.findString("#{date}"), format.format(obj.getDate()));
}
- public void testMap() throws IllegalAccessException, InvocationTargetException, NoSuchMethodException {
- HashMap map = new HashMap();
- map.put("nameValue", "Lex");
- TestObject obj = new TestObject();
- obj.setParameters(map);
- root.add(obj);
-
- String value = (String) stack.findValue("parameters.nameValue", String.class);
- assertEquals("Lex", value);
- }
-
public void test2LevelSet() throws IllegalAccessException, InvocationTargetException, NoSuchMethodException {
TestObject obj = new TestObject();
TestObject nestedObj = new TestObject();