/********************************************************************************** * $URL: https://source.sakaiproject.org/svn/metaobj/trunk/metaobj-util/tool-lib/src/java/org/sakaiproject/metaobj/shared/control/ImportStructuredArtifactDefinitionController.java $ * $Id: ImportStructuredArtifactDefinitionController.java 105079 2012-02-24 23:08:11Z ottenhoff@longsight.com $ *********************************************************************************** * * Copyright (c) 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.metaobj.shared.control; import org.sakaiproject.component.cover.ComponentManager; import org.sakaiproject.content.api.ContentResource; import org.sakaiproject.content.api.FilePickerHelper; import org.sakaiproject.entity.api.EntityManager; import org.sakaiproject.entity.api.Reference; import org.sakaiproject.exception.*; import org.sakaiproject.metaobj.shared.model.FormUploadForm; import org.sakaiproject.metaobj.shared.model.InvalidUploadException; import org.sakaiproject.metaobj.utils.mvc.intf.Controller; import org.sakaiproject.tool.api.ToolSession; import org.springframework.validation.Errors; import org.springframework.validation.Validator; import org.springframework.web.servlet.ModelAndView; import java.util.*; public class ImportStructuredArtifactDefinitionController extends AddStructuredArtifactDefinitionController implements Controller, Validator { public Object formBackingObject(Map request, Map session, Map application) { FormUploadForm backingObject = new FormUploadForm(); return backingObject; } public ModelAndView handleRequest(Object requestModel, Map request, Map session, Map application, Errors errors) { FormUploadForm templateForm = (FormUploadForm) requestModel; if (templateForm == null) { return new ModelAndView("success"); } if (templateForm.getSubmitAction() != null && templateForm.getSubmitAction().equals("pickImport")) { if (templateForm.getUploadedForm() != null && templateForm.getUploadedForm().length() > 0) { Reference ref; List files = new ArrayList(); String ids[] = templateForm.getUploadedForm().split(","); for (int i = 0; i < ids.length; i++) { try { String id = ids[i]; id = getContentHosting().resolveUuid(id); String rid = getContentHosting().getResource(id).getReference(); ref = getEntityManager().newReference(rid); files.add(ref); } catch (PermissionException e) { logger.error("", e); } catch (IdUnusedException e) { logger.error("", e); } catch (TypeException e) { logger.error("", e); } } session.put(FilePickerHelper.FILE_PICKER_ATTACHMENTS, files); } return new ModelAndView("pickImport"); } else { String view = "success"; if (templateForm.getUploadedForm().length() > 0) { String ids[] = templateForm.getUploadedForm().split(","); for (int i = 0; i < ids.length; i++) { try { String id = ids[i]; if (!getStructuredArtifactDefinitionManager().importSADResource(getWorksiteManager().getCurrentWorksiteId(), id, true)) { errors.rejectValue("uploadedForm", "error.format", "File format not recognized"); view = "failed"; } } catch (InvalidUploadException e) { logger.warn("Failed uploading template", e); errors.rejectValue(e.getFieldName(), e.getMessage(), e.getMessage()); view = "failed"; } catch(UnsupportedFileTypeException ufte) { logger.warn("Failed uploading template", ufte); errors.rejectValue("uploadedForm", ufte.getMessage(), ufte.getMessage()); view = "failed"; } catch(ImportException ie) { logger.warn("Failed uploading template", ie); errors.rejectValue("uploadedForm", ie.getMessage(), ie.getMessage()); view = "failed"; } catch (Exception e) { logger.error("Failed importing template", e); view = "failed"; } } } Map model = new Hashtable(); return new ModelAndView(view, model); } } public Map referenceData(Map request, Object command, Errors errors) { FormUploadForm templateForm = (FormUploadForm) command; Map model = new HashMap(); ToolSession session = getSessionManager().getCurrentToolSession(); if (session.getAttribute(FilePickerHelper.FILE_PICKER_CANCEL) == null && session.getAttribute(FilePickerHelper.FILE_PICKER_ATTACHMENTS) != null) { // here is where we setup the id List refs = (List) session.getAttribute(FilePickerHelper.FILE_PICKER_ATTACHMENTS); if (refs.size() >= 1) { String ids = ""; StringBuffer names = new StringBuffer(); for (Iterator iter = refs.iterator(); iter.hasNext();) { Reference ref = (Reference) iter.next(); String nodeId = getContentHosting().getUuid(ref.getId()); String id = getContentHosting().resolveUuid(nodeId); ContentResource resource = null; try { resource = getContentHosting().getResource(id); } catch (PermissionException pe) { throw new RuntimeException("Failed loading content: no permission to view file", pe); } catch (TypeException pe) { throw new RuntimeException("Wrong type", pe); } catch (IdUnusedException pe) { throw new RuntimeException("UnusedId: ", pe); } if (ids.length() > 0) { ids += ","; } ids += nodeId; names.append(resource.getProperties().getProperty(resource.getProperties().getNamePropDisplayName()) + " "); } templateForm.setUploadedForm(ids); model.put("name", names.toString()); } else { templateForm.setUploadedForm(null); } } session.removeAttribute(FilePickerHelper.FILE_PICKER_ATTACHMENTS); session.removeAttribute(FilePickerHelper.FILE_PICKER_CANCEL); session.setAttribute(FilePickerHelper.FILE_PICKER_RESOURCE_FILTER, ComponentManager.get("org.sakaiproject.content.api.ContentResourceFilter.formUploadStyleFile")); return model; } public boolean supports(Class clazz) { return (FormUploadForm.class.isAssignableFrom(clazz)); } public void validate(Object obj, Errors errors) { FormUploadForm templateForm = (FormUploadForm) obj; if (templateForm.getUploadedForm() == null && templateForm.isValidate()) { errors.rejectValue("uploadedForm", "error.required", "required"); } } /** * override to prevent pulling it from the session. * @param incomingModel * @param request * @param session * @param application * @return * @throws Exception */ public Object fillBackingObject(Object incomingModel, Map request, Map session, Map application) throws Exception { return incomingModel; } }