Author: sletellier Date: 2011-04-07 14:51:56 +0000 (Thu, 07 Apr 2011) New Revision: 1160 Log: - Sort by default with rendered value - Allow to specify propertyName to apply sort - Allow to disable simpleSelector Modified: trunk/wao-ui/src/main/java/fr/ifremer/wao/ui/components/SimpleSelector.java trunk/wao-ui/src/main/java/fr/ifremer/wao/ui/components/TopiaEntitySelector.java trunk/wao-ui/src/main/resources/fr/ifremer/wao/ui/components/SimpleSelector.tml Modified: trunk/wao-ui/src/main/java/fr/ifremer/wao/ui/components/SimpleSelector.java =================================================================== --- trunk/wao-ui/src/main/java/fr/ifremer/wao/ui/components/SimpleSelector.java 2011-04-07 14:18:08 UTC (rev 1159) +++ trunk/wao-ui/src/main/java/fr/ifremer/wao/ui/components/SimpleSelector.java 2011-04-07 14:51:56 UTC (rev 1160) @@ -34,6 +34,8 @@ import org.slf4j.Logger; import java.util.ArrayList; +import java.util.Collections; +import java.util.Comparator; import java.util.List; /** @@ -56,6 +58,12 @@ private Boolean multiple; @Parameter(required = false) + private Boolean disabled; + + @Parameter(required = false) + private Boolean sort; + + @Parameter(required = false) private String selectedValue; @Parameter(required = false) @@ -116,6 +124,17 @@ } } + // Sort + if (getSort()) { + Collections.sort(values, new Comparator<String>() { + + @Override + public int compare(String o1, String o2) { + return o1 == null ? -1 : o1.compareTo(o2); + } + }); + } + return values; } @@ -134,6 +153,28 @@ this.size = size; } + public Boolean getDisabled() { + if (disabled == null) { + disabled = false; + } + return disabled; + } + + public void setDisabled(Boolean disabled) { + this.disabled = disabled; + } + + public Boolean getSort() { + if (sort == null) { + sort = true; + } + return sort; + } + + public void setSort(Boolean sort) { + this.sort = sort; + } + public boolean getMultiple() { if (multiple == null) { multiple = false; Modified: trunk/wao-ui/src/main/java/fr/ifremer/wao/ui/components/TopiaEntitySelector.java =================================================================== --- trunk/wao-ui/src/main/java/fr/ifremer/wao/ui/components/TopiaEntitySelector.java 2011-04-07 14:18:08 UTC (rev 1159) +++ trunk/wao-ui/src/main/java/fr/ifremer/wao/ui/components/TopiaEntitySelector.java 2011-04-07 14:51:56 UTC (rev 1160) @@ -41,6 +41,8 @@ import org.slf4j.Logger; import java.util.ArrayList; +import java.util.Collections; +import java.util.Comparator; import java.util.List; /** @@ -62,6 +64,9 @@ @Parameter(required = true, defaultPrefix = BindingConstants.LITERAL) private String labelPropertyName; + @Parameter(required = false, defaultPrefix = BindingConstants.LITERAL) + private String sortPropertyName; + @Parameter(required = true) private List<E> values; @@ -72,6 +77,9 @@ private Boolean disabled; @Parameter(required = false) + private Boolean sort; + + @Parameter(required = false) private E selectedValue; @Parameter(required = false) @@ -155,6 +163,7 @@ } public List<E> getValues() { + // Create empty list if null if (values == null) { values = new ArrayList<E>(); @@ -176,6 +185,11 @@ } } + // Sort by properties + if (getSort()) { + Collections.sort(values, new TopiaEntityComparator()); + } + return values; } @@ -202,6 +216,17 @@ this.labelPropertyName = labelPropertyName; } + public String getSortPropertyName() { + if (sortPropertyName == null) { + sortPropertyName = getLabelPropertyName(); + } + return sortPropertyName; + } + + public void setSortPropertyName(String sortPropertyName) { + this.sortPropertyName = sortPropertyName; + } + public boolean getMultiple() { if (multiple == null) { multiple = false; @@ -213,6 +238,17 @@ this.multiple = multiple; } + public Boolean getSort() { + if (sort == null) { + sort = true; + } + return sort; + } + + public void setSort(Boolean sort) { + this.sort = sort; + } + public Boolean getDisabled() { if (disabled == null) { disabled = false; @@ -224,6 +260,27 @@ this.disabled = disabled; } + public class TopiaEntityComparator implements Comparator<E> { + + protected PropertyAdapter propertyAdapter; + + public TopiaEntityComparator() { + + propertyAdapter = propertyAccess.getAdapter(getClazz()).getPropertyAdapter(getSortPropertyName()); + if (propertyAdapter == null) { + throw new IllegalStateException("PropertyAdapter not found for clazz[" + getClazz() + "] labelPropertyName[" + getLabelPropertyName() + "]"); + } + } + + @Override + public int compare(E o1, E o2) { + String compare1 = (String)propertyAdapter.get(o1); + String compare2 = (String)propertyAdapter.get(o2); + + return compare1 == null ? -1 : compare1.compareTo(compare2); + } + } + /** * Model used by {@link fr.ifremer.wao.ui.components.TopiaEntitySelector} * Modified: trunk/wao-ui/src/main/resources/fr/ifremer/wao/ui/components/SimpleSelector.tml =================================================================== --- trunk/wao-ui/src/main/resources/fr/ifremer/wao/ui/components/SimpleSelector.tml 2011-04-07 14:18:08 UTC (rev 1159) +++ trunk/wao-ui/src/main/resources/fr/ifremer/wao/ui/components/SimpleSelector.tml 2011-04-07 14:51:56 UTC (rev 1160) @@ -29,12 +29,14 @@ t:id="multipleSelect" t:model="model" t:value="selectedValues" + t:disabled="disabled" size="${size}"/> <p:else> <input t:type="select" t:id="select" t:model="model" - t:value="selectedValue"/> + t:value="selectedValue" + t:disabled="disabled"/> </p:else> </t:if> </html> \ No newline at end of file