1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25 package org.archive.crawler.admin;
26
27 import java.util.ArrayList;
28 import java.util.HashMap;
29 import java.util.List;
30 import java.util.logging.Level;
31
32 import org.archive.crawler.settings.ValueErrorHandler;
33 import org.archive.crawler.settings.Constraint.FailedCheck;
34
35
36 /***
37 * An implementation of the ValueErrorHandler for the UI.
38 *
39 * <p>The UI uses this class to trap errors in the settings of it's jobs and
40 * profiles and manage their presentation to the user.
41 *
42 * @author Kristinn Sigurdsson
43 *
44 * @see org.archive.crawler.settings.ValueErrorHandler
45 */
46 public class CrawlJobErrorHandler implements ValueErrorHandler {
47 /*** All encountered errors */
48 HashMap<String,FailedCheck> errors = null;
49 Level level = Level.INFO;
50 Level highestEncounteredLevel = Level.OFF;
51
52 public CrawlJobErrorHandler(){
53 errors = new HashMap<String,FailedCheck>();
54 }
55
56 public CrawlJobErrorHandler(Level level){
57 this();
58 this.level = level;
59 }
60
61 public void handleValueError(FailedCheck error) {
62 String key = error.getOwner().getAbsoluteName() +
63 "/" + error.getDefinition().getName();
64 errors.put(key,error);
65 if(error.getLevel().intValue()>highestEncounteredLevel.intValue()){
66 highestEncounteredLevel = error.getLevel();
67 }
68 }
69
70 /***
71 * Get error for a specific attribute.
72 *
73 * <p>Uses currently set error level
74 *
75 * @param absoluteName The absolute name of the attribute
76 * @return error for a specific attribute at or above current error
77 * level. null if no matching error is found.
78 */
79 public FailedCheck getError(String absoluteName){
80 return getError(absoluteName,level);
81 }
82
83 /***
84 * Get error for a specific attribute
85 *
86 * @param absoluteName
87 * The absolute name of the attribute.
88 * @param level
89 * Limit errors to those at this or higher level.
90 * @return error for a specific attribute at or above specified error level.
91 * null if no matching error is found.
92 */
93 public FailedCheck getError(String absoluteName, Level level) {
94 FailedCheck fc = (FailedCheck) errors.get(absoluteName);
95 if (fc != null && fc.getLevel().intValue() >= level.intValue()) {
96 return fc;
97 }
98 return null;
99 }
100
101 /***
102 * Has there been an error with severity (level) equal to or higher then
103 * this handlers set level.
104 * @return has there ben an error.
105 */
106 public boolean hasError(){
107 return hasError(level);
108 }
109
110 /***
111 * Has there been an error with severity (level) equal to or higher then
112 * specified.
113 * @param level The severity.
114 * @return has there ben an error.
115 */
116 public boolean hasError(Level level){
117 return highestEncounteredLevel.intValue() >= level.intValue();
118 }
119
120 /***
121 * @return Returns the level.
122 */
123 public Level getLevel() {
124 return level;
125 }
126
127 /***
128 * @param level The level to set.
129 */
130 public void setLevel(Level level) {
131 this.level = level;
132 }
133
134 /***
135 * Reset handler.
136 *
137 * <p>Delets all encountered errors of any level.
138 */
139 public void clearErrors(){
140 errors = new HashMap<String,FailedCheck>();
141 }
142
143 /***
144 * Get an List of all the encountered errors.
145 *
146 * <p>The List contains a set of
147 * {@link org.archive.crawler.settings.Constraint.FailedCheck
148 * FailedCheck} objects.
149 *
150 * @return an list of all encountered errors (with level equal to
151 * or higher then current level).
152 *
153 * @see org.archive.crawler.settings.Constraint.FailedCheck
154 */
155 public List getErrors(){
156 return getErrors(level);
157 }
158
159 /***
160 * Get an List of all the encountered errors.
161 *
162 * <p>The List contains a set of
163 * {@link org.archive.crawler.settings.Constraint.FailedCheck
164 * FailedCheck} objects.
165 *
166 * @param level Get all errors of this level or higher
167 *
168 * @return an list of all encountered errors (with level equal to
169 * or higher then specified level).
170 *
171 * @see org.archive.crawler.settings.Constraint.FailedCheck
172 */
173 public List getErrors(Level level){
174 ArrayList<FailedCheck> list = new ArrayList<FailedCheck>(errors.size());
175 for (FailedCheck fc: errors.values()) {
176 if(fc.getLevel().intValue() >= level.intValue()){
177 list.add(fc);
178 }
179 }
180 return list;
181 }
182 }