From: <jde...@us...> - 2012-02-27 21:27:51
|
Revision: 16340 http://pcgen.svn.sourceforge.net/pcgen/?rev=16340&view=rev Author: jdempsey Date: 2012-02-27 21:27:44 +0000 (Mon, 27 Feb 2012) Log Message: ----------- Fix bug: SORTKEY not being respected Issue#: CODE-1296 Modified Paths: -------------- Trunk/pcgen/code/src/java/pcgen/util/Comparators.java Modified: Trunk/pcgen/code/src/java/pcgen/util/Comparators.java =================================================================== --- Trunk/pcgen/code/src/java/pcgen/util/Comparators.java 2012-02-27 20:15:35 UTC (rev 16339) +++ Trunk/pcgen/code/src/java/pcgen/util/Comparators.java 2012-02-27 21:27:44 UTC (rev 16340) @@ -25,6 +25,10 @@ import java.util.Comparator; import java.util.Date; +import pcgen.cdom.base.CDOMObject; +import pcgen.cdom.enumeration.StringKey; +import pcgen.gui2.util.treetable.TreeTableNode; + /** * * @author Connor Petty <mis...@gm...> @@ -44,6 +48,7 @@ private static final NumberComparator nC = new NumberComparator(); private static final DateComparator dC = new DateComparator(); private static final HashCodeComparator hCC = new HashCodeComparator(); + private static final TreeTableNodeComparator treeNodeComp = new TreeTableNodeComparator(); public static <T> Comparator<T> toStringComparator() { @@ -61,6 +66,14 @@ } /** + * @return A comparator for use with the contents of tree table nodes. + */ + public static Comparator<Object> treeTableNodeComparator() + { + return treeNodeComp; + } + + /** * TODO: perhaps keep instance references to commonly used InverseComparators? * @param comparator * @return new InverseComparator instance @@ -119,6 +132,10 @@ { return (Comparator<? super T>) ignoreCaseStringComparator(); } + else if (c == TreeTableNode.class) + { + return (Comparator<? super T>) treeTableNodeComparator(); + } return toStringComparator(); } @@ -181,6 +198,51 @@ } + /** + * A <code>Comparator</code> to compare tree table nodes. This respects SORTKEY for the contained object. + */ + private static final class TreeTableNodeComparator implements Comparator<Object>, + Serializable + { + + /** {@inheritDoc} */ + public int compare(Object o1, Object o2) + { + String key1 = getSortKey(o1); + String key2 = getSortKey(o2); + final Collator collator = Collator.getInstance(); + + if (!key1.equals(key2)) + { + return collator.compare(key1, key2); + } + return collator.compare(String.valueOf(o1), String.valueOf(o2)); + } + + private String getSortKey(Object obj1) + { + String key; + if (obj1 == null) + { + key = ""; + } + else if (obj1 instanceof CDOMObject) + { + CDOMObject co = (CDOMObject) obj1; + key = co.get(StringKey.SORT_KEY); + if (key == null) + { + key = co.getDisplayName(); + } + } + else + { + key = obj1.toString(); + } + return key; + } + } + private static final class ToStringIgnoreCaseCollator<E> implements Comparator<E>, Serializable { This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <th...@us...> - 2012-03-01 22:17:13
|
Revision: 16372 http://pcgen.svn.sourceforge.net/pcgen/?rev=16372&view=rev Author: thpr Date: 2012-03-01 22:17:06 +0000 (Thu, 01 Mar 2012) Log Message: ----------- Clean up Generics & eliminate warnings Modified Paths: -------------- Trunk/pcgen/code/src/java/pcgen/util/Comparators.java Modified: Trunk/pcgen/code/src/java/pcgen/util/Comparators.java =================================================================== --- Trunk/pcgen/code/src/java/pcgen/util/Comparators.java 2012-03-01 22:04:02 UTC (rev 16371) +++ Trunk/pcgen/code/src/java/pcgen/util/Comparators.java 2012-03-01 22:17:06 UTC (rev 16372) @@ -50,17 +50,17 @@ private static final HashCodeComparator hCC = new HashCodeComparator(); private static final TreeTableNodeComparator treeNodeComp = new TreeTableNodeComparator(); - public static <T> Comparator<T> toStringComparator() + public static Comparator<Object> toStringComparator() { return tSC; } - public static <T> Comparator<T> toStringIgnoreCaseComparator() + public static Comparator<Object> toStringIgnoreCaseComparator() { return tSICC; } - public static <T> Comparator<T> toStringIgnoreCaseCollator() + public static Comparator<Object> toStringIgnoreCaseCollator() { return tSICCol; } @@ -82,13 +82,13 @@ { if (comparator instanceof InverseComparator) { - return ((InverseComparator) comparator).getComparator(); + return ((InverseComparator<T>) comparator).getComparator(); } return new InverseComparator<T>(comparator); } - public static <T> Comparator<T> hashCodeComparator() + public static Comparator<Object> hashCodeComparator() { return hCC; } @@ -113,7 +113,6 @@ return String.CASE_INSENSITIVE_ORDER; } - @SuppressWarnings("unchecked") public static <T> Comparator<? super T> getComparatorFor(Class<T> c) { if (c == Integer.class) @@ -134,7 +133,7 @@ } else if (c == TreeTableNode.class) { - return (Comparator<? super T>) treeTableNodeComparator(); + return treeTableNodeComparator(); } return toStringComparator(); } @@ -147,18 +146,13 @@ * @author <a href="mailto:bi...@al...">B. K. Oxley (binkley)</a> * @version $Revision: 2112 $ */ - private static final class ToStringComparator<E> implements Comparator<E>, + private static final class ToStringComparator implements Comparator<Object>, Serializable { - /** Constructs a <code>StringComparator</code>. */ - public ToStringComparator() - { - // TODO: Exception needs to be handled - } - /** {@inheritDoc} */ - public int compare(E o1, E o2) + @Override + public int compare(Object o1, Object o2) { // Treat null as the empty string. return ((o1 == null) ? "" : o1.toString()).compareTo((o2 == null) ? "" @@ -176,18 +170,13 @@ * @author <a href="mailto:bi...@al...">B. K. Oxley (binkley)</a> * @version $Revision: 2112 $ */ - private static final class ToStringIgnoreCaseComparator<E> implements Comparator<E>, - Serializable + private static final class ToStringIgnoreCaseComparator implements + Comparator<Object>, Serializable { - /** Constructs a <code>StringIgnoreCaseComparator</code>. */ - public ToStringIgnoreCaseComparator() - { - // TODO: Exception needs to be handled - } - /** {@inheritDoc} */ - public int compare(E o1, E o2) + @Override + public int compare(Object o1, Object o2) { // Treat null as the empty string. return ((o1 == null) ? "" : o1.toString()).compareToIgnoreCase((o2 == @@ -206,6 +195,7 @@ { /** {@inheritDoc} */ + @Override public int compare(Object o1, Object o2) { String key1 = getSortKey(o1); @@ -243,12 +233,14 @@ } } - private static final class ToStringIgnoreCaseCollator<E> implements Comparator<E>, Serializable + private static final class ToStringIgnoreCaseCollator implements + Comparator<Object>, Serializable { private static final Collator collator = Collator.getInstance(); - public int compare(E o1, E o2) + @Override + public int compare(Object o1, Object o2) { String s1 = (o1 == null) ? "" : o1.toString(); String s2 = (o2 == null) ? "" : o2.toString(); @@ -260,6 +252,7 @@ private static final class IntegerComparator implements Comparator<Integer> { + @Override public int compare(Integer o1, Integer o2) { return o1.compareTo(o2); @@ -270,6 +263,7 @@ private static final class NumberComparator implements Comparator<Number> { + @Override public int compare(Number o1, Number o2) { final double d1 = o1.doubleValue(); @@ -293,6 +287,7 @@ private static final class DateComparator implements Comparator<Date> { + @Override public int compare(Date o1, Date o2) { final long n1 = o1.getTime(); @@ -313,9 +308,10 @@ } - private static final class HashCodeComparator implements Comparator + private static final class HashCodeComparator implements Comparator<Object> { + @Override public int compare(Object o1, Object o2) { return iC.compare(o1.hashCode(), o2.hashCode()); @@ -343,6 +339,7 @@ return comparator; } + @Override public int compare(E o1, E o2) { return -comparator.compare(o1, o2); This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |