Tony CHEMIT pushed to branch develop at ultreiaio / ird-observe Commits: bc8df484 by Tony CHEMIT at 2017-06-09T12:25:05+02:00 Impossible d'enregistrer une connexion dans les préférences depuis les interfaces d'administration obtuna (See #778) - - - - - 7eb5fb2d by Tony CHEMIT at 2017-06-09T12:58:43+02:00 Problème de migration de base de v5 vers v6 sur observe_longline.sizemeasuretype (See #779) - - - - - e2d2ebcd by Tony CHEMIT at 2017-06-09T13:05:16+02:00 [Report v6] Erreur lors de synchros avec la base IEO (See #772) - - - - - 268d6af6 by Tony CHEMIT at 2017-06-09T13:17:09+02:00 [Report v6] Problème lors de la synchro de relation taille-poids entre la base française et la base espagnole (See #77) - - - - - 8 changed files: - application-swing/src/main/java/fr/ird/observe/application/swing/ui/actions/storage/SaveCurrentRemoteConfigurationUIAction.java - persistence/src/main/java/fr/ird/observe/persistence/migration/DataSourceMigrationForVersion_6_0.java - services-topia/src/main/java/fr/ird/observe/services/topia/service/actions/synchro/referential/ng/ReferentialSynchronizeSqlsRequestBuilder.java - services-topia/src/main/java/fr/ird/observe/services/topia/service/actions/synchro/referential/sql/InsertSqlStatementGenerator.java - services-topia/src/main/java/fr/ird/observe/services/topia/service/actions/synchro/referential/sql/InsertSqlWithCascadeStatementGenerator.java - services-topia/src/main/java/fr/ird/observe/services/topia/service/actions/synchro/referential/sql/UpdateSqlStatementGenerator.java - services-topia/src/main/java/fr/ird/observe/services/topia/service/actions/synchro/referential/sql/UpdateSqlWithCascadeStatementGenerator.java - topia-extension/src/main/java/org/nuiton/topia/persistence/metadata/TopiaMetadataEntity.java Changes: ===================================== application-swing/src/main/java/fr/ird/observe/application/swing/ui/actions/storage/SaveCurrentRemoteConfigurationUIAction.java ===================================== --- a/application-swing/src/main/java/fr/ird/observe/application/swing/ui/actions/storage/SaveCurrentRemoteConfigurationUIAction.java +++ b/application-swing/src/main/java/fr/ird/observe/application/swing/ui/actions/storage/SaveCurrentRemoteConfigurationUIAction.java @@ -22,6 +22,7 @@ package fr.ird.observe.application.swing.ui.actions.storage; * #L% */ +import fr.ird.observe.application.swing.ObserveSwingApplicationContext; import fr.ird.observe.application.swing.ui.ObserveKeyStrokes; import fr.ird.observe.application.swing.ui.ObserveMainUI; import fr.ird.observe.application.swing.ui.UIHelper; @@ -121,7 +122,7 @@ public class SaveCurrentRemoteConfigurationUIAction extends AbstractUIAction { configuration.setLogin(model.getRemoteLogin()); configuration.setPassword(new String(model.getRemotePassword())); configuration.setUseSsl(model.isUseSsl()); - getMainUI().getConfig().addRemoteDataSourceConfiguration(configuration); + ObserveSwingApplicationContext.get().getConfig().addRemoteDataSourceConfiguration(configuration); configUI.getHandler().addRemoteConfiguration(configuration); } } ===================================== persistence/src/main/java/fr/ird/observe/persistence/migration/DataSourceMigrationForVersion_6_0.java ===================================== --- a/persistence/src/main/java/fr/ird/observe/persistence/migration/DataSourceMigrationForVersion_6_0.java +++ b/persistence/src/main/java/fr/ird/observe/persistence/migration/DataSourceMigrationForVersion_6_0.java @@ -118,6 +118,7 @@ public class DataSourceMigrationForVersion_6_0 extends AbstractObserveMigrationC .put("LC", "fr.ird.observe.entities.referentiel.SizeMeasureType#1433499469115#0.42996318358928") .put("LT", "fr.ird.observe.entities.referentiel.SizeMeasureType#1433499466532#0.844473292818293") .put("", "fr.ird.observe.entities.referentiel.SizeMeasureType#1433499466532#0.844473292818293") + .put(" ", "fr.ird.observe.entities.referentiel.SizeMeasureType#1433499466532#0.844473292818293") .put("FL", "fr.ird.observe.entities.referentiel.SizeMeasureType#1433499465700#0.0902433863375336") .put("CFL", "fr.ird.observe.entities.referentiel.SizeMeasureType#1433499465999#0.707568018231541") .put("PAL", "fr.ird.observe.entities.referentiel.SizeMeasureType#1433499466255#0.444246932631359") @@ -145,7 +146,7 @@ public class DataSourceMigrationForVersion_6_0 extends AbstractObserveMigrationC @Override public PreparedStatement prepareQuery(Connection connection) throws SQLException { // Attention à ce moment là ce référentiel est encore dans le schema longline - return connection.prepareStatement("SELECT code, topiaid FROM observe_longline.sizemeasuretype "); + return connection.prepareStatement("SELECT code, topiaid FROM observe_longline.sizemeasuretype WHERE code IS NOT NULL"); } @Override ===================================== services-topia/src/main/java/fr/ird/observe/services/topia/service/actions/synchro/referential/ng/ReferentialSynchronizeSqlsRequestBuilder.java ===================================== --- a/services-topia/src/main/java/fr/ird/observe/services/topia/service/actions/synchro/referential/ng/ReferentialSynchronizeSqlsRequestBuilder.java +++ b/services-topia/src/main/java/fr/ird/observe/services/topia/service/actions/synchro/referential/ng/ReferentialSynchronizeSqlsRequestBuilder.java @@ -142,7 +142,7 @@ public class ReferentialSynchronizeSqlsRequestBuilder { Class<E> entityType = binderEngine.getReferentialEntityType(type); TopiaMetadataEntity metadata = metadataModel.getEntity(referentialName); List<E> insertEntities = loadEntities(entityType, tasks); - if (metadata.withShell()) { + if (metadata.withEntities()) { InsertSqlWithCascadeStatementGenerator<R> insertGenerator = new InsertSqlWithCascadeStatementGenerator<R>(metadata, type, request.getIdsOnlyExistingOnThisSide()) { @@ -189,7 +189,7 @@ public class ReferentialSynchronizeSqlsRequestBuilder { Class<E> entityType = binderEngine.getReferentialEntityType(type); List<E> updateEntities = loadEntities(entityType, tasks); - if (metadata.withShell()) { + if (metadata.withEntities()) { UpdateSqlWithCascadeStatementGenerator<R> updateGenerator = new UpdateSqlWithCascadeStatementGenerator<R>(metadata, type, request.getIdsOnlyExistingOnThisSide()) { @Override ===================================== services-topia/src/main/java/fr/ird/observe/services/topia/service/actions/synchro/referential/sql/InsertSqlStatementGenerator.java ===================================== --- a/services-topia/src/main/java/fr/ird/observe/services/topia/service/actions/synchro/referential/sql/InsertSqlStatementGenerator.java +++ b/services-topia/src/main/java/fr/ird/observe/services/topia/service/actions/synchro/referential/sql/InsertSqlStatementGenerator.java @@ -101,6 +101,8 @@ public class InsertSqlStatementGenerator<R extends ReferentialDto> { public ImmutableList<String> generateSql(R referentialDto) { + ImmutableList.Builder<String> result = ImmutableList.builder(); + List<String> parameters = new LinkedList<>(); addStringParameter(referentialDto.getId(), parameters); @@ -156,15 +158,15 @@ public class InsertSqlStatementGenerator<R extends ReferentialDto> { continue; } if (parameterValue instanceof ReferentialDto) { - addReferentialDtoParameter((ReferentialDto) parameterValue, parameters); + addReferentialDtoParameter((ReferentialDto) parameterValue, parameters, result); continue; } if (parameterValue instanceof ReferentialReference) { - addReferentialReferenceParameter((ReferentialReference) parameterValue, parameters); + addReferentialReferenceParameter((ReferentialReference) parameterValue, parameters,result); } } - ImmutableList.Builder<String> result = ImmutableList.builder(); + result.add(String.format(INSERT_STATEMENT, schemaName, @@ -278,11 +280,11 @@ public class InsertSqlStatementGenerator<R extends ReferentialDto> { parameters.add("" + parameter); } - protected void addReferentialReferenceParameter(ReferentialReference<?> parameter, List<String> parameters) { + protected void addReferentialReferenceParameter(ReferentialReference<?> parameter, List<String> parameters, ImmutableList.Builder<String> result) { addStringParameter(parameter.getId(), parameters); } - protected void addReferentialDtoParameter(ReferentialDto parameter, List<String> parameters) { + protected void addReferentialDtoParameter(ReferentialDto parameter, List<String> parameters, ImmutableList.Builder<String> result) { addStringParameter(parameter.getId(), parameters); } ===================================== services-topia/src/main/java/fr/ird/observe/services/topia/service/actions/synchro/referential/sql/InsertSqlWithCascadeStatementGenerator.java ===================================== --- a/services-topia/src/main/java/fr/ird/observe/services/topia/service/actions/synchro/referential/sql/InsertSqlWithCascadeStatementGenerator.java +++ b/services-topia/src/main/java/fr/ird/observe/services/topia/service/actions/synchro/referential/sql/InsertSqlWithCascadeStatementGenerator.java @@ -26,15 +26,14 @@ import com.google.common.collect.ImmutableList; import com.google.common.collect.Multimap; import fr.ird.observe.services.dto.reference.ReferentialReference; import fr.ird.observe.services.dto.referential.ReferentialDto; +import java.util.List; import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; import org.nuiton.topia.persistence.metadata.TopiaMetadataEntity; -import java.util.List; - /** * Pour générer une requète sql d'ajout à partir d'un référentiel donné et aussi tous les inserts manquants - * + * <p> * Created on 29/06/16. * * @author Tony Chemit - dev@tchemit.fr @@ -57,19 +56,19 @@ public abstract class InsertSqlWithCascadeStatementGenerator<R extends Referenti @Override protected <D extends ReferentialDto> void addMnAssociation(String nmAssociationTableName, String nmAssociationDbColumnName, String referentialDtoId, Class<? extends ReferentialDto> associationType, String associationId, ImmutableList.Builder<String> builder) { super.addMnAssociation(nmAssociationTableName, nmAssociationDbColumnName, referentialDtoId, associationType, associationId, builder); - addMissingReferentialIfNecessary(associationType, associationId); + addMissingReferentialIfNecessary(associationType, associationId, builder); } @Override - protected void addReferentialReferenceParameter(ReferentialReference<?> parameter, List<String> parameters) { - super.addReferentialReferenceParameter(parameter, parameters); - addMissingReferentialIfNecessary(parameter.getType(), parameter.getId()); + protected void addReferentialReferenceParameter(ReferentialReference<?> parameter, List<String> parameters, ImmutableList.Builder<String> result) { + super.addReferentialReferenceParameter(parameter, parameters, result); + addMissingReferentialIfNecessary(parameter.getType(), parameter.getId(), result); } @Override - protected void addReferentialDtoParameter(ReferentialDto parameter, List<String> parameters) { - super.addReferentialDtoParameter(parameter, parameters); - addMissingReferentialIfNecessary(parameter.getClass(), parameter.getId()); + protected void addReferentialDtoParameter(ReferentialDto parameter, List<String> parameters, ImmutableList.Builder<String> result) { + super.addReferentialDtoParameter(parameter, parameters, result); + addMissingReferentialIfNecessary(parameter.getClass(), parameter.getId(), result); } }; } @@ -82,20 +81,19 @@ public abstract class InsertSqlWithCascadeStatementGenerator<R extends Referenti } - private <D extends ReferentialDto> ImmutableList<String> addMissingReferentialIfNecessary(Class<D> associationType, String associationId) { + private <D extends ReferentialDto> void addMissingReferentialIfNecessary(Class<D> associationType, String associationId, ImmutableList.Builder<String> builder) { if (idsOnlyExistingOnThisSide.containsEntry(associationType, associationId)) { // il faut insérer aussi ce référentiel ImmutableList<String> sql = insertMissingReferential(associationType, associationId); + builder.addAll(sql); + // ce référentiel est désormais présent dans les deux sources idsOnlyExistingOnThisSide.remove(associationType, associationId); - return sql; - } - return null; } } ===================================== services-topia/src/main/java/fr/ird/observe/services/topia/service/actions/synchro/referential/sql/UpdateSqlStatementGenerator.java ===================================== --- a/services-topia/src/main/java/fr/ird/observe/services/topia/service/actions/synchro/referential/sql/UpdateSqlStatementGenerator.java +++ b/services-topia/src/main/java/fr/ird/observe/services/topia/service/actions/synchro/referential/sql/UpdateSqlStatementGenerator.java @@ -23,16 +23,8 @@ package fr.ird.observe.services.topia.service.actions.synchro.referential.sql; */ import com.google.common.collect.ImmutableList; -import fr.ird.observe.services.dto.referential.ReferentialDto; import fr.ird.observe.services.dto.reference.ReferentialReference; -import org.apache.commons.collections4.CollectionUtils; -import org.apache.commons.logging.Log; -import org.apache.commons.logging.LogFactory; -import org.nuiton.topia.persistence.TopiaEntity; -import org.nuiton.topia.persistence.metadata.TopiaMetadataEntity; -import org.nuiton.util.beans.Binder; -import org.nuiton.util.beans.BinderFactory; - +import fr.ird.observe.services.dto.referential.ReferentialDto; import java.sql.Timestamp; import java.util.Collection; import java.util.Date; @@ -40,10 +32,17 @@ import java.util.LinkedHashSet; import java.util.Map; import java.util.Set; import java.util.TreeMap; +import org.apache.commons.collections4.CollectionUtils; +import org.apache.commons.logging.Log; +import org.apache.commons.logging.LogFactory; +import org.nuiton.topia.persistence.TopiaEntity; +import org.nuiton.topia.persistence.metadata.TopiaMetadataEntity; +import org.nuiton.util.beans.Binder; +import org.nuiton.util.beans.BinderFactory; /** * Pour générer une requète sql de mise à jour à partir d'un référentiel donné. - * + * <p> * Created on 29/06/16. * * @author Tony Chemit - dev@tchemit.fr @@ -152,6 +151,8 @@ public class UpdateSqlStatementGenerator<R extends ReferentialDto> { } + ImmutableList.Builder<String> result = ImmutableList.builder(); + if (manyToOneAssociationNames.length > 0) { Map<String, Object> manyToOneAssociations = binder.obtainProperties(referentialDto, true, manyToOneAssociationNames); @@ -166,18 +167,17 @@ public class UpdateSqlStatementGenerator<R extends ReferentialDto> { continue; } if (manyToOneAssociationValue instanceof ReferentialDto) { - addReferentialDtoParameter(columnName, (ReferentialDto) manyToOneAssociationValue, parameters); + addReferentialDtoParameter(columnName, (ReferentialDto) manyToOneAssociationValue, parameters, result); continue; } if (manyToOneAssociationValue instanceof ReferentialReference) { - addReferentialReferenceParameter(columnName, (ReferentialReference) manyToOneAssociationValue, parameters); + addReferentialReferenceParameter(columnName, (ReferentialReference) manyToOneAssociationValue, parameters, result); } } } - ImmutableList.Builder<String> result = ImmutableList.builder(); String sql = String.format(UPDATE_STATEMENT, schemaName, @@ -190,17 +190,14 @@ public class UpdateSqlStatementGenerator<R extends ReferentialDto> { } for (ManyToManyAssociationStruct manyToManyAssociation : manyToManyAssociations) { - String manyToManyAssociationSql = generateManyToManyAssociationSql(referentialDto, manyToManyAssociation); - result.add(manyToManyAssociationSql); + generateManyToManyAssociationSql(referentialDto, manyToManyAssociation, result); } return result.build(); } - private String generateManyToManyAssociationSql(R referentialDto, ManyToManyAssociationStruct manyToManyAssociation) { - - StringBuilder builder = new StringBuilder(); + private void generateManyToManyAssociationSql(R referentialDto, ManyToManyAssociationStruct manyToManyAssociation, ImmutableList.Builder<String> result) { String referentialDtoId = referentialDto.getId(); String manyToManyAssociationTableName = manyToManyAssociation.tableName; @@ -211,7 +208,7 @@ public class UpdateSqlStatementGenerator<R extends ReferentialDto> { manyToManyAssociationTableName, tableName, referentialDtoId); - builder.append(deleteSql); + result.add(deleteSql); if (log.isDebugEnabled()) { log.debug("sql: " + deleteSql); } @@ -231,13 +228,11 @@ public class UpdateSqlStatementGenerator<R extends ReferentialDto> { referentialDtoId, manyToManyAssociationValue.getType(), manyToManyAssociationValue.getId(), - builder + result ); } } - return builder.toString(); - } protected <D extends ReferentialDto> void addMnAssociation(String nmAssociationTableName, @@ -245,7 +240,7 @@ public class UpdateSqlStatementGenerator<R extends ReferentialDto> { String referentialDtoId, Class<D> associationType, String associationId, - StringBuilder builder) { + ImmutableList.Builder<String> builder) { String sql = String.format(MANY_TO_MANY_ASSOCIATION_INSERT_STATEMENT, schemaName, @@ -257,7 +252,7 @@ public class UpdateSqlStatementGenerator<R extends ReferentialDto> { if (log.isDebugEnabled()) { log.debug("sql: " + sql); } - builder.append(sql); + builder.add(sql); } @@ -299,11 +294,11 @@ public class UpdateSqlStatementGenerator<R extends ReferentialDto> { addParameter0(columnName, "" + parameter, parameters); } - protected void addReferentialReferenceParameter(String columnName, ReferentialReference parameter, StringBuilder parameters) { + protected void addReferentialReferenceParameter(String columnName, ReferentialReference parameter, StringBuilder parameters, ImmutableList.Builder<String> result) { addStringParameter(columnName, parameter.getId(), parameters); } - protected void addReferentialDtoParameter(String columnName, ReferentialDto parameter, StringBuilder parameters) { + protected void addReferentialDtoParameter(String columnName, ReferentialDto parameter, StringBuilder parameters, ImmutableList.Builder<String> result) { addStringParameter(columnName, parameter.getId(), parameters); } ===================================== services-topia/src/main/java/fr/ird/observe/services/topia/service/actions/synchro/referential/sql/UpdateSqlWithCascadeStatementGenerator.java ===================================== --- a/services-topia/src/main/java/fr/ird/observe/services/topia/service/actions/synchro/referential/sql/UpdateSqlWithCascadeStatementGenerator.java +++ b/services-topia/src/main/java/fr/ird/observe/services/topia/service/actions/synchro/referential/sql/UpdateSqlWithCascadeStatementGenerator.java @@ -32,7 +32,7 @@ import org.nuiton.topia.persistence.metadata.TopiaMetadataEntity; /** * Pour générer une requète sql d'ajout à partir d'un référentiel donné et aussi tous les inserts manquants. - * + * <p> * Created on 29/06/16. * * @author Tony Chemit - dev@tchemit.fr @@ -53,21 +53,21 @@ public abstract class UpdateSqlWithCascadeStatementGenerator<R extends Referenti this.delegateGenerator = new UpdateSqlStatementGenerator<R>(metadataEntity, dtoType) { @Override - protected <D extends ReferentialDto> void addMnAssociation(String nmAssociationTableName, String nmAssociationDbColumnName, String referentialDtoId, Class<D> associationType, String associationId, StringBuilder builder) { - super.addMnAssociation(nmAssociationTableName, nmAssociationDbColumnName, referentialDtoId, associationType, associationId, builder); - addMissingReferentialIfNecessary(associationType, associationId); + protected <D extends ReferentialDto> void addMnAssociation(String nmAssociationTableName, String nmAssociationDbColumnName, String referentialDtoId, Class<D> associationType, String associationId, ImmutableList.Builder<String> result) { + super.addMnAssociation(nmAssociationTableName, nmAssociationDbColumnName, referentialDtoId, associationType, associationId, result); + addMissingReferentialIfNecessary(associationType, associationId, result); } @Override - protected void addReferentialReferenceParameter(String columnName, ReferentialReference parameter, StringBuilder parameters) { - super.addReferentialReferenceParameter(columnName, parameter, parameters); - addMissingReferentialIfNecessary(parameter.getType(), parameter.getId()); + protected void addReferentialReferenceParameter(String columnName, ReferentialReference parameter, StringBuilder parameters, ImmutableList.Builder<String> result) { + super.addReferentialReferenceParameter(columnName, parameter, parameters, result); + addMissingReferentialIfNecessary(parameter.getType(), parameter.getId(), result); } @Override - protected void addReferentialDtoParameter(String columnName, ReferentialDto parameter, StringBuilder parameters) { - super.addReferentialDtoParameter(columnName, parameter, parameters); - addMissingReferentialIfNecessary(parameter.getClass(), parameter.getId()); + protected void addReferentialDtoParameter(String columnName, ReferentialDto parameter, StringBuilder parameters, ImmutableList.Builder<String> result) { + super.addReferentialDtoParameter(columnName, parameter, parameters, result); + addMissingReferentialIfNecessary(parameter.getClass(), parameter.getId(), result); } }; } @@ -80,20 +80,17 @@ public abstract class UpdateSqlWithCascadeStatementGenerator<R extends Referenti } - private <D extends ReferentialDto> ImmutableList<String> addMissingReferentialIfNecessary(Class<D> associationType, String associationId) { + private <D extends ReferentialDto> void addMissingReferentialIfNecessary(Class<D> associationType, String associationId, ImmutableList.Builder<String> result) { if (idsOnlyExistingOnThisSide.containsEntry(associationType, associationId)) { // il faut insérer aussi ce référentiel ImmutableList<String> sqls = insertMissingReferential(associationType, associationId); - + result.addAll(sqls); // ce référentiel est désormais présent dans les deux sources idsOnlyExistingOnThisSide.remove(associationType, associationId); - return sqls; - } - return null; } } ===================================== topia-extension/src/main/java/org/nuiton/topia/persistence/metadata/TopiaMetadataEntity.java ===================================== --- 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 @@ -347,4 +347,7 @@ public class TopiaMetadataEntity { } } + public boolean withEntities() { + return withShell() || !manyToOneAssociations.isEmpty(); + } } View it on GitLab: https://gitlab.com/ultreiaio/ird-observe/compare/eae7f32c4aaac70a71ee45c0718... --- View it on GitLab: https://gitlab.com/ultreiaio/ird-observe/compare/eae7f32c4aaac70a71ee45c0718... You're receiving this email because of your account on gitlab.com.