View Javadoc

1   package net.sourceforge.argval;
2   
3   import java.io.File;
4   import java.text.DateFormat;
5   import java.util.Collection;
6   import java.util.Map;
7   import java.util.Set;
8   
9   import org.apache.oro.text.regex.Pattern;
10  
11  public interface ArgumentValidation {
12  
13      public final static String VALIDATION_TYPE_NAME_ARGUMENT = "Argument";
14  	public final static String VALIDATION_TYPE_NAME_PROPERTY_KEY = "Property-key";
15  
16  	/**
17       * Creates a message about all the validated conditions which are not satisfied.
18       * 
19       * @return  The message containing the details about the not met conditions.
20       */
21      String getMessage();
22  
23      /**
24       * Returns <code>true</code> if there are arguments checked (through one of the methods 
25       * <code>isValidXxxxx</code>), that did not full fill the condition of that validation check,
26       * otherwise <code>false</code>.
27       * 
28       * @return  <code>true</code> if not all validated conditions are satisfied, otherwise 
29       *          <code>false</code>.
30       */
31      boolean containsIllegalArgument();
32  
33      /**
34       * Creates an <code>IllegalArgumentException</code> with a detailed message about which 
35       * arguments did not satisfy the required conditions.
36       * 
37       * @return  a new <code>IllegalArgumentException</code>
38       * 
39       * @see #getMessage()
40       */
41      IllegalArgumentException createIllegalArgumentException();
42  
43      /**
44       * Validates if the String <code>argumentValue</code> contains an instance reference 
45       * (is not <code>null</code>).
46       * 
47       * @param  argumentName  The name of the argument, which is validated.
48       * @param  argumentValue  The value of the argument, which is validated.
49       * @return  <code>true</code> if the condition is met, otherwise <code>false</code>.
50       */
51      boolean isValidWhenNotNull(String argumentName, Object argumentValue);
52  
53      /**
54       * Validates if the String <code>argumentValue</code> contains the text <code>true</code> or 
55       * <code>false</code>. 
56       * 
57       * @param  argumentName  The name of the argument, which is validated.
58       * @param  argumentValue  The value of the argument, which is validated.
59       * @return  <code>true</code> if the condition is met, otherwise <code>false</code>.
60       */
61      boolean isValidWhenBoolean(String argumentName, String argumentValue);
62  
63      /**
64       * Validates if the String <code>argumentValue</code> is an Integer value. 
65       * 
66       * @param  argumentName  The name of the argument, which is validated.
67       * @param  argumentValue  The value of the argument, which is validated.
68       * @return  <code>true</code> if the condition is met, otherwise <code>false</code>.
69       */
70      boolean isValidWhenInteger(String argumentName, String argumentValue);
71  
72      /**
73       * Validates if the String <code>argumentValue</code> is a Long value.
74       * 
75       * @param  argumentName  The name of the argument, which is validated.
76       * @param  argumentValue  The value of the argument, which is validated.
77       * @return  <code>true</code> if the condition is met, otherwise <code>false</code>.
78       */
79      boolean isValidWhenLong(String argumentName, String argumentValue);
80  
81      /**
82       * Validates if the String <code>argumentValue</code> is a directory.
83       * 
84       * @param  argumentName  The name of the argument, which is validated.
85       * @param  argumentValue  The value of the argument, which is validated.
86       * @return  <code>true</code> if the condition is met, otherwise <code>false</code>.
87       */
88      boolean isValidWhenDirectory(String argumentName, String argumentValue);
89      boolean isValidWhenDirectory(String argumentName, File argumentValue);
90  
91      /**
92       * Validates if the String <code>argumentValue</code> is a file.
93       * 
94       * @param  argumentName  The name of the argument, which is validated.
95       * @param  argumentValue  The value of the argument, which is validated.
96       * @return  <code>true</code> if the condition is met, otherwise <code>false</code>.
97       */
98      boolean isValidWhenFile(String argumentName, String argumentValue);
99      boolean isValidWhenFile(String argumentName, File argumentValue);
100 
101     /**
102      * Validates if the String <code>argumentValue</code> is an valid url.
103      * 
104      * @param  argumentName  The name of the argument, which is validated.
105      * @param  argumentValue  The value of the argument, which is validated.
106      * @return  <code>true</code> if the condition is met, otherwise <code>false</code>.
107      */
108     boolean isValidWhenUrl(String argumentName, String argumentValue);
109 
110     /**
111      * Validates if the String <code>argumentValue</code> is an valid uri.
112      * 
113      * @param  argumentName  The name of the argument, which is validated.
114      * @param  argumentValue  The value of the argument, which is validated.
115      * @return  <code>true</code> if the condition is met, otherwise <code>false</code>.
116      */
117     boolean isValidWhenUri(String argumentName, String argumentValue);
118     
119     /**
120      * Validates if the String <code>argumentValue</code> is an element contained by 
121      * the Set <code>argumentSet</code>.
122      * 
123      * @param  argumentName  The name of the argument, which is validated.
124      * @param  argumentValue  The value of the argument, which is validated.
125      * @param  argumentSet  The <code>Set</code> to validate against.
126      * @return  <code>true</code> if the condition is met, otherwise <code>false</code>.
127      */
128     boolean isValidWhenInSet(String argumentName, String argumentValue, Set<String> argumentSet);
129 
130     /**
131      * Validates if the String <code>argumentValue</code> is not already contained by 
132      * the Set <code>argumentSet</code>.
133      * 
134      * @param  argumentName  The name of the argument, which is validated.
135      * @param  argumentValue  The value of the argument, which is validated.
136      * @param  argumentSet  The <code>Set</code> to validate against.
137      * @return  <code>true</code> if the condition is met, otherwise <code>false</code>.
138      */
139     boolean isValidWhenNotInSet(String argumentName, String argumentValue, Set<String> argumentSet);
140 
141     boolean isValidWhenNotNullInCollection(String string, Collection<?> collection);
142 
143     /**
144      * Validates if the Collection <code>argumentValue</code> is not null and that its 
145      * containing elements are also not null. Meaning the Collection may be empty. And when not
146      * empty, each entry should contain a instance.
147      * 
148      * @param  argumentName  The name of the argument, which is validated.
149      * @param  argumentValue  The value of the argument, which is validated.
150      * @return  <code>true</code> if the condition is met, otherwise <code>false</code>.
151      */
152     public boolean isValidCollectionWhenNoNulls(String argumentName, Collection<?> argumentValue);
153     
154     /**
155      * Validates if the Collection <code>argumentValue</code> is at least containing the 
156      * minimal number of elements (<code>minElements</code>).
157      *  
158      * @param  argumentName  The name of the argument, which is validated.
159      * @param  argumentValue  The value of the argument, which is validated.
160      * @param  minElements  The minimal number of arguments, the collection should contain.
161      * @return  <code>true</code> if the condition is met, otherwise <code>false</code>.
162      */
163     public boolean isValidCollectionWhenMinElements(String argumentName, Collection<?> argumentValue, int minElements);
164     
165     /**
166      * Validates if the Integer <code>argumentValue</code> is greate then Integer <code>value</code>. 
167      * 
168      * @param  argumentName  The name of the argument, which is validated.
169      * @param  argumentValue  The value of the argument, which is validated.
170      * @param  value  The value to validate against.
171      * @return  <code>true</code> if the condition is met, otherwise <code>false</code>.
172      */
173     boolean isValidWhenGreaterThen(String argumentName, int argumentValue, int value);
174 
175     /**
176      * Validates if the String <code>argumentValue</code> has a minimal length of <code>minLength</code>.
177      * 
178      * @param  argumentName  The name of the argument, which is validated.
179      * @param  argumentValue  The value of the argument, which is validated.
180      * @param  minLength  The length to validate against.
181      * @return  <code>true</code> if the condition is met, otherwise <code>false</code>.
182      */
183     boolean isValidStringMinLength(String argumentName, String argumentValue, int minLength);
184 
185     /**
186      * Validates if the String <code>argumentValue</code> has a maximum length of <code>maxLength</code>.
187      * 
188      * @param  argumentName  The name of the argument, which is validated.
189      * @param  argumentValue  The value of the argument, which is validated.
190      * @param  maxLength  The length to validate against.
191      * @return  <code>true</code> if the condition is met, otherwise <code>false</code>.
192      */
193     boolean isValidStringMaxLength(String argumentName, String argumentValue, int maxLength);
194 
195     /**
196      * Validates if the String <code>argumentValue</code> has an exact length of <code>length</code>.
197      * 
198      * @param  argumentName  The name of the argument, which is validated.
199      * @param  argumentValue  The value of the argument, which is validated.
200      * @param  length  The length to validate against.
201      * @return  <code>true</code> if the condition is met, otherwise <code>false</code>.
202      */
203     boolean isValidStringLength(String argumentName, String argumentValue, int length);
204 
205     /**
206      * Validates if the String <code>argumentValue</code> has a minimal length of <code>minLength</code> and
207      * a maximum length of <code>maxLength</code>.
208      * 
209      * @param  argumentName  The name of the argument, which is validated.
210      * @param  argumentValue  The value of the argument, which is validated.
211      * @param  minLength  The minimal length to validate against.
212      * @param  maxLength  The maximum length to validate against.
213      * @return  <code>true</code> if the condition is met, otherwise <code>false</code>.
214      */
215     boolean isValidStringMinAndMaxLength(String argumentName, String argumentValue, int minLength, int maxLength);
216 
217     /**
218      * Validates if the String <code>argumentValue</code> matches the <code>dateFormat</code>.
219      * 
220      * @param  argumentName  The name of the argument, which is validated.
221      * @param  argumentValue  The value of the argument, which is validated.
222      * @param  dateFormat  The date format which is used for matching.
223      * @return  <code>true</code> if the condition is met, otherwise <code>false</code>.
224      */
225     boolean isValidMatchingDateFormat(String argumentName, String argumentValue, DateFormat dateFormat);
226 
227     /**
228      * Validates if the String <code>argumentValue</code> matches the date format registered under the 
229      * <code>dateFormatName</code>.
230      * 
231      * @param  argumentName  The name of the argument, which is validated.
232      * @param  argumentValue  The value of the argument, which is validated.
233      * @param  patternName  The name of the date format, which is used for matching.
234      * @return  <code>true</code> if the condition is met, otherwise <code>false</code>.
235      * @see  #isValidMatchingDateFormat(String, String, DateFormat)
236      */
237     boolean isValidMatchingDateFormat(String argumentName, String argumentValue, String dateFormatName);
238 
239     /**
240      * Validates if the String <code>argumentValue</code> matches the pattern regisstered under the 
241      * <code>patternName</code>.
242      * 
243      * @param  argumentName  The name of the argument, which is validated.
244      * @param  argumentValue  The value of the argument, which is validated.
245      * @param  patternName  The name of the pattern, which is used for matching.
246      * @return  <code>true</code> if the condition is met, otherwise <code>false</code>.
247      */
248     boolean isValidMatchingPattern(String argumentName, String argumentValue, String patternName);
249 
250     /**
251      * Add an error message to the list of error messages. The list of error messages is used 
252      * to create the <code>IllegalArgumentException</code> message. 
253      * 
254      * @param  error  The error message to add.
255      * @see #addError(String, String)
256      */
257     void addError(String error);
258 
259     /**
260      * Add an error message, for the given argumentName, to the list of error messages.
261      * @param argumentName - the argument (or property-key) in which the problem is found. 
262      * @param message - the message that describes the problem.
263      */
264     void addError(String argumentName, String message);
265 
266     /**
267      * Add an error message, for when the argument is a Map instance, to the list of error messages,
268      * for the given key.
269      *
270      * @param argumentName - the argument Map (or property-key). 
271      * @param key - the key under which the problem is found.
272      * @param message - the message that describes the problem.
273      */
274     void addError(String argumentName, String key, String message);
275 
276     /**
277      * Returns the <code>Set</code> of pattern names.
278      * @return  The names of all the patterns.
279      */
280     Set<String> getPatternNames();
281 
282     /**
283      * Returns the <code>Map</code> of pattern names and their regular expression.
284      * @return  All pattern names and their regular expression (as <code>String</code>).
285      */
286     Map<String, String> getPattern();
287 
288     /** 
289      * Returns the <code>Pattern</code> found under the <code>patternName</code>, or throws 
290      * an <code>IllegalArgumentException</code> if the <code>patternName</code> is not available. 
291      * 
292      * @param  patternName  The name of the pattern.
293      * @return  The found <code>Pattern</code>.
294      */
295     Pattern getPattern(String patternName);
296 
297     /**
298      * Returns the regular expression found under the <code>patternName</code>, or throws 
299      * an <code>IllegalArgumentException</code> if the <code>patternName</code> is not available. 
300      * 
301      * @param  patternName  The name of the pattern.
302      * @return  The regular expression.
303      */
304     String getRegularExpression(String patternName);
305 
306     boolean isValidNotNullForKey(String string, Map<String, String> dataModelIdMap, String keyDataVendor);
307 
308 }