Index: announcement-tool/tool/src/java/org/sakaiproject/announcement/tool/AnnouncementAction.java =================================================================== --- announcement-tool/tool/src/java/org/sakaiproject/announcement/tool/AnnouncementAction.java (revision 315982) +++ announcement-tool/tool/src/java/org/sakaiproject/announcement/tool/AnnouncementAction.java (working copy) @@ -4045,7 +4045,20 @@ { int result = -1; - if (m_criteria.equals(SORT_SUBJECT)) + String criteria = m_criteria; + boolean asc = m_asc;; + + //Force to sort by release date first if available and sort it decending, this will be the first item + boolean releaseDateFirst = ServerConfigurationService.getBoolean("sakai.announcement.release_date_first", false); + if (releaseDateFirst) { + //If the release Date is set + if ((o1 instanceof AnnouncementMessage && ((AnnouncementMessage) o1).getProperties().getProperty(AnnouncementService.RELEASE_DATE) != null) || + (o2 instanceof AnnouncementMessage && ((AnnouncementMessage) o2).getProperties().getProperty(AnnouncementService.RELEASE_DATE) != null)) { + criteria = SORT_RELEASEDATE; + asc = false; + } + } + if (criteria.equals(SORT_SUBJECT)) { // sorted by the discussion message subject result = collator.compare(((AnnouncementMessage) o1).getAnnouncementHeader().getSubject(), @@ -4052,7 +4065,7 @@ ((AnnouncementMessage) o2).getAnnouncementHeader().getSubject()); } - else if (m_criteria.equals(SORT_DATE)) + else if (criteria.equals(SORT_DATE)) { Time o1ModDate = null; @@ -4101,7 +4114,7 @@ return -1; } } - else if (m_criteria.equals(SORT_MESSAGE_ORDER)) + else if (criteria.equals(SORT_MESSAGE_ORDER)) { // sorted by the message order if ((((AnnouncementMessage) o1).getAnnouncementHeader().getMessage_order()) < @@ -4114,7 +4127,7 @@ result = 1; } } - else if (m_criteria.equals(SORT_RELEASEDATE)) + else if (criteria.equals(SORT_RELEASEDATE)) { Time o1releaseDate = null; Time o2releaseDate = null; @@ -4158,7 +4171,7 @@ return -1; } } - else if (m_criteria.equals(SORT_RETRACTDATE)) + else if (criteria.equals(SORT_RETRACTDATE)) { Time o1retractDate = null; Time o2retractDate = null; @@ -4202,19 +4215,19 @@ return -1; } } - else if (m_criteria.equals(SORT_FROM)) + else if (criteria.equals(SORT_FROM)) { // sorted by the discussion message subject result = collator.compare(((AnnouncementMessage) o1).getAnnouncementHeader().getFrom().getSortName(), ((AnnouncementMessage) o2).getAnnouncementHeader().getFrom().getSortName()); } - else if (m_criteria.equals(SORT_CHANNEL)) + else if (criteria.equals(SORT_CHANNEL)) { // sorted by the channel name. result = collator.compare(((AnnouncementWrapper) o1).getChannelDisplayName(), ((AnnouncementWrapper) o2).getChannelDisplayName()); } - else if (m_criteria.equals(SORT_PUBLIC)) + else if (criteria.equals(SORT_PUBLIC)) { // sorted by the public view attribute String factor1 = ((AnnouncementMessage) o1).getProperties().getProperty(ResourceProperties.PROP_PUBVIEW); @@ -4223,7 +4236,7 @@ if (factor2 == null) factor2 = "false"; result = collator.compare(factor1,factor2); } - else if (m_criteria.equals(SORT_FOR)) + else if (criteria.equals(SORT_FOR)) { // sorted by the public view attribute String factor1 = ((AnnouncementWrapper) o1).getRange(); @@ -4230,7 +4243,7 @@ String factor2 = ((AnnouncementWrapper) o2).getRange(); result = collator.compare(factor1,factor2); } - else if (m_criteria.equals(SORT_GROUPTITLE)) + else if (criteria.equals(SORT_GROUPTITLE)) { // sorted by the group title String factor1 = ((Group) o1).getTitle(); @@ -4237,7 +4250,7 @@ String factor2 = ((Group) o2).getTitle(); result = collator.compare(factor1,factor2); } - else if (m_criteria.equals(SORT_GROUPDESCRIPTION)) + else if (criteria.equals(SORT_GROUPDESCRIPTION)) { // sorted by the group title String factor1 = ((Group) o1).getDescription(); @@ -4254,7 +4267,7 @@ } // sort ascending or descending - if (!m_asc) + if (!asc) { result = -result; }