Index: sitestats-tool/src/java/org/sakaiproject/sitestats/tool/wicket/pages/ReportsEditPage.java =================================================================== --- sitestats-tool/src/java/org/sakaiproject/sitestats/tool/wicket/pages/ReportsEditPage.java (revision 104397) +++ sitestats-tool/src/java/org/sakaiproject/sitestats/tool/wicket/pages/ReportsEditPage.java (working copy) @@ -19,6 +19,8 @@ package org.sakaiproject.sitestats.tool.wicket.pages; import java.text.Collator; +import java.text.ParseException; +import java.text.RuleBasedCollator; import java.util.ArrayList; import java.util.Arrays; import java.util.Collection; @@ -123,8 +125,14 @@ private final ReentrantLock ajaxUpdateLock = new ReentrantLock(); private boolean usersLoaded = false; - private transient Collator collator = Collator.getInstance(); - + private transient Collator collator = Collator.getInstance();; + + { + try{ + collator= new RuleBasedCollator(((RuleBasedCollator)Collator.getInstance()).getRules().replaceAll("<'\u005f'", "<' '<'\u005f'")); + }catch(ParseException e){ + } + } public ReportsEditPage() { this(null, null, null); } Index: sitestats-tool/src/java/org/sakaiproject/sitestats/tool/wicket/providers/ReportDefsProvider.java =================================================================== --- sitestats-tool/src/java/org/sakaiproject/sitestats/tool/wicket/providers/ReportDefsProvider.java (revision 104397) +++ sitestats-tool/src/java/org/sakaiproject/sitestats/tool/wicket/providers/ReportDefsProvider.java (working copy) @@ -19,6 +19,8 @@ package org.sakaiproject.sitestats.tool.wicket.providers; import java.text.Collator; +import java.text.ParseException; +import java.text.RuleBasedCollator; import java.util.ArrayList; import java.util.Collections; import java.util.Comparator; @@ -183,7 +185,13 @@ public final Comparator getReportDefComparator() { return new Comparator() { - private final transient Collator collator = Collator.getInstance(); + private transient Collator collator = Collator.getInstance();; + { + try{ + collator= new RuleBasedCollator(((RuleBasedCollator)Collator.getInstance()).getRules().replaceAll("<'\u005f'", "<' '<'\u005f'")); + }catch(ParseException e){ + } + } public int compare(ReportDef o1, ReportDef o2) { String title1 = null; Index: sitestats-tool/src/java/org/sakaiproject/sitestats/tool/wicket/providers/ReportsDataProvider.java =================================================================== --- sitestats-tool/src/java/org/sakaiproject/sitestats/tool/wicket/providers/ReportsDataProvider.java (revision 104397) +++ sitestats-tool/src/java/org/sakaiproject/sitestats/tool/wicket/providers/ReportsDataProvider.java (working copy) @@ -20,6 +20,8 @@ import java.io.Serializable; import java.text.Collator; +import java.text.ParseException; +import java.text.RuleBasedCollator; import java.util.Collections; import java.util.Comparator; import java.util.Iterator; @@ -134,8 +136,13 @@ public final Comparator getReportDataComparator(final String fieldName, final boolean sortAscending, final StatsManager SST_sm, final EventRegistryService SST_ers, final UserDirectoryService M_uds) { return new Comparator() { - private final transient Collator collator = Collator.getInstance(); - + private transient Collator collator= Collator.getInstance();; + { + try{ + collator= new RuleBasedCollator(((RuleBasedCollator)Collator.getInstance()).getRules().replaceAll("<'\u005f'", "<' '<'\u005f'")); + }catch(ParseException e){ + } + } public int compare(Stat r1, Stat r2) { if(fieldName.equals(COL_SITE)){ String s1 = Locator.getFacade().getSiteService().getSiteDisplay(r1.getSiteId()).toLowerCase();