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