Author: tchemit Date: 2014-04-25 15:31:15 +0200 (Fri, 25 Apr 2014) New Revision: 3081 Url: http://forge.nuiton.org/projects/topia/repository/revisions/3081 Log: fixes #3174 Modified: trunk/topia-templates/src/main/java/org/nuiton/topia/templates/EntityHibernateMappingGenerator.java trunk/topia-templates/src/main/java/org/nuiton/topia/templates/EntityTransformer.java trunk/topia-templates/src/main/java/org/nuiton/topia/templates/TopiaGeneratorUtil.java trunk/topia-templates/src/main/java/org/nuiton/topia/templates/TopiaTagValues.java Modified: trunk/topia-templates/src/main/java/org/nuiton/topia/templates/EntityHibernateMappingGenerator.java =================================================================== --- trunk/topia-templates/src/main/java/org/nuiton/topia/templates/EntityHibernateMappingGenerator.java 2014-04-22 19:08:44 UTC (rev 3080) +++ trunk/topia-templates/src/main/java/org/nuiton/topia/templates/EntityHibernateMappingGenerator.java 2014-04-25 13:31:15 UTC (rev 3081) @@ -288,7 +288,7 @@ generateHibernateOneToOne(output, attr, prefix); } } else { - generateHibernateProperty(output, attr, prefix); + generateHibernateProperty(output, clazz, attr, prefix); } } else { if (attr.getClassifier() != null && TopiaGeneratorUtil.isEntity(attr.getClassifier())) { @@ -298,7 +298,7 @@ generateHibernateOneToMany(output, attr, prefix); } } else { - generateHibernateMany(output, attr, prefix); + generateHibernateMany(output, clazz, attr, prefix); } } } @@ -397,6 +397,7 @@ } protected void generateHibernateProperty(Writer output, + ObjectModelClass clazz, ObjectModelAttribute attr, String prefix) throws IOException { String attrType = getType(attr); @@ -502,7 +503,7 @@ // if the user tuned the model to use name instead of // ordinal to store the values, we must add a clause - boolean useEnumerationName = TopiaGeneratorUtil.hasUseEnumerationNameTagValue(attr, model); + boolean useEnumerationName = TopiaGeneratorUtil.hasUseEnumerationNameTagValue(clazz, attr, model); if (useEnumerationName) { String enumSQLType = String.valueOf(Types.VARCHAR); /*{ @@ -638,6 +639,7 @@ } protected void generateHibernateMany(Writer output, + ObjectModelClass clazz, ObjectModelAttribute attr, String prefix) throws IOException { boolean needsIndex = JavaGeneratorUtil.isOrdered(attr); @@ -658,7 +660,7 @@ } if (attrIsEnumeration) { - boolean useEnumerationName = TopiaGeneratorUtil.hasUseEnumerationNameTagValue(attr, model); + boolean useEnumerationName = TopiaGeneratorUtil.hasUseEnumerationNameTagValue(clazz, attr, model); /*{<%=prefix%> <element column="<%=attrColumn%>" node="id"> <%=prefix%> <type name="org.hibernate.type.EnumType"> <%=prefix%> <param name="<%=org.hibernate.type.EnumType.ENUM%>"><%=attrType%></param> Modified: trunk/topia-templates/src/main/java/org/nuiton/topia/templates/EntityTransformer.java =================================================================== --- trunk/topia-templates/src/main/java/org/nuiton/topia/templates/EntityTransformer.java 2014-04-22 19:08:44 UTC (rev 3080) +++ trunk/topia-templates/src/main/java/org/nuiton/topia/templates/EntityTransformer.java 2014-04-25 13:31:15 UTC (rev 3081) @@ -40,6 +40,7 @@ import org.nuiton.eugene.models.object.ObjectModelModifier; import org.nuiton.eugene.models.object.ObjectModelOperation; import org.nuiton.eugene.models.object.ObjectModelParameter; +import org.nuiton.eugene.models.object.xml.ObjectModelInterfaceImpl; import org.nuiton.topia.persistence.TopiaEntityVisitor; import org.nuiton.topia.persistence.internal.AbstractTopiaEntity; import org.nuiton.topia.persistence.TopiaDaoSupplier; @@ -144,6 +145,11 @@ // Create Entity Interface and its header createEntityInterface(input); + } else { + + // mock it + outputInterface = new ObjectModelInterfaceImpl(); + ((ObjectModelInterfaceImpl)outputInterface).setName(input.getName()); } if (generateAbstract) { @@ -664,6 +670,7 @@ * @see #addMultipleGetOperationFromEntity(ObjectModelAttribute) * @see #addMultipleSizeOperation(ObjectModelAttribute) * @see #addMultipleIsEmptyOperations(ObjectModelAttribute) + * @see #addMultipleGetByIndexOperation(ObjectModelAttribute) */ protected void generatePropertyOperations(ObjectModelAttribute attribute) { @@ -740,9 +747,10 @@ } - if (attribute.hasAssociationClass()) { - // getXXX with entity parameter - addMultipleGetOperationFromEntity(attribute); + if (TopiaGeneratorUtil.isOrdered(attribute)) { + + // getXXX(index) + addMultipleGetByIndexOperation(attribute); } // sizeXXX @@ -1129,6 +1137,35 @@ ); } + protected void addMultipleGetByIndexOperation(ObjectModelAttribute attribute) { + + String attrName = getPropertyName(attribute); + String attrType = getPropertyType(attribute); + + if (log.isDebugEnabled()) { + log.debug("Generate multiple 'getByTopiaId' operation for property : " + attrName + + " [" + attrType + "]"); + } + + // Interface operation + ObjectModelOperation interfaceOperation = + addOperation(outputInterface, getJavaBeanMethodName("get", attrName), + attrType, ObjectModelJavaModifier.PACKAGE); + ObjectModelParameter param = + addParameter(interfaceOperation, Integer.class, "index"); + + // Implementation + ObjectModelOperation implOperation = + createImplOperation(interfaceOperation); + + addImport(outputAbstract, TopiaEntityHelper.class); + + setOperationBody(implOperation, "" +/*{ + return <%=attrName%>.get(index); + }*/ + ); + } protected void addMultipleGetByTopiaIdOperation(ObjectModelAttribute attribute) { String attrName = getPropertyName(attribute); Modified: trunk/topia-templates/src/main/java/org/nuiton/topia/templates/TopiaGeneratorUtil.java =================================================================== --- trunk/topia-templates/src/main/java/org/nuiton/topia/templates/TopiaGeneratorUtil.java 2014-04-22 19:08:44 UTC (rev 3080) +++ trunk/topia-templates/src/main/java/org/nuiton/topia/templates/TopiaGeneratorUtil.java 2014-04-25 13:31:15 UTC (rev 3081) @@ -1561,8 +1561,12 @@ } //TODO Javadoc - public static boolean hasUseEnumerationNameTagValue(ObjectModelAttribute attr, ObjectModel model) { - String value = findTagValue(TopiaTagValues.TAG_USE_ENUMERATION_NAME, attr, model); + public static boolean hasUseEnumerationNameTagValue(ObjectModelClassifier classifier, ObjectModelAttribute attr, ObjectModel model) { + String value = findTagValue(TopiaTagValues.TAG_USE_ENUMERATION_NAME, classifier, model); + if (value == null) { + // try on attribute + value = findTagValue(TopiaTagValues.TAG_USE_ENUMERATION_NAME, attr, null); + } return Boolean.parseBoolean(value); } Modified: trunk/topia-templates/src/main/java/org/nuiton/topia/templates/TopiaTagValues.java =================================================================== --- trunk/topia-templates/src/main/java/org/nuiton/topia/templates/TopiaTagValues.java 2014-04-22 19:08:44 UTC (rev 3080) +++ trunk/topia-templates/src/main/java/org/nuiton/topia/templates/TopiaTagValues.java 2014-04-25 13:31:15 UTC (rev 3081) @@ -197,8 +197,10 @@ * énumération : l'ajout de la tagValue indique qu'il faut utiliser le * {@code name} de l'énumération et non l'ordinal pour stocker la valeur en * base + * @see TopiaGeneratorUtil#hasUseEnumerationNameTagValue(ObjectModelClassifier,ObjectModelAttribute,ObjectModel) + * @since 3.0 */ - @TagValueDefinition(target = {ObjectModelAttribute.class}, + @TagValueDefinition(target = {ObjectModel.class, ObjectModelClassifier.class, ObjectModelAttribute.class}, documentation = "'true' if the value of this attribute of type Enumeration should be stored with its name (instead of using ordinal)") String TAG_USE_ENUMERATION_NAME = "useEnumerationName";