/**********************************************************************************
* $URL: https://source.sakaiproject.org/svn/osp/trunk/matrix/tool/src/java/org/theospi/portfolio/matrix/control/DeleteScaffoldingConfirmationController.java $
* $Id: DeleteScaffoldingConfirmationController.java 131548 2013-11-14 16:42:13Z dsobiera@indiana.edu $
***********************************************************************************
*
* Copyright (c) 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.theospi.portfolio.matrix.control;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.Iterator;
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.exception.PermissionException;
import org.sakaiproject.metaobj.security.AuthenticationManager;
import org.sakaiproject.metaobj.security.AuthorizationFailedException;
import org.sakaiproject.metaobj.shared.mgt.IdManager;
import org.sakaiproject.metaobj.shared.model.Id;
import org.sakaiproject.metaobj.utils.mvc.intf.Controller;
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.springframework.validation.Errors;
import org.springframework.web.servlet.ModelAndView;
import org.theospi.portfolio.matrix.MatrixFunctionConstants;
import org.theospi.portfolio.matrix.MatrixManager;
import org.theospi.portfolio.matrix.model.Matrix;
import org.theospi.portfolio.matrix.model.Scaffolding;
import org.theospi.portfolio.matrix.model.ScaffoldingCell;
import org.theospi.portfolio.security.AuthorizationFacade;
import org.theospi.portfolio.wizard.taggable.api.WizardActivityProducer;
/**
* Delete scaffolding and associated matrix data if user confirms
*/
public class DeleteScaffoldingConfirmationController implements Controller {
private MatrixManager matrixManager = null;
private IdManager idManager = null;
private AuthorizationFacade authzManager = null;
private AuthenticationManager authnManager = null;
private TaggingManager taggingManager = null;
private WizardActivityProducer wizardActivityProducer = null;
private LinkManager linkManager = null;
private final Log logger = LogFactory.getLog(getClass());
/*
* (non-Javadoc)
*
* @see org.theospi.utils.mvc.intf.Controller#handleRequest(java.lang.Object,
* java.util.Map, java.util.Map, java.util.Map,
* org.springframework.validation.Errors)
*/
public ModelAndView handleRequest(Object requestModel, Map request,
Map session, Map application, Errors errors) {
String viewName = "success";
Id id = idManager.getId((String) request.get("scaffolding_id"));
Scaffolding scaffolding = getMatrixManager().getScaffolding(id);
Map model = new HashMap();
model.put("scaffolding_published", scaffolding.isPublished());
int linkedSitesNum = 0, totalLinksNum = 0, linkedCellsNum = 0;
try {
List<String> uniqueSites = new ArrayList<String>();
Set<ScaffoldingCell> sCells = getMatrixManager().getScaffoldingCells(scaffolding.getId());
//go through each cell and look up the links to that cell
for (Iterator iterator = sCells.iterator(); iterator.hasNext();) {
ScaffoldingCell sCell = (ScaffoldingCell) iterator.next();
List<Link> linksList = getLinkManager().getLinks(sCell.getWizardPageDefinition().getReference(), true);
if (linksList.size() > 0)
linkedCellsNum++;
for (Iterator iterator2 = linksList.iterator(); iterator2.hasNext();) {
//for each link check to see if the site is a new site and increment counter
Link link = (Link) iterator2.next();
if(!uniqueSites.contains(link.getActivityRef())){
//if activity already exists, then we know the site already exists
uniqueSites.add(link.getActivityRef());
String context = getTaggingManager().getContext(link.getActivityRef());
if(!uniqueSites.contains(context)){
//if this is a new site, then increment counter
uniqueSites.add(context);
linkedSitesNum++;
}
}
}
totalLinksNum += linksList.size();
}
} catch (PermissionException e1) {
e1.printStackTrace();
}
model.put("linkedSitesNum", linkedSitesNum);
model.put("totalLinksNum", totalLinksNum);
model.put("totalLinkedCells", linkedCellsNum);
String cancel = (String) request.get("cancel");
String doit = (String) request.get("continue");
if (cancel != null)
return new ModelAndView("cancel", model);
else if (doit == null)
return new ModelAndView("delete", model);
try{
getAuthzManager().checkPermission(
MatrixFunctionConstants.DELETE_SCAFFOLDING_ANY, id);
}catch(AuthorizationFailedException e){
//if exception thrown, then check to see if both: user owns matrix and has permission to
//delete own matrices
getAuthzManager().checkPermission(
MatrixFunctionConstants.DELETE_SCAFFOLDING_OWN, id);
}
if (scaffolding.getExposedPageId() != null
&& !scaffolding.getExposedPageId().equals("")) {
getMatrixManager().removeExposedMatrixTool(scaffolding);
}
// First delete any associated matrix data (if published scaffolding)
List matrices = getMatrixManager().getMatrices(id);
for (Iterator matrixIt = matrices.iterator(); matrixIt.hasNext();) {
Matrix matrix = (Matrix) matrixIt.next();
getMatrixManager().deleteMatrix(matrix.getId());
}
// if taggable, remove tags for all page defs
try {
if (getTaggingManager().isTaggable()) {
Set<ScaffoldingCell> cells = getMatrixManager().getScaffoldingCells(scaffolding.getId());
for (ScaffoldingCell cell : cells) {
for (TaggingProvider provider : getTaggingManager()
.getProviders()) {
//Remove stuff where the cells are the activities
TaggableActivity activity = getWizardActivityProducer()
.getActivity(cell.getWizardPageDefinition());
provider.removeTags(activity);
//Remove stuff where the cell is the linked item
List<Link> links = getLinkManager().getLinks(cell.getWizardPageDefinition().getReference(), true);
for (Link link : links) {
getLinkManager().removeLink(link);
}
}
}
}
} catch (PermissionException pe) {
logger.error(pe.getMessage(), pe);
}
// Next delete the scaffolding
getMatrixManager().deleteScaffolding(id);
return new ModelAndView("success", model);
}
public AuthorizationFacade getAuthzManager() {
return authzManager;
}
public void setAuthzManager(AuthorizationFacade facade) {
authzManager = facade;
}
public IdManager getIdManager() {
return idManager;
}
public void setIdManager(IdManager idManager) {
this.idManager = idManager;
}
public MatrixManager getMatrixManager() {
return matrixManager;
}
public void setMatrixManager(MatrixManager matrixManager) {
this.matrixManager = matrixManager;
}
public TaggingManager getTaggingManager() {
return taggingManager;
}
public void setTaggingManager(TaggingManager taggingManager) {
this.taggingManager = taggingManager;
}
public WizardActivityProducer getWizardActivityProducer() {
return wizardActivityProducer;
}
public void setWizardActivityProducer(
WizardActivityProducer wizardActivityProducer) {
this.wizardActivityProducer = wizardActivityProducer;
}
public AuthenticationManager getAuthnManager() {
return authnManager;
}
public void setAuthnManager(AuthenticationManager authnManager) {
this.authnManager = authnManager;
}
public LinkManager getLinkManager() {
return linkManager;
}
public void setLinkManager(LinkManager linkManager) {
this.linkManager = linkManager;
}
}