View Javadoc

1   /**
2    * - Digitalis Internal Framework v2.0 -
3    *
4    * (C) 2007, Digitalis Informatica.
5    *
6    * Distribuicao e Gestao de Informatica, Lda.
7    * Estrada de Paco de Arcos num.9 - Piso -1
8    * 2780-666 Paco de Arcos
9    * Telefone: (351) 21 4408990
10   * Fax: (351) 21 4408999
11   * http://www.digitalis.pt
12   */
13  package pt.digitalis.dif.dem;
14  
15  import java.util.Map;
16  
17  import pt.digitalis.dif.dem.annotations.entities.ApplicationDefinition;
18  import pt.digitalis.dif.dem.annotations.entities.ProviderDefinition;
19  import pt.digitalis.dif.dem.annotations.entities.ServiceDefinition;
20  import pt.digitalis.dif.dem.annotations.entities.StageDefinition;
21  import pt.digitalis.dif.dem.annotations.entities.ValidatorDefinition;
22  import pt.digitalis.utils.bytecode.holders.AnnotationHolder;
23  import pt.digitalis.utils.bytecode.holders.ClassHolder;
24  import pt.digitalis.utils.inspection.exception.ResourceNotFoundException;
25  
26  /**
27   * Defines the known entity types to the framework.
28   *
29   * @author Rodrigo Gonçalves <a href="mailto:rgoncalves@digitalis.pt">rgoncalves@digitalis.pt</a>
30   * @author Pedro Viegas <a href="mailto:pviegas@digitalis.pt">pviegas@digitalis.pt</a>
31   * @created 2007/09/13
32   *
33   */
34  public enum Entity {
35  
36      /**
37       * A <code>@ValidatorDefinition</code> annotated Entity.
38       */
39      VALIDATOR(ValidatorDefinition.class),
40  
41      /**
42       * A <code>@ProviderDefinition</code> annotated Entity.
43       */
44      PROVIDER(ProviderDefinition.class),
45  
46      /**
47       * A <code>@ApplicationDefinition</code> annotated Entity.
48       */
49      APPLICATION(ApplicationDefinition.class),
50  
51      /**
52       * A <code>@ServiceDefinition</code> annotated Entity.
53       */
54      SERVICE(ServiceDefinition.class),
55  
56      /**
57       * A <code>@StageDefinition</code> annotated Entity.
58       */
59      STAGE(StageDefinition.class);
60  
61      /** The Entity's FQN. */
62      private String fullyQualifiedName;
63  
64      /** The Entity's name. */
65      private String name;
66  
67      /**
68       * Constructor.
69       *
70       * @param clazz
71       *            the Entity's class
72       */
73      Entity(Class<?> clazz) {
74          this.name = clazz.getName();
75          this.fullyQualifiedName = clazz.getCanonicalName();
76      }
77  
78      /**
79       * Returns the Entity's FQN.
80       *
81       * @return the Entity's FQN.
82       */
83      public String getFullyQualifiedName() {
84          return this.fullyQualifiedName;
85      }
86  
87      /**
88       * Returns the Entity's name.
89       *
90       * @return the Entity's name.
91       */
92      public String getName() {
93          return this.name;
94      }
95  
96      /**
97       * The ID builder utility method.
98       *
99       * @param type
100      *            the type of the entity
101      * @param id
102      *            the id of the entity
103      * @return the compiled unique id for the given entity
104      */
105     static public String getID(Entity type, String id) {
106         return (type + ":" + id.toLowerCase());
107     }
108 
109     /**
110      * Returns the Entity type of annotated class, null if no valid entity annotation is found.
111      *
112      * @param clazz
113      *            the class to inspect
114      * @return the entity type, null if no valid entity annotation is found.
115      * @throws ResourceNotFoundException
116      *             if the class annotations can't be read
117      */
118     static public Entity getEntityTypeFromClass(ClassHolder clazz) throws ResourceNotFoundException {
119 
120         // Read class annotation
121         Map<String, AnnotationHolder> orignalClassAnnotations = clazz.getAnnotations();
122 
123         // Return the appropriate entity type
124         if (orignalClassAnnotations.containsKey(ValidatorDefinition.class.getCanonicalName()))
125             return Entity.VALIDATOR;
126         else if (orignalClassAnnotations.containsKey(ProviderDefinition.class.getCanonicalName()))
127             return Entity.PROVIDER;
128         else if (orignalClassAnnotations.containsKey(ApplicationDefinition.class.getCanonicalName()))
129             return Entity.APPLICATION;
130         else if (orignalClassAnnotations.containsKey(ServiceDefinition.class.getCanonicalName()))
131             return Entity.SERVICE;
132         else if (orignalClassAnnotations.containsKey(StageDefinition.class.getCanonicalName()))
133             return Entity.STAGE;
134         else
135             return null;
136     }
137 }