/********************************************************************************** * $URL:https://source.sakaiproject.org/svn/osp/trunk/presentation/tool/src/java/org/theospi/portfolio/presentation/control/PresentationValidator.java $ * $Id:PresentationValidator.java 9134 2006-05-08 20:28:42Z chmaurer@iupui.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.presentation.control; import org.jdom.Element; import org.jdom.IllegalNameException; import org.sakaiproject.metaobj.utils.TypedMap; import org.springframework.validation.Errors; import org.theospi.portfolio.presentation.model.Presentation; import org.theospi.portfolio.presentation.model.PresentationItem; import org.theospi.portfolio.presentation.model.PresentationItemDefinition; import org.theospi.portfolio.presentation.model.PresentationLayout; import org.theospi.portfolio.presentation.model.PresentationTemplate; import org.theospi.portfolio.presentation.model.TemplateFileRef; import org.theospi.utils.mvc.impl.ValidatorBase; /** * Created by IntelliJ IDEA. * User: John Ellis * Date: Apr 23, 2004 * Time: 2:37:33 PM * To change this template use File | Settings | File Templates. */ public class PresentationValidator extends ValidatorBase { /** * Return whether or not this object can validate objects * of the given class. */ public boolean supports(Class clazz) { if (PresentationTemplate.class.isAssignableFrom(clazz)) return true; if (PresentationItemDefinition.class.isAssignableFrom(clazz)) return true; if (Presentation.class.isAssignableFrom(clazz)) return true; if (PresentationItem.class.isAssignableFrom(clazz)) return true; if (TemplateFileRef.class.isAssignableFrom(clazz)) return true; if (PresentationLayout.class.isAssignableFrom(clazz)) return true; return false; } /** * Validate a presentation object, which must be of a class for which * the supports() method returned true. * * @param obj Populated object to validate * @param errors Errors object we're building. May contain * errors for this field relating to types. */ public void validate(Object obj, Errors errors) { if (obj instanceof PresentationTemplate) validateTemplate(obj, errors); if (obj instanceof PresentationItem) validateItem(obj, errors); if (obj instanceof PresentationItemDefinition) validateItemDefinition(obj, errors); if (obj instanceof Presentation) validatePresentation(obj, errors); if (obj instanceof TemplateFileRef) validateTemplateFileRef((TemplateFileRef)obj, errors); if (obj instanceof PresentationLayout) validateLayout((PresentationLayout)obj, errors); } protected void validateTemplateFileRef(TemplateFileRef templateFileRef, Errors errors) { if (templateFileRef.getUsage() == null || templateFileRef.getUsage().equals("")) { errors.rejectValue("usage", "error.required", "required"); } else if (!isValidXMLElementName(templateFileRef.getUsage())){ errors.rejectValue("usage", "error.invalidXmlElementName", "invalid name"); } if (templateFileRef.getFileId() == null) { errors.rejectValue("fileId", "error.required", "required"); } } protected void validateTemplateFirstPage(Object obj, Errors errors){ PresentationTemplate template = (PresentationTemplate) obj; if (template.getName() == null || template.getName().length() == 0) { errors.rejectValue("name", "error.required", "required"); } if (template.getDescription() != null && template.getDescription().length() > 255) { errors.rejectValue("description", "error.lengthExceded", new Object[]{"255"}, "Value must be less than {0} characters"); } } protected void validateTemplateSecondPage(Object obj, Errors errors){ PresentationTemplate template = (PresentationTemplate) obj; if (template.getRenderer() == null || template.getRenderer().getValue() == null || template.getRenderer().getValue().length() == 0) { errors.rejectValue("renderer", "error.required", "required"); } } protected void validateTemplateThirdPage(Object obj, Errors errors){ PresentationTemplate template = (PresentationTemplate) obj; if (template.getItem().getAction() != null && template.getItem().getAction().equals("addItem")){ if (template.getItem().getType() == null || template.getItem().getType().length() == 0){ errors.rejectValue("item.type", "error.required", "required"); } if (template.getItem().getName() == null || template.getItem().getName().length() == 0){ errors.rejectValue("item.name", "error.required", "required"); } else if (!isValidXMLElementName(template.getItem().getName())){ errors.rejectValue("item.name", "error.invalidXmlElementName", "invalid name"); } if (template.getItem().getTitle() == null || template.getItem().getTitle().length() == 0){ errors.rejectValue("item.title", "error.required", "required"); } } } protected void validateTemplateFourthPage(Object obj, Errors errors){ PresentationTemplate template = (PresentationTemplate) obj; if (template.getFileRef().getAction() != null && template.getFileRef().getAction().equals("addFile")){ if (template.getFileRef().getUsage() == null || template.getFileRef().getUsage().length() == 0){ errors.rejectValue("fileRef.usage", "error.required", "required"); } else if (!isValidXMLElementName(template.getFileRef().getUsage())){ errors.rejectValue("fileRef.usage", "error.invalidXmlElementName", "invalid name"); } if (template.getFileRef().getFileId() == null || template.getFileRef().getFileId().length() == 0){ errors.rejectValue("fileRef.fileId", "error.required", "required"); } } } protected void validateTemplate(Object obj, Errors errors) { validateTemplateFirstPage(obj, errors); validateTemplateSecondPage(obj, errors); validateTemplateThirdPage(obj, errors); validateTemplateFourthPage(obj, errors); } protected void validateItem(Object obj, Errors errors) { PresentationItem item = (PresentationItem) obj; } protected boolean isValidXMLElementName(String name){ try { Element element = new Element(name); } catch (IllegalNameException e){ return false; } return true; } protected void validateItemDefinition(Object obj, Errors errors) { PresentationItemDefinition itemDef = (PresentationItemDefinition) obj; if (itemDef.getName() == null || itemDef.getName().length() == 0) { errors.rejectValue("name", "error.required", "name is required"); } if (itemDef.getTitle() == null || itemDef.getTitle().length() == 0) { errors.rejectValue("title", "error.required", "title is required"); } } protected void validatePresentation(Object obj, Errors errors) { validatePresentationInitialPage(obj, errors); validatePresentationFirstPage(obj, errors); validatePresentationSecondPage(obj, errors); validatePresentationThirdPage(obj, errors); } protected void validatePresentationInitialPage(Object obj, Errors errors) { Presentation presentation = (Presentation) obj; if (!presentation.getPresentationType().equals(Presentation.FREEFORM_TYPE)) { if (presentation.getTemplate().getId() == null || presentation.getTemplate().getId().getValue() == null || presentation.getTemplate().getId().getValue().length() == 0) { errors.rejectValue("template.id", "error.portfolioTypeRequired", "You must select a portfolio type."); } } } protected void validatePresentationFirstPage(Object obj, Errors errors) { Presentation presentation = (Presentation) obj; if (presentation.getName() == null || presentation.getName().length() == 0) { errors.rejectValue("name", "error.required", "name is required"); } else { if (presentation.getName().length() > 255) { errors.rejectValue("name", "error.lengthExceded", new Object[]{"255"}, "Value must be less than {0} characters"); } } //FIXME: This has got to go -- changing values in validation is a bad idea if (presentation.getPresentationType().equals(Presentation.FREEFORM_TYPE)) { presentation.getTemplate().setId(Presentation.FREEFORM_TEMPLATE_ID); } if (presentation.getTemplate().getId() == null || presentation.getTemplate().getId().getValue() == null || presentation.getTemplate().getId().getValue().length() == 0) { errors.rejectValue("template.id", "error.required", "template is required"); } if (presentation.getExpiresOnBean() != null){ presentation.setExpiresOn(presentation.getExpiresOnBean().getDate()); } if (presentation.getDescription() != null && presentation.getDescription().length() > 255) { errors.rejectValue("description", "error.lengthExceded", new Object[]{"255"}, "Value must be less than {0} characters"); } } protected void validatePresentationSecondPage(Object obj, Errors errors) { Presentation presentation = (Presentation) obj; } protected void validatePresentationThirdPage(Object obj, Errors errors) { Presentation presentation = (Presentation) obj; } public void validatePresentationProperties(Presentation presentation, Errors errors) { TypedMap properties = presentation.getProperties(); if (properties != null && presentation.getTemplate().getDocumentRoot().length() != 0) { PresentationPropertiesValidator propertyValidator = new PresentationPropertiesValidator(); pushNestedPath("properties.", errors); propertyValidator.validate(properties, errors); popNestedPath(errors); } } protected void validateLayout(PresentationLayout layout, Errors errors) { if (layout.isValidate()) { if (layout.getName() == null || layout.getName().length() == 0) { errors.rejectValue("name", "error.required", "name is required"); } if (layout.getXhtmlFileId() == null || layout.getXhtmlFileId().getValue() == null || layout.getXhtmlFileId().getValue().length() == 0) { errors.rejectValue("xhtmlFileId", "error.required", "XHTML file is required"); } if (layout.getDescription() != null && layout.getDescription().length() > 255) { errors.rejectValue("description", "error.lengthExceded", new Object[]{"255"}, "Value must be less than {0} characters"); } } } }