View Javadoc

1   package org.andromda.cartridges.spring.metafacades;
2   
3   import java.util.ArrayList;
4   import java.util.Collection;
5   import java.util.Iterator;
6   import java.util.List;
7   
8   import org.andromda.cartridges.spring.SpringHibernateUtils;
9   import org.andromda.cartridges.spring.metafacades.SpringGlobals;
10  import org.andromda.metafacades.uml.DependencyFacade;
11  import org.andromda.metafacades.uml.ModelElementFacade;
12  import org.apache.commons.collections.CollectionUtils;
13  import org.apache.commons.collections.Predicate;
14  import org.apache.commons.lang.StringUtils;
15  
16  /***
17   * MetafacadeLogic implementation for org.andromda.cartridges.spring.metafacades.SpringDependency.
18   *
19   * @see org.andromda.cartridges.spring.metafacades.SpringDependency
20   */
21  public class SpringDependencyLogicImpl
22          extends SpringDependencyLogic
23  {
24      
25      public SpringDependencyLogicImpl(Object metaObject, String context)
26      {
27          super(metaObject, context);
28      }
29  
30      /***
31       * @see org.andromda.cartridges.spring.metafacades.SpringDependency#getTransformationConstantName()
32       */
33      protected String handleGetTransformationConstantName()
34      {
35          return SpringGlobals.TRANSFORMATION_CONSTANT_PREFIX + this.getName().toUpperCase();
36      }
37  
38      /***
39       * @see org.andromda.cartridges.spring.metafacades.SpringDependency#getTransformationMethodName()
40       */
41      protected String handleGetTransformationMethodName()
42      {
43          return SpringGlobals.TRANSFORMATION_METHOD_PREFIX + StringUtils.capitalize(this.getName());
44      }
45  
46      /***
47       * The suffix for the transformation annonymous name.
48       */
49      private static final String TRANSFORMATION_ANONYMOUS_NAME_SUFFIX = "_TRANSFORMER";
50  
51      /***
52       * @see org.andromda.cartridges.spring.metafacades.SpringDependency#getTransformationAnonymousName()
53       */
54      protected String handleGetTransformationAnonymousName()
55      {
56          return this.getName().toUpperCase() + TRANSFORMATION_ANONYMOUS_NAME_SUFFIX;
57      }
58  
59      /***
60       * @see org.andromda.cartridges.spring.metafacades.SpringDependency#isCircularReference()
61       */
62      protected boolean handleIsCircularReference()
63      {
64          boolean circularReference = false;
65          final ModelElementFacade sourceElement = this.getSourceElement();
66          final ModelElementFacade targetElement = this.getTargetElement();
67          final Collection sourceDependencies = targetElement.getSourceDependencies();
68          if (sourceDependencies != null && !sourceDependencies.isEmpty())
69          {
70              circularReference = CollectionUtils.find(sourceDependencies, new Predicate()
71              {
72                  public boolean evaluate(Object object)
73                  {
74                      DependencyFacade dependency = (DependencyFacade)object;
75                      return dependency != null && dependency.getTargetElement().equals(sourceElement);
76                  }
77              }) != null;
78          }
79          return circularReference;
80      }
81      
82      private boolean isXmlPersistenceActive() {
83          return SpringHibernateUtils.isXmlPersistenceActive((String)this.getConfiguredProperty(SpringGlobals.HIBERNATE_VERSION),        
84                                                             (String)this.getConfiguredProperty(SpringGlobals.HIBERNATE_XML_PERSISTENCE));
85      }
86      
87      /***
88       * @see org.andromda.cartridges.spring.metafacades.SpringDependency#getTransformationConstantValue()
89       */
90      protected int handleGetTransformationConstantValue()
91      {
92          int value = 0;
93          ModelElementFacade element = this.getSourceElement();
94          if (element instanceof SpringEntity)
95          {
96              final List hierarchy = new ArrayList();
97              for (SpringEntity entity = (SpringEntity)element; entity != null; entity = (SpringEntity)entity.getGeneralization())
98              {
99                  hierarchy.add(entity);
100             }
101             boolean breakOut = false;
102             for (int ctr = hierarchy.size() - 1; ctr >= 0; ctr--)
103             {
104                 final SpringEntity generalization = (SpringEntity)hierarchy.get(ctr);
105                 for (final Iterator referenceIterator = generalization.getValueObjectReferences().iterator(); referenceIterator.hasNext();)
106                 {
107                     final Object reference = referenceIterator.next();
108                     value++;
109                     if (reference.equals(this))
110                     {
111                         breakOut = true;
112                         break;
113                     }
114                 }
115                 if (breakOut)
116                 {
117                     break;
118                 }
119             }
120         }
121         
122         if (isXmlPersistenceActive())
123             value++;
124         
125         return value;
126     }
127 
128     /***
129      * @see org.andromda.cartridges.spring.metafacades.SpringDependency#getTransformationToCollectionMethodName()
130      */
131     protected String handleGetTransformationToCollectionMethodName()
132     {
133         return SpringGlobals.TRANSFORMATION_METHOD_PREFIX + StringUtils.capitalize(this.getName()) +
134                 SpringGlobals.TRANSFORMATION_TO_COLLECTION_METHOD_SUFFIX;
135     }
136 
137     /***
138      * @see org.andromda.cartridges.spring.metafacades.SpringDependency#getDaoName()
139      */
140     protected String handleGetDaoName()
141     {
142         return this.getDaoNamePattern().replaceAll("//{0//}", this.getName());
143     }
144 
145     /***
146      * Gets the value of the {@link SpringGlobals#DAO_PATTERN}.
147      *
148      * @return the DAO name pattern.
149      */
150     private String getDaoNamePattern()
151     {
152         return String.valueOf(this.getConfiguredProperty(SpringGlobals.DAO_PATTERN));
153     }
154 
155     /***
156      * @see org.andromda.cartridges.spring.metafacades.SpringDependency#getDaoGetterName()
157      */
158     protected String handleGetDaoGetterName()
159     {
160         return "get" + StringUtils.capitalize(this.getDaoName());
161     }
162 
163     /***
164      * @see org.andromda.cartridges.spring.metafacades.SpringDependency#getDaoSetterName()
165      */
166     protected String handleGetDaoSetterName()
167     {
168         return "set" + StringUtils.capitalize(this.getDaoName());
169     }
170 
171     /***
172      * @see org.andromda.cartridges.spring.metafacades.SpringDependency#getTransformationToEntityCollectionMethodName()
173      */
174     protected String handleGetTransformationToEntityCollectionMethodName()
175     {
176         return this.getTransformationToEntityMethodName() + SpringGlobals.TRANSFORMATION_TO_COLLECTION_METHOD_SUFFIX;
177     }
178     
179     /***
180      * The suffix for the transformation to entity method name.
181      */
182     private static final String TRANSFORMATION_TO_ENTITY_METHOD_NAME_SUFFIX = "ToEntity";
183 
184     /***
185      * @see org.andromda.cartridges.spring.metafacades.SpringDependency#getTransformationToEntityMethodName()
186      */    
187     protected String handleGetTransformationToEntityMethodName()
188     {
189         return this.getName() + TRANSFORMATION_TO_ENTITY_METHOD_NAME_SUFFIX;
190     }
191     
192     /***
193      * The suffix for the value object to entity transformer.
194      */
195     private static final String VALUE_OBJECT_TO_ENTITY_TRANSFORMER_SUFFIX = "Transformer";
196 
197     /***
198      * @see org.andromda.cartridges.spring.metafacades.SpringDependency#getValueObjectToEntityTransformerName()
199      */    
200     protected String handleGetValueObjectToEntityTransformerName()
201     {
202         return StringUtils.capitalize(this.getTransformationToEntityMethodName()) + VALUE_OBJECT_TO_ENTITY_TRANSFORMER_SUFFIX;
203     }
204 }