1 /*
2 * #%L
3 * Nuiton Validator
4 * %%
5 * Copyright (C) 2013 - 2014 Code Lutin, Tony Chemit
6 * %%
7 * This program is free software: you can redistribute it and/or modify
8 * it under the terms of the GNU Lesser General Public License as
9 * published by the Free Software Foundation, either version 3 of the
10 * License, or (at your option) any later version.
11 *
12 * This program is distributed in the hope that it will be useful,
13 * but WITHOUT ANY WARRANTY; without even the implied warranty of
14 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
15 * GNU General Lesser Public License for more details.
16 *
17 * You should have received a copy of the GNU General Lesser Public
18 * License along with this program. If not, see
19 * <http://www.gnu.org/licenses/lgpl-3.0.html>.
20 * #L%
21 */
22 package org.nuiton.validator;
23
24 import java.io.File;
25 import java.util.ServiceLoader;
26 import java.util.SortedSet;
27 import java.util.regex.Pattern;
28
29 /**
30 * Provider of {@link NuitonValidator}.
31 *
32 * An implementation of a such class provides a implementation of a validator models
33 * and also of validator.
34 *
35 * <b>Note:</b> Providers are used in the {@link NuitonValidatorFactory} and
36 * should be registered via the {@link ServiceLoader} api.
37 *
38 * @author Tony Chemit - chemit@codelutin.com
39 * @see NuitonValidatorModel
40 * @see NuitonValidator
41 * @see ServiceLoader
42 * @since 2.0
43 */
44 public interface NuitonValidatorProvider {
45
46 /**
47 * Obtains the name of the provider.
48 *
49 * @return the name of the provider.
50 */
51 String getName();
52
53 /**
54 * Obtain a validator model, the model should be cached and not be
55 * reinstanciated at each time a validator model is asked.
56 *
57 * @param type type of the class to validate
58 * @param context context of validation ({@code null} if no context)
59 * @param scopes filtered scope (if nothing given, then use all scopes)
60 * @param <O> type of the class to validate
61 * @return the cached model of validation
62 */
63 <O> NuitonValidatorModel<O> getModel(Class<O> type,
64 String context,
65 NuitonValidatorScope... scopes);
66
67 /**
68 * Instanciate a new validator model for the given parameters.
69 *
70 * @param type type of the class to validate
71 * @param context context of validation ({@code null} if no context)
72 * @param scopes filtered scope (if nothing given, then use all scopes)
73 * @param <O> type of the class to validate
74 * @return the new instanciated model of validation
75 */
76 <O> NuitonValidatorModel<O> newModel(Class<O> type,
77 String context,
78 NuitonValidatorScope... scopes);
79
80 /**
81 * Obtains a new validator for the given {@code model}.
82 *
83 * @param model the model of validator to use
84 * @param <O> type of class to validate
85 * @return the new validator
86 */
87 <O> NuitonValidator<O> newValidator(NuitonValidatorModel<O> model);
88
89 /**
90 * Detects in the given directory validators.
91 *
92 * @param sourceRoot root directory where to seek for validators
93 * @param contextFilter the pattern of context to seek
94 * @param scopes scopes to seek (if none given, will seek for all scopes)
95 * @param types types of class to seek
96 * @return the set of validators found
97 */
98 SortedSet<NuitonValidator<?>> detectValidators(File sourceRoot,
99 Pattern contextFilter,
100 NuitonValidatorScope[] scopes,
101 Class<?>... types);
102 }