Author: xlawrence
Date: Thu Aug 30 09:19:18 2007
New Revision: 18307

URL: https://svndev.jahia.net/websvn/listing.php?sc=3D1&rev=3D18307&repname=
=3Djahia
Log:
Resolve issue http://www.jahia.net/jira/browse/JAHIA-2040: Category autoful=
fill of the key: not sorted by ascending order

Use the NumericStringComparator in order to sort category keys and category=
 titles
Added case handling in NumericStringComparator for JahiaCategory and JahiaR=
esource Instances

Modified:
    branches/JAHIA-5-0-SP-BRANCH/core/src/java/org/jahia/hibernate/dao/Jahi=
aCategoryDAO.java
    branches/JAHIA-5-0-SP-BRANCH/core/src/java/org/jahia/services/categorie=
s/CategoryServiceImpl.java
    branches/JAHIA-5-0-SP-BRANCH/core/src/java/org/jahia/utils/comparator/N=
umericStringComparator.java

Modified: branches/JAHIA-5-0-SP-BRANCH/core/src/java/org/jahia/hibernate/da=
o/JahiaCategoryDAO.java
URL: https://svndev.jahia.net/websvn/diff.php?path=3D/branches/JAHIA-5-0-SP=
-BRANCH/core/src/java/org/jahia/hibernate/dao/JahiaCategoryDAO.java&rev=3D1=
8307&repname=3Djahia
=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=
=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=
=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=
=3D=3D=3D
--- branches/JAHIA-5-0-SP-BRANCH/core/src/java/org/jahia/hibernate/dao/Jahi=
aCategoryDAO.java (original)
+++ branches/JAHIA-5-0-SP-BRANCH/core/src/java/org/jahia/hibernate/dao/Jahi=
aCategoryDAO.java Thu Aug 30 09:19:18 2007
@@ -22,10 +22,14 @@
 import org.hibernate.criterion.Expression;
 import org.hibernate.criterion.MatchMode;
 import org.jahia.hibernate.model.JahiaCategory;
+import org.jahia.utils.comparator.NumericStringComparator;
 import org.springframework.orm.ObjectRetrievalFailureException;
 import org.springframework.orm.hibernate3.HibernateTemplate;
 =

 import java.util.List;
