r2028 - trunk/topia-persistence/src/main/java/org/nuiton/topia/generator
Author: fdesbois Date: 2010-06-25 00:43:33 +0200 (Fri, 25 Jun 2010) New Revision: 2028 Url: http://nuiton.org/repositories/revision/topia/2028 Log: Manage case for association attributes Modified: trunk/topia-persistence/src/main/java/org/nuiton/topia/generator/QueryHelperTransformer.java Modified: trunk/topia-persistence/src/main/java/org/nuiton/topia/generator/QueryHelperTransformer.java =================================================================== --- trunk/topia-persistence/src/main/java/org/nuiton/topia/generator/QueryHelperTransformer.java 2010-06-24 18:53:49 UTC (rev 2027) +++ trunk/topia-persistence/src/main/java/org/nuiton/topia/generator/QueryHelperTransformer.java 2010-06-24 22:43:33 UTC (rev 2028) @@ -5,6 +5,7 @@ import org.apache.commons.lang.math.RandomUtils; import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; +import org.nuiton.eugene.GeneratorUtil; import org.nuiton.eugene.java.JavaBuilder; import org.nuiton.eugene.java.ObjectModelTransformerToJava; import org.nuiton.eugene.models.object.ObjectModel; @@ -37,6 +38,8 @@ protected static final String ENTITY_PROPERTY_CLASS_NAME = "EntityProperty"; + protected static final String ENTITY_PROPERTY_SUFFIX = "Property"; + protected static final String ENTITY_PROPERTY_GENERIC_TYPE = "<E>"; protected String mainException; @@ -289,10 +292,6 @@ addExtraForSubEntity(clazz); } - protected String getPropertyClassName(ObjectModelClassifier entityClass) { - return entityClass.getName() + "Property"; - } - protected String createAliasConstant(String entityName) { String constantName = @@ -397,26 +396,28 @@ // Generate for all attributes for (ObjectModelAttribute attr : input.getAttributes()) { + // Case we don't want generation for + if (!attr.isNavigable()) { + continue; + } + + String attrName = getReferenceAttributeName(attr); + if (log.isDebugEnabled()) { - log.debug("Entity property : name=" + attr.getName() + + log.debug("Entity property : name=" + attrName + " _ navigable=" + attr.isNavigable() + " _ maxMultiplicity=" + attr.getMaxMultiplicity() + " _ associationClass=" + attr.hasAssociationClass() + " _ referenceClassifier=" + attr.referenceClassifier()); } - // Case we don't want generation for - if (!attr.isNavigable() || attr.hasAssociationClass()) { - continue; - } - ObjectModelOperation propertyNameOperation = - createGetPropertyNameOperation(propertyClass, attr.getName(), input.getName()); + createGetPropertyNameOperation(propertyClass, attrName, input.getName()); createGetPropertyObjectOperation(propertyClass, attr, propertyNameOperation); } - // Case of Association class + // Case of Association class : generate also for participant properties if (input instanceof ObjectModelAssociationClass) { ObjectModelAssociationClass assoc = (ObjectModelAssociationClass)input; @@ -455,26 +456,32 @@ protected ObjectModelOperation createGetPropertyObjectOperation(ObjectModelClass output, ObjectModelAttribute attrReference, ObjectModelOperation propertyNameOperation) { - ObjectModelOperation result = null; - if (attrReference.referenceClassifier() && attrReference.getMaxMultiplicity() == 1) { - String opName = attrReference.getName() + "Property"; + ObjectModelClassifier referenceClass = getReferenceAttributeClassifier(attrReference); - String referencePropertyClassName = getPropertyClassName(attrReference.getClassifier()); + // No reference, can add method to getPropertyObject + if (referenceClass == null) { + return null; + } - result = addOperation(output, opName, referencePropertyClassName, ObjectModelModifier.PUBLIC); + String operationName = getReferenceAttributeName(attrReference) + + ENTITY_PROPERTY_SUFFIX; - if (log.isDebugEnabled()) { - log.debug("Extra operation : " + opName + - " _ className = " + referencePropertyClassName); - } + String referencePropertyClassName = getPropertyClassName(referenceClass); - setOperationBody(result, "" + ObjectModelOperation result = + addOperation(output, operationName, referencePropertyClassName); + + if (log.isDebugEnabled()) { + log.debug("Extra operation : " + operationName + + " _ className = " + referencePropertyClassName); + } + + setOperationBody(result, "" /*{ return new<%=referencePropertyClassName%>(<%=propertyNameOperation.getName()%>()); }*/ - ); - } + ); return result; } @@ -535,6 +542,32 @@ } } + // Helpers + protected String getPropertyClassName(ObjectModelClassifier entityClass) { + return entityClass.getName() + ENTITY_PROPERTY_SUFFIX; + } + + protected String getReferenceAttributeName(ObjectModelAttribute attrReference) { + String attrName = attrReference.getName(); + if(attrReference.hasAssociationClass()) { + String assocAttrName = GeneratorUtil.getAssocAttrName(attrReference); + attrName = StringUtils.uncapitalize(assocAttrName); + } + return attrName; + } + + protected ObjectModelClassifier getReferenceAttributeClassifier(ObjectModelAttribute attrReference) { + ObjectModelClassifier referenceClass = null; + // case for attribute classifier, only for maxMultiplicity = 1 + if (attrReference.referenceClassifier() && attrReference.getMaxMultiplicity() == 1) { + referenceClass = attrReference.getClassifier(); + // case for association attribute + } else if (attrReference.hasAssociationClass()) { + referenceClass = attrReference.getAssociationClass(); + } + return referenceClass; + } + // For tests protected void setBuilder(JavaBuilder builder) { this.builder = builder;
participants (1)
-
fdesbois@users.nuiton.org