Author: pete
Date: Wed Dec  1 16:03:31 2010
New Revision: 1041066

URL: http://svn.apache.org/viewvc?rev=1041066&view=rev
Log:
replace usage of string literals for sorting data columns with java 5 enum 
[SortOrder]. this will also solve WICKET-2986.

Added:
    
wicket/trunk/wicket-extensions/src/main/java/org/apache/wicket/extensions/markup/html/repeater/data/sort/SortOrder.java
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-examples/src/main/java/org/apache/wicket/spring/common/QueryParam.java
    
wicket/trunk/wicket-examples/src/main/java/org/apache/wicket/spring/common/web/ContactDataProvider.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/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=1041066&r1=1041065&r2=1041066&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 16:03:31 2010
@@ -18,6 +18,8 @@ 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;
 
@@ -43,7 +45,7 @@ public class ContactDataProvider impleme
         */
        public Iterator<Contact> iterator(int first, int count)
        {
-               return getContactsDB().find(first, count, "firstName", 
true).iterator();
+               return getContactsDB().find(first, count, new 
SortParam("firstName", SortOrder.ASCENDING)).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=1041066&r1=1041065&r2=1041066&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 16:03:31 2010
@@ -23,6 +23,9 @@ 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;
+
 /**
  * simple database for contacts
  * 
@@ -82,32 +85,32 @@ public class ContactsDatabase
         * 
         * @param first
         * @param count
-        * @param sortProperty
-        * @param sortAsc
+        * @param sort
         * @return list of contacts
         */
-       public List<Contact> find(int first, int count, String sortProperty, 
boolean sortAsc)
+       public List<Contact> find(int first, int count, SortParam sort)
        {
-               List<Contact> sublist = getIndex(sortProperty, 
sortAsc).subList(first, first + count);
-               return sublist;
+               return getIndex(sort).subList(first, first + count);
        }
 
-       protected List<Contact> getIndex(String prop, boolean asc)
+       protected List<Contact> getIndex(SortParam sort)
        {
-               if (prop == null)
+               if (sort == null)
                {
                        return fnameIdx;
                }
-               if (prop.equals("firstName"))
+               final String field = sort.getProperty();
+               final SortOrder order = sort.getOrder();
+
+               if (field.equals("firstName"))
                {
-                       return (asc) ? fnameIdx : fnameDescIdx;
+                       return (order != SortOrder.DESCENDING) ? fnameIdx : 
fnameDescIdx;
                }
-               else if (prop.equals("lastName"))
+               else if (field.equals("lastName"))
                {
-                       return (asc) ? lnameIdx : lnameDescIdx;
+                       return (order != SortOrder.DESCENDING) ? lnameIdx : 
lnameDescIdx;
                }
-               throw new RuntimeException("uknown sort option [" + prop +
-                       "]. valid options: [firstName] , [lastName]");
+               throw new RuntimeException("unknown sort option [" + sort +     
"]. valid fields: [firstName], [lastName]");
        }
 
        /**
@@ -145,7 +148,7 @@ public class ContactsDatabase
         */
        public void delete(final Contact contact)
        {
-               Contact c = map.remove(contact.getId());
+               map.remove(contact.getId());
 
                fnameIdx.remove(contact);
                lnameIdx.remove(contact);

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=1041066&r1=1041065&r2=1041066&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 16:03:31 2010
@@ -18,6 +18,8 @@ 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;
 import org.apache.wicket.markup.html.form.TextField;
@@ -56,8 +58,8 @@ public class FormPage extends BasePage
                        protected Iterator<IModel<Contact>> getItemModels()
                        {
                                // for simplicity we only show the first 10 
contacts
-                               Iterator<Contact> contacts = 
DatabaseLocator.getDatabase().find(0, 10, "firstName",
-                                       true).iterator();
+                               SortParam sort = new SortParam("firstName", 
SortOrder.ASCENDING);
+                               Iterator<Contact> contacts = 
DatabaseLocator.getDatabase().find(0, 10, sort).iterator();
 
                                // the iterator returns contact objects, but we 
need it to
                                // return models, we use this handy adapter 
class to perform

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=1041066&r1=1041065&r2=1041066&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 16:03:31 2010
@@ -18,6 +18,7 @@ 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;
@@ -37,7 +38,7 @@ public class SortableContactDataProvider
        public SortableContactDataProvider()
        {
                // set default sort
-               setSort("firstName", true);
+               setSort("firstName", SortOrder.ASCENDING);
        }
 
        protected ContactsDatabase getContactsDB()
@@ -50,8 +51,7 @@ public class SortableContactDataProvider
         */
        public Iterator<Contact> iterator(int first, int count)
        {
-               SortParam sp = getSort();
-               return getContactsDB().find(first, count, sp.getProperty(), 
sp.isAscending()).iterator();
+               return getContactsDB().find(first, count, getSort()).iterator();
        }
 
        /**

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=1041066&r1=1041065&r2=1041066&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 16:03:31 2010
@@ -24,6 +24,9 @@ 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;
+
 /**
  * a dao implementation with an auto-generated embedded database. in a true 
application this dao
  * would interface with a real database, but because we want to keep 
dependencies to a minimum we
@@ -89,25 +92,28 @@ public class ContactDaoImpl implements C
         */
        public Iterator<Contact> find(QueryParam qp)
        {
-               List<Contact> sublist = getIndex(qp.getSort(), 
qp.isSortAsc()).subList(qp.getFirst(),
+               List<Contact> sublist = 
getIndex(qp.getSort()).subList(qp.getFirst(),
                        qp.getFirst() + qp.getCount());
                return sublist.iterator();
        }
 
-       protected List<Contact> getIndex(String prop, boolean asc)
+       protected List<Contact> getIndex(SortParam sort)
        {
-               if (prop == null)
+               if (sort == null)
                        return fnameIdx;
-               if (prop.equals("firstName"))
+
+               final String field = sort.getProperty();
+               final SortOrder order = sort.getOrder();
+
+               if (field.equals("firstName"))
                {
-                       return (asc) ? fnameIdx : fnameDescIdx;
+                       return (order != SortOrder.DESCENDING) ? fnameIdx : 
fnameDescIdx;
                }
-               else if (prop.equals("lastName"))
+               else if (field.equals("lastName"))
                {
-                       return (asc) ? lnameIdx : lnameDescIdx;
+                       return (order != SortOrder.DESCENDING) ? lnameIdx : 
lnameDescIdx;
                }
-               throw new RuntimeException("uknown sort option [" + prop +
-                       "]. valid options: [firstName] , [lastName]");
+               throw new RuntimeException("unknown sort option [" + sort + "]. 
valid fields: [firstName], [lastName]");
        }
 
        /**

Modified: 
wicket/trunk/wicket-examples/src/main/java/org/apache/wicket/spring/common/QueryParam.java
URL: 
http://svn.apache.org/viewvc/wicket/trunk/wicket-examples/src/main/java/org/apache/wicket/spring/common/QueryParam.java?rev=1041066&r1=1041065&r2=1041066&view=diff
==============================================================================
--- 
wicket/trunk/wicket-examples/src/main/java/org/apache/wicket/spring/common/QueryParam.java
 (original)
+++ 
wicket/trunk/wicket-examples/src/main/java/org/apache/wicket/spring/common/QueryParam.java
 Wed Dec  1 16:03:31 2010
@@ -16,6 +16,7 @@
  */
 package org.apache.wicket.spring.common;
 
+import org.apache.wicket.extensions.markup.html.repeater.util.SortParam;
 
 /**
  * Encapsulates the Query Paramaters to be passed to daos
@@ -28,9 +29,7 @@ public class QueryParam
 
        private int count;
 
-       private String sort;
-
-       private boolean sortAsc;
+       private SortParam sort;
 
        /**
         * Set to return <tt>count</tt> elements, starting at the 
<tt>first</tt> element.
@@ -42,7 +41,7 @@ public class QueryParam
         */
        public QueryParam(int first, int count)
        {
-               this(first, count, null, true);
+               this(first, count, null);
        }
 
        /**
@@ -51,18 +50,14 @@ public class QueryParam
         * @param first
         *            First element to return.
         * @param count
-        *            Number of elements to return.
+ *            Number of elements to return.
         * @param sort
-        *            Column to sort on.
-        * @param sortAsc
-        *            Sort ascending or descending.
         */
-       public QueryParam(int first, int count, String sort, boolean sortAsc)
+       public QueryParam(int first, int count, SortParam sort)
        {
                this.first = first;
                this.count = count;
                this.sort = sort;
-               this.sortAsc = sortAsc;
        }
 
        public int getCount()
@@ -75,16 +70,11 @@ public class QueryParam
                return first;
        }
 
-       public String getSort()
+       public SortParam getSort()
        {
                return sort;
        }
 
-       public boolean isSortAsc()
-       {
-               return sortAsc;
-       }
-
        public boolean hasSort()
        {
                return sort != null;

Modified: 
wicket/trunk/wicket-examples/src/main/java/org/apache/wicket/spring/common/web/ContactDataProvider.java
URL: 
http://svn.apache.org/viewvc/wicket/trunk/wicket-examples/src/main/java/org/apache/wicket/spring/common/web/ContactDataProvider.java?rev=1041066&r1=1041065&r2=1041066&view=diff
==============================================================================
--- 
wicket/trunk/wicket-examples/src/main/java/org/apache/wicket/spring/common/web/ContactDataProvider.java
 (original)
+++ 
wicket/trunk/wicket-examples/src/main/java/org/apache/wicket/spring/common/web/ContactDataProvider.java
 Wed Dec  1 16:03:31 2010
@@ -18,6 +18,7 @@ package org.apache.wicket.spring.common.
 
 import java.util.Iterator;
 
+import org.apache.wicket.extensions.markup.html.repeater.data.sort.SortOrder;
 import 
org.apache.wicket.extensions.markup.html.repeater.util.SortableDataProvider;
 import org.apache.wicket.spring.common.ContactDao;
 import org.apache.wicket.spring.common.QueryParam;
@@ -34,15 +35,14 @@ public abstract class ContactDataProvide
 
        public ContactDataProvider()
        {
-               setSort("firstName", true);
+               setSort("firstName", SortOrder.ASCENDING);
        }
 
        protected abstract ContactDao getContactDao();
 
        public final Iterator iterator(int first, int count)
        {
-               QueryParam qp = new QueryParam(first, count, 
getSort().getProperty(), getSort()
-                               .isAscending());
+               QueryParam qp = new QueryParam(first, count, getSort());
                return getContactDao().find(qp);
        }
 

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=1041066&r1=1041065&r2=1041066&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 16:03:31 2010
@@ -27,19 +27,6 @@ import org.apache.wicket.IClusterable;
 public interface ISortState extends IClusterable
 {
        /**
-        * property state representing ascending sort order
-        */
-       public static final int ASCENDING = 1;
-       /**
-        * property state representing descending sort order
-        */
-       public static final int DESCENDING = -1;
-       /**
-        * property state presenting not-sorted sort order
-        */
-       public static final int NONE = 0;
-
-       /**
         * Sets sort order of the property
         * 
         * @param property
@@ -47,7 +34,7 @@ public interface ISortState extends IClu
         * @param state
         *            new sort state of the property. must be one of ASCENDING, 
DESCENDING, or NONE
         */
-       public void setPropertySortOrder(String property, int state);
+       public void setPropertySortOrder(String property, SortOrder state);
 
        /**
         * Gets the sort order of a property
@@ -56,6 +43,6 @@ public interface ISortState extends IClu
         *            sort property to be checked
         * @return one of ASCENDING, DESCENDING, or NONE
         */
-       public int getPropertySortOrder(String property);
+       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=1041066&r1=1041065&r2=1041066&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 16:03:31 2010
@@ -127,17 +127,8 @@ public class OrderByLink extends Link
                }
 
                ISortState state = stateLocator.getSortState();
-
-               int oldDir = state.getPropertySortOrder(property);
-
-               int newDir = ISortState.ASCENDING;
-
-               if (oldDir == ISortState.ASCENDING)
-               {
-                       newDir = ISortState.DESCENDING;
-               }
-
-               state.setPropertySortOrder(property, newDir);
+               SortOrder order = state.getPropertySortOrder(property);
+               state.setPropertySortOrder(property, order.nextOrderInCycle());
 
                return this;
        }
@@ -191,7 +182,7 @@ public class OrderByLink extends Link
                {
                        return getReplaceModel().getObject() != null;
                }
-       };
+       }
 
 
        /**
@@ -251,12 +242,12 @@ public class OrderByLink extends Link
                 */
                public String getClassAttributeValue(ISortState state, String 
property)
                {
-                       int dir = state.getPropertySortOrder(property);
-                       if (dir == ISortState.ASCENDING)
+                       SortOrder dir = state.getPropertySortOrder(property);
+                       if (dir == SortOrder.ASCENDING)
                        {
                                return ascending;
                        }
-                       else if (dir == ISortState.DESCENDING)
+                       else if (dir == SortOrder.DESCENDING)
                        {
                                return descending;
                        }

Added: 
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=1041066&view=auto
==============================================================================
--- 
wicket/trunk/wicket-extensions/src/main/java/org/apache/wicket/extensions/markup/html/repeater/data/sort/SortOrder.java
 (added)
+++ 
wicket/trunk/wicket-extensions/src/main/java/org/apache/wicket/extensions/markup/html/repeater/data/sort/SortOrder.java
 Wed Dec  1 16:03:31 2010
@@ -0,0 +1,43 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements.  See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License.  You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package org.apache.wicket.extensions.markup.html.repeater.data.sort;
+
+/**
+ * Sort order for columns
+ * 
+ * @author pete
+ * 
+ */
+public enum SortOrder
+{
+       NONE,
+       ASCENDING,
+       DESCENDING;
+
+       /**
+        * return next sort order in cycle (will iterate through all
+        * possible states, then start from the beginning)
+        *
+        * @return next sort order
+        */
+       public SortOrder nextOrderInCycle()
+       {
+               final int index = (ordinal() + 1) % values().length;
+               
+               return values()[index];
+       }
+}

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=1041066&r1=1041065&r2=1041066&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 16:03:31 2010
@@ -18,7 +18,8 @@ package org.apache.wicket.extensions.mar
 
 import org.apache.wicket.IClusterable;
 import org.apache.wicket.extensions.markup.html.repeater.data.sort.ISortState;
-
+import org.apache.wicket.extensions.markup.html.repeater.data.sort.SortOrder;
+import org.apache.wicket.util.lang.Args;
 
 /**
  * Implementation of ISortState that can keep track of sort information for a 
single property.
@@ -33,42 +34,28 @@ public class SingleSortState implements 
        SortParam param;
 
        /**
-        * @see 
org.apache.wicket.extensions.markup.html.repeater.data.sort.ISortState#setPropertySortOrder(java.lang.String,
-        *      int)
+        * @see 
org.apache.wicket.extensions.markup.html.repeater.data.sort.ISortState#setPropertySortOrder(String,
 org.apache.wicket.extensions.markup.html.repeater.data.sort.SortOrder)
         */
-       public void setPropertySortOrder(String property, int dir)
+       public void setPropertySortOrder(String property, SortOrder order)
        {
-               if (property == null)
-               {
-                       throw new IllegalArgumentException("argument [property] 
cannot be null");
-               }
+               Args.notNull(property, "property");
+               Args.notNull(order, "order");
 
-               param = new SortParam(property, dir == ISortState.ASCENDING);
+               param = new SortParam(property, order);
        }
 
        /**
         * @see 
org.apache.wicket.extensions.markup.html.repeater.data.sort.ISortState#getPropertySortOrder(java.lang.String)
         */
-       public int getPropertySortOrder(String property)
+       public SortOrder getPropertySortOrder(String property)
        {
-               if (property == null)
-               {
-                       throw new IllegalArgumentException("argument [property] 
cannot be null");
-               }
+               Args.notNull(property, "property");
 
-               if (param == null || !param.getProperty().equals(property))
+               if (param == null || param.getProperty().equals(property) == 
false)
                {
-                       return NONE;
+                       return SortOrder.NONE;
                }
-               else if (param.isAscending())
-               {
-                       return ASCENDING;
-               }
-               else
-               {
-                       return DESCENDING;
-               }
-
+               return param.getOrder();
        }
 
        /**

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=1041066&r1=1041065&r2=1041066&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 16:03:31 2010
@@ -17,10 +17,11 @@
 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;
 
 /**
  * Represents sorting information of a property
- * 
+ *
  * @author Igor Vaynberg ( ivaynberg )
  */
 public class SortParam implements IClusterable
@@ -28,26 +29,28 @@ public class SortParam implements IClust
        private static final long serialVersionUID = 1L;
 
        private String property;
-       private boolean asc;
+       private SortOrder order;
 
        /**
         * @param property
         *            sort property
-        * @param asc
-        *            sort direction
+        * @param order
+        *            sort order
         */
-       public SortParam(String property, boolean asc)
+       public SortParam(String property, SortOrder order)
        {
                this.property = property;
-               this.asc = asc;
+               this.order = order;
        }
 
        /**
-        * @return true if sort dir is ascending, false otherwise
+        * get sort order
+        *
+        * @return sort order
         */
-       public boolean isAscending()
+       public SortOrder getOrder()
        {
-               return asc;
+               return order;
        }
 
        /**
@@ -58,18 +61,26 @@ public class SortParam implements IClust
                return property;
        }
 
-       /**
-        * @see java.lang.Object#equals(java.lang.Object)
-        */
-       public boolean equals(Object rhs)
+       @Override
+       public boolean equals(Object o)
+       {
+               if (this == o)
+                       return true;
+
+               if ((o instanceof SortParam) == false)
+                       return false;
+
+               SortParam sortParam = (SortParam)o;
+
+               return order == sortParam.order && 
property.equals(sortParam.property);
+       }
+
+       @Override
+       public int hashCode()
        {
-               if (rhs instanceof SortParam)
-               {
-                       SortParam param = (SortParam)rhs;
-                       return getProperty().equals(param.getProperty()) &&
-                                       isAscending() == param.isAscending();
-               }
-               return false;
+               int result = property.hashCode();
+               result = 31 * result + order.hashCode();
+               return result;
        }
 
        /**
@@ -78,6 +89,6 @@ public class SortParam implements IClust
        public String toString()
        {
                return new StringBuilder().append("[SortParam 
property=").append(getProperty()).append(
-                               " 
ascending=").append(asc).append("]").toString();
+                               " 
order=").append(order.name()).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=1041066&r1=1041065&r2=1041066&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 16:03:31 2010
@@ -17,6 +17,7 @@
 package org.apache.wicket.extensions.markup.html.repeater.util;
 
 import org.apache.wicket.extensions.markup.html.repeater.data.sort.ISortState;
+import org.apache.wicket.extensions.markup.html.repeater.data.sort.SortOrder;
 import 
org.apache.wicket.extensions.markup.html.repeater.data.table.ISortableDataProvider;
 
 
@@ -89,9 +90,9 @@ public abstract class SortableDataProvid
         * @param ascending
         *            sort direction
         */
-       public void setSort(String property, boolean ascending)
+       public void setSort(String property, SortOrder order)
        {
-               setSort(new SortParam(property, ascending));
+               setSort(new SortParam(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=1041066&r1=1041065&r2=1041066&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 16:03:31 2010
@@ -23,6 +23,9 @@ 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;
+
 /**
  * simple database for contacts
  * 
@@ -82,31 +85,32 @@ public class ContactsDatabase
         * 
         * @param first
         * @param count
-        * @param sortProperty
-        * @param sortAsc
+        * @param sort
         * @return list of contacts
         */
-       public List<Contact> find(int first, int count, String sortProperty, 
boolean sortAsc)
+       public List<Contact> find(int first, int count, SortParam sort)
        {
-               return getIndex(sortProperty, sortAsc).subList(first, first + 
count);
+               return getIndex(sort).subList(first, first + count);
        }
 
-       protected List<Contact> getIndex(String prop, boolean asc)
+       protected List<Contact> getIndex(SortParam sort)
        {
-               if (prop == null)
+               if (sort == null)
                {
                        return fnameIdx;
                }
-               if (prop.equals("firstName"))
+               final String field = sort.getProperty();
+               final SortOrder order = sort.getOrder();
+
+               if (field.equals("firstName"))
                {
-                       return (asc) ? fnameIdx : fnameDescIdx;
+                       return order != SortOrder.DESCENDING ? fnameIdx : 
fnameDescIdx;
                }
-               else if (prop.equals("lastName"))
+               else if (field.equals("lastName"))
                {
-                       return (asc) ? lnameIdx : lnameDescIdx;
+                       return order != SortOrder.DESCENDING ? lnameIdx : 
lnameDescIdx;
                }
-               throw new RuntimeException("uknown sort option [" + prop +
-                       "]. valid options: [firstName] , [lastName]");
+               throw new RuntimeException("unknown sort option [" + sort +     
"]. valid fields: [firstName], [lastName]");
        }
 
        /**
@@ -144,7 +148,7 @@ public class ContactsDatabase
         */
        public void delete(final Contact contact)
        {
-               Contact c = map.remove(contact.getId());
+               map.remove(contact.getId());
 
                fnameIdx.remove(contact);
                lnameIdx.remove(contact);

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=1041066&r1=1041065&r2=1041066&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 16:03:31 2010
@@ -18,6 +18,7 @@ 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;
@@ -39,7 +40,7 @@ public class SortableContactDataProvider
        public SortableContactDataProvider()
        {
                // set default sort
-               setSort("firstName", true);
+               setSort("firstName", SortOrder.ASCENDING);
        }
 
        protected ContactsDatabase getContactsDB()
@@ -52,8 +53,7 @@ public class SortableContactDataProvider
         */
        public Iterator<Contact> iterator(int first, int count)
        {
-               SortParam sp = getSort();
-               return getContactsDB().find(first, count, sp.getProperty(), 
sp.isAscending()).iterator();
+               return getContactsDB().find(first, count, getSort()).iterator();
        }
 
        /**


Reply via email to