tapestry-dev mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From "Andreas Andreou" <andre...@gmail.com>
Subject Re: svn commit: r592437 - in /tapestry/tapestry4/trunk/tapestry-framework/src: java/org/apache/tapestry/form/BeanPropertySelectionModel.java test/org/apache/tapestry/form/BeanPropertySelectionModelTest.java
Date Tue, 06 Nov 2007 18:56:50 GMT
just wondering..., isn't the same as decorating with
org.apache.tapestry.form.LabeledPropertySelectionModel ?

On 11/6/07, jkuhnert@apache.org <jkuhnert@apache.org> 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 {@link #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 {@link 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 {@link 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 - andyhot@apache.org - http://blog.andyhot.gr
Tapestry / Tacos developer
Open Source / JEE Consulting

---------------------------------------------------------------------
To unsubscribe, e-mail: dev-unsubscribe@tapestry.apache.org
For additional commands, e-mail: dev-help@tapestry.apache.org


Mime
View raw message