001: package org.andromda.cartridges.spring.metafacades;
002:
003: import java.util.ArrayList;
004: import java.util.Collection;
005: import java.util.Iterator;
006: import java.util.List;
007:
008: import org.andromda.cartridges.spring.SpringHibernateUtils;
009: import org.andromda.cartridges.spring.metafacades.SpringGlobals;
010: import org.andromda.metafacades.uml.DependencyFacade;
011: import org.andromda.metafacades.uml.ModelElementFacade;
012: import org.apache.commons.collections.CollectionUtils;
013: import org.apache.commons.collections.Predicate;
014: import org.apache.commons.lang.StringUtils;
015:
016: /**
017: * MetafacadeLogic implementation for org.andromda.cartridges.spring.metafacades.SpringDependency.
018: *
019: * @see org.andromda.cartridges.spring.metafacades.SpringDependency
020: */
021: public class SpringDependencyLogicImpl extends SpringDependencyLogic {
022:
023: public SpringDependencyLogicImpl(Object metaObject, String context) {
024: super (metaObject, context);
025: }
026:
027: /**
028: * @see org.andromda.cartridges.spring.metafacades.SpringDependency#getTransformationConstantName()
029: */
030: protected String handleGetTransformationConstantName() {
031: return SpringGlobals.TRANSFORMATION_CONSTANT_PREFIX
032: + this .getName().toUpperCase();
033: }
034:
035: /**
036: * @see org.andromda.cartridges.spring.metafacades.SpringDependency#getTransformationMethodName()
037: */
038: protected String handleGetTransformationMethodName() {
039: return SpringGlobals.TRANSFORMATION_METHOD_PREFIX
040: + StringUtils.capitalize(this .getName());
041: }
042:
043: /**
044: * The suffix for the transformation annonymous name.
045: */
046: private static final String TRANSFORMATION_ANONYMOUS_NAME_SUFFIX = "_TRANSFORMER";
047:
048: /**
049: * @see org.andromda.cartridges.spring.metafacades.SpringDependency#getTransformationAnonymousName()
050: */
051: protected String handleGetTransformationAnonymousName() {
052: return this .getName().toUpperCase()
053: + TRANSFORMATION_ANONYMOUS_NAME_SUFFIX;
054: }
055:
056: /**
057: * @see org.andromda.cartridges.spring.metafacades.SpringDependency#isCircularReference()
058: */
059: protected boolean handleIsCircularReference() {
060: boolean circularReference = false;
061: final ModelElementFacade sourceElement = this
062: .getSourceElement();
063: final ModelElementFacade targetElement = this
064: .getTargetElement();
065: final Collection sourceDependencies = targetElement
066: .getSourceDependencies();
067: if (sourceDependencies != null && !sourceDependencies.isEmpty()) {
068: circularReference = CollectionUtils.find(
069: sourceDependencies, new Predicate() {
070: public boolean evaluate(Object object) {
071: DependencyFacade dependency = (DependencyFacade) object;
072: return dependency != null
073: && dependency.getTargetElement()
074: .equals(sourceElement);
075: }
076: }) != null;
077: }
078: return circularReference;
079: }
080:
081: private boolean isXmlPersistenceActive() {
082: return SpringHibernateUtils
083: .isXmlPersistenceActive(
084: (String) this
085: .getConfiguredProperty(SpringGlobals.HIBERNATE_VERSION),
086: (String) this
087: .getConfiguredProperty(SpringGlobals.HIBERNATE_XML_PERSISTENCE));
088: }
089:
090: /**
091: * @see org.andromda.cartridges.spring.metafacades.SpringDependency#getTransformationConstantValue()
092: */
093: protected int handleGetTransformationConstantValue() {
094: int value = 0;
095: ModelElementFacade element = this .getSourceElement();
096: if (element instanceof SpringEntity) {
097: final List hierarchy = new ArrayList();
098: for (SpringEntity entity = (SpringEntity) element; entity != null; entity = (SpringEntity) entity
099: .getGeneralization()) {
100: hierarchy.add(entity);
101: }
102: boolean breakOut = false;
103: for (int ctr = hierarchy.size() - 1; ctr >= 0; ctr--) {
104: final SpringEntity generalization = (SpringEntity) hierarchy
105: .get(ctr);
106: for (final Iterator referenceIterator = generalization
107: .getValueObjectReferences().iterator(); referenceIterator
108: .hasNext();) {
109: final Object reference = referenceIterator.next();
110: value++;
111: if (reference.equals(this )) {
112: breakOut = true;
113: break;
114: }
115: }
116: if (breakOut) {
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: return SpringGlobals.TRANSFORMATION_METHOD_PREFIX
133: + 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: return this .getDaoNamePattern().replaceAll("\\{0\\}",
142: 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: return String.valueOf(this
152: .getConfiguredProperty(SpringGlobals.DAO_PATTERN));
153: }
154:
155: /**
156: * @see org.andromda.cartridges.spring.metafacades.SpringDependency#getDaoGetterName()
157: */
158: protected String handleGetDaoGetterName() {
159: return "get" + StringUtils.capitalize(this .getDaoName());
160: }
161:
162: /**
163: * @see org.andromda.cartridges.spring.metafacades.SpringDependency#getDaoSetterName()
164: */
165: protected String handleGetDaoSetterName() {
166: return "set" + StringUtils.capitalize(this .getDaoName());
167: }
168:
169: /**
170: * @see org.andromda.cartridges.spring.metafacades.SpringDependency#getTransformationToEntityCollectionMethodName()
171: */
172: protected String handleGetTransformationToEntityCollectionMethodName() {
173: return this .getTransformationToEntityMethodName()
174: + SpringGlobals.TRANSFORMATION_TO_COLLECTION_METHOD_SUFFIX;
175: }
176:
177: /**
178: * The suffix for the transformation to entity method name.
179: */
180: private static final String TRANSFORMATION_TO_ENTITY_METHOD_NAME_SUFFIX = "ToEntity";
181:
182: /**
183: * @see org.andromda.cartridges.spring.metafacades.SpringDependency#getTransformationToEntityMethodName()
184: */
185: protected String handleGetTransformationToEntityMethodName() {
186: return this .getName()
187: + TRANSFORMATION_TO_ENTITY_METHOD_NAME_SUFFIX;
188: }
189:
190: /**
191: * The suffix for the value object to entity transformer.
192: */
193: private static final String VALUE_OBJECT_TO_ENTITY_TRANSFORMER_SUFFIX = "Transformer";
194:
195: /**
196: * @see org.andromda.cartridges.spring.metafacades.SpringDependency#getValueObjectToEntityTransformerName()
197: */
198: protected String handleGetValueObjectToEntityTransformerName() {
199: return StringUtils.capitalize(this
200: .getTransformationToEntityMethodName())
201: + VALUE_OBJECT_TO_ENTITY_TRANSFORMER_SUFFIX;
202: }
203: }
|