1 /*
2 * Copyright 2010 Capgemini
3 * Licensed under the Apache License, Version 2.0 (the "License");
4 * you may not use this file except in compliance with the License.
5 * You may obtain a copy of the License at
6 *
7 * http://www.apache.org/licenses/LICENSE-2.0
8 *
9 * Unless required by applicable law or agreed to in writing, software
10 * distributed under the License is distributed on an "AS IS" BASIS,
11 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
12 * See the License for the specific language governing permissions and
13 * limitations under the License.
14 *
15 */
16 package org.xmlfield.annotations;
17
18 import java.lang.annotation.ElementType;
19 import java.lang.annotation.Retention;
20 import java.lang.annotation.RetentionPolicy;
21 import java.lang.annotation.Target;
22
23 import javax.xml.xpath.XPathConstants;
24
25 import org.joda.time.DateTime;
26
27 /**
28 * utiliser cette annotation sur une méthode de type <em>getter</em> ou
29 * <em>setter</em>, pour indiquer à quel sous-emplacement dans le DOM il faut
30 * aller chercher ou manipuler le champ correspondant par XPath.
31 *
32 * @author David Andrianavalontsalama
33 */
34 @Target(ElementType.METHOD)
35 @Retention(RetentionPolicy.RUNTIME)
36 public @interface FieldXPath {
37
38 /**
39 * le sous-emplacement dans le DOM il faut aller chercher ou manipuler le
40 * champ correspondant par XPath.
41 * <p>
42 * L'expression XPath ne doit pas commencer par un slash ("<tt>/</tt>").
43 */
44 String value();
45
46 /**
47 * le format de sérialisation/désérialisaiton utiliser entre une valeur
48 * récupérée par XPath de type {@link XPathConstants#NODE} et la propriété
49 * Java annotée.
50 * <p>
51 * Exemple de format pour une propriété {@link DateTime} :
52 * <tt>"yyyy-MM-dd"</tt>.
53 */
54 String format() default "";
55
56 /**
57 * le type que retournera l'évaluation XPath.
58 * <p>
59 * Les correspondances sont les suivantes :
60 * <ul>
61 * <li><tt>Object.class</tt>(par défaut) : {@link XPathConstants#NODESET} ou
62 * {@link XPathConstants#NODE}, selon que le type de retour du
63 * <em>getter</tt> annoté par <tt>FieldXPath</tt> est un tableau ou non.
64 * La propriété Java peut être de n'importe quel type : <em>int</em>,
65 * <em>String</em>, objet…
66 * <li><tt>Number.class</tt> : {@link XPathConstants#NUMBER}, par exemple
67 * pour une expression XPath de type "<tt>count(xxx)</tt>". La valeur sera
68 * ensuite convertie dans le type déclaré de la propriété Java (<em>int</em>, <em>long</em>, <em>short</em>, <em>float</em> ou <em>double</em>).
69 * <li><tt>String.class</tt> : {@link XPathConstants#STRING}, par exemple
70 * pour une expression XPath de type "<tt>substring(xxx)</tt>".
71 * </ul>
72 */
73 Class<?> xpathType() default Object.class;
74 }