This is an automated email from the git hooks/post-receive script. New commit to branch develop in repository observe. See https://gitlab.nuiton.org/codelutin/observe.git commit 150fc0385c19287a4ea9b5df98258763e845cde2 Author: Tony CHEMIT <chemit@codelutin.com> Date: Thu Nov 24 23:56:12 2016 +0100 Gérer les associations ordonnées (avec colonne _idx) lors de la réplication des entités --- .../persistence/metadata/TopiaMetadataEntity.java | 43 +++++++--------------- .../metadata/TopiaMetadataModelVisitor.java | 3 ++ .../sql/batch/actions/AbstractTablesAction.java | 1 - .../templates/TopiaMetadataModelGenerator.java | 19 ++++++++-- 4 files changed, 32 insertions(+), 34 deletions(-) diff --git a/topia-extension/src/main/java/org/nuiton/topia/persistence/metadata/TopiaMetadataEntity.java b/topia-extension/src/main/java/org/nuiton/topia/persistence/metadata/TopiaMetadataEntity.java index e2ecf98..5acfff6 100644 --- a/topia-extension/src/main/java/org/nuiton/topia/persistence/metadata/TopiaMetadataEntity.java +++ b/topia-extension/src/main/java/org/nuiton/topia/persistence/metadata/TopiaMetadataEntity.java @@ -23,7 +23,6 @@ package org.nuiton.topia.persistence.metadata; */ import com.google.common.base.MoreObjects; -import com.google.common.collect.ImmutableSet; import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; import org.nuiton.topia.persistence.TopiaEntity; @@ -91,10 +90,14 @@ public class TopiaMetadataEntity { */ protected final Map<String, String> properties = new LinkedHashMap<>(); /** - * Le dictionnaire des propriétés de type {@link Blob} + * La liste des propriétés de type {@link Blob} */ protected final Set<String> blobProperties = new HashSet<>(); /** + * La liste des colomnes supplémentaires ajoutée. + */ + protected final Set<String> extraColumnNames = new HashSet<>(); + /** * Le nom des colunnes correspondants aux propriétés de l'entité. * <b>Note: </b> On ne conserve que les correspondances qui diffèrent du nom de la propriété. * @@ -140,10 +143,6 @@ public class TopiaMetadataEntity { .toString(); } - public boolean withParent() { - return parent != null; - } - public String getParent() { return parent; } @@ -177,6 +176,7 @@ public class TopiaMetadataEntity { allDbColumnNames.add(TopiaEntity.PROPERTY_TOPIA_ID.toLowerCase()); allDbColumnNames.add(TopiaEntity.PROPERTY_TOPIA_CREATE_DATE.toLowerCase()); allDbColumnNames.add(TopiaEntity.PROPERTY_TOPIA_VERSION.toLowerCase()); + allDbColumnNames.addAll(extraColumnNames); } return allDbColumnNames; } @@ -205,17 +205,8 @@ public class TopiaMetadataEntity { return properties; } - public static final Set<String> PRIMITIVE_TYPES = ImmutableSet.of("byte", "boolean", "char", "int", "long", "float", "double"); - - public Set<String> getPrimitivePropertyNames() { - Set<String> names = new LinkedHashSet<>(); - for (Map.Entry<String, String> entry : properties.entrySet()) { - String propertyType = entry.getValue(); - if (PRIMITIVE_TYPES.contains(propertyType)) { - names.add(entry.getKey()); - } - } - return names; + public Set<String> getExtraColumnNames() { + return extraColumnNames; } public Set<String> getPrimitivePropertyNames(String primitiveType) { @@ -263,6 +254,10 @@ public class TopiaMetadataEntity { addDbColumnName(name, dbColumnName); } + public void addExtraColumn(String extraColumn) { + extraColumnNames.add(extraColumn); + } + public void addOneToManyAssociationInverse(TopiaMetadataEntity associationClazz, String name, String dbColumnName) { log.debug(getType() + "/" + name + "(" + dbColumnName + ") →" + associationClazz.getType()); oneToManyAssociationInverses.add(name); @@ -297,19 +292,6 @@ public class TopiaMetadataEntity { addDbColumnName(name, dbColumnName); } - public TopiaMetadataEntity copy() { - TopiaMetadataEntity copy = new TopiaMetadataEntity(parent, type, dbSchemaName, dbTableName); - copy.oneToManyAssociations.putAll(oneToManyAssociations); - copy.oneToManyAssociationInverses.addAll(oneToManyAssociationInverses); - copy.reversedAssociations.putAll(reversedAssociations); - copy.manyToManyAssociations.putAll(manyToManyAssociations); - copy.manyToOneAssociations.putAll(manyToOneAssociations); - copy.properties.putAll(properties); - copy.dbColumnsName.putAll(dbColumnsName); - copy.dbManyToManyAssociationsTableName.putAll(dbManyToManyAssociationsTableName); - return copy; - } - public void putAll(TopiaMetadataEntity metadataEntity) { metadataEntity.getOneToManyAssociations().putAll(getOneToManyAssociations()); metadataEntity.getOneToManyAssociationInverses().addAll(getOneToManyAssociationInverses()); @@ -317,6 +299,7 @@ public class TopiaMetadataEntity { metadataEntity.getManyToManyAssociations().putAll(getManyToManyAssociations()); metadataEntity.getManyToOneAssociations().putAll(getManyToOneAssociations()); metadataEntity.getProperties().putAll(getProperties()); + metadataEntity.getExtraColumnNames().addAll(getExtraColumnNames()); metadataEntity.getDbColumnsName().putAll(getDbColumnsName()); metadataEntity.getDbColumnsName().putAll(getDbManyToManyAssociationsTableName()); } diff --git a/topia-extension/src/main/java/org/nuiton/topia/persistence/metadata/TopiaMetadataModelVisitor.java b/topia-extension/src/main/java/org/nuiton/topia/persistence/metadata/TopiaMetadataModelVisitor.java index 081660c..293e5f3 100644 --- a/topia-extension/src/main/java/org/nuiton/topia/persistence/metadata/TopiaMetadataModelVisitor.java +++ b/topia-extension/src/main/java/org/nuiton/topia/persistence/metadata/TopiaMetadataModelVisitor.java @@ -210,6 +210,9 @@ public interface TopiaMetadataModelVisitor { } else { prefix += " "; appendPrefix("E → ").append(metadataEntity).append(eol); + if (!metadataEntity.getExtraColumnNames().isEmpty()) { + appendPrefix("Extra column names: ").append(metadataEntity.getExtraColumnNames()).append(eol); + } } } diff --git a/topia-extension/src/main/java/org/nuiton/topia/service/sql/batch/actions/AbstractTablesAction.java b/topia-extension/src/main/java/org/nuiton/topia/service/sql/batch/actions/AbstractTablesAction.java index d084f12..a3ee8bc 100644 --- a/topia-extension/src/main/java/org/nuiton/topia/service/sql/batch/actions/AbstractTablesAction.java +++ b/topia-extension/src/main/java/org/nuiton/topia/service/sql/batch/actions/AbstractTablesAction.java @@ -126,7 +126,6 @@ public abstract class AbstractTablesAction<R extends AbstractTablesRequest> exte if (table.isAssociationTable()) { authorizedColumnNames = new TreeSet<>(); - String entityType = table.getAssociationMetadataEntity().getType(); TopiaMetadataEntity entity = table.getAssociationMetadataEntity(); authorizedColumnNames.addAll(entity.getManyToManyAssociations().entrySet().stream() .filter(entry -> entry.getValue().equals(metadataEntity.getType())) diff --git a/topia-templates-extension/src/main/java/org/nuiton/topia/templates/TopiaMetadataModelGenerator.java b/topia-templates-extension/src/main/java/org/nuiton/topia/templates/TopiaMetadataModelGenerator.java index 9271d54..3151968 100644 --- a/topia-templates-extension/src/main/java/org/nuiton/topia/templates/TopiaMetadataModelGenerator.java +++ b/topia-templates-extension/src/main/java/org/nuiton/topia/templates/TopiaMetadataModelGenerator.java @@ -28,6 +28,7 @@ import com.google.gson.Gson; import com.google.gson.GsonBuilder; import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; +import org.nuiton.eugene.EugeneCoreTagValues; import org.nuiton.eugene.GeneratorUtil; import org.nuiton.eugene.models.object.ObjectModel; import org.nuiton.eugene.models.object.ObjectModelAttribute; @@ -62,6 +63,7 @@ public class TopiaMetadataModelGenerator extends ObjectModelGenerator { protected TopiaTemplateHelper templateHelper; protected TopiaHibernateTagValues topiaHibernateTagValues; + protected EugeneCoreTagValues eugeneCoreTagValues; public TopiaTemplateHelper getTemplateHelper() { if (templateHelper == null) { @@ -154,7 +156,7 @@ public class TopiaMetadataModelGenerator extends ObjectModelGenerator { Optional<TopiaMetadataEntity> optionalClazz = metadataModel.getOptionalEntity(entityClassName); if (optionalClazz.isPresent()) { - metadataEntity = optionalClazz.get().copy(); + metadataEntity = optionalClazz.get(); } else { @@ -231,7 +233,7 @@ public class TopiaMetadataModelGenerator extends ObjectModelGenerator { TopiaMetadataEntity attributeClazz; if (optionalAttributeClass.isPresent()) { - attributeClazz = optionalAttributeClass.get().copy(); + attributeClazz = optionalAttributeClass.get(); } else { attributeClazz = buildMetadataEntity(attributeClass, metadataModel, oneToManyAssociationInverses); } @@ -245,9 +247,20 @@ public class TopiaMetadataModelGenerator extends ObjectModelGenerator { } else { // one to many + boolean ordered = EugeneCoreTagValues.isOrdered(attr); + if (ordered) { + String extraColumn = templateHelper.getReverseDbName(attr); + if (extraColumn==null) { + extraColumn = entityClassName.toLowerCase(); + } + extraColumn+="_idx"; + if (log.isInfoEnabled()) { + log.info("Found ordered "+attr+" -> "+extraColumn); + } + attributeClazz.addExtraColumn(extraColumn); + } metadataEntity.addOneToManyAssociation(attributeClazz, name, attrColumn); oneToManyAssociationInverses.put(attributeClazz.getType(), metadataEntity.getType()); - } } else { -- To stop receiving notification emails like this one, please contact codelutin.com SCM administrator <admin+scm@codelutin.com>.