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); }
private Object createObject(Class clazz, Object target, String property, Map<String, Object> context) throws Exception { if (Set.class.isAssignableFrom(clazz)) { return new HashSet(); } else if (Collection.class.isAssignableFrom(clazz)) { return new ArrayList(); } else if (clazz == Map.class) { return new HashMap(); } else if (clazz == EnumMap.class) { Class keyClass = objectTypeDeterminer.getKeyClass(target.getClass(), property); return new EnumMap(keyClass); } return objectFactory.buildBean(clazz, context); } }
.getKeyProperty(lastBeanClass, lastPropertyClass); Class collClass = objectTypeDeterminer.getElementClass(lastBeanClass, lastPropertyClass, key); && ReflectionContextState.isCreatingNullObjects(context) && objectTypeDeterminer .shouldCreateIfNew(lastBeanClass,lastPropertyClass,c,keyProperty,false)) {
&& objectTypeDeterminer.shouldCreateIfNew(lastClass,lastProperty,target,null,false)) { Class valueClass = objectTypeDeterminer.getElementClass(lastClass, lastProperty, key);
&& objectTypeDeterminer.shouldCreateIfNew(lastClass,lastProperty,target,null,true)) { return super.getProperty(context, target, name); Class beanClass = objectTypeDeterminer.getElementClass(lastClass, lastProperty, name); if (listSize <= index) { Object result = null;
memberType = objectTypeDeterminer.getElementClass(target.getClass(), propertyName, 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; } Class keyClass = objectTypeDeterminer.getKeyClass(lastClass, lastProperty); if (keyClass == null) { keyClass = java.lang.String.class; } return xworkConverter.convertValue(context, name, keyClass); } }
Class convertToClass = objectTypeDeterminer.getElementClass(lastClass, lastProperty, name);
@Override public void setProperty(Map context, Object target, Object name, Object value) throws OgnlException { Class lastClass = (Class) context.get(XWorkConverter.LAST_BEAN_CLASS_ACCESSED); String lastProperty = (String) context.get(XWorkConverter.LAST_BEAN_PROPERTY_ACCESSED); Class convertToClass = objectTypeDeterminer.getElementClass(lastClass, lastProperty, name); if (name instanceof String && value.getClass().isArray()) { // looks like the input game in the form of "someCollection.foo" and // we are expected to define the index values ourselves. // So let's do it: Collection c = (Collection) target; Object[] values = (Object[]) value; for (Object v : values) { try { Object o = objectFactory.buildBean(convertToClass, context); ognlUtil.setValue((String) name, context, o, v); c.add(o); } catch (Exception e) { throw new OgnlException("Error converting given String values for Collection.", e); } } // we don't want to do the normal collection property setting now, since we've already done the work // just return instead return; } Object realValue = getRealValue(context, value, convertToClass); super.setProperty(context, target, name, realValue); }