+import java.util.TreeSet;
+import java.util.ArrayList;
+import java.util.Iterator;
 =

 /**
  * Created by IntelliJ IDEA.
@@ -52,8 +56,16 @@
     }
 =

     public List searchCategoryStartingByKey(final String categoryKey) {
-        return getSession().createCriteria(JahiaCategory.class).
+        final List values =3D getSession().createCriteria(JahiaCategory.cl=
ass).
                 add(Expression.ilike("key", categoryKey, MatchMode.START))=
.list();
+        final TreeSet tmp =3D new TreeSet(new NumericStringComparator());
+        tmp.addAll(values);
+        final List result =3D new ArrayList(values.size());
+        final Iterator tmpIterator =3D tmp.iterator();
+        while (tmpIterator.hasNext()) {
+            result.add(tmpIterator.next());
+        }
+        return result;
     }
 =

     public JahiaCategory findCategoryById(Integer categoryId) {

Modified: branches/JAHIA-5-0-SP-BRANCH/core/src/java/org/jahia/services/cat=
egories/CategoryServiceImpl.java
URL: https://svndev.jahia.net/websvn/diff.php?path=3D/branches/JAHIA-5-0-SP=
-BRANCH/core/src/java/org/jahia/services/categories/CategoryServiceImpl.jav=
a&rev=3D18307&repname=3Djahia
=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=
=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=
=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=
=3D=3D=3D
--- branches/JAHIA-5-0-SP-BRANCH/core/src/java/org/jahia/services/categorie=
s/CategoryServiceImpl.java (original)
+++ branches/JAHIA-5-0-SP-BRANCH/core/src/java/org/jahia/services/categorie=
s/CategoryServiceImpl.java Thu Aug 30 09:19:18 2007
@@ -27,6 +27,7 @@
 import org.jahia.hibernate.model.JahiaResourcePK;
 import org.jahia.services.cache.Cache;
 import org.jahia.services.cache.CacheService;
+import org.jahia.utils.comparator.NumericStringComparator;
 =

 import java.util.*;
 =

@@ -328,26 +329,40 @@
 =

     public List getCategoryStartingByTitlePrefix(final String titlePrefix,=
 final String languageCode)
             throws JahiaException {
-        final List tmp =3D resourceManager.searchResourcesByStartingNameIn=
Language(titlePrefix, languageCode);
-        final List result =3D new ArrayList(tmp.size());
-        for (int i =3D 0; i < tmp.size(); i++) {
-            final JahiaResource dbResource =3D (JahiaResource)tmp.get(i);
+        final List values =3D resourceManager.searchResourcesByStartingNam=
eInLanguage(titlePrefix, languageCode);
+        final List categories =3D new ArrayList(values.size());
+        for (int i =3D 0; i < values.size(); i++) {
+            final JahiaResource dbResource =3D (JahiaResource) values.get(=
i);
             final String name =3D dbResource.getName();
             final Category cat =3D getCategory(name.substring(CATEGORY_RES=
OURCEKEY_PREFIX.length()));
-            result.add(cat);
+            categories.add(cat);
+        }
+        final TreeSet tmp =3D new TreeSet(new NumericStringComparator());
+        tmp.addAll(categories);
+        final List result =3D new ArrayList(values.size());
+        final Iterator tmpIterator =3D tmp.iterator();
+        while (tmpIterator.hasNext()) {
+            result.add(tmpIterator.next());
         }
         return result;
     }
 =

     public List getCategoriesContainingStringInTitle(final String string,
                                                      final String language=
Code) throws JahiaException {
-        final List tmp =3D resourceManager.searchResourcesByContainingStri=
ngInLanguage(string, languageCode);
-        final List result =3D new ArrayList(tmp.size());
-        for (int i =3D 0; i < tmp.size(); i++) {
-            final JahiaResource dbResource =3D (JahiaResource) tmp.get(i);
+        final List values =3D resourceManager.searchResourcesByContainingS=
tringInLanguage(string, languageCode);
+        final List categories =3D new ArrayList(values.size());
+        for (int i =3D 0; i < values.size(); i++) {
+            final JahiaResource dbResource =3D (JahiaResource) values.get(=
i);
             final String name =3D dbResource.getName();
             final Category cat =3D getCategory(name.substring(CATEGORY_RES=
OURCEKEY_PREFIX.length()));
-            result.add(cat);
+            categories.add(cat);
+        }
+        final TreeSet tmp =3D new TreeSet(new NumericStringComparator());
+        tmp.addAll(categories);
+        final List result =3D new ArrayList(values.size());
+        final Iterator tmpIterator =3D tmp.iterator();
+        while (tmpIterator.hasNext()) {
+            result.add(tmpIterator.next());
         }
         return result;
     }

Modified: branches/JAHIA-5-0-SP-BRANCH/core/src/java/org/jahia/utils/compar=
ator/NumericStringComparator.java
URL: https://svndev.jahia.net/websvn/diff.php?path=3D/branches/JAHIA-5-0-SP=
-BRANCH/core/src/java/org/jahia/utils/comparator/NumericStringComparator.ja=
va&rev=3D18307&repname=3Djahia
=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=
=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=
=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=
=3D=3D=3D
--- branches/JAHIA-5-0-SP-BRANCH/core/src/java/org/jahia/utils/comparator/N=
umericStringComparator.java (original)
+++ branches/JAHIA-5-0-SP-BRANCH/core/src/java/org/jahia/utils/comparator/N=
umericStringComparator.java Thu Aug 30 09:19:18 2007
@@ -3,6 +3,8 @@
 import org.jahia.resourcebundle.ResourceBundleMarker;
 import org.jahia.bin.Jahia;
 import org.jahia.services.categories.Category;
+import org.jahia.hibernate.model.JahiaCategory;
+import org.jahia.hibernate.model.JahiaResource;
 =

 import java.util.Comparator;
 import java.text.Collator;
@@ -32,41 +34,59 @@
         }
 =

         String s1;
-        String s2;
-        if(c1 instanceof ResourceBundleMarker)
-        s1 =3D ((ResourceBundleMarker) c1).getValue();
-        else if (c1.getClass() =3D=3D Category.class) {
-            final Category cat =3D (Category)c1;
+        if (c1 instanceof ResourceBundleMarker) {
+            s1 =3D ((ResourceBundleMarker) c1).getValue();
+
+        } else if (c1.getClass() =3D=3D Category.class) {
+            final Category cat =3D (Category) c1;
             s1 =3D cat.getTitle(Jahia.getThreadParamBean().getLocale());
             if (s1 =3D=3D null || s1.length() =3D=3D 0) {
                 s1 =3D cat.getKey();
             }
 =

+        } else if (c1.getClass() =3D=3D JahiaCategory.class) {
+            final JahiaCategory cat =3D (JahiaCategory) c1;
+            s1 =3D cat.getKey();
+
+        } else if (c1.getClass() =3D=3D JahiaResource.class) {
+            final JahiaResource res =3D (JahiaResource) c1;
+            s1 =3D res.getValue();
+
         } else
-        s1 =3D c1.toString();
+            s1 =3D c1.toString();
 =

-        if(c2 instanceof ResourceBundleMarker)
-        s2 =3D ((ResourceBundleMarker) c2).getValue();
+        // Second object c2 processing
+        String s2;
+        if (c2 instanceof ResourceBundleMarker) {
+            s2 =3D ((ResourceBundleMarker) c2).getValue();
 =

-        else if (c2.getClass() =3D=3D Category.class) {
+        } else if (c2.getClass() =3D=3D Category.class) {
             final Category cat =3D (Category) c2;
             s2 =3D cat.getTitle(Jahia.getThreadParamBean().getLocale());
             if (s2 =3D=3D null || s2.length() =3D=3D 0) {
                 s2 =3D cat.getKey();
             }
 =

+        } else if (c2.getClass() =3D=3D JahiaCategory.class) {
+            final JahiaCategory cat =3D (JahiaCategory) c2;
+            s2 =3D cat.getKey();
+
+        } else if (c2.getClass() =3D=3D JahiaResource.class) {
+            final JahiaResource res =3D (JahiaResource) c2;
+            s2 =3D res.getValue();
+
         } else
-        s2=3Dc2.toString();
+            s2 =3D c2.toString();
 =

         // find the first digit.
         int idx1 =3D getFirstDigitIndex(s1);
         int idx2 =3D getFirstDigitIndex(s2);
 =

         if ((idx1 =3D=3D -1) ||
-            (idx2 =3D=3D -1) ||
+                (idx2 =3D=3D -1) ||
                 (!s1.substring(0, idx1).equals(s2.substring(0, idx2)))) {
             // System.out.println("Shortcutted. ");
-            return Collator.getInstance(Jahia.getThreadParamBean().getLoca=
le()).compare(s1,s2);
+            return Collator.getInstance(Jahia.getThreadParamBean().getLoca=
le()).compare(s1, s2);
         }
 =

         // find the last digit
@@ -151,15 +171,15 @@
         return 0;
     }
 =

-    private int getFirstDigitIndex(String str) {
+    protected int getFirstDigitIndex(String str) {
         return getFirstDigitIndex(str, 0);
     }
 =

-    private int getFirstDigitIndex(String str, int start) {
+    protected int getFirstDigitIndex(String str, int start) {
         return getFirstDigitIndex(str.toCharArray(), start);
     }
 =

-    private int getFirstDigitIndex(char[] chrs, int start) {
+    protected int getFirstDigitIndex(char[] chrs, int start) {
         int sz =3D chrs.length;
 =

         for (int i =3D start; i < sz; i++) {
@@ -171,11 +191,11 @@
         return -1;
     }
 =

-    private int getLastDigitIndex(String str, int start) {
+    protected int getLastDigitIndex(String str, int start) {
         return getLastDigitIndex(str.toCharArray(), start);
     }
 =

-    private int getLastDigitIndex(char[] chrs, int start) {
+    protected int getLastDigitIndex(char[] chrs, int start) {
         int sz =3D chrs.length;
 =

         for (int i =3D start; i < sz; i++) {
@@ -203,11 +223,11 @@
     }
 =

     // UNUSED
-    private boolean containsOnly(String str, char ch) {
+    protected boolean containsOnly(String str, char ch) {
         return containsOnly(str.toCharArray(), ch);
     }
 =

-    private boolean containsOnly(char[] chrs, char ch) {
+    protected boolean containsOnly(char[] chrs, char ch) {
         int sz =3D chrs.length;
 =

         for (int i =3D 0; i < sz; i++) {

_______________________________________________
cvs_list mailing list
[email protected]
http://lists.jahia.org/cgi-bin/mailman/listinfo/cvs_list

Reply via email to