Author: pete
Date: Wed Dec  1 18:05:32 2010
New Revision: 1041112

URL: http://svn.apache.org/viewvc?rev=1041112&view=rev
Log:
reverted WICKET-2986 as returning to state = unsorted does not make much sense. 
Also improved the internal handling of sort state.

Modified:
    
wicket/trunk/wicket-examples/src/main/java/org/apache/wicket/examples/repeater/ContactDataProvider.java
    
wicket/trunk/wicket-examples/src/main/java/org/apache/wicket/examples/repeater/ContactsDatabase.java
    
wicket/trunk/wicket-examples/src/main/java/org/apache/wicket/examples/repeater/FormPage.java
    
wicket/trunk/wicket-examples/src/main/java/org/apache/wicket/examples/repeater/SortableContactDataProvider.java
    
wicket/trunk/wicket-examples/src/main/java/org/apache/wicket/spring/common/ContactDaoImpl.java
    
wicket/trunk/wicket-extensions/src/main/java/org/apache/wicket/extensions/markup/html/repeater/data/sort/ISortState.java
    
wicket/trunk/wicket-extensions/src/main/java/org/apache/wicket/extensions/markup/html/repeater/data/sort/OrderByLink.java
    
wicket/trunk/wicket-extensions/src/main/java/org/apache/wicket/extensions/markup/html/repeater/data/sort/SortOrder.java
    
wicket/trunk/wicket-extensions/src/main/java/org/apache/wicket/extensions/markup/html/repeater/util/SingleSortState.java
    
wicket/trunk/wicket-extensions/src/main/java/org/apache/wicket/extensions/markup/html/repeater/util/SortParam.java
    
wicket/trunk/wicket-extensions/src/main/java/org/apache/wicket/extensions/markup/html/repeater/util/SortableDataProvider.java
    
wicket/trunk/wicket-extensions/src/test/java/org/apache/wicket/extensions/markup/html/repeater/data/table/ContactsDatabase.java
    
wicket/trunk/wicket-extensions/src/test/java/org/apache/wicket/extensions/markup/html/repeater/data/table/SortableContactDataProvider.java

Modified: 
wicket/trunk/wicket-examples/src/main/java/org/apache/wicket/examples/repeater/ContactDataProvider.java
URL: 
http://svn.apache.org/viewvc/wicket/trunk/wicket-examples/src/main/java/org/apache/wicket/examples/repeater/ContactDataProvider.java?rev=1041112&r1=1041111&r2=1041112&view=diff
==============================================================================
--- 
wicket/trunk/wicket-examples/src/main/java/org/apache/wicket/examples/repeater/ContactDataProvider.java
 (original)
+++ 
wicket/trunk/wicket-examples/src/main/java/org/apache/wicket/examples/repeater/ContactDataProvider.java
 Wed Dec  1 18:05:32 2010
@@ -18,7 +18,6 @@ package org.apache.wicket.examples.repea
 
 import java.util.Iterator;
 
-import org.apache.wicket.extensions.markup.html.repeater.data.sort.SortOrder;
 import org.apache.wicket.extensions.markup.html.repeater.util.SortParam;
 import org.apache.wicket.markup.repeater.data.IDataProvider;
 import org.apache.wicket.model.IModel;
