001    /**
002     * Copyright 2010 The Kuali Foundation Licensed under the
003     * Educational Community License, Version 2.0 (the "License"); you may
004     * not use this file except in compliance with the License. You may
005     * obtain a copy of the License at
006     *
007     * http://www.osedu.org/licenses/ECL-2.0
008     *
009     * Unless required by applicable law or agreed to in writing,
010     * software distributed under the License is distributed on an "AS IS"
011     * BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express
012     * or implied. See the License for the specific language governing
013     * permissions and limitations under the License.
014     */
015    
016    package org.kuali.student.common.validation.dto;
017    
018    import java.io.Serializable;
019    import java.util.List;
020    
021    import javax.xml.bind.annotation.XmlAccessType;
022    import javax.xml.bind.annotation.XmlAccessorType;
023    import javax.xml.bind.annotation.XmlElement;
024    
025    @XmlAccessorType(XmlAccessType.FIELD)
026    public class ValidationResultInfo implements Serializable {
027    
028            private static final long serialVersionUID = 1L;
029    
030            public enum ErrorLevel {
031                    OK(0), WARN(1), ERROR(2);
032    
033                    int level;
034    
035                    private ErrorLevel(int level) {
036                            this.level = level;
037                    }
038    
039                    public int getLevel() {
040                            return level;
041                    }
042    
043                    public static ErrorLevel min(ErrorLevel e1, ErrorLevel e2) {
044                            return e1.ordinal() < e2.ordinal() ? e1 : e2;
045                    }
046    
047                    public static ErrorLevel max(ErrorLevel e1, ErrorLevel e2) {
048                            return e1.ordinal() > e2.ordinal() ? e1 : e2;
049                    }
050            }
051    
052            private transient Object invalidData = null;
053    
054            @XmlElement
055            protected String element;
056    
057            @XmlElement
058            protected ErrorLevel level = ErrorLevel.OK;
059    
060            @XmlElement
061            protected String message;
062    
063            public ValidationResultInfo() {
064                    super();
065                    this.level = ErrorLevel.OK;
066            }
067    
068            public ValidationResultInfo(String element) {
069                    super();
070                    this.level = ErrorLevel.OK;
071                    this.element = element;
072            }
073    
074            public ValidationResultInfo(String element, Object invalidData) {
075                    this(element);
076                    this.invalidData = invalidData;
077            }
078    
079            /**
080             * @return the level
081             */
082            public ErrorLevel getLevel() {
083                    return level;
084            }
085    
086            /**
087             * @param level
088             *            the level to set
089             */
090            public void setLevel(ErrorLevel level) {
091                    this.level = level;
092            }
093    
094            /**
095             * @return the message
096             */
097            public String getMessage() {
098                    return message;
099            }
100    
101            /**
102             * @param message
103             *            the message to set
104             */
105            public void setMessage(String message) {
106                    this.message = message;
107            }
108    
109            public String getElement() {
110                    return element;
111            }
112    
113            public void setElement(String element) {
114                    this.element = element;
115            }
116    
117            /**
118             * Returns the ValidationResult's error level
119             * 
120             * @return
121             */
122            public ErrorLevel getErrorLevel() {
123                    return level;
124            }
125    
126            /**
127             * Convenience method. Adds a message with an error level of WARN
128             * 
129             * @param message
130             *            the message to add
131             */
132            public void setWarning(String message) {
133                    this.level = ErrorLevel.WARN;
134                    this.message = message;
135            }
136    
137            /**
138             * Convenience method. Adds a message with an error level of ERROR
139             * 
140             * @param message
141             *            the message to add
142             */
143            public void setError(String message) {
144                    this.level = ErrorLevel.ERROR;
145                    this.message = message;
146            }
147    
148            /**
149             * Convenience method. Returns true if getErrorLevel() == ErrorLevel.OK
150             * 
151             * @return true if getErrorLevel() == ErrorLevel.OK
152             */
153            public boolean isOk() {
154                    return getErrorLevel() == ErrorLevel.OK;
155            }
156    
157            /**
158             * Convenience method. Returns true if getErrorLevel() == ErrorLevel.WARN
159             * 
160             * @return true if getErrorLevel() == ErrorLevel.WARN
161             */
162            public boolean isWarn() {
163                    return getErrorLevel() == ErrorLevel.WARN;
164            }
165    
166            /**
167             * Convenience method. Returns true if getErrorLevel() == ErrorLevel.ERROR
168             * 
169             * @return true if getErrorLevel() == ErrorLevel.ERROR
170             */
171            public boolean isError() {
172                    return getErrorLevel() == ErrorLevel.ERROR;
173            }
174    
175            public String toString() {
176                    return "[" + level + "] Path: [" + element + "] - " + message
177                                    + " data=[" + invalidData + "]";
178            }
179    
180            /**
181             * Checks if there are any validation errors exceeding the threshold and ignoring the list of fieldPaths passed in
182             * @param validationResults
183             * @param threshold
184             * @param ignoreFields
185             * @return
186             */
187            public static boolean hasValidationErrors(List<ValidationResultInfo> validationResults, ErrorLevel threshold, List<String> ignoreFields){
188                     if (validationResults != null) {
189                for (ValidationResultInfo validationResult : validationResults) {
190                    //Ignore any fields that are in the list
191                    if(ignoreFields!=null && !ignoreFields.contains(validationResult.getElement())){
192                            //Return true if any of the validation results exceed your threshold
193                            if (validationResult.getLevel() == ErrorLevel.ERROR) {
194                                return true;
195                            }
196                            if (ErrorLevel.WARN.equals(threshold) && validationResult.getLevel() == ErrorLevel.WARN) {
197                                return true;
198                            }
199                    }
200                }
201            }
202                    return false;
203            }
204            
205    }