/**********************************************************************************
* $URL: https://source.sakaiproject.org/svn/portal/trunk/portal-impl/impl/src/java/org/sakaiproject/portal/charon/site/MoreSiteViewImpl.java $
* $Id: MoreSiteViewImpl.java 127575 2013-07-23 12:12:31Z azeckoski@unicon.net $
***********************************************************************************
*
* Copyright (c) 2003, 2004, 2005, 2006, 2007, 2008 The Sakai Foundation
*
* Licensed under the Educational Community License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.opensource.org/licenses/ECL-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*
**********************************************************************************/
package org.sakaiproject.portal.charon.site;
import java.util.ArrayList;
import java.util.Collection;
import java.util.Collections;
import java.util.Comparator;
import java.util.HashMap;
import java.util.Iterator;
import java.util.List;
import java.util.Map;
import java.util.TreeMap;
import javax.servlet.http.HttpServletRequest;
import org.sakaiproject.component.api.ServerConfigurationService;
import org.sakaiproject.entity.api.ResourceProperties;
import org.sakaiproject.portal.api.Portal;
import org.sakaiproject.portal.api.SiteNeighbourhoodService;
import org.sakaiproject.site.api.Site;
import org.sakaiproject.site.api.SiteService;
import org.sakaiproject.tool.api.Session;
import org.sakaiproject.user.api.PreferencesService;
import org.sakaiproject.util.ResourceLoader;
import org.sakaiproject.coursemanagement.api.AcademicSession;
import org.sakaiproject.coursemanagement.api.CourseManagementService;
import org.sakaiproject.component.cover.ComponentManager;
/**
* @author ieb
*
*/
public class MoreSiteViewImpl extends DefaultSiteViewImpl
{
/** messages. */
private static ResourceLoader rb = new ResourceLoader("sitenav");
private CourseManagementService courseManagementService = (CourseManagementService) ComponentManager.get(CourseManagementService.class);
/**
* @param siteHelper
* @param request
* @param session
* @param currentSiteId
* @param siteService
* @param serverConfigurationService
* @param preferencesService
*/
public MoreSiteViewImpl(PortalSiteHelperImpl siteHelper, SiteNeighbourhoodService siteNeighbourhoodService, HttpServletRequest request,
Session session, String currentSiteId, SiteService siteService,
ServerConfigurationService serverConfigurationService,
PreferencesService preferencesService)
{
super(siteHelper, siteNeighbourhoodService, request, session, currentSiteId, siteService,
serverConfigurationService, preferencesService);
}
/* (non-Javadoc)
* @see org.sakaiproject.portal.charon.DefaultSiteViewImpl#processMySites(java.util.Map)
*/
@Override
protected void processMySites()
{
boolean useDHTMLMore = Boolean.valueOf(serverConfigurationService.getBoolean("portal.use.dhtml.more", false));
if (useDHTMLMore)
{
List<Site> allSites = new ArrayList<Site>();
allSites.addAll(mySites);
allSites.addAll(moreSites);
// get Sections
Map<String, List> termsToSites = new HashMap<String, List>();
Map<String, List> tabsMoreTerms = new TreeMap<String, List>();
for (int i = 0; i < allSites.size(); i++)
{
Site site = allSites.get(i);
ResourceProperties siteProperties = site.getProperties();
String type = site.getType();
String term = null;
if ("course".equals(type))
{
term = siteProperties.getProperty("term");
if(null==term) {
term = rb.getString("moresite_unknown_term");
}
}
else if ("project".equals(type))
{
term = rb.getString("moresite_projects");
}
else if ("portfolio".equals(type))
{
term = rb.getString("moresite_portfolios");
}
else if ("admin".equals(type))
{
term = rb.getString("moresite_administration");
}
else
{
term = rb.getString("moresite_other");
}
List<Site> currentList = new ArrayList();
if (termsToSites.containsKey(term))
{
currentList = termsToSites.get(term);
termsToSites.remove(term);
}
currentList.add(site);
termsToSites.put(term, currentList);
}
class TitleSorter implements Comparator<Map>
{
public int compare(Map first, Map second)
{
if (first == null || second == null) return 0;
String firstTitle = (String) first.get("siteTitle");
String secondTitle = (String) second.get("siteTitle");
if (firstTitle != null)
return firstTitle.compareToIgnoreCase(secondTitle);
return 0;
}
}
Comparator<Map> titleSorter = new TitleSorter();
// now loop through each section and convert the Lists to maps
for (Map.Entry<String, List> entry : termsToSites.entrySet())
{
List<Site> currentList = entry.getValue();
List<Map> temp = siteHelper.convertSitesToMaps(request, currentList, prefix,
currentSiteId, myWorkspaceSiteId,
/* includeSummary */false, /* expandSite */false,
/* resetTools */"true".equalsIgnoreCase(serverConfigurationService
.getString(Portal.CONFIG_AUTO_RESET)),
/* doPages */true, /* toolContextPath */null, loggedIn);
Collections.sort(temp, titleSorter);
tabsMoreTerms.put(entry.getKey(), temp);
}
String[] termOrder = serverConfigurationService
.getStrings("portal.term.order");
List<String> tabsMoreSortedTermList = new ArrayList<String>();
// Order term column headers according to order specified in
// portal.term.order
// Filter out terms for which user is not a member of any sites
// SAK-19464 - Set tab order
// Property portal.term.order
// Course sites (sorted in order by getAcademicSessions START_DATE ASC)
// Rest of terms in alphabetic order
if (termOrder != null)
{
for (int i = 0; i < termOrder.length; i++)
{
if (tabsMoreTerms.containsKey(termOrder[i]))
{
tabsMoreSortedTermList.add(termOrder[i]);
}
}
}
if (courseManagementService != null) {
Collection<AcademicSession> sessions = courseManagementService.getAcademicSessions();
for (AcademicSession s: sessions) {
String title = s.getTitle();
if (tabsMoreTerms.containsKey(title)) {
if (!tabsMoreSortedTermList.contains(title)) {
tabsMoreSortedTermList.add(title);
}
}
}
}
Iterator i = tabsMoreTerms.keySet().iterator();
while (i.hasNext())
{
String term = (String) i.next();
if (!tabsMoreSortedTermList.contains(term))
{
tabsMoreSortedTermList.add(term);
}
}
renderContextMap.put("tabsMoreTerms", tabsMoreTerms);
renderContextMap.put("tabsMoreSortedTermList", tabsMoreSortedTermList);
}
}
}