View Javadoc

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  }