Index: announcement-tool/tool/src/java/org/sakaiproject/announcement/tool/AnnouncementAction.java =================================================================== --- announcement-tool/tool/src/java/org/sakaiproject/announcement/tool/AnnouncementAction.java (revision 132882) +++ announcement-tool/tool/src/java/org/sakaiproject/announcement/tool/AnnouncementAction.java (working copy) @@ -35,6 +35,8 @@ import java.util.Stack; import java.util.Vector; import java.text.Collator; +import java.text.ParseException; +import java.text.RuleBasedCollator; import org.apache.commons.lang.StringUtils; import org.apache.commons.logging.Log; @@ -250,6 +252,10 @@ private SecurityService m_securityService = null; private EntityBroker entityBroker; + + private RuleBasedCollator collator_ini = (RuleBasedCollator)Collator.getInstance(); + + private Collator collator = Collator.getInstance(); private static final String DEFAULT_TEMPLATE="announcement/chef_announcements"; @@ -4040,7 +4046,16 @@ { // the criteria String m_criteria = null; - + { + try + { + collator = new RuleBasedCollator(collator_ini.getRules().replaceAll("<'\u005f'", "<' '<'\u005f'"));; + } + catch (ParseException e) + { + M_log.warn(this + " Cannot init RuleBasedCollator. Will use the default Collator instead.", e); + } + } // the criteria - asc boolean m_asc = true; @@ -4075,8 +4090,9 @@ if (m_criteria.equals(SORT_SUBJECT)) { // sorted by the discussion message subject - result = Collator.getInstance().compare(((AnnouncementMessage) o1).getAnnouncementHeader().getSubject(), - ((AnnouncementMessage) o2).getAnnouncementHeader().getSubject()); + result = collator.compare(((AnnouncementMessage) o1).getAnnouncementHeader().getSubject(), + ((AnnouncementMessage) o2).getAnnouncementHeader().getSubject()); + } else if (m_criteria.equals(SORT_DATE)) { @@ -4231,13 +4247,13 @@ else if (m_criteria.equals(SORT_FROM)) { // sorted by the discussion message subject - result = Collator.getInstance().compare(((AnnouncementMessage) o1).getAnnouncementHeader().getFrom().getSortName(), - ((AnnouncementMessage) o2).getAnnouncementHeader().getFrom().getSortName()); + result = collator.compare(((AnnouncementMessage) o1).getAnnouncementHeader().getFrom().getSortName(), + ((AnnouncementMessage) o2).getAnnouncementHeader().getFrom().getSortName()); } else if (m_criteria.equals(SORT_CHANNEL)) { // sorted by the channel name. - result = Collator.getInstance().compare(((AnnouncementWrapper) o1).getChannelDisplayName(), + result = collator.compare(((AnnouncementWrapper) o1).getChannelDisplayName(), ((AnnouncementWrapper) o2).getChannelDisplayName()); } else if (m_criteria.equals(SORT_PUBLIC)) @@ -4247,7 +4263,7 @@ if (factor1 == null) factor1 = "false"; String factor2 = ((AnnouncementMessage) o2).getProperties().getProperty(ResourceProperties.PROP_PUBVIEW); if (factor2 == null) factor2 = "false"; - result = Collator.getInstance().compare(factor1,factor2); + result = collator.compare(factor1,factor2); } else if (m_criteria.equals(SORT_FOR)) { @@ -4254,7 +4270,7 @@ // sorted by the public view attribute String factor1 = ((AnnouncementWrapper) o1).getRange(); String factor2 = ((AnnouncementWrapper) o2).getRange(); - result = Collator.getInstance().compare(factor1,factor2); + result = collator.compare(factor1,factor2); } else if (m_criteria.equals(SORT_GROUPTITLE)) { @@ -4261,7 +4277,7 @@ // sorted by the group title String factor1 = ((Group) o1).getTitle(); String factor2 = ((Group) o2).getTitle(); - result = Collator.getInstance().compare(factor1,factor2); + result = collator.compare(factor1,factor2); } else if (m_criteria.equals(SORT_GROUPDESCRIPTION)) { @@ -4276,7 +4292,7 @@ { factor2 = ""; } - result = Collator.getInstance().compare(factor1,factor2); + result = collator.compare(factor1,factor2); } // sort ascending or descending