001/**
002 * Copyright 2005-2018 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 */
016package org.kuali.rice.krad.datadictionary.validation.result;
017
018import org.kuali.rice.krad.datadictionary.validation.ErrorLevel;
019import org.kuali.rice.krad.datadictionary.validation.constraint.Constraint;
020import org.kuali.rice.krad.datadictionary.validation.processor.ConstraintProcessor;
021
022import java.util.LinkedList;
023import java.util.List;
024
025/**
026 * ConstraintValidationResult is a composite class for all the different members that need to be returned when a {@link
027 * ConstraintProcessor}
028 * processes a {@link Constraint}.
029 *
030 * @author Kuali Rice Team (rice.collab@kuali.org)
031 */
032public class ConstraintValidationResult {
033
034    private String entryName;
035    private String attributeName;
036    private String attributePath;
037    private String constraintName;
038    private ErrorLevel level;
039
040    private String errorKey;
041    private String[] errorParameters = {};
042    private String constraintLabelKey;
043
044    private List<ConstraintValidationResult> children;
045
046    /**
047     * creates a constraint validation result with the given constraint name
048     *
049     * @param constraintName - a descriptive name of the current constraint processor
050     */
051    public ConstraintValidationResult(String constraintName) {
052        this.constraintName = constraintName;
053        this.children = new LinkedList<ConstraintValidationResult>();
054        this.level = ErrorLevel.OK;
055    }
056
057    /**
058     * creates a constraint validation result with the given constraint name and error level
059     *
060     * @param constraintName - a descriptive name of the current constraint processor
061     * @param level - the applicable error level - selected from {@link ErrorLevel}
062     */
063    public ConstraintValidationResult(String constraintName, ErrorLevel level) {
064        this.constraintName = constraintName;
065        this.children = new LinkedList<ConstraintValidationResult>();
066        this.level = level;
067    }
068
069    /**
070     * allows a constraint validation result to be added as a child of the current one
071     *
072     * @param child - the 'child' constraint validation result
073     */
074    public void addChild(ConstraintValidationResult child) {
075        this.children.add(child);
076    }
077
078    /**
079     * provides information used to display error messages to the user concerning a constraint validation
080     *
081     * @param errorKey - a key used to fetch an error message to show the user
082     * @param errorParameters - parameters to substitute into the error message
083     */
084    public void setError(String errorKey, String... errorParameters) {
085        this.level = ErrorLevel.ERROR;
086        this.errorKey = errorKey;
087        this.errorParameters = errorParameters;
088    }
089
090    /**
091     * provides information used to display warning messages to the user concerning a constraint validation
092     *
093     * @param errorKey - a key used to fetch an warning message to show the user
094     * @param errorParameters - parameters to substitute into the warning message
095     */
096    public void setWarning(String errorKey, String... errorParameters) {
097        this.level = ErrorLevel.WARN;
098        this.errorKey = errorKey;
099        this.errorParameters = errorParameters;
100    }
101
102    /**
103     * @return the level
104     */
105    public ErrorLevel getStatus() {
106        return this.level;
107    }
108
109    /**
110     * @param level the level to set
111     */
112    public void setStatus(ErrorLevel level) {
113        this.level = level;
114    }
115
116    /**
117     * the error key is used to retrieve a message to display to the user
118     *
119     * @return the errorKey
120     * @see org.kuali.rice.core.api.util.RiceKeyConstants
121     */
122    public String getErrorKey() {
123        return this.errorKey;
124    }
125
126    /**
127     * @param errorKey the errorKey to set
128     */
129    public void setErrorKey(String errorKey) {
130        this.errorKey = errorKey;
131    }
132
133    /**
134     * @return the errorParameters
135     */
136    public String[] getErrorParameters() {
137        return this.errorParameters;
138    }
139
140    /**
141     * @param errorParameters the errorParameters to set
142     */
143    public void setErrorParameters(String[] errorParameters) {
144        this.errorParameters = errorParameters;
145    }
146
147    /**
148     * @return the entryName
149     */
150    public String getEntryName() {
151        return this.entryName;
152    }
153
154    /**
155     * @param entryName the entryName to set
156     */
157    public void setEntryName(String entryName) {
158        this.entryName = entryName;
159    }
160
161    /**
162     * @return the attributeName
163     */
164    public String getAttributeName() {
165        return this.attributeName;
166    }
167
168    /**
169     * @param attributeName the attributeName to set
170     */
171    public void setAttributeName(String attributeName) {
172        this.attributeName = attributeName;
173    }
174
175    /**
176     * @return the constraintName
177     */
178    public String getConstraintName() {
179        return this.constraintName;
180    }
181
182    /**
183     * @param constraintName the constraintName to set
184     */
185    public void setConstraintName(String constraintName) {
186        this.constraintName = constraintName;
187    }
188
189    /**
190     * @return the children
191     */
192    public List<ConstraintValidationResult> getChildren() {
193        return this.children;
194    }
195
196    /**
197     * @return the constraintLabelKey
198     */
199    public String getConstraintLabelKey() {
200        return this.constraintLabelKey;
201    }
202
203    /**
204     * @param constraintLabelKey the constraintLabelKey to set
205     */
206    public void setConstraintLabelKey(String constraintLabelKey) {
207        this.constraintLabelKey = constraintLabelKey;
208    }
209
210    /**
211     * @return the attributePath
212     */
213    public String getAttributePath() {
214        return this.attributePath;
215    }
216
217    /**
218     * @param attributePath the attributePath to set
219     */
220    public void setAttributePath(String attributePath) {
221        this.attributePath = attributePath;
222    }
223
224}