@@ -45,7 +44,7 @@ public class ContactDataProvider impleme
         */
        public Iterator<Contact> iterator(int first, int count)
        {
-               return getContactsDB().find(first, count, new 
SortParam("firstName", SortOrder.ASCENDING)).iterator();
+               return getContactsDB().find(first, count, new 
SortParam("firstName", true)).iterator();
        }
 
        /**

Modified: 
wicket/trunk/wicket-examples/src/main/java/org/apache/wicket/examples/repeater/ContactsDatabase.java
URL: 
http://svn.apache.org/viewvc/wicket/trunk/wicket-examples/src/main/java/org/apache/wicket/examples/repeater/ContactsDatabase.java?rev=1041112&r1=1041111&r2=1041112&view=diff
==============================================================================
--- 
wicket/trunk/wicket-examples/src/main/java/org/apache/wicket/examples/repeater/ContactsDatabase.java
 (original)
+++ 
wicket/trunk/wicket-examples/src/main/java/org/apache/wicket/examples/repeater/ContactsDatabase.java
 Wed Dec  1 18:05:32 2010
@@ -23,7 +23,6 @@ import java.util.HashMap;
 import java.util.List;
 import java.util.Map;
 
-import org.apache.wicket.extensions.markup.html.repeater.data.sort.SortOrder;
 import org.apache.wicket.extensions.markup.html.repeater.util.SortParam;
 
 /**
@@ -99,16 +98,14 @@ public class ContactsDatabase
                {
                        return fnameIdx;
                }
-               final String field = sort.getProperty();
-               final SortOrder order = sort.getOrder();
 
-               if (field.equals("firstName"))
+               if (sort.getProperty().equals("firstName"))
                {
-                       return (order != SortOrder.DESCENDING) ? fnameIdx : 
fnameDescIdx;
+                       return sort.isAscending() ? fnameIdx : fnameDescIdx;
                }
-               else if (field.equals("lastName"))
+               else if (sort.getProperty().equals("lastName"))
                {
-                       return (order != SortOrder.DESCENDING) ? lnameIdx : 
lnameDescIdx;
+                       return sort.isAscending() ? lnameIdx : lnameDescIdx;
                }
                throw new RuntimeException("unknown sort option [" + sort +     
"]. valid fields: [firstName], [lastName]");
        }

Modified: 
wicket/trunk/wicket-examples/src/main/java/org/apache/wicket/examples/repeater/FormPage.java
URL: 
http://svn.apache.org/viewvc/wicket/trunk/wicket-examples/src/main/java/org/apache/wicket/examples/repeater/FormPage.java?rev=1041112&r1=1041111&r2=1041112&view=diff
==============================================================================
--- 
wicket/trunk/wicket-examples/src/main/java/org/apache/wicket/examples/repeater/FormPage.java
 (original)
+++ 
wicket/trunk/wicket-examples/src/main/java/org/apache/wicket/examples/repeater/FormPage.java
 Wed Dec  1 18:05:32 2010
@@ -18,7 +18,6 @@ package org.apache.wicket.examples.repea
 
 import java.util.Iterator;
 
-import org.apache.wicket.extensions.markup.html.repeater.data.sort.SortOrder;
 import org.apache.wicket.extensions.markup.html.repeater.util.SortParam;
 import org.apache.wicket.markup.html.form.Form;
 import org.apache.wicket.markup.html.form.SubmitLink;
@@ -58,7 +57,7 @@ public class FormPage extends BasePage
                        protected Iterator<IModel<Contact>> getItemModels()
                        {
                                // for simplicity we only show the first 10 
contacts
-                               SortParam sort = new SortParam("firstName", 
SortOrder.ASCENDING);
+                               SortParam sort = new SortParam("firstName", 
true);
                                Iterator<Contact> contacts = 
DatabaseLocator.getDatabase().find(0, 10, sort).iterator();
 
                                // the iterator returns contact objects, but we 
need it to

Modified: 
wicket/trunk/wicket-examples/src/main/java/org/apache/wicket/examples/repeater/SortableContactDataProvider.java
URL: 
http://svn.apache.org/viewvc/wicket/trunk/wicket-examples/src/main/java/org/apache/wicket/examples/repeater/SortableContactDataProvider.java?rev=1041112&r1=1041111&r2=1041112&view=diff
==============================================================================
--- 
wicket/trunk/wicket-examples/src/main/java/org/apache/wicket/examples/repeater/SortableContactDataProvider.java
 (original)
+++ 
wicket/trunk/wicket-examples/src/main/java/org/apache/wicket/examples/repeater/SortableContactDataProvider.java
 Wed Dec  1 18:05:32 2010
@@ -19,7 +19,6 @@ package org.apache.wicket.examples.repea
 import java.util.Iterator;
 
 import org.apache.wicket.extensions.markup.html.repeater.data.sort.SortOrder;
-import org.apache.wicket.extensions.markup.html.repeater.util.SortParam;
 import 
org.apache.wicket.extensions.markup.html.repeater.util.SortableDataProvider;
 import org.apache.wicket.model.IModel;
 

Modified: 
wicket/trunk/wicket-examples/src/main/java/org/apache/wicket/spring/common/ContactDaoImpl.java
URL: 
http://svn.apache.org/viewvc/wicket/trunk/wicket-examples/src/main/java/org/apache/wicket/spring/common/ContactDaoImpl.java?rev=1041112&r1=1041111&r2=1041112&view=diff
==============================================================================
--- 
wicket/trunk/wicket-examples/src/main/java/org/apache/wicket/spring/common/ContactDaoImpl.java
 (original)
+++ 
wicket/trunk/wicket-examples/src/main/java/org/apache/wicket/spring/common/ContactDaoImpl.java
 Wed Dec  1 18:05:32 2010
@@ -24,7 +24,6 @@ import java.util.Iterator;
 import java.util.List;
 import java.util.Map;
 
-import org.apache.wicket.extensions.markup.html.repeater.data.sort.SortOrder;
 import org.apache.wicket.extensions.markup.html.repeater.util.SortParam;
 
 /**
@@ -102,16 +101,13 @@ public class ContactDaoImpl implements C
                if (sort == null)
                        return fnameIdx;
 
-               final String field = sort.getProperty();
-               final SortOrder order = sort.getOrder();
-
-               if (field.equals("firstName"))
+               if (sort.getProperty().equals("firstName"))
                {
-                       return (order != SortOrder.DESCENDING) ? fnameIdx : 
fnameDescIdx;
+                       return sort.isAscending() ? fnameIdx : fnameDescIdx;
                }
-               else if (field.equals("lastName"))
+               else if (sort.getProperty().equals("lastName"))
                {
-                       return (order != SortOrder.DESCENDING) ? lnameIdx : 
lnameDescIdx;
+                       return sort.isAscending() ? lnameIdx : lnameDescIdx;
                }
                throw new RuntimeException("unknown sort option [" + sort + "]. 
valid fields: [firstName], [lastName]");
        }

Modified: 
wicket/trunk/wicket-extensions/src/main/java/org/apache/wicket/extensions/markup/html/repeater/data/sort/ISortState.java
URL: 
http://svn.apache.org/viewvc/wicket/trunk/wicket-extensions/src/main/java/org/apache/wicket/extensions/markup/html/repeater/data/sort/ISortState.java?rev=1041112&r1=1041111&r2=1041112&view=diff
==============================================================================
--- 
wicket/trunk/wicket-extensions/src/main/java/org/apache/wicket/extensions/markup/html/repeater/data/sort/ISortState.java
 (original)
+++ 
wicket/trunk/wicket-extensions/src/main/java/org/apache/wicket/extensions/markup/html/repeater/data/sort/ISortState.java
 Wed Dec  1 18:05:32 2010
@@ -31,17 +31,17 @@ public interface ISortState extends IClu
         * 
         * @param property
         *            the name of the property to sort on
-        * @param state
-        *            new sort state of the property. must be one of ASCENDING, 
DESCENDING, or NONE
+        * @param order
+        *            sort order
         */
