/********************************************************************************** * $URL: https://source.sakaiproject.org/svn/metaobj/trunk/metaobj-util/tool-lib/src/java/org/sakaiproject/metaobj/shared/control/EditXmlElementController.java $ * $Id: EditXmlElementController.java 105079 2012-02-24 23:08:11Z ottenhoff@longsight.com $ *********************************************************************************** * * Copyright (c) 2004, 2005, 2006, 2007, 2008, 2009 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.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; import org.springframework.validation.Errors; import org.springframework.web.servlet.ModelAndView; import org.sakaiproject.metaobj.utils.mvc.intf.CancelableController; import org.sakaiproject.metaobj.utils.mvc.intf.CustomCommandController; import org.sakaiproject.metaobj.utils.mvc.intf.LoadObjectController; import org.sakaiproject.metaobj.shared.model.StructuredArtifact; import org.sakaiproject.metaobj.shared.model.ElementBean; import org.sakaiproject.metaobj.shared.model.PersistenceException; import org.sakaiproject.metaobj.shared.model.Id; import org.sakaiproject.metaobj.shared.mgt.home.StructuredArtifactHomeInterface; import org.sakaiproject.metaobj.shared.mgt.WritableObjectHome; import org.sakaiproject.metaobj.shared.mgt.IdManager; import org.sakaiproject.metaobj.shared.mgt.ReadableObjectHome; import org.sakaiproject.metaobj.shared.ArtifactFinder; import org.sakaiproject.metaobj.shared.FormHelper; import org.sakaiproject.content.api.ContentHostingService; import org.sakaiproject.content.api.ResourceEditingHelper; import org.sakaiproject.content.api.FilePickerHelper; import org.sakaiproject.content.api.ResourceToolAction; import org.sakaiproject.tool.api.ToolSession; import java.util.Map; /** * Created by IntelliJ IDEA. * <p/> * User: John Ellis * <p/> * Date: Apr 20, 2004 * <p/> * Time: 3:31:25 PM * <p/> * To change this template use File | Settings | File Templates. */ public class EditXmlElementController extends XmlControllerBase implements CustomCommandController, LoadObjectController, CancelableController { protected final Log logger = LogFactory.getLog(getClass()); private ArtifactFinder artifactFinder; private IdManager idManager; public Object formBackingObject(Map request, Map session, Map application) { ElementBean returnedBean; if (session.get(EditedArtifactStorage.STORED_ARTIFACT_FLAG) == null) { if (getSchemaName(session) != null) { StructuredArtifactHomeInterface home = getSchema(session); StructuredArtifact bean = (StructuredArtifact)home.createInstance(); bean.setParentFolder((String)session.get(FormHelper.PARENT_ID_TAG)); EditedArtifactStorage sessionBean = new EditedArtifactStorage(bean.getCurrentSchema(), bean); session.put(EditedArtifactStorage.EDITED_ARTIFACT_STORAGE_SESSION_KEY, sessionBean); returnedBean = bean; } else { return new ElementBean(); } } else { EditedArtifactStorage sessionBean = (EditedArtifactStorage)session.get( EditedArtifactStorage.EDITED_ARTIFACT_STORAGE_SESSION_KEY); returnedBean = sessionBean.getCurrentElement(); } if (session.get(FilePickerHelper.FILE_PICKER_CANCEL) != null || session.get(FilePickerHelper.FILE_PICKER_ATTACHMENTS) != null) { retrieveFileAttachments(request, session, returnedBean); } return returnedBean; } public Object fillBackingObject(Object incomingModel, Map request, Map session, Map application) throws Exception { if (session.get(EditedArtifactStorage.STORED_ARTIFACT_FLAG) == null) { StructuredArtifact bean = null; if (session.get(ResourceToolAction.ACTION_PIPE) == null) { Id id; String idString = getContentHostingService().getUuid( (String) session.get(ResourceEditingHelper.ATTACHMENT_ID)); id = getIdManager().getId(idString); bean = (StructuredArtifact) getArtifactFinder().load(id); } else { ReadableObjectHome home = getSchema(session); if ( home != null ) bean = (StructuredArtifact) home.load(null); } if ( bean == null ) { logger.warn(this+".fillBackingObject schema not found (perhaps multiple submits): " + getSchemaName(session)); return new StructuredArtifact(); } session.put(ResourceEditingHelper.CREATE_SUB_TYPE, ((StructuredArtifactHomeInterface)bean.getHome()).getTypeId()); EditedArtifactStorage sessionBean = new EditedArtifactStorage(bean.getCurrentSchema(), bean); session.put(EditedArtifactStorage.EDITED_ARTIFACT_STORAGE_SESSION_KEY, sessionBean); return bean; } else { EditedArtifactStorage sessionBean = (EditedArtifactStorage)session.get( EditedArtifactStorage.EDITED_ARTIFACT_STORAGE_SESSION_KEY); return sessionBean.getCurrentElement(); } } public ModelAndView handleRequest(Object requestModel, Map request, Map session, Map application, Errors errors) { ElementBean bean = (ElementBean) requestModel; if (request.get("cancel") != null) { session.put(FormHelper.RETURN_ACTION_TAG, FormHelper.RETURN_ACTION_CANCEL); session.remove(EditedArtifactStorage.STORED_ARTIFACT_FLAG); return new ModelAndView("success"); } else if (request.get("submitButton") == null) { return handleNonSubmit(bean, request, session, application, errors); } // ignore -- perhaps multiple submits -- error logged in formBackingObject() if ( bean.getCurrentSchema() == null ) { return new ModelAndView("success"); } getValidator().validate(bean, errors, true); if (errors.hasErrors()) { logger.warn(this+"validate failed for: " + getSchemaName(session)); return new ModelAndView("success"); } WritableObjectHome home = getSchema(session); try { home.store((StructuredArtifact)bean); } catch (PersistenceException e) { errors.rejectValue(e.getField(), e.getErrorCode(), e.getErrorInfo(), e.getDefaultMessage()); } session.put(FormHelper.FORM_SAVE_SUCCESS, ((StructuredArtifact)bean).getId().getValue()); session.put(FormHelper.RETURN_REFERENCE_TAG, ((StructuredArtifact)bean).getId().getValue()); session.put(FormHelper.RETURN_ACTION_TAG, FormHelper.RETURN_ACTION_SAVE); session.remove(EditedArtifactStorage.STORED_ARTIFACT_FLAG); return new ModelAndView("success", "schema", getSchemaName(session)); } public ArtifactFinder getArtifactFinder() { return artifactFinder; } public void setArtifactFinder(ArtifactFinder artifactFinder) { this.artifactFinder = artifactFinder; } public IdManager getIdManager() { return idManager; } public void setIdManager(IdManager idManager) { this.idManager = idManager; } }