Hmmm...It does appear as if it does the same thing. Never even noticed it there....Yeah I'll back those changes out later then (besides one bug fix). Thanks for noticing. ;)
On Nov 6, 2007 1:56 PM, Andreas Andreou <[EMAIL PROTECTED]> wrote: > just wondering..., isn't the same as decorating with > org.apache.tapestry.form.LabeledPropertySelectionModel ? > > > On 11/6/07, [EMAIL PROTECTED] <[EMAIL PROTECTED]> wrote: > > Author: jkuhnert > > Date: Tue Nov 6 06:30:12 2007 > > New Revision: 592437 > > > > URL: http://svn.apache.org/viewvc?rev=592437&view=rev > > Log: > > Fixes TAPESTRY-1885. Added "null label" functionality to > > BeanPropertySelectionModel. > > > > Modified: > > > > tapestry/tapestry4/trunk/tapestry-framework/src/java/org/apache/tapestry/form/BeanPropertySelectionModel.java > > > > tapestry/tapestry4/trunk/tapestry-framework/src/test/org/apache/tapestry/form/BeanPropertySelectionModelTest.java > > > > Modified: > > tapestry/tapestry4/trunk/tapestry-framework/src/java/org/apache/tapestry/form/BeanPropertySelectionModel.java > > URL: > > http://svn.apache.org/viewvc/tapestry/tapestry4/trunk/tapestry-framework/src/java/org/apache/tapestry/form/BeanPropertySelectionModel.java?rev=592437&r1=592436&r2=592437&view=diff > > ============================================================================== > > --- > > tapestry/tapestry4/trunk/tapestry-framework/src/java/org/apache/tapestry/form/BeanPropertySelectionModel.java > > (original) > > +++ > > tapestry/tapestry4/trunk/tapestry-framework/src/java/org/apache/tapestry/form/BeanPropertySelectionModel.java > > Tue Nov 6 06:30:12 2007 > > @@ -13,14 +13,14 @@ > > // limitations under the License. > > package org.apache.tapestry.form; > > > > +import org.apache.commons.beanutils.BeanUtils; > > + > > import java.io.Serializable; > > import java.util.ArrayList; > > import java.util.Arrays; > > import java.util.Collection; > > import java.util.List; > > > > -import org.apache.commons.beanutils.BeanUtils; > > - > > /** > > * This class is a property selection model for an object list. This is > > used in PropertySelection, > > * MultiplePropertySelection or Palette tapestry components. For example, > > to use for a Hospital > > @@ -29,7 +29,7 @@ > > * return new BeanPropertySelectionModel(hospitals, "name"); > > * </code> > > * This will use getName() on the Hospital object, as its display. > > - * > > + * > > * @author Gabriel Handford > > */ > > public class BeanPropertySelectionModel implements > > IPropertySelectionModel, Serializable > > @@ -37,8 +37,9 @@ > > > > /** Comment for <code>serialVersionUID</code>. */ > > private static final long serialVersionUID = 3763091973006766644L; > > - private List _list; > > - private String _labelField; > > + protected List _list; > > + protected String _labelField; > > + protected String _nullLabel; > > > > /** > > * Build an empty property selection model. > > @@ -50,7 +51,7 @@ > > > > /** > > * Build a bean property selection model. > > - * > > + * > > * @param list > > * The list > > * @param labelField > > @@ -64,11 +65,11 @@ > > > > /** > > * Build a bean property selection model. > > - * > > + * > > * @param c > > - * Collection > > + * Collection > > * @param labelField > > - * The label field > > + * The label field > > */ > > public BeanPropertySelectionModel(Collection c, String labelField) > > { > > @@ -77,48 +78,93 @@ > > } > > > > /** > > + * Same as [EMAIL PROTECTED] > > #BeanPropertySelectionModel(java.util.List, String)} - with the added > > + * functionality of using the specified <code>nullLabel</code> field > > as a pseudo item in > > + * the list of options that stores a null value. This is useful for > > situations where you > > + * want to present a "Choose.." option or similar invalid option to > > prompt users for input. > > + * > > + * @param list > > + * The list of options. > > + * @param labelField > > + * The string expression to be used on each object to get the > > label value > > + * for the option - such as "user.name". > > + * @param nullLabel > > + * Will be treated as a pseudo option that always resolves to > > a null value but > > + * is properly displayed in the options list as the first > > element. > > + */ > > + public BeanPropertySelectionModel(List list, String labelField, String > > nullLabel) > > + { > > + this(list, labelField); > > + > > + _nullLabel = nullLabel; > > + } > > + > > + /** > > * Get the number of options. > > - * > > + * > > * @return option count > > */ > > public int getOptionCount() > > { > > - return _list.size(); > > + return _nullLabel != null ? _list.size() + 1 : _list.size(); > > } > > > > /** > > * Get the option at index. > > - * > > + * > > * @param index > > * Index > > * @return object Object at index > > */ > > public Object getOption(int index) > > { > > + if (_nullLabel != null && index == 0) > > + { > > + return null; > > + } > > + > > + if (_nullLabel != null) > > + index--; > > + > > + if (index > (_list.size() - 1)) > > + { > > + return null; > > + } > > + > > return _list.get(index); > > } > > > > /** > > * Get the label at index. > > - * > > + * > > * @param index > > * Index > > * @return label Label at index > > */ > > public String getLabel(int index) > > { > > - Object obj = _list.get(index); > > - try { > > + if (index == 0 && _nullLabel != null) > > + { > > + return _nullLabel; > > + } > > > > + if (_nullLabel != null) > > + index--; > > + > > + Object obj = _list.get(index); > > + > > + try > > + { > > return BeanUtils.getProperty(obj, _labelField); > > - } catch (Exception e) { > > + } catch (Exception e) > > + { > > throw new RuntimeException("Error getting property", e); > > } > > } > > > > /** > > * Get the value at index. > > - * > > + * > > * @param index > > * Index > > * @return value Value at index > > @@ -130,18 +176,29 @@ > > > > public boolean isDisabled(int index) > > { > > - return false; > > + return index == 0 && _nullLabel != null; > > } > > - > > + > > /** > > * Translate value to object. > > - * > > + * > > * @param value > > * Value > > * @return object Object from value > > */ > > public Object translateValue(String value) > > { > > - return getOption(Integer.parseInt(value)); > > + if (value == null) > > + { > > + return null; > > + } > > + > > + int index = Integer.parseInt(value); > > + if (index == 0 && _nullLabel != null) > > + { > > + return null; > > + } > > + > > + return getOption(index); > > } > > } > > > > Modified: > > tapestry/tapestry4/trunk/tapestry-framework/src/test/org/apache/tapestry/form/BeanPropertySelectionModelTest.java > > URL: > > http://svn.apache.org/viewvc/tapestry/tapestry4/trunk/tapestry-framework/src/test/org/apache/tapestry/form/BeanPropertySelectionModelTest.java?rev=592437&r1=592436&r2=592437&view=diff > > ============================================================================== > > --- > > tapestry/tapestry4/trunk/tapestry-framework/src/test/org/apache/tapestry/form/BeanPropertySelectionModelTest.java > > (original) > > +++ > > tapestry/tapestry4/trunk/tapestry-framework/src/test/org/apache/tapestry/form/BeanPropertySelectionModelTest.java > > Tue Nov 6 06:30:12 2007 > > @@ -13,12 +13,12 @@ > > // limitations under the License. > > package org.apache.tapestry.form; > > > > -import java.util.ArrayList; > > -import java.util.List; > > - > > import org.apache.tapestry.BaseComponentTestCase; > > import org.testng.annotations.Test; > > > > +import java.util.ArrayList; > > +import java.util.List; > > + > > > > /** > > * Tests the functionality of [EMAIL PROTECTED] > > BeanPropertySelectionModel}. > > @@ -29,28 +29,20 @@ > > public class BeanPropertySelectionModelTest extends BaseComponentTestCase > > { > > > > - /** > > - * Tests using a null arg constuctor. > > - */ > > - public void testNullModel() > > + public void test_Null_Model() > > { > > BeanPropertySelectionModel model = new > > BeanPropertySelectionModel(); > > assertEquals(model.getOptionCount(), 0); > > } > > > > - /** > > - * Uses [EMAIL PROTECTED] BeanPropertySelectionModelTest} as the > > - * model. > > - */ > > - public void testBasicModel() > > + public void test_Basic_Model() > > { > > List<SimpleBean> list = new ArrayList(); > > list.add(new SimpleBean(1, "Name 1", "Description 1")); > > list.add(new SimpleBean(2, "Name 2", "Description 2")); > > list.add(new SimpleBean(3, "Name 3", "Description 3")); > > > > - BeanPropertySelectionModel model = > > - new BeanPropertySelectionModel(list, "name"); > > + BeanPropertySelectionModel model = new > > BeanPropertySelectionModel(list, "name"); > > > > assertEquals(model.getOptionCount(), 3); > > > > @@ -59,5 +51,30 @@ > > assertEquals(model.getLabel(2), "Name 3"); > > > > assertEquals(model.translateValue("1"), b2); > > + } > > + > > + public void test_Invalid_Option_Index() > > + { > > + BeanPropertySelectionModel model = new > > BeanPropertySelectionModel(); > > + > > + assertEquals(model.getOptionCount(), 0); > > + assertEquals(model.getOption(3), null); > > + } > > + > > + public void test_Null_Label() > > + { > > + List<SimpleBean> list = new ArrayList(); > > + list.add(new SimpleBean(1, "Name 1", "Description 1")); > > + list.add(new SimpleBean(2, "Name 2", "Description 2")); > > + list.add(new SimpleBean(3, "Name 3", "Description 3")); > > + > > + BeanPropertySelectionModel model = new > > BeanPropertySelectionModel(list, "name", "test"); > > + > > + assertEquals(model.getOptionCount(), 4); > > + assert model.getOption(3) != null; > > + > > + assertEquals(model.getOption(0), null); > > + assertEquals(model.getLabel(0), "test"); > > + assertEquals(model.getLabel(1), "Name 1"); > > } > > } > > > > > > > > > -- > Andreas Andreou - [EMAIL PROTECTED] - http://blog.andyhot.gr > Tapestry / Tacos developer > Open Source / JEE Consulting > > --------------------------------------------------------------------- > To unsubscribe, e-mail: [EMAIL PROTECTED] > For additional commands, e-mail: [EMAIL PROTECTED] > > -- Jesse Kuhnert Tapestry/Dojo team member/developer Open source based consulting work centered around dojo/tapestry/tacos/hivemind. http://blog.opencomponentry.com --------------------------------------------------------------------- To unsubscribe, e-mail: [EMAIL PROTECTED] For additional commands, e-mail: [EMAIL PROTECTED]