-       public void setPropertySortOrder(String property, SortOrder state);
+       public void setPropertySortOrder(String property, SortOrder order);
 
        /**
         * Gets the sort order of a property
         * 
         * @param property
         *            sort property to be checked
-        * @return one of ASCENDING, DESCENDING, or NONE
+        * @return sort order
         */
        public SortOrder getPropertySortOrder(String property);
 

Modified: 
wicket/trunk/wicket-extensions/src/main/java/org/apache/wicket/extensions/markup/html/repeater/data/sort/OrderByLink.java
URL: 
http://svn.apache.org/viewvc/wicket/trunk/wicket-extensions/src/main/java/org/apache/wicket/extensions/markup/html/repeater/data/sort/OrderByLink.java?rev=1041112&r1=1041111&r2=1041112&view=diff
==============================================================================
--- 
wicket/trunk/wicket-extensions/src/main/java/org/apache/wicket/extensions/markup/html/repeater/data/sort/OrderByLink.java
 (original)
+++ 
wicket/trunk/wicket-extensions/src/main/java/org/apache/wicket/extensions/markup/html/repeater/data/sort/OrderByLink.java
 Wed Dec  1 18:05:32 2010
@@ -128,7 +128,17 @@ public class OrderByLink extends Link
 
                ISortState state = stateLocator.getSortState();
                SortOrder order = state.getPropertySortOrder(property);
