Author: xlawrence
Date: Thu Aug 30 09:25:01 2007
New Revision: 18308

URL: https://svndev.jahia.net/websvn/listing.php?sc=3D1&rev=3D18308&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:
    trunk/core/src/java/org/jahia/hibernate/dao/JahiaCategoryDAO.java
    trunk/core/src/java/org/jahia/services/categories/CategoryServiceImpl.j=
ava
    trunk/core/src/java/org/jahia/utils/comparator/NumericStringComparator.=
java

Modified: trunk/core/src/java/org/jahia/hibernate/dao/JahiaCategoryDAO.java
URL: https://svndev.jahia.net/websvn/diff.php?path=3D/trunk/core/src/java/o=
rg/jahia/hibernate/dao/JahiaCategoryDAO.java&rev=3D18308&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
--- trunk/core/src/java/org/jahia/hibernate/dao/JahiaCategoryDAO.java (orig=
inal)
+++ trunk/core/src/java/org/jahia/hibernate/dao/JahiaCategoryDAO.java Thu A=
ug 30 09:25:01 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: trunk/core/src/java/org/jahia/services/categories/CategoryService=
Impl.java
URL: https://svndev.jahia.net/websvn/diff.php?path=3D/trunk/core/src/java/o=
rg/jahia/services/categories/CategoryServiceImpl.java&rev=3D18308&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
--- trunk/core/src/java/org/jahia/services/categories/CategoryServiceImpl.j=
ava (original)
+++ trunk/core/src/java/org/jahia/services/categories/CategoryServiceImpl.j=
ava Thu Aug 30 09:25:01 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.*;
 =

@@ -327,26 +328,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: trunk/core/src/java/org/jahia/utils/comparator/NumericStringCompa=
rator.java
URL: https://svndev.jahia.net/websvn/diff.php?path=3D/trunk/core/src/java/o=
rg/jahia/utils/comparator/NumericStringComparator.java&rev=3D18308&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
--- trunk/core/src/java/org/jahia/utils/comparator/NumericStringComparator.=
java (original)
+++ trunk/core/src/java/org/jahia/utils/comparator/NumericStringComparator.=
java Thu Aug 30 09:25:01 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,29 +34,47 @@
         }
 =

         String s1;
-        String s2;
-        if (c1 instanceof ResourceBundleMarker)
+        if (c1 instanceof ResourceBundleMarker) {
             s1 =3D ((ResourceBundleMarker) c1).getValue();
-        else if (c1.getClass() =3D=3D Category.class) {
+
+        } 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();
 =

-        if (c2 instanceof ResourceBundleMarker)
+        // 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 =3D c2.toString();
 =

@@ -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