/**********************************************************************************
* $URL: https://source.sakaiproject.org/svn/osp/trunk/matrix/tool/src/java/org/theospi/portfolio/matrix/control/ImportScaffoldingController.java $
* $Id: ImportScaffoldingController.java 131548 2013-11-14 16:42:13Z dsobiera@indiana.edu $
***********************************************************************************
*
* Copyright (c) 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.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 org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
import org.sakaiproject.component.cover.ComponentManager;
import org.sakaiproject.content.api.FilePickerHelper;
import org.sakaiproject.entity.api.Reference;
import org.sakaiproject.metaobj.shared.mgt.HomeFactory;
import org.sakaiproject.metaobj.shared.model.InvalidUploadException;
import org.sakaiproject.metaobj.shared.model.OspException;
import org.sakaiproject.metaobj.utils.mvc.intf.Controller;
import org.sakaiproject.metaobj.utils.mvc.intf.FormController;
import org.sakaiproject.site.api.SiteService;
import org.sakaiproject.tool.api.SessionManager;
import org.sakaiproject.tool.api.ToolManager;
import org.sakaiproject.tool.api.ToolSession;
import org.sakaiproject.util.ResourceLoader;
import org.springframework.validation.Errors;
import org.springframework.web.servlet.ModelAndView;
import org.theospi.portfolio.matrix.MatrixManager;
import org.theospi.portfolio.matrix.model.Scaffolding;
import org.theospi.portfolio.matrix.model.ScaffoldingUploadForm;
import org.theospi.portfolio.shared.model.Node;
import org.theospi.portfolio.matrix.model.ScaffoldingCell;
import org.theospi.portfolio.matrix.model.WizardPageDefinition;
import org.theospi.portfolio.assignment.AssignmentHelper;
public class ImportScaffoldingController implements Controller, FormController {
protected final transient Log logger = LogFactory.getLog(getClass());
private MatrixManager matrixManager;
private HomeFactory homeFactory;
private SessionManager sessionManager;
private ToolManager toolManager;
private SiteService siteService;
private static ResourceLoader rb = new ResourceLoader("org.theospi.portfolio.matrix.bundle.Messages");
public Map referenceData(Map request, Object command, Errors errors) {
ScaffoldingUploadForm scaffoldingForm = (ScaffoldingUploadForm)command;
ToolSession session = getSessionManager().getCurrentToolSession();
if (session.getAttribute(FilePickerHelper.FILE_PICKER_CANCEL) == null &&
session.getAttribute(FilePickerHelper.FILE_PICKER_ATTACHMENTS) != null) {
List refs = (List)session.getAttribute(FilePickerHelper.FILE_PICKER_ATTACHMENTS);
Reference ref = (Reference)refs.get(0);
scaffoldingForm.setUploadedScaffolding(ref);
Node file = getMatrixManager().getNode(ref);
scaffoldingForm.setScaffoldingFileName(file.getDisplayName());
}
session.removeAttribute(FilePickerHelper.FILE_PICKER_ATTACHMENTS);
session.removeAttribute(FilePickerHelper.FILE_PICKER_CANCEL);
return null;
}
public ModelAndView handleRequest(Object requestModel, Map request, Map session,
Map application, Errors errors) {
String formAction = (String)request.get("formAction");
if (formAction.equals("filePicker")) {
session.put(FilePickerHelper.FILE_PICKER_RESOURCE_FILTER,
ComponentManager.get("org.sakaiproject.content.api.ContentResourceFilter.scaffoldingImportFile"));
session.put(FilePickerHelper.FILE_PICKER_MAX_ATTACHMENTS, Integer.valueOf(1));
return new ModelAndView("filePicker");
}
session.remove(FilePickerHelper.FILE_PICKER_RESOURCE_FILTER);
session.remove(FilePickerHelper.FILE_PICKER_MAX_ATTACHMENTS);
ScaffoldingUploadForm scaffoldingForm = (ScaffoldingUploadForm)requestModel;
if (scaffoldingForm.getUploadedScaffolding() == null) {
errors.rejectValue("uploadedScaffolding", "Required", "required");
return null;
}
Scaffolding scaffolding = null;
List<String> formUploadErrors = new ArrayList<String>();
try {
scaffolding = getMatrixManager().uploadScaffolding(
scaffoldingForm.getUploadedScaffolding(), getToolManager().getCurrentPlacement().getContext(), formUploadErrors, scaffoldingForm.isIgnoreInvalidForms());
if(scaffolding != null){
validateScaffolding( scaffolding );
}else if(formUploadErrors.size() > 0){
String invalidFormsList = "";
for (Iterator iterator = formUploadErrors.iterator(); iterator
.hasNext();) {
String invalidForm = (String) iterator.next();
invalidFormsList += invalidForm;
if(iterator.hasNext())
invalidFormsList += ", ";
}
errors.rejectValue("ignoreInvalidForms", "InvalidForm", invalidFormsList);
((ScaffoldingUploadForm) requestModel).setIgnoreInvalidForms(true);
return new ModelAndView("failed", "uploadForm", requestModel);
}
} catch (InvalidUploadException e) {
logger.warn("Failed uploading scaffolding", e);
errors.rejectValue(e.getFieldName(), e.getMessage(), e.getMessage());
return null;
} catch (Exception e) {
logger.error("Failed importing scaffolding", e);
throw new OspException(e);
}
return new ModelAndView("success", "scaffolding_id", scaffolding.getId());
}
/**
** Filter out assignments outside of this worksite
**/
protected void validateScaffolding( Scaffolding scaffolding ) {
for (Iterator iter=scaffolding.getScaffoldingCells().iterator(); iter.hasNext();) {
ScaffoldingCell sCell = (ScaffoldingCell)iter.next();
WizardPageDefinition wpd = sCell.getWizardPageDefinition();
List<String> attachments = wpd.getAttachments();
attachments =
AssignmentHelper.filterAssignmentsBySite( attachments,
wpd.getSiteId() );
wpd.setAttachments(attachments);
}
}
/**
* @return Returns the matrixManager.
*/
public MatrixManager getMatrixManager() {
return matrixManager;
}
/**
* @param matrixManager The matrixManager to set.
*/
public void setMatrixManager(MatrixManager matrixManager) {
this.matrixManager = matrixManager;
}
/**
* @return Returns the homeFactory.
*/
public HomeFactory getHomeFactory() {
return homeFactory;
}
/**
* @param homeFactory The homeFactory to set.
*/
public void setHomeFactory(HomeFactory homeFactory) {
this.homeFactory = homeFactory;
}
public SessionManager getSessionManager() {
return sessionManager;
}
public void setSessionManager(SessionManager sessionManager) {
this.sessionManager = sessionManager;
}
public ToolManager getToolManager() {
return toolManager;
}
public void setToolManager(ToolManager toolManager) {
this.toolManager = toolManager;
}
public SiteService getSiteService() {
return siteService;
}
public void setSiteService(SiteService siteService) {
this.siteService = siteService;
}
}