/**********************************************************************************
* $URL$
* $Id$
***********************************************************************************
*
* Copyright (c) 2008 The Sakai Foundation.
*
* Licensed under the Educational Community License, Version 1.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/ecl1.php
*
* 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.theospi.portfolio.matrix.control;
import java.util.ArrayList;
import java.util.Collections;
import java.util.Comparator;
import java.util.HashMap;
import java.util.HashSet;
import java.util.List;
import java.util.Map;
import java.util.Set;
import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
import org.sakaiproject.entity.api.Reference;
import org.sakaiproject.entity.api.EntityManager;
import org.sakaiproject.exception.PermissionException;
import org.sakaiproject.metaobj.shared.model.Id;
import org.sakaiproject.site.api.Site;
import org.sakaiproject.taggable.api.Link;
import org.sakaiproject.taggable.api.LinkManager;
import org.sakaiproject.taggable.api.TaggableActivity;
import org.sakaiproject.taggable.api.TaggingManager;
import org.sakaiproject.taggable.api.TaggingProvider;
import org.sakaiproject.util.Validator;
import org.springframework.validation.Errors;
import org.springframework.web.servlet.ModelAndView;
import org.theospi.portfolio.matrix.model.WizardPageDefinition;
import org.theospi.portfolio.tagging.api.MatrixTaggingProvider;
public class ListPageActivities extends AbstractMatrixController
{
protected final Log logger = LogFactory.getLog(getClass());
private TaggingManager taggingManager;
private LinkManager linkManager;
private TaggingProvider matrixTaggingProvider;
private EntityManager entityManager;
public ModelAndView handleRequest(Object requestModel, Map request, Map session,
Map application, Errors errors)
{
String criteriaRef = (String) request.get("criteriaRef");
Reference ref = getEntityManager().newReference(criteriaRef);
Id pageId = getIdManager().getId(ref.getId());
String submit = (String) request.get("submit");
if (submit != null && "Back".equalsIgnoreCase(submit)) {
return new ModelAndView("goback", EditedScaffoldingStorage.STORED_SCAFFOLDING_FLAG, "true");
}
Map<String, Object> model = new HashMap<String, Object>();
Set<WrappedActivity> activities = new HashSet<WrappedActivity>();
model.put("criteriaRef", criteriaRef);
String siteId = getWorksiteManager().getCurrentWorksiteId().getValue();
model.put("decoWrapper", "ospMatrix_" + siteId + "_" + pageId);
WizardPageDefinition wpd = getMatrixManager().getWizardPageDefinition(pageId);
model.put("pageTitle", Validator.escapeHtml(wpd.getTitle()));
Map<String, String> siteNames = new HashMap<String, String>();
try
{
List<Link> links = getLinkManager().getLinks(criteriaRef, true);
for (Link link : links) {
TaggableActivity activity = getTaggingManager().getActivity(link.getActivityRef(), getMatrixTaggingProvider(), criteriaRef);
if (activity != null) {
activities.add(new WrappedActivity(activity, lookupSiteName(activity.getContext(), siteNames)));
}
// CWM - 4/22/2013
// Commenting this out in case the provider has just been disabled.
// We'll keep the link around so that if the provider gets re-enabled, it'll show up again
// else {
// logger.warn("Link with ref " + link.getActivityRef() + " no longer exists. Removing link.");
// getLinkManager().removeLink(link);
// }
}
}
catch (PermissionException e)
{
logger.warn("unable to get links for criteriaRef " + criteriaRef, e);
}
List<WrappedActivity> activityList = new ArrayList<WrappedActivity>(activities);
Collections.sort(activityList, activityComparator);
model.put("pageActivities", activityList);
return new ModelAndView("success", model);
}
/**
* Look for the site name in the map, or go to the site service to find it
* @param context
* @param siteNames
* @return
*/
private String lookupSiteName(String context, Map<String, String> siteNames) {
String siteName = siteNames.get(context);
if (siteName == null) {
Site site = getWorksiteManager().getSite(context);
if (site != null) {
siteName = site.getTitle();
siteNames.put(context, siteName);
}
}
return siteName;
}
public TaggingManager getTaggingManager() {
return taggingManager;
}
public void setTaggingManager(TaggingManager taggingManager) {
this.taggingManager = taggingManager;
}
public LinkManager getLinkManager()
{
return linkManager;
}
public void setLinkManager(LinkManager linkManager)
{
this.linkManager = linkManager;
}
protected TaggingProvider getMatrixTaggingProvider() {
if (matrixTaggingProvider == null) {
matrixTaggingProvider = getTaggingManager().findProviderById(
MatrixTaggingProvider.PROVIDER_ID);
}
return matrixTaggingProvider;
}
public void setMatrixTaggingProvider(TaggingProvider matrixTaggingProvider) {
this.matrixTaggingProvider = matrixTaggingProvider;
}
public EntityManager getEntityManager()
{
return entityManager;
}
public void setEntityManager(EntityManager entityManager)
{
this.entityManager = entityManager;
}
public class WrappedActivity {
private String contextName;
private TaggableActivity activity;
public WrappedActivity() {}
public WrappedActivity(TaggableActivity activity, String contextName) {
this.activity = activity;
this.contextName = contextName;
}
public String getContextName()
{
return contextName;
}
public void setContextName(String contextName)
{
this.contextName = contextName;
}
public TaggableActivity getActivity()
{
return activity;
}
public void setActivity(TaggableActivity activity)
{
this.activity = activity;
}
}
public static Comparator<WrappedActivity> activityComparator;
static {
activityComparator = new Comparator<WrappedActivity>() {
public int compare(WrappedActivity o1, WrappedActivity o2) {
return o1.getActivity().getTitle().toLowerCase().compareTo(
o2.getActivity().getTitle().toLowerCase());
}
};
}
}