/**********************************************************************************
* $URL: https://source.sakaiproject.org/svn/metaobj/trunk/metaobj-util/tool-lib/src/java/org/sakaiproject/metaobj/shared/control/AddXmlElementController.java $
* $Id: AddXmlElementController.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.Controller;
import org.sakaiproject.metaobj.utils.mvc.intf.CancelableController;
import org.sakaiproject.metaobj.utils.mvc.intf.CustomCommandController;
import org.sakaiproject.metaobj.utils.mvc.intf.FormController;
import org.sakaiproject.metaobj.shared.model.StructuredArtifact;
import org.sakaiproject.metaobj.shared.model.ElementBean;
import org.sakaiproject.metaobj.shared.model.Artifact;
import org.sakaiproject.metaobj.shared.model.PersistenceException;
import org.sakaiproject.metaobj.shared.mgt.home.StructuredArtifactHomeInterface;
import org.sakaiproject.metaobj.shared.mgt.WritableObjectHome;
import org.sakaiproject.metaobj.shared.FormHelper;
import org.sakaiproject.tool.api.ToolSession;
import org.sakaiproject.content.api.FilePickerHelper;
import java.util.Map;
import java.util.Hashtable;
/**
* Created by IntelliJ IDEA.
* <p/>
* User: John Ellis
* <p/>
* Date: Apr 20, 2004
* <p/>
* Time: 3:31:02 PM
* <p/>
* To change this template use File | Settings | File Templates.
*/
public class AddXmlElementController extends XmlControllerBase
implements Controller, CustomCommandController, CancelableController {
protected final Log logger = LogFactory.getLog(getClass());
public Object formBackingObject(Map request, Map session, Map application) {
ElementBean returnedBean;
if (session.get(EditedArtifactStorage.STORED_ARTIFACT_FLAG) == null) {
StructuredArtifactHomeInterface home = getSchema(session);
if ( home == null || home.getParentHome() == null ) {
logger.error(this+".formBackingObject schema not found (perhaps multiple submits): " + getSchemaName(session));
session.remove(EditedArtifactStorage.EDITED_ARTIFACT_STORAGE_SESSION_KEY);
return new ElementBean();
}
StructuredArtifact bean = (StructuredArtifact)home.createInstance();
if (session.get(FormHelper.NEW_FORM_DISPLAY_NAME_TAG) != null) {
bean.setDisplayName((String) session.get(FormHelper.NEW_FORM_DISPLAY_NAME_TAG));
}
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 {
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 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(FormHelper.PREVIEW_HOME_TAG);
session.remove(EditedArtifactStorage.STORED_ARTIFACT_FLAG);
return new ModelAndView("success");
}
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");
}
StructuredArtifact artifact = (StructuredArtifact)bean;
Artifact newArtifact;
if (session.get(FormHelper.PREVIEW_HOME_TAG) != null) {
request.remove("fileHelper");
Map model = new Hashtable();
model.put("success", "validationSuccessful");
return handleNonSubmit(bean, request, session, application, errors, model);
}
String externalType = null;
try {
WritableObjectHome home = getSchema(session);
externalType = home.getExternalType();
newArtifact = home.store(artifact);
if (newArtifact.getId() != null) {
session.put(FormHelper.FORM_SAVE_SUCCESS, newArtifact.getId().getValue());
session.put(FormHelper.RETURN_REFERENCE_TAG, newArtifact.getId().getValue());
session.put(FormHelper.RETURN_ACTION_TAG, FormHelper.RETURN_ACTION_SAVE);
}
} catch (PersistenceException e) {
logger.warn("Could not create instance of form typed: " + (externalType == null ? "[UNKNOWN]" : externalType));
errors.rejectValue(e.getField(), e.getErrorCode(), e.getErrorInfo(),
e.getDefaultMessage());
}
session.remove(EditedArtifactStorage.STORED_ARTIFACT_FLAG);
return new ModelAndView("success");
}
}