@@ -103,16 +103,16 @@ public static Validator getValidator(Class<?> type){
103103 return validator ;
104104 }
105105
106- public static <T > T map (Class <T > type , AbstractElement element , AbstractMapper mapper ){
106+ public static <T > T map (ValidationContext context , Class <T > type , AbstractElement element , AbstractMapper mapper ){
107107 Validator validator = getValidator (type );
108- ValidationResult result = validator .validate (element );
108+ ValidationResult result = validator .validate (context , element );
109109 if (!result .isValid ())
110110 throw new ValidationException (result );
111111 return mapper .fromAbstract (element , type );
112112 }
113113
114- public static <T > T map (Class <T > type , AbstractElement element ){
115- return map (type , element , new AbstractMapper ());
114+ public static <T > T map (ValidationContext context , Class <T > type , AbstractElement element ){
115+ return map (context , type , element , new AbstractMapper ());
116116 }
117117
118118 private final Map <String [], ValidationConfig > rules = new HashMap <>();
@@ -139,20 +139,21 @@ public Validator rule(String key, ValidationRule... rules){
139139 return rule (key , Arrays .asList (rules ));
140140 }
141141
142- public ValidationResult validate (AbstractElement rootElement ){
142+ public ValidationResult validate (ValidationContext context , AbstractElement rootElement ) {
143+ context .setValidator (this );
143144 Map <String [], List <String >> errors = new HashMap <>();
144145 for (String [] key : rules .keySet ()){
145- errors .putAll (check (rules , new String [0 ], new String [0 ], key , rootElement ));
146+ errors .putAll (check (context , rules , new String [0 ], new String [0 ], key , rootElement ));
146147 }
147- return new ValidationResult (errors );
148+ return new ValidationResult (context , errors );
148149 }
149150
150- private Map <String [], List <String >> check (Map <String [], ValidationConfig > rules , String [] keyPrefix , String [] resolvedKeyPrefix , String [] key , AbstractElement element ){
151+ private Map <String [], List <String >> check (ValidationContext context , Map <String [], ValidationConfig > rules , String [] keyPrefix , String [] resolvedKeyPrefix , String [] key , AbstractElement element ){
151152 if (key .length == 0 ){
152153 Map <String [], List <String >> errors = new HashMap <>();
153154 ValidationConfig config = getMapValue (rules , keyPrefix );
154155 for (ValidationRule rule : config .rules ){
155- String error = rule .validate (this , config .field , element );
156+ String error = rule .validate (context , config .field , element );
156157 if (error != null ){
157158 if (!errors .containsKey (resolvedKeyPrefix ))
158159 errors .put (resolvedKeyPrefix , new ArrayList <>());
@@ -175,15 +176,15 @@ private Map<String[], List<String>> check(Map<String[], ValidationConfig> rules,
175176 String [] innerResolvedKeyPrefix = new String [keyPrefix .length +1 ];
176177 System .arraycopy (resolvedKeyPrefix , 0 , innerResolvedKeyPrefix , 0 , resolvedKeyPrefix .length );
177178 innerResolvedKeyPrefix [innerResolvedKeyPrefix .length -1 ] = String .valueOf (i );
178- errors .putAll (check (rules , innerKeyPrefix , innerResolvedKeyPrefix , innerKey , element .array ().get (i )));
179+ errors .putAll (check (context , rules , innerKeyPrefix , innerResolvedKeyPrefix , innerKey , element .array ().get (i )));
179180 }
180181 }
181182 if (element .isObject ()){
182183 for (String k : element .object ().keys ()){
183184 String [] innerResolvedKeyPrefix = new String [keyPrefix .length +1 ];
184185 System .arraycopy (resolvedKeyPrefix , 0 , innerResolvedKeyPrefix , 0 , resolvedKeyPrefix .length );
185186 innerResolvedKeyPrefix [innerResolvedKeyPrefix .length -1 ] = k ;
186- errors .putAll (check (rules , innerKeyPrefix , innerResolvedKeyPrefix , innerKey , element .object ().get (k )));
187+ errors .putAll (check (context , rules , innerKeyPrefix , innerResolvedKeyPrefix , innerKey , element .object ().get (k )));
187188 }
188189 }
189190 return errors ;
@@ -200,7 +201,7 @@ private Map<String[], List<String>> check(Map<String[], ValidationConfig> rules,
200201 String [] innerResolvedKeyPrefix = new String [keyPrefix .length +1 ];
201202 System .arraycopy (resolvedKeyPrefix , 0 , innerResolvedKeyPrefix , 0 , resolvedKeyPrefix .length );
202203 innerResolvedKeyPrefix [innerResolvedKeyPrefix .length -1 ] = key [0 ];
203- return check (rules , innerKeyPrefix , innerResolvedKeyPrefix , innerKey , value );
204+ return check (context , rules , innerKeyPrefix , innerResolvedKeyPrefix , innerKey , value );
204205 }
205206
206207 private static boolean stringArrayEqual (String [] a , String [] b ){
0 commit comments