/* * The Kuali Financial System, a comprehensive financial management system for higher education. * * Copyright 2005-2014 The Kuali Foundation * * This program is free software: you can redistribute it and/or modify * it under the terms of the GNU Affero General Public License as * published by the Free Software Foundation, either version 3 of the * License, or (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Affero General Public License for more details. * * You should have received a copy of the GNU Affero General Public License * along with this program. If not, see <http://www.gnu.org/licenses/>. */ package org.kuali.kfs.sys.document.validation.impl; import java.util.List; import org.kuali.kfs.sys.document.validation.Validation; import org.kuali.kfs.sys.document.validation.event.AttributedDocumentEvent; /** * This validation represents a hiearchy of validations */ public class CompositeValidation implements Validation { private static org.apache.log4j.Logger LOG = org.apache.log4j.Logger.getLogger(CompositeValidation.class); protected List<Validation> subValidations; protected boolean shouldQuitOnFail = false; /** * Validates each sub-validation in turn, returning the cumulative effect of each * @see org.kuali.kfs.rules.Validation#validate(java.lang.Object[]) */ public boolean validate(AttributedDocumentEvent event) { if (subValidations == null) { throw new IllegalStateException("A composite validation must have children validations"); } boolean result = true; boolean currResult; for (Validation validation: subValidations) { currResult = validation.stageValidation(event); result &= currResult; if(!currResult) { if ( LOG.isDebugEnabled() ) { LOG.debug(validation.getClass() + " failed"); } } if (!currResult && validation.shouldQuitOnFail()) { break; } } return result; } /** * Just call validate! * @see org.kuali.kfs.sys.document.validation.Validation#stageValidation(org.kuali.kfs.sys.document.validation.event.AttributedDocumentEvent) */ public boolean stageValidation(AttributedDocumentEvent event) { return validate(event); } /** * Returns the List of validations to test * @return a List of validations to test */ public List<Validation> getValidations() { return this.subValidations; } /** * Sets the List of validations to test * @param validations a List of validations to test against */ public void setValidations(List<Validation> validations) { this.subValidations = validations; } /** * Gets the shouldQuitOnFail attribute. * @return Returns the shouldQuitOnFail. */ public boolean shouldQuitOnFail() { return shouldQuitOnFail; } /** * Sets the shouldQuitOnFail attribute value. * @param shouldQuitOnFail The shouldQuitOnFail to set. */ public void setQuitOnFail(boolean shouldQuitOnFail) { this.shouldQuitOnFail = shouldQuitOnFail; } }