Tony CHEMIT pushed to branch develop-5.x at ultreia.io / ird-observe Commits: d6ac3871 by Tony CHEMIT at 2017-03-10T15:48:57+01:00 [Synchro référentiel] Impossible de finir la synchro (See #744) - - - - - 3 changed files: - services-topia/src/main/java/fr/ird/observe/services/topia/service/actions/synchro/referential/legacy/UnidirectionalReferentialSynchronizeLocalServiceTopia.java - services-topia/src/main/java/fr/ird/observe/services/topia/service/actions/synchro/referential/sql/DeleteSqlStatementGenerator.java - services/src/main/java/fr/ird/observe/services/service/actions/synchro/referential/legacy/UnidirectionalReferentialSynchronizeEngine.java Changes: ===================================== services-topia/src/main/java/fr/ird/observe/services/topia/service/actions/synchro/referential/legacy/UnidirectionalReferentialSynchronizeLocalServiceTopia.java ===================================== --- a/services-topia/src/main/java/fr/ird/observe/services/topia/service/actions/synchro/referential/legacy/UnidirectionalReferentialSynchronizeLocalServiceTopia.java +++ b/services-topia/src/main/java/fr/ird/observe/services/topia/service/actions/synchro/referential/legacy/UnidirectionalReferentialSynchronizeLocalServiceTopia.java @@ -23,9 +23,13 @@ package fr.ird.observe.services.topia.service.actions.synchro.referential.legacy */ import fr.ird.observe.ObserveEntityEnum; +import fr.ird.observe.entities.referentiel.Gear; +import fr.ird.observe.entities.referentiel.GearCaracteristic; import fr.ird.observe.entities.referentiel.ObserveReferentialEntity; +import fr.ird.observe.services.dto.referential.OceanDto; import fr.ird.observe.services.dto.referential.ReferentialDto; import fr.ird.observe.services.dto.referential.ReferentialReference; +import fr.ird.observe.services.dto.referential.SpeciesDto; import fr.ird.observe.services.service.LastUpdateDateService; import fr.ird.observe.services.service.actions.synchro.referential.legacy.UnidirectionalReferentialSynchronizeLocalService; import fr.ird.observe.services.service.actions.synchro.referential.legacy.UnidirectionalReferentialSynchronizeRequest; @@ -144,8 +148,30 @@ public class UnidirectionalReferentialSynchronizeLocalServiceTopia extends Obser DeleteSqlStatementGenerator sqlStatementGenerator = new DeleteSqlStatementGenerator(metadataEntity); for (String id : request.getReferentialToRemove()) { - String sql = sqlStatementGenerator.generateSql(id); - result.add(sql); + if (SpeciesDto.class.equals(request.getReferentialName())) { + + // also remove ocean_species association + result.add(sqlStatementGenerator.generateAssociationSql("ocean_species","species", id)); + + // also remove species_specieslist association + result.add(sqlStatementGenerator.generateAssociationSql("species_specieslist","species", id)); + } + if (OceanDto.class.equals(request.getReferentialName())) { + + // also remove ocean_species association + result.add(sqlStatementGenerator.generateAssociationSql("ocean_species","ocean", id)); + } + if (Gear.class.equals(request.getReferentialName())) { + + // also remove gear_gearcaracteristic association + result.add(sqlStatementGenerator.generateAssociationSql("gear_gearcaracteristic","gear", id)); + } + if (GearCaracteristic.class.equals(request.getReferentialName())) { + + // also remove gear_gearcaracteristic association + result.add(sqlStatementGenerator.generateAssociationSql("gear_gearcaracteristic","gearcaracteristic", id)); + } + result.add(sqlStatementGenerator.generateSql(id)); } } ===================================== services-topia/src/main/java/fr/ird/observe/services/topia/service/actions/synchro/referential/sql/DeleteSqlStatementGenerator.java ===================================== --- a/services-topia/src/main/java/fr/ird/observe/services/topia/service/actions/synchro/referential/sql/DeleteSqlStatementGenerator.java +++ b/services-topia/src/main/java/fr/ird/observe/services/topia/service/actions/synchro/referential/sql/DeleteSqlStatementGenerator.java @@ -40,6 +40,7 @@ public class DeleteSqlStatementGenerator<R extends ReferentialDto> { private static final Log log = LogFactory.getLog(DeleteSqlStatementGenerator.class); private static final String DELETE_STATEMENT = "DELETE FROM %s.%s WHERE topiaId = '%s';\n"; + private static final String DELETE_ASSOCIATION_STATEMENT = "DELETE FROM %s.%s WHERE %s = '%s';\n"; private final String schemaName; private final String tableName; @@ -61,4 +62,16 @@ public class DeleteSqlStatementGenerator<R extends ReferentialDto> { } + public String generateAssociationSql(String tableName, String columnName, String id) { + + String result = String.format(DELETE_ASSOCIATION_STATEMENT, schemaName, tableName, columnName, id); + + if (log.isDebugEnabled()) { + log.debug("sql: " + result); + } + + return result; + + } + } ===================================== services/src/main/java/fr/ird/observe/services/service/actions/synchro/referential/legacy/UnidirectionalReferentialSynchronizeEngine.java ===================================== --- a/services/src/main/java/fr/ird/observe/services/service/actions/synchro/referential/legacy/UnidirectionalReferentialSynchronizeEngine.java +++ b/services/src/main/java/fr/ird/observe/services/service/actions/synchro/referential/legacy/UnidirectionalReferentialSynchronizeEngine.java @@ -102,7 +102,7 @@ public class UnidirectionalReferentialSynchronizeEngine { if (needCallback && callbackResults.containsReferentialName(referentialName)) { // l'utilisateur a agit sur ce référentiel - UnidirectionalReferentialSynchronizeCallbackResult callbackResult = callbackResults.getCallbackResult(referentialName); + UnidirectionalReferentialSynchronizeCallbackResult<?> callbackResult = callbackResults.getCallbackResult(referentialName); Map<String, String> ids = callbackResult.getIds(); View it on GitLab: https://gitlab.com/ultreia.io/ird-observe/commit/d6ac387162989fae56f6e7c46bc...