From: Eric C <ecr...@us...> - 2006-03-08 04:18:56
|
User: ecrutchfield Date: 06/03/07 20:18:54 Added: andromda-nspring/src/main/java/org/andromda/cartridges/nspring/metafacades SpringDependencyLogicImpl.java SpringManageableEntityLogicImpl.java SpringMetafacadeUtils.java SpringCriteriaAttributeLogicImpl.java SpringEntityOperationLogicImpl.java SpringManageableEntityAssociationEndLogicImpl.java SpringEntityLogicImpl.java SpringManageableEntityAttributeLogicImpl.java SpringQueryOperationLogicImpl.java SpringCriteriaSearchLogicImpl.java SpringServiceLogicImpl.java SpringAssociationEndLogicImpl.java SpringGlobals.java SpringServiceOperationLogicImpl.java andromda-nspring/src/site/xdoc index.xml howto1.xml tips.xml howto5.xml howto2.xml howto4.xml howto8.xml howto6.xml howto.xml howto7.xml howto3.xml andromda-nspring/src/main/resources/META-INF/andromda profile.xml metafacades.xml namespace.xml cartridge.xml andromda-nspring/src/site/xdoc/resources/howto HowToModel.xml.zip HowToPictures.zip andromda-nspring/src/main/uml SpringMetafacadeModel.xml.zip andromda-nspring/src/main/resources/templates/nspring NSpringHibernateDaoBase.vsl NSpringHibernateDaoImplManual.vsl NSpringGlobals.vm NSpringDaoInterface.vsl NSpringHibernateDaoImpl.vsl NSpringDaoFactory.vsl andromda-nspring/src/main/java/org/andromda/cartridges/nspring SpringProfile.java SpringUtils.java SpringHibernateUtils.java andromda-nspring .cvsignore .project pom.xml .classpath andromda-nspring/conf/test andromda.xml andromda-nspring/src/test/mappings MergeMappings.xml andromda-nspring/src/test/expected cartridge-output.zip andromda-nspring/src/site site.xml andromda-nspring/src/test/uml SpringCartridgeTestModel.xml.zip andromda-nspring/conf/howto andromda.xml Log: add nspring cartridge Revision Changes Path 1.1 cartridges/andromda-nspring/src/main/java/org/andromda/cartridges/nspring/metafacades/SpringDependencyLogicImpl.java Index: SpringDependencyLogicImpl.java =================================================================== package org.andromda.cartridges.nspring.metafacades; import java.util.ArrayList; import java.util.Collection; import java.util.Iterator; import java.util.List; import org.andromda.metafacades.uml.DependencyFacade; import org.andromda.metafacades.uml.ModelElementFacade; import org.apache.commons.collections.CollectionUtils; import org.apache.commons.collections.Predicate; import org.apache.commons.lang.StringUtils; /** * MetafacadeLogic implementation for org.andromda.cartridges.nspring.metafacades.SpringDependency. * * @see org.andromda.cartridges.nspring.metafacades.SpringDependency */ public class SpringDependencyLogicImpl extends SpringDependencyLogic { public SpringDependencyLogicImpl(Object metaObject, String context) { super(metaObject, context); } /** * @see org.andromda.cartridges.nspring.metafacades.SpringDependency#getTransformationConstantName() */ protected String handleGetTransformationConstantName() { return SpringGlobals.TRANSFORMATION_CONSTANT_PREFIX + this.getName().toUpperCase(); } /** * @see org.andromda.cartridges.nspring.metafacades.SpringDependency#getTransformationMethodName() */ protected String handleGetTransformationMethodName() { return SpringGlobals.TRANSFORMATION_METHOD_PREFIX + StringUtils.capitalize(this.getName()); } /** * The suffix for the transformation annonymous name. */ private static final String TRANSFORMATION_ANONYMOUS_NAME_SUFFIX = "_TRANSFORMER"; /** * @see org.andromda.cartridges.nspring.metafacades.SpringDependency#getTransformationAnonymousName() */ protected String handleGetTransformationAnonymousName() { return this.getName().toUpperCase() + TRANSFORMATION_ANONYMOUS_NAME_SUFFIX; } /** * @see org.andromda.cartridges.nspring.metafacades.SpringDependency#isCircularReference() */ protected boolean handleIsCircularReference() { boolean circularReference = false; final ModelElementFacade sourceElement = this.getSourceElement(); final ModelElementFacade targetElement = this.getTargetElement(); final Collection sourceDependencies = targetElement.getSourceDependencies(); if (sourceDependencies != null && !sourceDependencies.isEmpty()) { circularReference = CollectionUtils.find(sourceDependencies, new Predicate() { public boolean evaluate(Object object) { DependencyFacade dependency = (DependencyFacade)object; return dependency != null && dependency.getTargetElement().equals(sourceElement); } }) != null; } return circularReference; } /** * @see org.andromda.cartridges.nspring.metafacades.SpringDependency#getTransformationConstantValue() */ protected int handleGetTransformationConstantValue() { int value = 0; ModelElementFacade element = this.getSourceElement(); if (element instanceof SpringEntity) { final List hierarchy = new ArrayList(); for (SpringEntity entity = (SpringEntity)element; entity != null; entity = (SpringEntity)entity.getGeneralization()) { hierarchy.add(entity); } boolean breakOut = false; for (int ctr = hierarchy.size() - 1; ctr >= 0; ctr--) { final SpringEntity generalization = (SpringEntity)hierarchy.get(ctr); for (final Iterator referenceIterator = generalization.getValueObjectReferences().iterator(); referenceIterator.hasNext();) { final Object reference = referenceIterator.next(); value++; if (reference.equals(this)) { breakOut = true; break; } } if (breakOut) { break; } } } return value; } /** * @see org.andromda.cartridges.nspring.metafacades.SpringDependency#getTransformationToListMethodName() */ protected String handleGetTransformationToListMethodName() { return SpringGlobals.TRANSFORMATION_METHOD_PREFIX + StringUtils.capitalize(this.getName()) + SpringGlobals.TRANSFORMATION_TO_LIST_METHOD_SUFFIX; } /** * @see org.andromda.cartridges.nspring.metafacades.SpringDependency#getDaoName() */ protected String handleGetDaoName() { return this.getDaoNamePattern().replaceAll("\\{0\\}", this.getName()); } /** * Gets the value of the {@link SpringGlobals#DAO_PATTERN}. * * @return the DAO name pattern. */ private String getDaoNamePattern() { return String.valueOf(this.getConfiguredProperty(SpringGlobals.DAO_PATTERN)); } /** * @see org.andromda.cartridges.nspring.metafacades.SpringDependency#getDaoGetterName() */ protected String handleGetDaoGetterName() { return "get" + StringUtils.capitalize(this.getDaoName()); } /** * @see org.andromda.cartridges.nspring.metafacades.SpringDependency#getDaoSetterName() */ protected String handleGetDaoSetterName() { return "set" + StringUtils.capitalize(this.getDaoName()); } /** * @see org.andromda.cartridges.nspring.metafacades.SpringDependency#getTransformationToEntityListMethodName() */ protected String handleGetTransformationToEntityListMethodName() { return this.getTransformationToEntityMethodName() + SpringGlobals.TRANSFORMATION_TO_LIST_METHOD_SUFFIX; } /** * The suffix for the transformation to entity method name. */ private static final String TRANSFORMATION_TO_ENTITY_METHOD_NAME_SUFFIX = "ToEntity"; /** * @see org.andromda.cartridges.nspring.metafacades.SpringDependency#getTransformationToEntityMethodName() */ protected String handleGetTransformationToEntityMethodName() { return StringUtils.capitalize(this.getName()) + TRANSFORMATION_TO_ENTITY_METHOD_NAME_SUFFIX; } /** * The suffix for the value object to entity transformer. */ private static final String VALUE_OBJECT_TO_ENTITY_TRANSFORMER_SUFFIX = "Transformer"; /** * @see org.andromda.cartridges.nspring.metafacades.SpringDependency#getValueObjectToEntityTransformerName() */ protected String handleGetValueObjectToEntityTransformerName() { return StringUtils.capitalize(this.getTransformationToEntityMethodName()) + VALUE_OBJECT_TO_ENTITY_TRANSFORMER_SUFFIX; } } 1.1 cartridges/andromda-nspring/src/main/java/org/andromda/cartridges/nspring/metafacades/SpringManageableEntityLogicImpl.java Index: SpringManageableEntityLogicImpl.java =================================================================== package org.andromda.cartridges.nspring.metafacades; import org.andromda.metafacades.uml.UMLMetafacadeProperties; import org.apache.commons.lang.StringUtils; /** * MetafacadeLogic implementation for org.andromda.cartridges.nspring.metafacades.SpringManageableEntity. * * @see org.andromda.cartridges.nspring.metafacades.SpringManageableEntity */ public class SpringManageableEntityLogicImpl extends SpringManageableEntityLogic { public SpringManageableEntityLogicImpl (Object metaObject, String context) { super (metaObject, context); } /** * @return the configured property denoting the character sequence to use for the separation of namespaces */ private String getNamespaceProperty() { return (String)getConfiguredProperty(UMLMetafacadeProperties.NAMESPACE_SEPARATOR); } protected java.lang.String handleGetDaoReferenceName() { final char[] name = getName().toCharArray(); if (name.length > 0) { name[0] = Character.toLowerCase(name[0]); } return new String(name) + "Dao"; } protected java.lang.String handleGetManageableDaoName() { return getName() + "ManageableDao"; } protected java.lang.String handleGetFullyQualifiedManageableDaoName() { return getManageablePackageName() + getNamespaceProperty() + getManageableDaoName(); } protected String handleGetManageableDaoFullPath() { return StringUtils.replace(this.getFullyQualifiedManageableDaoName(), getNamespaceProperty(), "/"); } protected String handleGetManageableDaoBaseName() { return getManageableDaoName() + "Base"; } protected String handleGetFullyQualifiedManageableDaoBaseName() { return getManageablePackageName() + getNamespaceProperty() + getManageableDaoBaseName(); } protected String handleGetManageableDaoBaseFullPath() { return StringUtils.replace(this.getFullyQualifiedManageableDaoBaseName(), this.getNamespaceProperty(), "/"); } protected String handleGetManageableServiceBaseName() { return getManageableServiceName() + "Base"; } protected String handleGetFullyQualifiedManageableServiceBaseName() { return getManageablePackageName() + getNamespaceProperty() + getManageableServiceBaseName(); } protected String handleGetManageableServiceBaseFullPath() { return StringUtils.replace(this.getFullyQualifiedManageableServiceBaseName(), this.getNamespaceProperty(), "/"); } protected String handleGetManageableValueObjectFullPath() { return StringUtils.replace(this.getFullyQualifiedManageableValueObjectName(), this.getNamespaceProperty(), "/"); } protected String handleGetManageableValueObjectClassName() { return getName() + "ValueObject"; } protected String handleGetFullyQualifiedManageableValueObjectName() { return getManageablePackageName() + getNamespaceProperty() + getManageableValueObjectClassName(); } } 1.1 cartridges/andromda-nspring/src/main/java/org/andromda/cartridges/nspring/metafacades/SpringMetafacadeUtils.java Index: SpringMetafacadeUtils.java =================================================================== package org.andromda.cartridges.nspring.metafacades; import org.andromda.cartridges.nspring.SpringProfile; import org.andromda.core.common.ExceptionUtils; import org.andromda.metafacades.uml.ClassifierFacade; import org.andromda.metafacades.uml.ModelElementFacade; import org.andromda.metafacades.uml.UMLProfile; import org.apache.commons.collections.CollectionUtils; import org.apache.commons.collections.Predicate; import org.apache.commons.lang.StringUtils; /** * Contains utilities specific to dealing with the Spring cartridge metafacades. * * @author Chad Brandon * @author Peter Friese */ class SpringMetafacadeUtils { /** * Creates a fully qualified name from the given <code>packageName</code>, <code>name</code>, and * <code>suffix</code>. * * @param packageName the name of the model element package. * @param name the name of the model element. * @param suffix the suffix to append. * @return the new fully qualified name. */ static String getFullyQualifiedName(String packageName, String name, String suffix) { StringBuffer fullyQualifiedName = new StringBuffer(StringUtils.trimToEmpty(packageName)); if (StringUtils.isNotBlank(packageName)) { fullyQualifiedName.append("."); } fullyQualifiedName.append(StringUtils.trimToEmpty(name)); if (StringUtils.isNotEmpty(suffix)) { fullyQualifiedName.append(StringUtils.trimToEmpty(suffix)); } return fullyQualifiedName.toString(); } /** * Creates a fully qualified name from the given <code>packageName</code>, <code>name</code>, and * <code>suffix</code>. * * @param packageName the name of the model element package. * @param name the name of the model element. * @return the new fully qualified name. */ static String getFullyQualifiedName(String packageName, String name) { return getFullyQualifiedName(packageName, name, null); } /** * Gets the remoting type for the passed in <code>classifier</code>. If the remoting type can be retrieved from the * <code>classifier</code>, then that is used, otherwise the <code>defaultRemotingType</code> is returned. * * @return String the remoting type name. */ static String getServiceRemotingType(ClassifierFacade classifier, String defaultServiceRemotingType) { final String methodName = "SpringMetafacadeUtils.getServiceRemotingType"; ExceptionUtils.checkNull(methodName, "classifer", classifier); String remotingType = null; if (classifier.hasStereotype(UMLProfile.STEREOTYPE_SERVICE)) { String remotingTypeValue = (String)classifier.findTaggedValue( SpringProfile.TAGGEDVALUE_SPRING_SERVICE_REMOTING_TYPE); // if the remoting type wasn't found, search all super classes if (StringUtils.isEmpty(remotingTypeValue)) { remotingType = (String)CollectionUtils.find(classifier.getAllGeneralizations(), new Predicate() { public boolean evaluate(Object object) { return ((ModelElementFacade)object).findTaggedValue( SpringProfile.TAGGEDVALUE_SPRING_SERVICE_REMOTING_TYPE) != null; } }); } if (StringUtils.isNotEmpty(remotingTypeValue)) { remotingType = remotingTypeValue; } } if (StringUtils.isEmpty(remotingType)) { remotingType = defaultServiceRemotingType; } return remotingType.toLowerCase().trim(); } /** * Get the interceptors for the passed in <code>classifier</code>. If the interceptors can be retrieved from the * <code>classifier</code>, then these will be used, otherwise the <code>defaultInterceptors</code> are * returned. * * @param classifier the classifier whose interceptors we are looking for. * @param defaultInterceptors a list of interceptors to use if the classifier itself has no explicit interceptors. * * @return String[] the interceptors. */ static String[] getServiceInterceptors(ClassifierFacade classifier, String[] defaultInterceptors) { final String methodName = "SpringMetafacadeUtils.getServiceInterceptors"; ExceptionUtils.checkNull(methodName, "classifier", classifier); String[] interceptors = null; if (classifier.hasStereotype(UMLProfile.STEREOTYPE_SERVICE)) { String interceptorsValue = (String)classifier.findTaggedValue( SpringProfile.TAGGEDVALUE_SPRING_SERVICE_INTERCEPTORS); // if the interceptors weren't found, search all super classes if (StringUtils.isEmpty(interceptorsValue)) { interceptorsValue = (String)CollectionUtils.find(classifier.getAllGeneralizations(), new Predicate() { public boolean evaluate(Object object) { return ((ModelElementFacade)object).findTaggedValue( SpringProfile.TAGGEDVALUE_SPRING_SERVICE_INTERCEPTORS) != null; } }); } // interceptors are a comma-separated list of strings, go and split the list if (StringUtils.isNotEmpty(interceptorsValue)) { interceptors = interceptorsValue.split(","); } } if (interceptors == null || interceptors.length == 0) { interceptors = defaultInterceptors; } return interceptors; } /** * Gets the remote service port for the passed in <code>classifier</code>. If the remote service * port can be retrieved from the <code>classifier</code>, then that is used, otherwise the * <code>defaultRemoteServicePort</code> is returned. * * @return String the remote service port. */ static String getServiceRemotePort(ClassifierFacade classifier, String defaultRemoteServicePort) { final String methodName = "SpringMetafacadeUtils.getRemoteServicePort"; ExceptionUtils.checkNull(methodName, "classifer", classifier); String remoteServicePort = null; if (classifier.hasStereotype(UMLProfile.STEREOTYPE_SERVICE)) { String remoteServicePortValue = (String)classifier.findTaggedValue( SpringProfile.TAGGEDVALUE_SPRING_SERVICE_REMOTE_PORT); // if the remote service port wasn't found, search all super classes if (StringUtils.isEmpty(remoteServicePortValue)) { remoteServicePort = (String)CollectionUtils.find(classifier.getAllGeneralizations(), new Predicate() { public boolean evaluate(Object object) { return ((ModelElementFacade)object).findTaggedValue( SpringProfile.TAGGEDVALUE_SPRING_SERVICE_REMOTE_PORT) != null; } }); } if (StringUtils.isNotEmpty(remoteServicePortValue)) { remoteServicePort = remoteServicePortValue; } } if (StringUtils.isEmpty(remoteServicePort)) { remoteServicePort = defaultRemoteServicePort; } return remoteServicePort.toLowerCase().trim(); } } 1.1 cartridges/andromda-nspring/src/main/java/org/andromda/cartridges/nspring/metafacades/SpringCriteriaAttributeLogicImpl.java Index: SpringCriteriaAttributeLogicImpl.java =================================================================== package org.andromda.cartridges.nspring.metafacades; import org.andromda.cartridges.nspring.SpringProfile; import org.apache.commons.lang.BooleanUtils; import org.apache.commons.lang.ObjectUtils; import org.apache.commons.lang.StringUtils; /** * MetafacadeLogic implementation for org.andromda.cartridges.nspring.metafacades.SpringCriteriaAttribute. * * @see org.andromda.cartridges.nspring.metafacades.SpringCriteriaAttribute */ public class SpringCriteriaAttributeLogicImpl extends SpringCriteriaAttributeLogic { public SpringCriteriaAttributeLogicImpl( Object metaObject, String context) { super(metaObject, context); } /** * @see org.andromda.cartridges.nspring.metafacades.SpringCriteriaAttribute#getAttributeName() */ protected java.lang.String handleGetAttributeName() { // use the attribute name by default String attributeName = getName(); // if there is a tagged value, use it instead Object value = findTaggedValue(SpringProfile.TAGGEDVALUE_HIBERNATE_CRITERIA_ATTRIBUTE); if (value != null) { attributeName = String.valueOf(value); } return StringUtils.trimToEmpty(attributeName); } /** * @see org.andromda.cartridges.nspring.metafacades.SpringCriteriaAttribute#getComparator() */ protected java.lang.String handleGetComparator() { String comparator = null; Object value = findTaggedValue(SpringProfile.TAGGEDVALUE_HIBERNATE_CRITERIA_COMPARATOR); if (value != null) { comparator = String.valueOf(value); } return StringUtils.trimToEmpty(comparator); } /** * @see org.andromda.cartridges.nspring.metafacades.SpringCriteriaAttribute#isComparatorPresent() */ protected boolean handleIsComparatorPresent() { return !StringUtils.isEmpty(getComparator()); } /** * @see org.andromda.cartridges.nspring.metafacades.SpringCriteriaAttribute#getComparatorConstant() */ protected String handleGetComparatorConstant() { String comparator = getComparator(); String comparatorConstant = null; if (comparator != null) { if (SpringProfile.TAGGEDVALUEVALUE_COMPARATOR_LIKE.equalsIgnoreCase(comparator)) { comparatorConstant = "LIKE_COMPARATOR"; } else if (SpringProfile.TAGGEDVALUEVALUE_INSENSITIVE_LIKE_COMPARATOR.equalsIgnoreCase(comparator)) { comparatorConstant = "INSENSITIVE_LIKE_COMPARATOR"; } else if (SpringProfile.TAGGEDVALUEVALUE_COMPARATOR_EQUAL.equalsIgnoreCase(comparator)) { comparatorConstant = "EQUAL_COMPARATOR"; } else if (SpringProfile.TAGGEDVALUEVALUE_COMPARATOR_GREATER_OR_EQUAL.equalsIgnoreCase(comparator)) { comparatorConstant = "GREATER_THAN_OR_EQUAL_COMPARATOR"; } else if (SpringProfile.TAGGEDVALUEVALUE_COMPARATOR_GREATER.equalsIgnoreCase(comparator)) { comparatorConstant = "GREATER_THAN_COMPARATOR"; } else if (SpringProfile.TAGGEDVALUEVALUE_COMPARATOR_LESS_OR_EQUAL.equalsIgnoreCase(comparator)) { comparatorConstant = "LESS_THAN_OR_EQUAL_COMPARATOR"; } else if (SpringProfile.TAGGEDVALUEVALUE_COMPARATOR_LESS.equalsIgnoreCase(comparator)) { comparatorConstant = "LESS_THAN_COMPARATOR"; } else if (SpringProfile.TAGGEDVALUEVALUE_COMPARATOR_IN.equalsIgnoreCase(comparator)) { comparatorConstant = "IN_COMPARATOR"; } else if (SpringProfile.TAGGEDVALUEVALUE_COMPARATOR_NOT_EQUAL.equalsIgnoreCase(comparator)) { comparatorConstant = "NOT_EQUAL_COMPARATOR"; } } return comparatorConstant; } /** * @see org.andromda.cartridges.nspring.metafacades.SpringCriteriaAttributeLogic#handleIsNullable() */ protected boolean handleIsNullable() { boolean result = false; String value = StringUtils.trimToEmpty((String)findTaggedValue(SpringProfile.TAGGEDVALUE_HIBERNATE_CRITERIA_NULLABLE)); if (!StringUtils.isEmpty(value)) { result = BooleanUtils.toBoolean(value); } return result; } /** * @see org.andromda.cartridges.nspring.metafacades.SpringCriteriaAttributeLogic#handleGetMatchMode() */ protected String handleGetMatchMode() { String matchMode = null; Object value = findTaggedValue(SpringProfile.TAGGEDVALUE_HIBERNATE_CRITERIA_MATCHMODE); if (value != null) { matchMode = String.valueOf(value); } String result = StringUtils.trimToEmpty(matchMode); return result; } /** * @see org.andromda.cartridges.nspring.metafacades.SpringCriteriaAttributeLogic#handleGetMatchModeConstant() */ protected String handleGetMatchModeConstant() { String matchMode = getMatchMode(); String matchModeConstant = null; if (matchMode != null) { if (matchMode.equals(SpringProfile.TAGGEDVALUEVALUE_MATCHMODE_ANYWHERE)) { matchModeConstant = "ANYWHERE"; } else if (matchMode.equals(SpringProfile.TAGGEDVALUEVALUE_MATCHMODE_END)) { matchModeConstant = "END"; } else if (matchMode.equals(SpringProfile.TAGGEDVALUEVALUE_MATCHMODE_EXACT)) { matchModeConstant = "EXACT"; } else if (matchMode.equals(SpringProfile.TAGGEDVALUEVALUE_MATCHMODE_START)) { matchModeConstant = "START"; } } return matchModeConstant; } /** * @see org.andromda.cartridges.nspring.metafacades.SpringCriteriaAttributeLogic#handleIsMatchModePresent() */ protected boolean handleIsMatchModePresent() { return !StringUtils.isEmpty(getMatchMode()); } private static final String ORDER_UNSET = "ORDER_UNSET"; /** * @see org.andromda.cartridges.nspring.metafacades.SpringCriteriaAttributeLogic#handleIsOrderable() */ protected boolean handleIsOrderable() { return !ORDER_UNSET.equals(getOrderDirection()); } /** * @see org.andromda.cartridges.nspring.metafacades.SpringCriteriaAttributeLogic#handleGetOrderDirection() */ protected String handleGetOrderDirection() { String result = ORDER_UNSET; String value = StringUtils.trimToEmpty( (String)findTaggedValue(SpringProfile.TAGGEDVALUE_HIBERNATE_CRITERIA_ORDER_DIRECTION)); if (!StringUtils.isEmpty(value)) { if (value.equals(SpringProfile.TAGGEDVALUEVALUE_ORDER_ASCENDING)) { result = "ORDER_ASC"; } else if (value.equals(SpringProfile.TAGGEDVALUEVALUE_ORDER_DESCENDING)) { result = "ORDER_DESC"; } } return result; } /** * Used for undefined states of the criteria ordering. */ private static final int UNSET = -1; /** * @see org.andromda.cartridges.nspring.metafacades.SpringCriteriaAttributeLogic#handleGetOrderRelevance() */ protected int handleGetOrderRelevance() { int result = UNSET; String value = StringUtils.trimToEmpty( (String)findTaggedValue(SpringProfile.TAGGEDVALUE_HIBERNATE_CRITERIA_ORDER_RELEVANCE)); if (!StringUtils.isEmpty(value)) { result = Integer.parseInt(value); } return result; } /** * The default value for whether hibernate criteria arguments are case insensitive or not. */ private static final String HIBERNATE_CRITERIA_QUERY_IGNORE_CASE = "hibernateCriteriaQueryIgnoreCase"; /** * @see org.andromda.cartridges.nspring.metafacades.SpringCriteriaAttributeLogic#isIgnoreCase() */ protected boolean handleIsIgnoreCase() { Object value = this.findTaggedValue(SpringProfile.TAGGEDVALUE_HIBERNATE_CRITERIA_COMPARATOR_IGNORE_CASE); if (value == null) { value = this.getConfiguredProperty(HIBERNATE_CRITERIA_QUERY_IGNORE_CASE); } return Boolean.valueOf(ObjectUtils.toString(value)).booleanValue(); } } 1.1 cartridges/andromda-nspring/src/main/java/org/andromda/cartridges/nspring/metafacades/SpringEntityOperationLogicImpl.java Index: SpringEntityOperationLogicImpl.java =================================================================== package org.andromda.cartridges.nspring.metafacades; import org.apache.commons.lang.StringUtils; /** * MetafacadeLogic implementation for org.andromda.cartridges.nspring.metafacades.SpringEntityOperation. * * @see org.andromda.cartridges.nspring.metafacades.SpringEntityOperation */ public class SpringEntityOperationLogicImpl extends SpringEntityOperationLogic { public SpringEntityOperationLogicImpl(Object metaObject, String context) { super(metaObject, context); } /** * @see org.andromda.cartridges.nspring.metafacades.SpringEntityOperation#getImplementationName() */ protected java.lang.String handleGetImplementationName() { return this.getImplementationOperationName(StringUtils.capitalize(this.getName())); } /** * @see org.andromda.cartridges.nspring.metafacades.SpringEntityOperation#getImplementationCall() */ protected java.lang.String handleGetImplementationCall() { return this.getImplementationOperationName(StringUtils.capitalize(this.getCall())); } /** * @see org.andromda.cartridges.nspring.metafacades.SpringEntityOperation#getImplementationSignature() */ protected java.lang.String handleGetImplementationSignature() { return this.getImplementationOperationName(StringUtils.capitalize(this.getSignature())); } /** * Retrieves the implementationOperatName by replacing the <code>replacement</code> in the {@link * SpringGlobals#IMPLEMENTATION_OPERATION_NAME_PATTERN} * * @param replacement the replacement string for the pattern. * @return the operation name */ private String getImplementationOperationName(String replacement) { return StringUtils.trimToEmpty(String.valueOf(this.getConfiguredProperty( SpringGlobals.IMPLEMENTATION_OPERATION_NAME_PATTERN))).replaceAll("\\{0\\}", replacement); } } 1.1 cartridges/andromda-nspring/src/main/java/org/andromda/cartridges/nspring/metafacades/SpringManageableEntityAssociationEndLogicImpl.java Index: SpringManageableEntityAssociationEndLogicImpl.java =================================================================== package org.andromda.cartridges.nspring.metafacades; import org.andromda.metafacades.uml.ClassifierFacade; import org.andromda.utils.StringUtilsHelper; /** * MetafacadeLogic implementation for org.andromda.cartridges.nspring.metafacades.SpringManageableEntityAssociationEnd. * * @see org.andromda.cartridges.nspring.metafacades.SpringManageableEntityAssociationEnd */ public class SpringManageableEntityAssociationEndLogicImpl extends SpringManageableEntityAssociationEndLogic { public SpringManageableEntityAssociationEndLogicImpl (Object metaObject, String context) { super (metaObject, context); } protected java.lang.String handleGetDaoName() { return StringUtilsHelper.lowerCamelCaseName(this.getName()) + "Dao"; } protected java.lang.String handleGetDaoReferenceName() { String referenceName = null; final ClassifierFacade type = this.getType(); if (type instanceof SpringManageableEntity) { final SpringManageableEntity entity = (SpringManageableEntity)type; referenceName = entity.getBeanName(false); } return referenceName; } protected java.lang.String handleGetDaoGetterName() { return this.getGetterName() + "Dao"; } protected java.lang.String handleGetDaoSetterName() { return this.getSetterName() + "Dao"; } } 1.1 cartridges/andromda-nspring/src/main/java/org/andromda/cartridges/nspring/metafacades/SpringEntityLogicImpl.java Index: SpringEntityLogicImpl.java =================================================================== package org.andromda.cartridges.nspring.metafacades; import java.text.MessageFormat; import java.util.ArrayList; import java.util.Collection; import java.util.Iterator; import org.andromda.cartridges.nspring.SpringProfile; import org.andromda.metafacades.uml.AttributeFacade; import org.andromda.metafacades.uml.ClassifierFacade; import org.andromda.metafacades.uml.DependencyFacade; import org.andromda.metafacades.uml.EnumerationFacade; import org.andromda.metafacades.uml.FilteredCollection; import org.andromda.metafacades.uml.GeneralizableElementFacade; import org.andromda.metafacades.uml.OperationFacade; import org.andromda.metafacades.uml.UMLProfile; import org.andromda.metafacades.uml.ValueObject; import org.apache.commons.collections.CollectionUtils; import org.apache.commons.lang.StringUtils; /** * MetafacadeLogic implementation for org.andromda.cartridges.nspring.metafacades.SpringEntity. * * @see org.andromda.cartridges.nspring.metafacades.SpringEntity */ public class SpringEntityLogicImpl extends SpringEntityLogic { public SpringEntityLogicImpl( Object metaObject, String context) { super(metaObject, context); } /** * Value for one Table per root class */ private static final String INHERITANCE_STRATEGY_CLASS = "class"; /** * Value for joined-subclass */ private static final String INHERITANCE_STRATEGY_SUBCLASS = "subclass"; /** * Value for one Table per concrete class */ private static final String INHERITANCE_STRATEGY_CONCRETE = "concrete"; /** * Value make Entity an interface, delegate attributes to subclasses. */ private static final String INHERITANCE_STRATEGY_INTERFACE = "interface"; /** * Stores the valid inheritance strategies. */ private static final Collection inheritanceStrategies = new ArrayList(); static { inheritanceStrategies.add(INHERITANCE_STRATEGY_CLASS); inheritanceStrategies.add(INHERITANCE_STRATEGY_SUBCLASS); inheritanceStrategies.add(INHERITANCE_STRATEGY_CONCRETE); inheritanceStrategies.add(INHERITANCE_STRATEGY_INTERFACE); } /** * @see org.andromda.cartridges.nspring.metafacades.SpringEntity#getDaoName() */ protected java.lang.String handleGetDaoName() { return this.getDaoNamePattern().replaceAll( "\\{0\\}", this.getName()); } /** * Gets the value of the {@link SpringGlobals#DAO_PATTERN} * * @return the DAO name pattern. */ private String getDaoNamePattern() { return String.valueOf(this.getConfiguredProperty(SpringGlobals.DAO_PATTERN)); } /** * @see org.andromda.cartridges.nspring.metafacades.SpringEntity#getFullyQualifiedDaoName() */ protected java.lang.String handleGetFullyQualifiedDaoName() { return SpringMetafacadeUtils.getFullyQualifiedName( this.getPackageName(), this.getDaoName()); } /** * @see org.andromda.cartridges.nspring.metafacades.SpringEntity#getDaoImplementationName() */ protected java.lang.String handleGetDaoImplementationName() { return this.getDaoImplementationNamePattern().replaceAll( "\\{0\\}", this.getName()); } /** * Gets the value of the {@link SpringGlobals#DAO_IMPLEMENTATION_PATTERN} * * @return the DAO implementation name pattern. */ private String getDaoImplementationNamePattern() { return String.valueOf(this.getConfiguredProperty(SpringGlobals.DAO_IMPLEMENTATION_PATTERN)); } /** * @see org.andromda.cartridges.nspring.metafacades.SpringEntity#getFullyQualifiedDaoImplementationName() */ protected java.lang.String handleGetFullyQualifiedDaoImplementationName() { return SpringMetafacadeUtils.getFullyQualifiedName( this.getPackageName(), this.getDaoImplementationName()); } /** * @see org.andromda.cartridges.nspring.metafacades.SpringEntity#getDaoBaseName() */ protected java.lang.String handleGetDaoBaseName() { return this.getDaoBaseNamePattern().replaceAll( "\\{0\\}", this.getName()); } /** * Gets the value of the {@link SpringGlobals#DAO_BASE_PATTERN} * * @return the DAO base name pattern. */ private String getDaoBaseNamePattern() { return String.valueOf(this.getConfiguredProperty(SpringGlobals.DAO_BASE_PATTERN)); } /** * @see org.andromda.cartridges.nspring.metafacades.SpringEntity#getFullyQualifiedDaoBaseName() */ protected java.lang.String handleGetFullyQualifiedDaoBaseName() { return SpringMetafacadeUtils.getFullyQualifiedName( this.getPackageName(), this.getDaoBaseName()); } /** * @see org.andromda.cartridges.nspring.metafacades.SpringEntity#getImplementationName() */ protected java.lang.String handleGetEntityImplementationName() { return this.getEntityName() + SpringGlobals.IMPLEMENTATION_SUFFIX; } /** * @see org.andromda.cartridges.nspring.metafacades.SpringEntity#getFullyQualifiedEntityImplementationName() */ protected java.lang.String handleGetFullyQualifiedEntityImplementationName() { return SpringMetafacadeUtils.getFullyQualifiedName( this.getPackageName(), this.getEntityName(), SpringGlobals.IMPLEMENTATION_SUFFIX); } /** * @see org.andromda.cartridges.nspring.metafacades.SpringEntity#getBeanName(boolean) */ protected java.lang.String handleGetBeanName(boolean targetSuffix) { final String beanName = StringUtils.uncapitalize(StringUtils.trimToEmpty(this.getName())); final StringBuffer beanNameBuffer = new StringBuffer(this.getDaoNamePattern().replaceAll("\\{0\\}", beanName)); if (targetSuffix) { beanNameBuffer.append(SpringGlobals.BEAN_NAME_TARGET_SUFFIX); } return beanNameBuffer.toString(); } /** * @see org.andromda.cartridges.nspring.metafacades.SpringEntity#getEntityName() */ protected String handleGetEntityName() { final String entityNamePattern = (String)this.getConfiguredProperty("entityNamePattern"); return MessageFormat.format( entityNamePattern, new Object[] {StringUtils.trimToEmpty(this.getName())}); } /** * @see org.andromda.cartridges.nspring.metafacades.SpringEntity#getFullyQualifiedEntityName() */ protected String handleGetFullyQualifiedEntityName() { return SpringMetafacadeUtils.getFullyQualifiedName( this.getPackageName(), this.getEntityName(), null); } /** * @see org.andromda.cartridges.nspring.metafacades.SpringEntity#getRoot() */ protected Object handleGetRoot() { GeneralizableElementFacade generalization = this; for ( ; generalization.getGeneralization() != null && generalization instanceof SpringEntity; generalization = generalization.getGeneralization()) ; return generalization; } /** * The namespace property storing the hibernate default-cascade value for an entity. */ private static final String HIBERNATE_DEFAULT_CASCADE = "hibernateDefaultCascade"; /** * @see org.andromda.cartridges.nspring.metafacades.SpringEntity#getHibernateDefaultCascade() */ protected String handleGetHibernateDefaultCascade() { return StringUtils.trimToEmpty(String.valueOf(this.getConfiguredProperty(HIBERNATE_DEFAULT_CASCADE))); } /** * @see org.andromda.cartridges.nspring.metafacades.SpringEntity#isDaoBusinessOperationsPresent() */ protected boolean handleIsDaoBusinessOperationsPresent() { return this.getDaoBusinessOperations() != null && !this.getDaoBusinessOperations().isEmpty(); } /** * @see org.andromda.cartridges.nspring.metafacades.SpringEntity#getDaoBusinessOperations() */ protected Collection handleGetDaoBusinessOperations() { // operations that are not finders and static Collection finders = this.getQueryOperations(); Collection operations = this.getOperations(); Collection nonFinders = CollectionUtils.subtract(operations, finders); return new FilteredCollection(nonFinders) { public boolean evaluate(Object object) { return ((OperationFacade)object).isStatic(); } }; } /** * @see org.andromda.cartridges.nspring.metafacades.SpringEntity#getValueObjectReferences() */ protected Collection handleGetValueObjectReferences() { return this.getValueObjectReferences(false); } /** * Retrieves the values object references for this entity. If * <code>follow</code> is true, then all value object references * (including those that were inherited) will be retrieved. */ protected Collection getValueObjectReferences(boolean follow) { final Collection sourceDependencies = new ArrayList(this.getSourceDependencies()); if (follow) { for ( GeneralizableElementFacade entity = this.getGeneralization(); entity != null; entity = entity.getGeneralization()) { sourceDependencies.addAll(entity.getSourceDependencies()); } } return new FilteredCollection(sourceDependencies) { public boolean evaluate(Object object) { boolean valid = false; Object targetElement = ((DependencyFacade)object).getTargetElement(); if (targetElement instanceof ClassifierFacade) { ClassifierFacade element = (ClassifierFacade)targetElement; valid = element.isDataType() || element instanceof ValueObject || element instanceof EnumerationFacade; } return valid; } }; } /** * @see org.andromda.cartridges.nspring.metafacades.SpringEntity#getAllValueObjectReferences() */ protected Collection handleGetAllValueObjectReferences() { return this.getValueObjectReferences(true); } /** * @see org.andromda.cartridges.nspring.metafacades.SpringEntity#isDaoImplementationRequired() */ protected boolean handleIsDaoImplementationRequired() { return !this.getValueObjectReferences().isEmpty() || !this.getDaoBusinessOperations().isEmpty() || !this.getQueryOperations(true).isEmpty(); } /** * The suffix given to the no transformation constant. */ private static final String NO_TRANSFORMATION_CONSTANT_SUFFIX = "NONE"; /** * @see org.andromda.cartridges.nspring.metafacades.SpringEntity#getDaoNoTransformationConstantName() */ protected String handleGetDaoNoTransformationConstantName() { return SpringGlobals.TRANSFORMATION_CONSTANT_PREFIX + NO_TRANSFORMATION_CONSTANT_SUFFIX; } /** * Common routine to check inheritance. */ protected boolean checkHibInheritance(String inheritance) { return inheritance.equals(getHibernateInheritanceStrategy()); } /** * @see org.andromda.cartridges.nspring.metafacades.SpringEntity#isHibernateInheritanceClass() */ protected boolean handleIsHibernateInheritanceClass() { return checkHibInheritance(INHERITANCE_STRATEGY_CLASS); } /** * @see org.andromda.cartridges.nspring.metafacades.SpringEntity#isHibernateInheritanceInterface() */ protected boolean handleIsHibernateInheritanceInterface() { return checkHibInheritance(INHERITANCE_STRATEGY_INTERFACE); } /** * @see org.andromda.cartridges.nspring.metafacades.SpringEntity#isHibernateInheritanceSubclass() */ protected boolean handleIsHibernateInheritanceSubclass() { return checkHibInheritance(INHERITANCE_STRATEGY_SUBCLASS); } /** * @see org.andromda.cartridges.nspring.metafacades.SpringEntity#isHibernateInheritanceConcrete() */ protected boolean handleIsHibernateInheritanceConcrete() { return checkHibInheritance(INHERITANCE_STRATEGY_CONCRETE); } /** * Stores the default hibernate inheritance strategy. */ private static final String INHERITANCE_STRATEGY = "hibernateInheritanceStrategy"; /** * @see org.andromda.cartridges.nspring.metafacades.SpringEntity#getHibernateInheritanceStrategy() */ protected String handleGetHibernateInheritanceStrategy() { String inheritance = this.getInheritance(this); for (SpringEntity superEntity = this.getSuperEntity(); superEntity != null && StringUtils.isBlank(inheritance);) { inheritance = superEntity.getHibernateInheritanceStrategy(); } if (StringUtils.isBlank(inheritance) || !inheritanceStrategies.contains(inheritance)) { inheritance = this.getDefaultInheritanceStrategy(); } return inheritance; } /** * Gets the default hibernate inhertance strategy. * * @return the default hibernate inheritance strategy. */ private String getDefaultInheritanceStrategy() { return String.valueOf(this.getConfiguredProperty(INHERITANCE_STRATEGY)); } /** * Return the inheritance tagged value for for given <code>entity</code>. * * @param the SpringEntity from which to retrieve the inheritance tagged value. * @return String inheritance tagged value. */ private String getInheritance(SpringEntity entity) { String inheritance = null; if (entity != null) { Object value = entity.findTaggedValue(SpringProfile.TAGGEDVALUE_HIBERNATE_INHERITANCE); if (value != null) { inheritance = String.valueOf(value); } } return inheritance; } /** * @see org.andromda.cartridges.hibernate.metafacades.SpringEntity#isRequiresHibernateMapping() */ protected boolean handleIsRequiresHibernateMapping() { final SpringEntity superEntity = this.getSuperEntity(); return this.isRoot() && ( !this.isHibernateInheritanceInterface() || this.getSpecializations().isEmpty() || (superEntity != null && superEntity.isHibernateInheritanceInterface()) ); } /** * Indicates if this entity as a <code>root</code> entity (meaning it doesn't specialize anything). */ private boolean isRoot() { final SpringEntity superEntity = this.getSuperEntity(); boolean abstractConcreteEntity = (this.isHibernateInheritanceConcrete() || this.isHibernateInheritanceInterface()) && this.isAbstract(); return ( this.getSuperEntity() == null || (superEntity.isHibernateInheritanceInterface() || superEntity.isHibernateInheritanceConcrete()) ) && !abstractConcreteEntity; } /** * Gets the super entity for this entity (if one exists). If a generalization does not exist OR if it's not an * instance of SpringEntity then return null. * * @return the super entity or null if one doesn't exist. */ private SpringEntity getSuperEntity() { SpringEntity superEntity = null; if (this.getGeneralization() != null && this.getGeneralization() instanceof SpringEntity) { superEntity = (SpringEntity)this.getGeneralization(); } return superEntity; } /** * @see org.andromda.cartridges.nspring.metafacades.SpringEntity#getAttributeEmbeddedValueList() */ protected String handleGetAttributeEmbeddedValueList() { final Collection embeddedValues = new ArrayList(); for (final Iterator iterator = this.getAttributes().iterator(); iterator.hasNext();) { final AttributeFacade attribute = (AttributeFacade)iterator.next(); final ClassifierFacade type = attribute.getType(); if (type != null && type.hasStereotype(UMLProfile.STEREOTYPE_EMBEDDED_VALUE)) { embeddedValues.add(attribute.getName()); } } final StringBuffer buffer = new StringBuffer(); for (final Iterator iterator = embeddedValues.iterator(); iterator.hasNext();) { final String name = (String)iterator.next(); if (StringUtils.isNotBlank(name)) { buffer.append('\"' + name + '\"'); if (iterator.hasNext()) { buffer.append(", "); } } } return buffer.toString(); } } 1.1 cartridges/andromda-nspring/src/main/java/org/andromda/cartridges/nspring/metafacades/SpringManageableEntityAttributeLogicImpl.java Index: SpringManageableEntityAttributeLogicImpl.java =================================================================== package org.andromda.cartridges.nspring.metafacades; /** * MetafacadeLogic implementation for org.andromda.cartridges.nspring.metafacades.SpringManageableEntityAttribute. * * @see org.andromda.cartridges.nspring.metafacades.SpringManageableEntityAttribute */ public class SpringManageableEntityAttributeLogicImpl extends SpringManageableEntityAttributeLogic { public SpringManageableEntityAttributeLogicImpl (Object metaObject, String context) { super (metaObject, context); } } 1.1 cartridges/andromda-nspring/src/main/java/org/andromda/cartridges/nspring/metafacades/SpringQueryOperationLogicImpl.java Index: SpringQueryOperationLogicImpl.java =================================================================== package org.andromda.cartridges.nspring.metafacades; import java.util.Collection; import java.util.Iterator; import org.andromda.cartridges.nspring.SpringProfile; import org.andromda.metafacades.uml.ClassifierFacade; import org.andromda.metafacades.uml.ParameterFacade; import org.andromda.metafacades.uml.UMLProfile; import org.andromda.utils.StringUtilsHelper; import org.apache.commons.lang.StringUtils; /** * @see org.andromda.cartridges.hibernate.metafacades.SpringQueryOperation Metaclass facade implementation. */ public class SpringQueryOperationLogicImpl extends SpringQueryOperationLogic { public SpringQueryOperationLogicImpl(Object metaObject, String context) { super(metaObject, context); } /** * @see org.andromda.cartridges.nspring.metafacades.HibernateFinderMethod#getQuery() */ protected String handleGetQuery() { return this.getQuery((SpringEntity)null); } /** * Stores the translated query so that its only translated once. */ private String translatedQuery = null; /** * Retrieves the translated query. */ private String getTranslatedQuery() { if (this.translatedQuery == null) { this.translatedQuery = super.getQuery("query.Hibernate-QL"); } return this.translatedQuery; } /** * Stores whether or not named parameters should be used in hibernate queries. */ private static final String USE_NAMED_PARAMETERS = "hibernateQueryUseNamedParameters"; /** * @see org.andromda.cartridges.nspring.metafacades.HibernateFinderMethod#isUseNamedParameters() */ protected boolean handleIsUseNamedParameters() { return Boolean.valueOf(String.valueOf(this.getConfiguredProperty(USE_NAMED_PARAMETERS))).booleanValue() || StringUtils.isNotBlank( this.getTranslatedQuery()); } /** * @see org.andromda.cartridges.nspring.metafacades.SpringQueryOperation#isCriteriaFinder() */ protected boolean handleIsCriteriaFinder() { return (getCriteriaArgument() != null); } /** * @see org.andromda.cartridges.nspring.metafacades.SpringQueryOperation#getCriteriaArgument() */ protected ParameterFacade handleGetCriteriaArgument() { Collection parameters = getParameters(); for (final Iterator iter = parameters.iterator(); iter.hasNext();) { ParameterFacade parameter = (ParameterFacade)iter.next(); ClassifierFacade type = parameter.getType(); if (type.hasStereotype(UMLProfile.STEREOTYPE_CRITERIA)) { return parameter; } } return null; } /** * @see org.andromda.cartridges.nspring.metafacades.SpringQueryOperation#getQuery(org.andromda.cartridges.nspring.metafacades.SpringEntity) */ protected String handleGetQuery(SpringEntity entity) { // first see if we can retrieve the query from the super class as an OCL // translation String queryString = this.getTranslatedQuery(); // otherwise see if there is a query stored as a tagged value if (StringUtils.isEmpty(queryString)) { Object value = this.findTaggedValue(SpringProfile.TAGGEDVALUE_HIBERNATE_QUERY); queryString = (String)value; if (queryString != null) { // remove any excess whitespace queryString = queryString.replaceAll("[$\\s]+", " "); } } // if there wasn't any stored query, create one by default. if (StringUtils.isEmpty(queryString)) { SpringEntity owner; if (entity == null) { owner = (SpringEntity)this.getOwner(); } else { owner = entity; } String variableName = StringUtils.uncapitalize(owner.getName()); queryString = "from " + owner.getFullyQualifiedEntityImplementationName() + " as " + variableName; if (this.getArguments().size() > 0) { queryString = queryString + " where"; Collection arguments = this.getArguments(); if (arguments != null && !arguments.isEmpty()) { Iterator argumentIt = arguments.iterator(); for (int ctr = 0; argumentIt.hasNext(); ctr++) { ParameterFacade argument = (ParameterFacade)argumentIt.next(); String parameter = "?"; if (this.isUseNamedParameters()) { parameter = ":" + argument.getName(); } queryString = queryString + " " + variableName + "." + StringUtilsHelper.upperCamelCaseName(argument.getName()) + " = " + parameter; if (argumentIt.hasNext()) { queryString = queryString + " and"; } } } } } return queryString; } } 1.1 cartridges/andromda-nspring/src/main/java/org/andromda/cartridges/nspring/metafacades/SpringCriteriaSearchLogicImpl.java Index: SpringCriteriaSearchLogicImpl.java =================================================================== package org.andromda.cartridges.nspring.metafacades; /*... [truncated message content] |