View Javadoc

1   /** 2007, Digitalis Informatica. All rights reserved.
2    * 
3    * Distribuicao e Gestao de Informatica, Lda.
4    * Estrada de Paco de Arcos num.9 - Piso -1
5    * 2780-666 Paco de Arcos
6    * Telefone: (351) 21 4408990
7    * Fax: (351) 21 4408999
8    * http://www.digitalis.pt 
9    */
10  
11  package pt.digitalis.dif.codegen.util;
12  
13  import pt.digitalis.dif.dem.Entity;
14  import pt.digitalis.dif.dem.annotations.AnnotationMemberTags;
15  import pt.digitalis.dif.dem.annotations.AnnotationTags;
16  import pt.digitalis.dif.dem.annotations.entities.ApplicationDefinition;
17  import pt.digitalis.dif.dem.annotations.entities.ProviderDefinition;
18  import pt.digitalis.dif.dem.annotations.entities.ServiceDefinition;
19  import pt.digitalis.dif.dem.annotations.entities.StageDefinition;
20  import pt.digitalis.utils.CodeGenUtils;
21  import pt.digitalis.utils.bytecode.holders.AnnotationHolder;
22  import pt.digitalis.utils.bytecode.holders.ClassHolder;
23  import pt.digitalis.utils.inspection.exception.ResourceNotFoundException;
24  
25  /**
26   * A set of entity-inspection utilities.
27   * 
28   * @author Rodrigo Gonçalves <a href="mailto:rgoncalves@digitalis.pt">rgoncalves@digitalis.pt</a><br/>
29   * @created 2007/11/07
30   */
31  final public class EntityUtils {
32  
33      /**
34       * Returns the type of the entity type of the passed argument.
35       * 
36       * @param clazz
37       *            the DEM object
38       * @return the entity type of the class passed as argument
39       * @throws ResourceNotFoundException
40       *             if annotations can't be read
41       */
42      static public Entity getEntityType(ClassHolder clazz) throws ResourceNotFoundException {
43          if (clazz.containsAnnotation(ProviderDefinition.class.getCanonicalName())) {
44              return Entity.PROVIDER;
45          } else if (clazz.containsAnnotation(ApplicationDefinition.class.getCanonicalName())) {
46              return Entity.APPLICATION;
47          } else if (clazz.containsAnnotation(ServiceDefinition.class.getCanonicalName())) {
48              return Entity.SERVICE;
49          } else if (clazz.containsAnnotation(StageDefinition.class.getCanonicalName())) {
50              return Entity.STAGE;
51          }
52  
53          return null;
54      }
55  
56      /**
57       * Returns the ID of a given entity.
58       * 
59       * @param clazz
60       *            the DEM object
61       * @return the id of the supplied entity
62       * @throws ResourceNotFoundException
63       *             if the annotations can't be read
64       */
65      static public String getEntityID(ClassHolder clazz) throws ResourceNotFoundException {
66          String entityID = null;
67  
68          AnnotationHolder annotation = null;
69  
70          if (clazz.containsAnnotation(ProviderDefinition.class.getCanonicalName()))
71              annotation = clazz.getAnnotations().get(ProviderDefinition.class.getCanonicalName());
72  
73          else if (clazz.containsAnnotation(ApplicationDefinition.class.getCanonicalName()))
74              annotation = clazz.getAnnotations().get(ApplicationDefinition.class.getCanonicalName());
75  
76          else if (clazz.containsAnnotation(ServiceDefinition.class.getCanonicalName()))
77              annotation = clazz.getAnnotations().get(ServiceDefinition.class.getCanonicalName());
78  
79          else if (clazz.containsAnnotation(StageDefinition.class.getCanonicalName()))
80              annotation = clazz.getAnnotations().get(StageDefinition.class.getCanonicalName());
81  
82          if (annotation == null)
83              return null;
84  
85          else {
86              entityID = annotation.getMembers().get(AnnotationMemberTags.ENTITY_DEFINITION_ID).toString();
87  
88              // Check if id generation is needed...
89              if (AnnotationTags.GENERATE_ID.equals(entityID))
90                  entityID = CodeGenUtils.generateID(clazz.getName());
91  
92              return entityID.toLowerCase();
93          }
94      }
95  }