You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@velocity.apache.org by sc...@apache.org on 2013/01/12 02:13:20 UTC

svn commit: r1432349 - /velocity/tools/trunk/velocity-tools-generic/src/main/java/org/apache/velocity/tools/generic/SortTool.java

Author: schultz
Date: Sat Jan 12 01:13:19 2013
New Revision: 1432349

URL: http://svn.apache.org/viewvc?rev=1432349&view=rev
Log:
Forward-ported r1432348:

Fix https://issues.apache.org/jira/browse/VELTOOLS-156

Added sort(Collection, Comparator) method.
Added sort(Object[], Comparator) method.
Added sort(Map, Comparator) method.
Added sort(Object, Comparator) method.

Modified:
    velocity/tools/trunk/velocity-tools-generic/src/main/java/org/apache/velocity/tools/generic/SortTool.java

Modified: velocity/tools/trunk/velocity-tools-generic/src/main/java/org/apache/velocity/tools/generic/SortTool.java
URL: http://svn.apache.org/viewvc/velocity/tools/trunk/velocity-tools-generic/src/main/java/org/apache/velocity/tools/generic/SortTool.java?rev=1432349&r1=1432348&r2=1432349&view=diff
==============================================================================
--- velocity/tools/trunk/velocity-tools-generic/src/main/java/org/apache/velocity/tools/generic/SortTool.java (original)
+++ velocity/tools/trunk/velocity-tools-generic/src/main/java/org/apache/velocity/tools/generic/SortTool.java Sat Jan 12 01:13:19 2013
@@ -115,6 +115,94 @@ import org.apache.velocity.tools.config.
 @DefaultKey("sorter")
 public class SortTool
 {
+    /**
+     * Sorts a Collection using a Comparator. A defensive copy is made
+     * of the Collection beforehand, so the original Collection is left
+     * untouched.
+     *
+     * @param c The Collection to sort.
+     * @param comparator The comparator to use for sorting.
+     * @return A copy of the original Collection,
+     *         sorted using the supplied Comparator.
+     * @since VelocityTools 2.0.1
+     */
+    public <T> Collection<T> sort(final Collection<T> c,
+                                  final Comparator<T> comparator)
+    {
+        final ArrayList<T> list = new ArrayList<T>(c);
+        Collections.sort(list, comparator);
+        return list;
+    }
+
+    /**
+     * Sorts an array using a Comparator. A defensive copy is made
+     * of the array beforehand, so the original array is left
+     * untouched.
+     *
+     * @param a The array to sort.
+     * @param comparator The comparator to use for sorting.
+     * @return A copy of the original array,
+     *         sorted using the supplied Comparator.
+     * @since VelocityTools 2.0.1
+     */
+    public <T> T[] sort(final T[] a, final Comparator<T> comparator)
+    {
+        final T[] copy = a.clone();
+        Arrays.sort(copy, comparator);
+        return copy;
+    }
+
+    /**
+     * Sorts a Map's values using a Comparator. A defensive copy is made
+     * of the values beforehand, so the original Map is left
+     * untouched.
+     *
+     * @param map The Map whose values should be sorted.
+     * @param comparator The comparator to use for sorting.
+     * @return A copy of the original Map's values,
+     *         sorted using the supplied Comparator.
+     * @since VelocityTools 2.0.1
+     */
+    public <T> Collection<T> sort(final Map<?,T> map,
+                                  final Comparator<T> comparator)
+    {
+        return sort(map.values(), comparator);
+    }
+
+    /**
+     * Sorts a Collection (or array, or Map's values)
+     * using a Comparator. A defensive copy is made
+     * of the original beforehand, so the original is left
+     * untouched. Unsupported collection objects result in
+     * a <code>null</code> return value.
+     *
+     * @param o The Collection to sort.
+     * @param comparator The comparator to use for sorting.
+     * @return A copy of the original Collection,
+     *         sorted using the supplied Comparator.
+     * @since VelocityTools 2.0.1
+     */
+    public Collection<?> sort(final Object o,
+                              final Comparator<?> comparator)
+    {
+        if (o instanceof Collection)
+        {
+            return sort((Collection<?>)o, comparator);
+        }
+        else if (o instanceof Object[])
+        {
+            return sort((Object[])o, comparator);
+        }
+        else if (o instanceof Map)
+        {
+            return sort((Map<?,?>)o, comparator);
+        }
+        else
+        {
+            // the object type is not supported
+            return null;
+        }
+    }
 
     public Collection sort(Collection collection)
     {