Author: craigmcc Date: Tue Jan 17 16:58:12 2006 New Revision: 369992 URL: http://svn.apache.org/viewcvs?rev=369992&view=rev Log: In VariableResolverImpl, remove direct dependency on Commons BeanUtils by using the new helper methods for property access and conversion. As a side effect of this change, also change the unit tests that specified properties of type java.sql.Date, since JSF does not supply a standard converter for this, while BeanUtils did.
Modified: struts/shale/trunk/tiger/nbproject/private/private.xml struts/shale/trunk/tiger/src/java/org/apache/shale/tiger/faces/VariableResolverImpl.java struts/shale/trunk/tiger/src/test/org/apache/shale/tiger/config/FacesConfigParserTestCase.java struts/shale/trunk/tiger/src/test/org/apache/shale/tiger/config/test-config-4.xml struts/shale/trunk/tiger/src/test/org/apache/shale/tiger/config/test-config-5.xml struts/shale/trunk/tiger/src/test/org/apache/shale/tiger/faces/VariableResolverImpl4TestCase.java struts/shale/trunk/tiger/src/test/org/apache/shale/tiger/faces/VariableResolverImpl5TestCase.java Modified: struts/shale/trunk/tiger/nbproject/private/private.xml URL: http://svn.apache.org/viewcvs/struts/shale/trunk/tiger/nbproject/private/private.xml?rev=369992&r1=369991&r2=369992&view=diff ============================================================================== --- struts/shale/trunk/tiger/nbproject/private/private.xml (original) +++ struts/shale/trunk/tiger/nbproject/private/private.xml Tue Jan 17 16:58:12 2006 @@ -1,4 +1,4 @@ -<?xml version="1.0" encoding="UTF-8"?> -<project-private xmlns="http://www.netbeans.org/ns/project-private/1"> - <editor-bookmarks xmlns="http://www.netbeans.org/ns/editor-bookmarks/1"/> -</project-private> +<?xml version="1.0" encoding="UTF-8"?> +<project-private xmlns="http://www.netbeans.org/ns/project-private/1"> + <editor-bookmarks xmlns="http://www.netbeans.org/ns/editor-bookmarks/1"/> +</project-private> Modified: struts/shale/trunk/tiger/src/java/org/apache/shale/tiger/faces/VariableResolverImpl.java URL: http://svn.apache.org/viewcvs/struts/shale/trunk/tiger/src/java/org/apache/shale/tiger/faces/VariableResolverImpl.java?rev=369992&r1=369991&r2=369992&view=diff ============================================================================== --- struts/shale/trunk/tiger/src/java/org/apache/shale/tiger/faces/VariableResolverImpl.java (original) +++ struts/shale/trunk/tiger/src/java/org/apache/shale/tiger/faces/VariableResolverImpl.java Tue Jan 17 16:58:12 2006 @@ -23,12 +23,9 @@ import javax.faces.context.ExternalContext; import javax.faces.context.FacesContext; import javax.faces.el.EvaluationException; +import javax.faces.el.PropertyNotFoundException; import javax.faces.el.ValueBinding; import javax.faces.el.VariableResolver; -import org.apache.commons.beanutils.BeanUtils; -import org.apache.commons.beanutils.ConversionException; -import org.apache.commons.beanutils.ConvertUtils; -import org.apache.commons.beanutils.PropertyUtils; import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; import org.apache.shale.tiger.config.FacesConfigConfig; @@ -40,7 +37,9 @@ import org.apache.shale.tiger.managed.config.ManagedPropertyConfig; import org.apache.shale.tiger.managed.config.MapEntriesConfig; import org.apache.shale.tiger.managed.config.MapEntryConfig; +import org.apache.shale.util.ConverterHelper; import org.apache.shale.util.Messages; +import org.apache.shale.util.PropertyHelper; /** * <p>Implementation of <code>VariableResolver</code> that delegates @@ -101,6 +100,12 @@ /** + * <p>Helper bean for performing conversions.</p> + */ + private ConverterHelper convHelper = new ConverterHelper(); + + + /** * <p>Log instance for this class.</p> */ private transient Log log = null; @@ -119,6 +124,13 @@ private VariableResolver original = null; + /** + * <p>Helper bean for accessing properties.</p> + */ + private PropertyHelper propHelper = new PropertyHelper(); + + + // ----------------------------------------------- VariableResolver Methods @@ -193,60 +205,6 @@ /** - * <p>Convert the specified value to the specified type.</p> - * - * @param context <code>FacesContext</code> for the current request - * @param type Type to which the value should be converted, or - * <code>null</code> to leave it as a string - * @param value Value to be converted - * - * @exception EvaluationException if an evaluation error occurs - */ - private Object convert(FacesContext context, Class type, String value) { - - // If the type is not specified, return the value unchanged - if (type == null) { - return value; - } - - // Handle primitive type conversions explicitly - try { - if ((type == Boolean.TYPE) || (type == Boolean.class)) { - return Boolean.valueOf(value); - } else if ((type == Byte.TYPE) || (type == Byte.class)) { - return Byte.valueOf(value); - } else if ((type == Double.TYPE) || (type == Double.class)) { - return Double.valueOf(value); - } else if ((type == Float.TYPE) || (type == Float.class)) { - return Float.valueOf(value); - } else if ((type == Integer.TYPE) || (type == Integer.class)) { - return Integer.valueOf(value); - } else if ((type == Long.TYPE) || (type == Long.class)) { - return Long.valueOf(value); - } else if ((type == Short.TYPE) || (type == Short.class)) { - return Short.valueOf(value); - } - } catch (NumberFormatException e) { - throw new EvaluationException(messages(). - getMessage("convert.format", - context.getViewRoot().getLocale(), - new Object[] { value, type.getName() }), e); - } - - // For all other cases, use the conversion utility - try { - return ConvertUtils.convert(value, type); - } catch (ConversionException e) { - throw new EvaluationException(messages(). - getMessage("convert.exception", - context.getViewRoot().getLocale(), - new Object[] { value, type.getName() }), e); - } - - } - - - /** * <p>Create, configure, and return a new instance based on the * specified managed bean, after storing it in the configured * scope (if any).</p> @@ -390,7 +348,11 @@ context.getApplication().createValueBinding(entry.getValue()); list.add(vb.getValue(context)); } else { - list.add(convert(context, type, entry.getValue())); + if (type != null) { + list.add(convHelper.asObject(context, type, entry.getValue())); + } else { + list.add(entry.getValue()); + } } } @@ -455,7 +417,12 @@ // Add a map key/value pair for each configuration element that is present for (MapEntryConfig entry : config.getEntries()) { - Object key = convert(context, keyClass, entry.getKey()); + Object key = null; + if (keyClass != null) { + key = convHelper.asObject(context, keyClass, entry.getKey()); + } else { + key = entry.getKey(); + } if (entry.isNullValue()) { map.put(key, null); } else if (entry.isExpression()) { @@ -464,7 +431,11 @@ context.getApplication().createValueBinding(entry.getValue()); map.put(key, vb.getValue(context)); } else { - map.put(key, convert(context, valueClass, entry.getValue())); + if (valueClass != null) { + map.put(key, convHelper.asObject(context, valueClass, entry.getValue())); + } else { + map.put(key, entry.getValue()); + } } } @@ -509,8 +480,9 @@ // specified instance, if it exists Object property = null; try { - property = PropertyUtils.getProperty(instance, mp.getName()); - } catch (NoSuchMethodException e) { + property = propHelper.getValue(instance, mp.getName()); +// property = PropertyUtils.getProperty(instance, mp.getName()); + } catch (PropertyNotFoundException e) { ; // Fall through to creating our own list } catch (Exception e) { throw new EvaluationException(messages(). @@ -535,7 +507,8 @@ // Store the value of the property try { - BeanUtils.setProperty(instance, mp.getName(), property); + propHelper.setValue(instance, mp.getName(), property); +// BeanUtils.setProperty(instance, mp.getName(), property); } catch (Exception e) { throw new EvaluationException(messages(). getMessage("list.set", @@ -556,8 +529,9 @@ // specified instance, if it exists Object property = null; try { - property = PropertyUtils.getProperty(instance, mp.getName()); - } catch (NoSuchMethodException e) { + property = propHelper.getValue(instance, mp.getName()); +// property = PropertyUtils.getProperty(instance, mp.getName()); + } catch (PropertyNotFoundException e) { ; // Fall through to creating our own map } catch (Exception e) { throw new EvaluationException(messages(). @@ -581,7 +555,8 @@ // Store the value of the property try { - BeanUtils.setProperty(instance, mp.getName(), property); + propHelper.setValue(instance, mp.getName(), property); +// BeanUtils.setProperty(instance, mp.getName(), property); } catch (Exception e) { throw new EvaluationException(messages(). getMessage("map.set", @@ -615,7 +590,11 @@ // Assign the acquired value to the specified bean property try { - BeanUtils.setProperty(instance, mp.getName(), value); + Class type = propHelper.getType(instance, mp.getName()); + if ((value != null) && (value instanceof String)) { + value = convHelper.asObject(context, type, (String) value); + } + propHelper.setValue(instance, mp.getName(), value); } catch (Exception e) { throw new EvaluationException(messages(). getMessage("variable.evaluate", Modified: struts/shale/trunk/tiger/src/test/org/apache/shale/tiger/config/FacesConfigParserTestCase.java URL: http://svn.apache.org/viewcvs/struts/shale/trunk/tiger/src/test/org/apache/shale/tiger/config/FacesConfigParserTestCase.java?rev=369992&r1=369991&r2=369992&view=diff ============================================================================== --- struts/shale/trunk/tiger/src/test/org/apache/shale/tiger/config/FacesConfigParserTestCase.java (original) +++ struts/shale/trunk/tiger/src/test/org/apache/shale/tiger/config/FacesConfigParserTestCase.java Tue Jan 17 16:58:12 2006 @@ -106,9 +106,9 @@ assertEquals(4, facesConfig.getManagedBeans().size()); // Validate bean "explicitSqlDateList" - mb = facesConfig.getManagedBean("explicitSqlDateList"); + mb = facesConfig.getManagedBean("explicitIntegerList"); assertNotNull(mb); - assertEquals("explicitSqlDateList", mb.getName()); + assertEquals("explicitIntegerList", mb.getName()); assertEquals("none", mb.getScope()); assertEquals("java.util.Vector", mb.getType()); assertNotNull(mb.getListEntries()); @@ -116,18 +116,18 @@ assertEquals(0, mb.getProperties().size()); entries = mb.getListEntries(); - assertEquals("java.sql.Date", entries.getValueType()); + assertEquals("java.lang.Integer", entries.getValueType()); assertEquals(4, entries.getEntries().size()); entry = entries.getEntries().get(0); assertNotNull(entry); assertTrue(!entry.isExpression()); assertTrue(!entry.isNullValue()); - assertEquals("2006-01-02", entry.getValue()); + assertEquals("123", entry.getValue()); entry = entries.getEntries().get(1); assertNotNull(entry); assertTrue(!entry.isExpression()); assertTrue(!entry.isNullValue()); - assertEquals("2006-03-04", entry.getValue()); + assertEquals("234", entry.getValue()); entry = entries.getEntries().get(2); assertNotNull(entry); assertTrue(!entry.isExpression()); @@ -137,7 +137,7 @@ assertNotNull(entry); assertTrue(!entry.isExpression()); assertTrue(!entry.isNullValue()); - assertEquals("2006-05-06", entry.getValue()); + assertEquals("345", entry.getValue()); // Validate bean "explicitStringList" mb = facesConfig.getManagedBean("explicitStringList"); @@ -272,9 +272,9 @@ assertEquals(2, facesConfig.getManagedBeans().size()); // Validate bean "stringDateMap" - mb = facesConfig.getManagedBean("stringDateMap"); + mb = facesConfig.getManagedBean("stringIntegerMap"); assertNotNull(mb); - assertEquals("stringDateMap", mb.getName()); + assertEquals("stringIntegerMap", mb.getName()); assertEquals("none", mb.getScope()); assertEquals("java.util.TreeMap", mb.getType()); assertNull(mb.getListEntries()); @@ -283,18 +283,18 @@ entries = mb.getMapEntries(); assertEquals("java.lang.String", entries.getKeyType()); - assertEquals("java.sql.Date", entries.getValueType()); + assertEquals("java.lang.Integer", entries.getValueType()); assertEquals(4, entries.getEntries().size()); entry = entries.getEntries().get(0); assertEquals("First", entry.getKey()); - assertEquals("2006-01-02", entry.getValue()); + assertEquals("123", entry.getValue()); assertTrue(!entry.isExpression()); assertTrue(!entry.isNullValue()); entry = entries.getEntries().get(1); assertEquals("Second", entry.getKey()); - assertEquals("2006-03-04", entry.getValue()); + assertEquals("234", entry.getValue()); assertTrue(!entry.isExpression()); assertTrue(!entry.isNullValue()); @@ -306,7 +306,7 @@ entry = entries.getEntries().get(3); assertEquals("Fourth", entry.getKey()); - assertEquals("2006-05-06", entry.getValue()); + assertEquals("345", entry.getValue()); assertTrue(!entry.isExpression()); assertTrue(!entry.isNullValue()); Modified: struts/shale/trunk/tiger/src/test/org/apache/shale/tiger/config/test-config-4.xml URL: http://svn.apache.org/viewcvs/struts/shale/trunk/tiger/src/test/org/apache/shale/tiger/config/test-config-4.xml?rev=369992&r1=369991&r2=369992&view=diff ============================================================================== --- struts/shale/trunk/tiger/src/test/org/apache/shale/tiger/config/test-config-4.xml (original) +++ struts/shale/trunk/tiger/src/test/org/apache/shale/tiger/config/test-config-4.xml Tue Jan 17 16:58:12 2006 @@ -29,15 +29,15 @@ <!-- Configure a variety of managed beans that are actually lists --> <managed-bean> - <managed-bean-name>explicitSqlDateList</managed-bean-name> + <managed-bean-name>explicitIntegerList</managed-bean-name> <managed-bean-class>java.util.Vector</managed-bean-class> <managed-bean-scope>none</managed-bean-scope> <list-entries> - <value-class>java.sql.Date</value-class> - <value>2006-01-02</value> - <value>2006-03-04</value> + <value-class>java.lang.Integer</value-class> + <value>123</value> + <value>234</value> <null-value/> - <value>2006-05-06</value> + <value>345</value> </list-entries> </managed-bean> Modified: struts/shale/trunk/tiger/src/test/org/apache/shale/tiger/config/test-config-5.xml URL: http://svn.apache.org/viewcvs/struts/shale/trunk/tiger/src/test/org/apache/shale/tiger/config/test-config-5.xml?rev=369992&r1=369991&r2=369992&view=diff ============================================================================== --- struts/shale/trunk/tiger/src/test/org/apache/shale/tiger/config/test-config-5.xml (original) +++ struts/shale/trunk/tiger/src/test/org/apache/shale/tiger/config/test-config-5.xml Tue Jan 17 16:58:12 2006 @@ -29,19 +29,19 @@ <!-- Configure a managed bean that is actually a map --> <managed-bean> - <managed-bean-name>stringDateMap</managed-bean-name> + <managed-bean-name>stringIntegerMap</managed-bean-name> <managed-bean-class>java.util.TreeMap</managed-bean-class> <managed-bean-scope>none</managed-bean-scope> <map-entries> <key-class>java.lang.String</key-class> - <value-class>java.sql.Date</value-class> + <value-class>java.lang.Integer</value-class> <map-entry> <key>First</key> - <value>2006-01-02</value> + <value>123</value> </map-entry> <map-entry> <key>Second</key> - <value>2006-03-04</value> + <value>234</value> </map-entry> <map-entry> <key>Third</key> @@ -49,7 +49,7 @@ </map-entry> <map-entry> <key>Fourth</key> - <value>2006-05-06</value> + <value>345</value> </map-entry> </map-entries> </managed-bean> Modified: struts/shale/trunk/tiger/src/test/org/apache/shale/tiger/faces/VariableResolverImpl4TestCase.java URL: http://svn.apache.org/viewcvs/struts/shale/trunk/tiger/src/test/org/apache/shale/tiger/faces/VariableResolverImpl4TestCase.java?rev=369992&r1=369991&r2=369992&view=diff ============================================================================== --- struts/shale/trunk/tiger/src/test/org/apache/shale/tiger/faces/VariableResolverImpl4TestCase.java (original) +++ struts/shale/trunk/tiger/src/test/org/apache/shale/tiger/faces/VariableResolverImpl4TestCase.java Tue Jan 17 16:58:12 2006 @@ -110,19 +110,19 @@ // ------------------------------------------------------------ Test Methods - // Test creating bean "explicitSqlDateList" - public void testExplicitSqlDateList() { + // Test creating bean "explicitIntegerList" + public void testExplicitIntegerList() { - Object instance = resolver.resolveVariable(facesContext, "explicitSqlDateList"); + Object instance = resolver.resolveVariable(facesContext, "explicitIntegerList"); assertNotNull(instance); assertTrue(instance instanceof Vector); List list = (List) instance; assertEquals(4, list.size()); - assertEquals(new Date(106, 0, 2), list.get(0)); - assertEquals(new Date(106, 2, 4), list.get(1)); + assertEquals(new Integer(123), list.get(0)); + assertEquals(new Integer(234), list.get(1)); assertNull(list.get(2)); - assertEquals(new Date(106, 4, 6), list.get(3)); + assertEquals(new Integer(345), list.get(3)); } Modified: struts/shale/trunk/tiger/src/test/org/apache/shale/tiger/faces/VariableResolverImpl5TestCase.java URL: http://svn.apache.org/viewcvs/struts/shale/trunk/tiger/src/test/org/apache/shale/tiger/faces/VariableResolverImpl5TestCase.java?rev=369992&r1=369991&r2=369992&view=diff ============================================================================== --- struts/shale/trunk/tiger/src/test/org/apache/shale/tiger/faces/VariableResolverImpl5TestCase.java (original) +++ struts/shale/trunk/tiger/src/test/org/apache/shale/tiger/faces/VariableResolverImpl5TestCase.java Tue Jan 17 16:58:12 2006 @@ -111,19 +111,19 @@ // ------------------------------------------------------------ Test Methods - // Test creating bean "stringDateMap" - public void testStringDateMap() { + // Test creating bean "stringIntegerMap" + public void testStringIntegerMap() { - Object instance = resolver.resolveVariable(facesContext, "stringDateMap"); + Object instance = resolver.resolveVariable(facesContext, "stringIntegerMap"); assertNotNull(instance); assertTrue(instance instanceof TreeMap); Map map = (Map) instance; assertEquals(4, map.size()); - assertEquals(new Date(106, 0, 2), map.get("First")); - assertEquals(new Date(106, 2, 4), map.get("Second")); + assertEquals(new Integer(123), map.get("First")); + assertEquals(new Integer(234), map.get("Second")); assertNull(map.get("Third")); - assertEquals(new Date(106, 4, 6), map.get("Fourth")); + assertEquals(new Integer(345), map.get("Fourth")); } --------------------------------------------------------------------- To unsubscribe, e-mail: [EMAIL PROTECTED] For additional commands, e-mail: [EMAIL PROTECTED]