001    /**
002     * Copyright 2005-2013 The Kuali Foundation
003     *
004     * Licensed under the Educational Community License, Version 2.0 (the "License");
005     * you may not use this file except in compliance with the License.
006     * You may obtain a copy of the License at
007     *
008     * http://www.opensource.org/licenses/ecl2.php
009     *
010     * Unless required by applicable law or agreed to in writing, software
011     * distributed under the License is distributed on an "AS IS" BASIS,
012     * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
013     * See the License for the specific language governing permissions and
014     * limitations under the License.
015     */
016    package org.kuali.rice.krad.datadictionary.validation.result;
017    
018    import org.kuali.rice.krad.datadictionary.validation.AttributeValueReader;
019    import org.kuali.rice.krad.datadictionary.validation.capability.Constrainable;
020    import org.kuali.rice.krad.datadictionary.validation.constraint.Constraint;
021    import org.kuali.rice.krad.datadictionary.validation.processor.ConstraintProcessor;
022    
023    import java.util.Arrays;
024    import java.util.Collections;
025    import java.util.List;
026    
027    /**
028     * defines the information expected when a processor has processed a constraint
029     *
030     * @author Kuali Rice Team (rice.collab@kuali.org)
031     * @see ConstraintProcessor
032     */
033    public class ProcessorResult {
034    
035        private final transient List<Constraint> constraints;
036        private final transient Constrainable definition;
037        private final transient AttributeValueReader attributeValueReader;
038    
039        private final List<ConstraintValidationResult> constraintValidationResults;
040    
041        /**
042         * creates a processor result from the provided constraint validation result
043         *
044         * @param constraintValidationResult - the constraint validation result
045         */
046        public ProcessorResult(ConstraintValidationResult constraintValidationResult) {
047            this(constraintValidationResult, null, null);
048        }
049    
050        /**
051         * creates a processor result from the parameters provided
052         *
053         * @param constraintValidationResult - the constraint validation result
054         * @param definition - a Data Dictionary definition e.g. {@code ComplexAttributeDefinition} or {@code
055         * CollectionDefinition}
056         * @param attributeValueReader - provides access to the attribute being validated
057         * @param constraints - optional constraints to use
058         */
059        public ProcessorResult(ConstraintValidationResult constraintValidationResult, Constrainable definition,
060                AttributeValueReader attributeValueReader, Constraint... constraints) {
061            this.constraintValidationResults = Collections.singletonList(constraintValidationResult);
062            this.definition = definition;
063            this.attributeValueReader = attributeValueReader;
064            this.constraints = Arrays.asList(constraints);
065        }
066    
067        /**
068         * creates a processor result from the parameters provided
069         *
070         * @param constraintValidationResult - the constraint validation result
071         * @param definition - a Data Dictionary definition e.g. {@code ComplexAttributeDefinition} or {@code
072         * CollectionDefinition}
073         * @param attributeValueReader - provides access to the attribute being validated
074         * @param constraints - the list of constraints to use
075         */
076        public ProcessorResult(ConstraintValidationResult constraintValidationResult, Constrainable definition,
077                AttributeValueReader attributeValueReader, List<Constraint> constraints) {
078            this.constraintValidationResults = Collections.singletonList(constraintValidationResult);
079            this.definition = definition;
080            this.attributeValueReader = attributeValueReader;
081            this.constraints = constraints;
082        }
083    
084        /**
085         * creates a processor result from the provided constraint validation results
086         *
087         * @param constraintValidationResults - the constraint validation results to use
088         */
089        public ProcessorResult(List<ConstraintValidationResult> constraintValidationResults) {
090            this(constraintValidationResults, null, null);
091        }
092    
093        /**
094         * creates a processor result from the parameters provided
095         *
096         * @param constraintValidationResults - the constraint validation results
097         * @param definition - a Data Dictionary definition e.g. {@code ComplexAttributeDefinition} or {@code
098         * CollectionDefinition}
099         * @param attributeValueReader - provides access to the attribute being validated
100         * @param constraints - optional constraints to use
101         */
102        public ProcessorResult(List<ConstraintValidationResult> constraintValidationResults, Constrainable definition,
103                AttributeValueReader attributeValueReader, Constraint... constraints) {
104            this.constraintValidationResults = constraintValidationResults;
105            this.definition = definition;
106            this.attributeValueReader = attributeValueReader;
107            this.constraints = Arrays.asList(constraints);
108        }
109    
110        /**
111         * checks whether this object has a single constraint validation result
112         *
113         * @return true if only one result found, false if not
114         */
115        public boolean isSingleConstraintResult() {
116            return this.constraintValidationResults.size() == 1;
117        }
118    
119        /**
120         * checks whether a Data Dictionary definition is present
121         *
122         * @return true if definition is present, false otherwise
123         */
124        public boolean isDefinitionProvided() {
125            return definition != null;
126        }
127    
128        /**
129         * checks whether an attribute value reader is present
130         *
131         * @return true if reader is present, false otherwise
132         */
133        public boolean isAttributeValueReaderProvided() {
134            return attributeValueReader != null;
135        }
136    
137        /**
138         * gets the first constraint validation result
139         *
140         * @return null if there are no results
141         */
142        public ConstraintValidationResult getFirstConstraintValidationResult() {
143            return this.constraintValidationResults.isEmpty() ? null : this.constraintValidationResults.get(0);
144        }
145    
146        /**
147         * @return the constraintValidationResults
148         */
149        public List<ConstraintValidationResult> getConstraintValidationResults() {
150            return this.constraintValidationResults;
151        }
152    
153        /**
154         * @return the definition
155         */
156        public Constrainable getDefinition() {
157            return this.definition;
158        }
159    
160        /**
161         * @return the attributeValueReader
162         */
163        public AttributeValueReader getAttributeValueReader() {
164            return this.attributeValueReader;
165        }
166    
167        /**
168         * @return the constraints
169         */
170        public List<Constraint> getConstraints() {
171            return this.constraints;
172        }
173    
174    }