-               state.setPropertySortOrder(property, order.nextOrderInCycle());
+
+               // init / flip order
+               if(order == SortOrder.NONE)
+               {
+                       order = SortOrder.ASCENDING;
+               }
+               else
+               {
+                       order = order == SortOrder.ASCENDING ? 
SortOrder.DESCENDING : SortOrder.ASCENDING;
+               }
+               state.setPropertySortOrder(property, order);
 
                return this;
        }
@@ -243,6 +253,7 @@ public class OrderByLink extends Link
                public String getClassAttributeValue(ISortState state, String 
property)
                {
                        SortOrder dir = state.getPropertySortOrder(property);
+
                        if (dir == SortOrder.ASCENDING)
                        {
                                return ascending;

Modified: 
wicket/trunk/wicket-extensions/src/main/java/org/apache/wicket/extensions/markup/html/repeater/data/sort/SortOrder.java
URL: 
http://svn.apache.org/viewvc/wicket/trunk/wicket-extensions/src/main/java/org/apache/wicket/extensions/markup/html/repeater/data/sort/SortOrder.java?rev=1041112&r1=1041111&r2=1041112&view=diff
==============================================================================
--- 
wicket/trunk/wicket-extensions/src/main/java/org/apache/wicket/extensions/markup/html/repeater/data/sort/SortOrder.java
 (original)
+++ 
wicket/trunk/wicket-extensions/src/main/java/org/apache/wicket/extensions/markup/html/repeater/data/sort/SortOrder.java
 Wed Dec  1 18:05:32 2010
@@ -18,26 +18,22 @@ package org.apache.wicket.extensions.mar
 
 /**
  * Sort order for columns
- * 
+ *
  * @author pete
- * 
+ *
  */
 public enum SortOrder
 {
+       /**
+        * unsorted
+        */
        NONE,
+       /**
+        * ascending sort order
+        */
        ASCENDING,
-       DESCENDING;
-
        /**
-        * return next sort order in cycle (will iterate through all
-        * possible states, then start from the beginning)
-        *
-        * @return next sort order
+        * descending sort order
         */
-       public SortOrder nextOrderInCycle()
-       {
-               final int index = (ordinal() + 1) % values().length;
-               
-               return values()[index];
-       }
+       DESCENDING
 }

Modified: 
wicket/trunk/wicket-extensions/src/main/java/org/apache/wicket/extensions/markup/html/repeater/util/SingleSortState.java
URL: 
http://svn.apache.org/viewvc/wicket/trunk/wicket-extensions/src/main/java/org/apache/wicket/extensions/markup/html/repeater/util/SingleSortState.java?rev=1041112&r1=1041111&r2=1041112&view=diff
==============================================================================
--- 
wicket/trunk/wicket-extensions/src/main/java/org/apache/wicket/extensions/markup/html/repeater/util/SingleSortState.java
 (original)
+++ 
wicket/trunk/wicket-extensions/src/main/java/org/apache/wicket/extensions/markup/html/repeater/util/SingleSortState.java
 Wed Dec  1 18:05:32 2010
@@ -41,7 +41,17 @@ public class SingleSortState implements 
                Args.notNull(property, "property");
                Args.notNull(order, "order");
 
-               param = new SortParam(property, order);
+               if(order == SortOrder.NONE)
+               {
+                       if (param != null && 
property.equals(param.getProperty()))
+                       {
+                               param = null;
+                       }
+               }
+               else
+               {
+                       param = new SortParam(property, order == 
SortOrder.ASCENDING);
+               }
        }
 
        /**
@@ -55,7 +65,7 @@ public class SingleSortState implements 
                {
                        return SortOrder.NONE;
                }
-               return param.getOrder();
+               return param.isAscending() ? SortOrder.ASCENDING : 
SortOrder.DESCENDING;
        }
 
        /**

Modified: 
wicket/trunk/wicket-extensions/src/main/java/org/apache/wicket/extensions/markup/html/repeater/util/SortParam.java
URL: 
http://svn.apache.org/viewvc/wicket/trunk/wicket-extensions/src/main/java/org/apache/wicket/extensions/markup/html/repeater/util/SortParam.java?rev=1041112&r1=1041111&r2=1041112&view=diff
==============================================================================
--- 
wicket/trunk/wicket-extensions/src/main/java/org/apache/wicket/extensions/markup/html/repeater/util/SortParam.java
 (original)
+++ 
wicket/trunk/wicket-extensions/src/main/java/org/apache/wicket/extensions/markup/html/repeater/util/SortParam.java
 Wed Dec  1 18:05:32 2010
@@ -17,7 +17,7 @@
 package org.apache.wicket.extensions.markup.html.repeater.util;
 
 import org.apache.wicket.IClusterable;
-import org.apache.wicket.extensions.markup.html.repeater.data.sort.SortOrder;
+import org.apache.wicket.util.lang.Args;
 
 /**
  * Represents sorting information of a property
@@ -28,37 +28,38 @@ public class SortParam implements IClust
 {
        private static final long serialVersionUID = 1L;
 
-       private String property;
-       private SortOrder order;
+       private final String property;
+       private final boolean ascending;
 
        /**
         * @param property
         *            sort property
-        * @param order
-        *            sort order
+        * @param ascending
+        *            <code>true<code> if sort order is ascending, 
<code>false</code> if sort order is descending
         */
-       public SortParam(String property, SortOrder order)
+       public SortParam(String property, boolean ascending)
        {
+               Args.notNull(property, "property");
                this.property = property;
-               this.order = order;
+               this.ascending = ascending;
        }
 
        /**
-        * get sort order
-        *
-        * @return sort order
+        * @return sort property
         */
-       public SortOrder getOrder()
+       public String getProperty()
        {
-               return order;
+               return property;
        }
 
        /**
-        * @return sort property
+        * check if sort order is ascending
+        *
+        * @return <code>true<code> if sort order is ascending, 
<code>false</code> if sort order is descending
         */
-       public String getProperty()
+       public boolean isAscending()
        {
-               return property;
+               return ascending;
        }
 
        @Override
@@ -66,20 +67,19 @@ public class SortParam implements IClust
        {
                if (this == o)
                        return true;
-
-               if ((o instanceof SortParam) == false)
+               if (!(o instanceof SortParam))
                        return false;
 
                SortParam sortParam = (SortParam)o;
 
-               return order == sortParam.order && 
property.equals(sortParam.property);
+               return ascending == sortParam.ascending && 
property.equals(sortParam.property);
        }
 
        @Override
        public int hashCode()
        {
                int result = property.hashCode();
-               result = 31 * result + order.hashCode();
+               result = 31 * result + (ascending ? 1 : 0);
                return result;
        }
 
@@ -89,6 +89,6 @@ public class SortParam implements IClust
        public String toString()
        {
                return new StringBuilder().append("[SortParam 
property=").append(getProperty()).append(
-                               " 
order=").append(order.name()).append("]").toString();
+                               " 
ascending=").append(ascending).append("]").toString();
        }
 }

