KickJava   Java API By Example, From Geeks To Geeks.

Java > Open Source Codes > spoon > aval > support > validator > UniqueValueValidator


1 /**
2  * Spoon - http://spoon.gforge.inria.fr/
3  * Copyright (C) 2006 INRIA Futurs <renaud.pawlak@inria.fr>
4  *
5  * This software is governed by the CeCILL-C License under French law and
6  * abiding by the rules of distribution of free software. You can use,
7  * modify and/or redistribute the software under the terms of the
8  * CeCILL-C
9  * license as circulated by CEA, CNRS and INRIA at the following URL:
10  * http://www.cecill.info.
11  *
12  * This program is distributed in the hope that it will be useful, but
13  * WITHOUT ANY WARRANTY; without even the implied warranty of
14  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the CeCILL-C
15  * License for more details.
16  *
17  * The fact that you are presently reading this means that you have had
18  * knowledge of the CeCILL-C license and that you accept its terms.
19  */

20
21 package spoon.aval.support.validator;
22
23 import java.util.HashMap JavaDoc;
24 import java.util.Map JavaDoc;
25
26 import spoon.aval.Validator;
27 import spoon.aval.annotation.value.Unique;
28 import spoon.aval.processing.AValProcessor;
29 import spoon.aval.processing.ValidationPoint;
30 import spoon.reflect.declaration.CtAnnotation;
31 import spoon.reflect.reference.CtFieldReference;
32 /**
33  * Implements the {@link Unique} validator.
34  *
35  *<p>
36  * This class implements the {@link Unique} validator. It
37  * traverses the complete metamodel checking for CtElements that are
38  * annotated with the same annotation as the one in the current validation point.
39  * If the &#64;Unique attribute has the same value in at least two annotations, an ERROR
40  * is reported.
41  * <p>
42  * To avoid unnecesary (and maybe costly) traversals of the model, a cache is kept with
43  * the annotations and values found during the first traversal of the model.
44  */

45 public class UniqueValueValidator implements Validator<Unique> {
46
47     static private Map JavaDoc<Object JavaDoc,CtAnnotation> cache = new HashMap JavaDoc<Object JavaDoc,CtAnnotation>();
48     
49     /**
50      * Implementation of the Validator interface. Called by {@link AValProcessor}
51      */

52     public void check(ValidationPoint<Unique> vp) {
53         String JavaDoc attribName = ((CtFieldReference)vp.getDslElement()).getSimpleName();
54         Object JavaDoc value = vp.getDslAnnotation().getElementValue(attribName);
55         if((cache.get(value))!=null){
56             CtAnnotation dslAnnotation = vp.getDslAnnotation();
57             
58             String JavaDoc message = vp.getValAnnotation().message().replace("?val", value.toString());
59             ValidationPoint.report(vp.getValAnnotation().severity(), dslAnnotation, message,vp.fixerFactory(vp.getValAnnotation().fixers()));
60         }
61         cache.put(value,vp.getDslAnnotation());
62     }
63
64 }
65
Popular Tags