r2388 - trunk/topia-persistence/src/main/java/org/nuiton/topia/generator
Author: tchemit Date: 2012-01-04 15:35:07 +0100 (Wed, 04 Jan 2012) New Revision: 2388 Url: http://nuiton.org/repositories/revision/topia/2388 Log: Evolution #1866: New tagvalue indexForeignKeys to generate index on FK for nm-multiplicity attributes Modified: trunk/topia-persistence/src/main/java/org/nuiton/topia/generator/EntityHibernateMappingGenerator.java trunk/topia-persistence/src/main/java/org/nuiton/topia/generator/TopiaGeneratorUtil.java trunk/topia-persistence/src/main/java/org/nuiton/topia/generator/TopiaStereoTypes.java trunk/topia-persistence/src/main/java/org/nuiton/topia/generator/TopiaTagValues.java Modified: trunk/topia-persistence/src/main/java/org/nuiton/topia/generator/EntityHibernateMappingGenerator.java =================================================================== --- trunk/topia-persistence/src/main/java/org/nuiton/topia/generator/EntityHibernateMappingGenerator.java 2012-01-04 14:30:07 UTC (rev 2387) +++ trunk/topia-persistence/src/main/java/org/nuiton/topia/generator/EntityHibernateMappingGenerator.java 2012-01-04 14:35:07 UTC (rev 2388) @@ -212,16 +212,24 @@ for (ObjectModelAttribute attribute : attributes) { if (!attribute.isNavigable() || attribute.hasAssociationClass() || - !TopiaGeneratorUtil.hasTableAssocIndexStereotype(attribute) || !TopiaGeneratorUtil.isNMultiplicity(attribute) || attribute.getClassifier() == null || !TopiaGeneratorUtil.isEntity(attribute.getClassifier()) ) { - // skip for this case + // skip for this case (not a nm-multiplicity attribute) continue; } + String indexForeignKeys = + TopiaGeneratorUtil.getIndexForeignKeys(attribute, model); + + if (StringUtils.isEmpty(indexForeignKeys) || !Boolean.valueOf(indexForeignKeys)) { + + // no index to put of the attribute. + continue; + } + // add database-object to create and drop index String tableName; @@ -240,7 +248,10 @@ tableName =TopiaGeneratorUtil.getDbName(attribute.getClassifier()); propertyName = TopiaGeneratorUtil.getDbName(clazz); } -/*{ <database-object><create>CREATE INDEX <%=indexName%> ON <%=tableName%>(<%=propertyName%>)</create><drop>DROP INDEX <%=indexName%></drop></database-object> +/*{ <database-object> + <create>CREATE INDEX <%=indexName%> ON <%=tableName%>(<%=propertyName%>)</create> + <drop>DROP INDEX <%=indexName%></drop> + </database-object> }*/ } Modified: trunk/topia-persistence/src/main/java/org/nuiton/topia/generator/TopiaGeneratorUtil.java =================================================================== --- trunk/topia-persistence/src/main/java/org/nuiton/topia/generator/TopiaGeneratorUtil.java 2012-01-04 14:30:07 UTC (rev 2387) +++ trunk/topia-persistence/src/main/java/org/nuiton/topia/generator/TopiaGeneratorUtil.java 2012-01-04 14:35:07 UTC (rev 2388) @@ -1277,19 +1277,6 @@ } /** - * Check if the given attribute has the - * {@link TopiaStereoTypes#STEREOTYPE_TABLE_ASSOC_INDEX} stereotype. - * - * @param attribute attribute to test - * @return {@code true} if stereotype was found, {@code false otherwise} - * @see TopiaStereoTypes#STEREOTYPE_TABLE_ASSOC_INDEX - * @since 2.6.5 - */ - public static boolean hasTableAssocIndexStereotype(ObjectModelAttribute attribute) { - return attribute.hasStereotype(TopiaStereoTypes.STEREOTYPE_TABLE_ASSOC_INDEX); - } - - /** * Obtain the value of the {@link TopiaTagValues#TAG_PERSISTENCE_TYPE} * tag value on the given classifier. * <p/> @@ -1779,7 +1766,7 @@ } /** - * Obtain the value of the {@link TopiaTagValues#TAG_DAO_IMPLEMENTATION} + * Obtains the value of the {@link TopiaTagValues#TAG_DAO_IMPLEMENTATION} * tag value on the given model. * <p/> * @@ -1793,6 +1780,22 @@ return value; } + /** + * Obtains the value of the tag value + * {@link TopiaTagValues#TAG_INDEX_FOREIGN_KEYS} on the model or on the + * given attribute. + * + * @param attribute attribute to test + * @param model model to test + * @return none empty value of the found tag value or {@code null} if not found nor empty. + * @see TopiaTagValues#TAG_INDEX_FOREIGN_KEYS + * @since 2.6.5 + */ + public static String getIndexForeignKeys(ObjectModelAttribute attribute, ObjectModel model) { + String value = findTagValue(TopiaTagValues.TAG_INDEX_FOREIGN_KEYS, attribute, model); + return value; + } + public static boolean hasUseEnumerationNameTagValue(ObjectModelAttribute attr, ObjectModel model) { String value = findTagValue(TopiaTagValues.TAG_USE_ENUMERATION_NAME, attr, model); return Boolean.parseBoolean(value); Modified: trunk/topia-persistence/src/main/java/org/nuiton/topia/generator/TopiaStereoTypes.java =================================================================== --- trunk/topia-persistence/src/main/java/org/nuiton/topia/generator/TopiaStereoTypes.java 2012-01-04 14:30:07 UTC (rev 2387) +++ trunk/topia-persistence/src/main/java/org/nuiton/topia/generator/TopiaStereoTypes.java 2012-01-04 14:35:07 UTC (rev 2388) @@ -115,14 +115,4 @@ @StereotypeDefinition(target = ObjectModelAttribute.class, documentation = "To specify that an attribute is part of a primary key (Hibernate mapping)") String STEREOTYPE_PRIMARYKAY = "primaryKey"; - - /** - * Stéréotype pour les attributs avec multiplicité nécessitant la création d'un index. - * - * @see TopiaGeneratorUtil#hasTableAssocIndexStereotype(ObjectModelAttribute) - * @since 2.6.5 - */ - @StereotypeDefinition(target = ObjectModelAttribute.class, - documentation = "To specify that an association attribute needs an index in db (Hibernate mapping)") - String STEREOTYPE_TABLE_ASSOC_INDEX = "tableAssocIndex"; } Modified: trunk/topia-persistence/src/main/java/org/nuiton/topia/generator/TopiaTagValues.java =================================================================== --- trunk/topia-persistence/src/main/java/org/nuiton/topia/generator/TopiaTagValues.java 2012-01-04 14:30:07 UTC (rev 2387) +++ trunk/topia-persistence/src/main/java/org/nuiton/topia/generator/TopiaTagValues.java 2012-01-04 14:35:07 UTC (rev 2388) @@ -25,6 +25,7 @@ package org.nuiton.topia.generator; import org.nuiton.eugene.EugeneTagValues; +import org.nuiton.eugene.ModelPropertiesUtil; import org.nuiton.eugene.models.Model; import org.nuiton.eugene.models.object.ObjectModel; import org.nuiton.eugene.models.object.ObjectModelAttribute; @@ -445,4 +446,14 @@ @TagValueDefinition(target = {ObjectModel.class, ObjectModelClassifier.class}, documentation = "This is deprecated since 2.5.4, no effect : no logs are generated in services.") String TAG_NO_LOG_IN_SERVICE = "noLogInService"; + + /** + * Stéréotype pour les attributs avec multiplicité nécessitant la création d'un index. + * + * @see TopiaGeneratorUtil#getIndexForeignKeys(ObjectModelAttribute, ObjectModel) + * @since 2.6.5 + */ + @TagValueDefinition(target = {ObjectModel.class,ObjectModelAttribute.class}, + documentation = "Specifies if an nm-multiplicity attribute (or all nm-multiplicity attributes of a given model) needs an index in db (Hibernate mapping)") + String TAG_INDEX_FOREIGN_KEYS = "indexForeignKeys"; }
participants (1)
-
tchemit@users.nuiton.org