/**********************************************************************************
* $URL: https://source.sakaiproject.org/svn/metaobj/trunk/metaobj-util/tool-lib/src/java/org/sakaiproject/metaobj/shared/control/EditStructuredArtifactDefinitionController.java $
* $Id: EditStructuredArtifactDefinitionController.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 java.util.Collection;
import java.util.Iterator;
import java.util.Map;
import org.sakaiproject.authz.api.SecurityAdvisor;
import org.sakaiproject.authz.api.SecurityService;
import org.sakaiproject.metaobj.shared.ArtifactFinder;
import org.sakaiproject.metaobj.shared.SharedFunctionConstants;
import org.sakaiproject.metaobj.shared.mgt.StructuredArtifactDefinitionManager;
import org.sakaiproject.metaobj.shared.model.Agent;
import org.sakaiproject.metaobj.shared.model.PersistenceException;
import org.sakaiproject.metaobj.shared.model.StructuredArtifact;
import org.sakaiproject.metaobj.shared.model.StructuredArtifactDefinitionBean;
import org.sakaiproject.metaobj.utils.mvc.intf.LoadObjectController;
import org.springframework.validation.BindException;
import org.springframework.validation.Errors;
import org.springframework.validation.ObjectError;
public class EditStructuredArtifactDefinitionController extends AddStructuredArtifactDefinitionController
implements LoadObjectController {
private ArtifactFinder artifactFinder;
private SecurityService securityService;
public Object fillBackingObject(Object incomingModel, Map request, Map session, Map application) throws Exception {
if (session.get(StructuredArtifactDefinitionManager.SAD_SESSION_TAG) != null) {
return session.remove(StructuredArtifactDefinitionManager.SAD_SESSION_TAG);
}
StructuredArtifactDefinitionBean home = (StructuredArtifactDefinitionBean) incomingModel;
home = getStructuredArtifactDefinitionManager().loadHome(home.getId());
return home;
}
protected void save(StructuredArtifactDefinitionBean sad, Errors errors) {
//check to see if you have edit permissions
boolean isAllowed = isAllowed(SharedFunctionConstants.EDIT_ARTIFACT_DEF);
Agent currentAgent = getAuthManager().getAgent();
//TODO verify user is system admin, if editting global SAD
if (isAllowed || currentAgent.getId().getValue().equals(sad.getOwner().getId().getValue())) {
// todo this should all be done on the server
// check only if new xsd has been submitted
if (sad.getSchemaFile() != null) {
String type = sad.getType().getId().getValue();
getSecurityService().pushAdvisor(new SecurityAdvisor() {
public SecurityAdvice isAllowed(String userId, String function, String reference) {
return SecurityAdvice.ALLOWED;
}
});
try {
Collection artifacts = artifactFinder.findByType(type);
StructuredArtifactValidator validator = new StructuredArtifactValidator();
// validate every artifact against new xsd to determine
// whether or not an xsl conversion file is necessary
for (Iterator i = artifacts.iterator(); i.hasNext();) {
Object obj = i.next();
if (obj instanceof StructuredArtifact) {
StructuredArtifact artifact = (StructuredArtifact)obj;
artifact.setHome(getStructuredArtifactDefinitionManager().convertToHome(sad));
Errors artifactErrors = new BindException(artifact, "bean");
validator.validate(artifact, artifactErrors);
if (artifactErrors.getErrorCount() > 0) {
if (sad.getXslConversionFileId() == null ||
sad.getXslConversionFileId().getValue().length() == 0) {
errors.rejectValue("schemaFile",
"invalid_schema_file_edit",
"key missing: invalid_schema_file_edit");
for (Iterator x=artifactErrors.getAllErrors().iterator();x.hasNext();){
ObjectError error = (ObjectError) x.next();
logger.warn(error.toString());
}
return;
} else {
sad.setRequiresXslFile(true);
break;
}
}
}
}
}
finally {
getSecurityService().popAdvisor();
}
}
try {
getStructuredArtifactDefinitionManager().save(sad);
}
catch (PersistenceException e) {
errors.rejectValue(e.getField(), e.getErrorCode(), e.getErrorInfo(),
e.getDefaultMessage());
}
}
else {
errors.rejectValue("id", "not_allowed", new Object[] {},
"Not allowed to delete");
}
}
public ArtifactFinder getArtifactFinder() {
return artifactFinder;
}
public void setArtifactFinder(ArtifactFinder artifactFinder) {
this.artifactFinder = artifactFinder;
}
public SecurityService getSecurityService() {
return securityService;
}
public void setSecurityService(SecurityService securityService) {
this.securityService = securityService;
}
}