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