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 }