Author: ajaquith
Date: Sat Jan 30 15:33:03 2010
New Revision: 904796

URL: http://svn.apache.org/viewvc?rev=904796&view=rev
Log:
Added option to PageTimeComparator to allow descending order sorts, used by 
AbstractPageActionBean. Also replaced several spurious uses of the default 
constructor that should have used the static instance instead.

Modified:
    incubator/jspwiki/trunk/src/java/org/apache/wiki/WikiEngine.java
    incubator/jspwiki/trunk/src/java/org/apache/wiki/rss/RSSGenerator.java
    
incubator/jspwiki/trunk/src/java/org/apache/wiki/util/PageTimeComparator.java

Modified: incubator/jspwiki/trunk/src/java/org/apache/wiki/WikiEngine.java
URL: 
http://svn.apache.org/viewvc/incubator/jspwiki/trunk/src/java/org/apache/wiki/WikiEngine.java?rev=904796&r1=904795&r2=904796&view=diff
==============================================================================
--- incubator/jspwiki/trunk/src/java/org/apache/wiki/WikiEngine.java (original)
+++ incubator/jspwiki/trunk/src/java/org/apache/wiki/WikiEngine.java Sat Jan 30 
15:33:03 2010
@@ -170,7 +170,7 @@
     /** If this property is set to false, we don't allow the creation of empty 
pages */
     public static final String PROP_ALLOW_CREATION_OF_EMPTY_PAGES = 
"jspwiki.allowCreationOfEmptyPages";
 
-    private static final Comparator<WikiPage> PAGE_TIME_COMPARATOR = new 
PageTimeComparator();
+    private static final Comparator<WikiPage> PAGE_TIME_COMPARATOR = 
PageTimeComparator.DEFAULT_PAGETIME_COMPARATOR;
 
     /** Should the user info be saved with the page data as well? */
     private boolean          m_saveUserInfo = true;

Modified: incubator/jspwiki/trunk/src/java/org/apache/wiki/rss/RSSGenerator.java
URL: 
http://svn.apache.org/viewvc/incubator/jspwiki/trunk/src/java/org/apache/wiki/rss/RSSGenerator.java?rev=904796&r1=904795&r2=904796&view=diff
==============================================================================
--- incubator/jspwiki/trunk/src/java/org/apache/wiki/rss/RSSGenerator.java 
(original)
+++ incubator/jspwiki/trunk/src/java/org/apache/wiki/rss/RSSGenerator.java Sat 
Jan 30 15:33:03 2010
@@ -524,7 +524,7 @@
             feed.setChannelDescription( channelDescription );
         }
 
-        Collections.sort( changed, new PageTimeComparator() );
+        Collections.sort( changed, 
PageTimeComparator.DEFAULT_PAGETIME_COMPARATOR );
 
         int items = 0;
         for( Iterator i = changed.iterator(); i.hasNext() && items < 15; 
items++ )
@@ -608,7 +608,7 @@
             feed.setChannelDescription( channelDescription );
         }
 
-        Collections.sort( changed, new PageTimeComparator() );
+        Collections.sort( changed, 
PageTimeComparator.DEFAULT_PAGETIME_COMPARATOR );
 
         int items = 0;
         for( Iterator i = changed.iterator(); i.hasNext() && items < 15; 
items++ )

Modified: 
incubator/jspwiki/trunk/src/java/org/apache/wiki/util/PageTimeComparator.java
URL: 
http://svn.apache.org/viewvc/incubator/jspwiki/trunk/src/java/org/apache/wiki/util/PageTimeComparator.java?rev=904796&r1=904795&r2=904796&view=diff
==============================================================================
--- 
incubator/jspwiki/trunk/src/java/org/apache/wiki/util/PageTimeComparator.java 
(original)
+++ 
incubator/jspwiki/trunk/src/java/org/apache/wiki/util/PageTimeComparator.java 
Sat Jan 30 15:33:03 2010
@@ -38,12 +38,53 @@
 {
     private static final long serialVersionUID = 0L;
 
+    private final Order m_order;
+
     static Logger log = LoggerFactory.getLogger( PageTimeComparator.class ); 
 
     // A special singleton instance for quick access
-    public static final Comparator<WikiPage> DEFAULT_PAGETIME_COMPARATOR = new 
PageTimeComparator();
+    public static final Comparator<WikiPage> DEFAULT_PAGETIME_COMPARATOR = new 
PageTimeComparator( Order.ASCENDING );
+
+    /**
+     * Enum specifying the sort order for the PageTimeComparator.
+     */
+    public static enum Order
+    {
+        /**
+         * Ascending order; the earliest date will be placed first in the 
sorted
+         * Collection.
+         */
+        ASCENDING,
+
+        /**
+         * Descending order, the latest date will be placed first in the sorted
+         * Collection.
+         */
+        DESCENDING;
+    }
+
+    /**
+     * Constructs a new PageTimeComparator that sorts pages in ascending order
+     * based on last modification time.
+     */
+    public PageTimeComparator()
+    {
+        this( Order.ASCENDING );
+    }
 
     /**
+     * Constructs a new PageTimeComparator, for sorting pages in ascending or
+     * descending order based on last modification time.
+     * 
+     * @param order the sort order for the Collection this PageTimeComparator
+     *            will be used with.
+     */
+    public PageTimeComparator( Order order )
+    {
+        m_order = order;
+    }
+    
+    /**
      *  {...@inheritdoc}
      */
     public int compare( WikiPage w1, WikiPage w2 )
@@ -69,7 +110,7 @@
         }
 
         // This gets most recent on top
-        int timecomparison = w2LastMod.compareTo( w1LastMod );
+        int timecomparison = w2LastMod.compareTo( w1LastMod ) * ( m_order == 
Order.DESCENDING ? 1 : -1 );
 
         if( timecomparison == 0 )
         {


Reply via email to