Author: kmorin Date: 2013-07-09 11:53:05 +0200 (Tue, 09 Jul 2013) New Revision: 2695 Url: http://nuiton.org/projects/jaxx/repository/revisions/2695 Log: fixes #2740 [BeanFilterableComboBox] Sort the data by the whole decorated value Modified: trunk/jaxx-widgets/src/main/java/jaxx/runtime/swing/editor/bean/BeanFilterableComboBox.jaxx trunk/jaxx-widgets/src/main/java/jaxx/runtime/swing/editor/bean/BeanFilterableComboBoxHandler.java Modified: trunk/jaxx-widgets/src/main/java/jaxx/runtime/swing/editor/bean/BeanFilterableComboBox.jaxx =================================================================== --- trunk/jaxx-widgets/src/main/java/jaxx/runtime/swing/editor/bean/BeanFilterableComboBox.jaxx 2013-07-06 15:43:30 UTC (rev 2694) +++ trunk/jaxx-widgets/src/main/java/jaxx/runtime/swing/editor/bean/BeanFilterableComboBox.jaxx 2013-07-09 09:53:05 UTC (rev 2695) @@ -42,6 +42,9 @@ <!-- flag to reverse the sort --> <Boolean id='reverseSort' javaBean='false'/> + <!-- Sort on the decorated values of the data --> + <Boolean id='sortOnDecoratedValues' javaBean='false'/> + <!-- show reset property --> <Boolean id='showReset' javaBean='false'/> Modified: trunk/jaxx-widgets/src/main/java/jaxx/runtime/swing/editor/bean/BeanFilterableComboBoxHandler.java =================================================================== --- trunk/jaxx-widgets/src/main/java/jaxx/runtime/swing/editor/bean/BeanFilterableComboBoxHandler.java 2013-07-06 15:43:30 UTC (rev 2694) +++ trunk/jaxx-widgets/src/main/java/jaxx/runtime/swing/editor/bean/BeanFilterableComboBoxHandler.java 2013-07-09 09:53:05 UTC (rev 2695) @@ -53,6 +53,8 @@ import java.beans.PropertyChangeEvent; import java.beans.PropertyChangeListener; import java.lang.reflect.Method; +import java.util.Collections; +import java.util.Comparator; import java.util.List; /** @@ -424,12 +426,39 @@ List<O> data = ui.getData(); try { - // Sort data with the decorator jxpath tokens. - DecoratorUtil.sort(decorator, - data, - index, - reversesort); + Boolean sortOnDecoratedValue = ui.getSortOnDecoratedValues(); + if (sortOnDecoratedValue != null && sortOnDecoratedValue) { + Collections.sort(data, new Comparator<O>() { + @Override + public int compare(O o1, O o2) { + if (o1 == null) { + if (o2 == null) { + return 0; + } + return 1; + } + if (o2 == null) { + return -1; + } + String s1 = decorator.toString(o1); + String s2 = decorator.toString(o2); + return s1.compareTo(s2); + } + }); + if (reversesort) { + // reverse order + Collections.reverse(data); + } + + } else { + // Sort data with the decorator jxpath tokens. + DecoratorUtil.sort(decorator, + data, + index, + reversesort); + } + } catch (Exception eee) { log.warn(eee.getMessage(), eee); }