Modified: 
wicket/trunk/wicket-extensions/src/main/java/org/apache/wicket/extensions/markup/html/repeater/util/SortableDataProvider.java
URL: 
http://svn.apache.org/viewvc/wicket/trunk/wicket-extensions/src/main/java/org/apache/wicket/extensions/markup/html/repeater/util/SortableDataProvider.java?rev=1041112&r1=1041111&r2=1041112&view=diff
==============================================================================
--- 
wicket/trunk/wicket-extensions/src/main/java/org/apache/wicket/extensions/markup/html/repeater/util/SortableDataProvider.java
 (original)
+++ 
wicket/trunk/wicket-extensions/src/main/java/org/apache/wicket/extensions/markup/html/repeater/util/SortableDataProvider.java
 Wed Dec  1 18:05:32 2010
@@ -87,12 +87,12 @@ public abstract class SortableDataProvid
         * 
         * @param property
         *            sort property
-        * @param ascending
-        *            sort direction
+        * @param order
+        *            sort order
         */
        public void setSort(String property, SortOrder order)
        {
-               setSort(new SortParam(property, order));
+               state.setPropertySortOrder(property, order);
        }
 
        /**

Modified: 
wicket/trunk/wicket-extensions/src/test/java/org/apache/wicket/extensions/markup/html/repeater/data/table/ContactsDatabase.java
URL: 
http://svn.apache.org/viewvc/wicket/trunk/wicket-extensions/src/test/java/org/apache/wicket/extensions/markup/html/repeater/data/table/ContactsDatabase.java?rev=1041112&r1=1041111&r2=1041112&view=diff
==============================================================================
--- 
wicket/trunk/wicket-extensions/src/test/java/org/apache/wicket/extensions/markup/html/repeater/data/table/ContactsDatabase.java
 (original)
+++ 
wicket/trunk/wicket-extensions/src/test/java/org/apache/wicket/extensions/markup/html/repeater/data/table/ContactsDatabase.java
 Wed Dec  1 18:05:32 2010
@@ -23,7 +23,6 @@ import java.util.HashMap;
 import java.util.List;
 import java.util.Map;
 
-import org.apache.wicket.extensions.markup.html.repeater.data.sort.SortOrder;
 import org.apache.wicket.extensions.markup.html.repeater.util.SortParam;
 
 /**
@@ -100,15 +99,14 @@ public class ContactsDatabase
                        return fnameIdx;
                }
                final String field = sort.getProperty();
-               final SortOrder order = sort.getOrder();
 
                if (field.equals("firstName"))
                {
-                       return order != SortOrder.DESCENDING ? fnameIdx : 
fnameDescIdx;
+                       return sort.isAscending() ? fnameIdx : fnameDescIdx;
                }
                else if (field.equals("lastName"))
                {
-                       return order != SortOrder.DESCENDING ? lnameIdx : 
lnameDescIdx;
+                       return sort.isAscending() ? lnameIdx : lnameDescIdx;
                }
                throw new RuntimeException("unknown sort option [" + sort +     
"]. valid fields: [firstName], [lastName]");
        }

Modified: 
wicket/trunk/wicket-extensions/src/test/java/org/apache/wicket/extensions/markup/html/repeater/data/table/SortableContactDataProvider.java
URL: 
http://svn.apache.org/viewvc/wicket/trunk/wicket-extensions/src/test/java/org/apache/wicket/extensions/markup/html/repeater/data/table/SortableContactDataProvider.java?rev=1041112&r1=1041111&r2=1041112&view=diff
==============================================================================
--- 
wicket/trunk/wicket-extensions/src/test/java/org/apache/wicket/extensions/markup/html/repeater/data/table/SortableContactDataProvider.java
 (original)
+++ 
wicket/trunk/wicket-extensions/src/test/java/org/apache/wicket/extensions/markup/html/repeater/data/table/SortableContactDataProvider.java
 Wed Dec  1 18:05:32 2010
@@ -19,7 +19,6 @@ package org.apache.wicket.extensions.mar
 import java.util.Iterator;
 
 import org.apache.wicket.extensions.markup.html.repeater.data.sort.SortOrder;
-import org.apache.wicket.extensions.markup.html.repeater.util.SortParam;
 import 
org.apache.wicket.extensions.markup.html.repeater.util.SortableDataProvider;
 import org.apache.wicket.model.IModel;
 


Reply via email to