Tony CHEMIT pushed to branch develop-7.x at ultreiaio / ird-observe Commits: 78ccbf3a by Tony Chemit at 2022-04-30T12:53:02+02:00 last dependencies update Mise à jour de dépendences - Closes #2209 * nuiton.topia → 3.8.1 * nuiton.version → 1.0 * log4j2 → 2.17.2 * slf4j → 1.7.31 * javassist → 3.28.0-GA * mockito → 4.4.0 * google.guava → 31.1-jre * google.gson → 2.9.0 * google.auto-service → 1.0.1 * postgresql → 42.3.4 * freemarker → 2.3.31 * jboss-logging → 3.4.3.Final * hibernate → 5.6.8.Final * hikariCP → 4.0.3 * bytebuddy → 1.12.8 * junit → 4.13.2 * checker-qual → 3.21.3 * httpmime → 4.5.13 * httpcore → 4.4.15 * httpclient → 4.5.13 * commons-lang3 → 3.12.0 * commons-validator → 1.7 * commons-io → 2.11.0 - - - - - f32f45b3 by Tony Chemit at 2022-04-30T12:53:02+02:00 Boutons de cadrage sur la carte 7.6.11 - Closes #2152 - - - - - b36df46d by Tony Chemit at 2022-04-30T12:53:02+02:00 Amélioration de la synchronisation simple de référentiel - See #2306 Souci d'import de la base AZTI dans cette base centrale - Closes #2305 - - - - - 89a4ed2b by Tony Chemit at 2022-04-30T12:53:02+02:00 Low consolidate service logs - - - - - 3f2ade36 by Tony Chemit at 2022-04-30T14:47:45+02:00 Impossible de créer une base centrale vierge, quelque soit la méthode appliquée - See #2214 - - - - - 14 changed files: - client-core/src/main/java/fr/ird/observe/client/ui/content/ContentUIInitializer.java - client-core/src/main/java/fr/ird/observe/client/ui/content/data/longline/TripLonglineUI.jcss - client-core/src/main/java/fr/ird/observe/client/ui/content/data/seine/TripSeineUI.jcss - client-core/src/main/java/fr/ird/observe/client/ui/storage/ObstunaAdminAction.java - common-service/src/main/java/fr/ird/observe/services/configuration/DataSourceCreateConfigurationDto.java - persistence/src/main/models/Observe.model - pom.xml - server-core/src/main/filtered-resources/mapping - server-core/src/main/java/fr/ird/observe/server/controller/v1/DataSourceServiceRestApi.java - services-local/src/main/java/fr/ird/observe/services/local/service/DataSourceServiceLocal.java - services-local/src/main/java/fr/ird/observe/services/local/service/actions/consolidate/ConsolidateDataServiceLocal.java - services/src/main/java/fr/ird/observe/services/service/DataSourceService.java - services/src/main/java/fr/ird/observe/services/service/actions/synchro/referential/legacy/UnidirectionalReferentialSynchronizeEngine.java - services/src/main/java/fr/ird/observe/services/service/referential/differential/DifferentialModel.java Changes: ===================================== client-core/src/main/java/fr/ird/observe/client/ui/content/ContentUIInitializer.java ===================================== @@ -40,6 +40,7 @@ import fr.ird.observe.client.ui.util.BooleanEditor; import fr.ird.observe.client.ui.util.UIHelper; import fr.ird.observe.client.ui.util.time.UnlimitedTimeEditor; import fr.ird.observe.client.ui.util.tripMap.ObserveMapPane; +import fr.ird.observe.client.ui.util.tripMap.TripMapUI; import fr.ird.observe.client.validation.ObserveSwingValidator; import fr.ird.observe.dto.I18nEnumHelper; import fr.ird.observe.dto.IdDto; @@ -633,16 +634,15 @@ public class ContentUIInitializer<E extends IdDto, UI extends ContentUI<E, UI>> protected void init(JComponent editor, Set<String> notBlockingComponents) { final Boolean propertyName = (Boolean) editor.getClientProperty(CLIENT_PROPERTY_NOT_BLOCKING); if (propertyName != null) { - if (editor instanceof FilterableDoubleList) { - notBlockingComponents.add("universeListPane"); notBlockingComponents.add("selectedListPane"); - + } else if (editor instanceof TripMapUI) { + notBlockingComponents.add("zoomIt"); + notBlockingComponents.add("zoomOut"); + notBlockingComponents.add("zoomPlus"); } else { - notBlockingComponents.add(editor.getName()); - } } } ===================================== client-core/src/main/java/fr/ird/observe/client/ui/content/data/longline/TripLonglineUI.jcss ===================================== @@ -102,6 +102,10 @@ enabled:{!model.isCreatingMode()} } +#tripMap { + _notBlocking: true; +} + #reopen { _toolTipText:{t("observe.common.TripDto.action.reopen.tip")}; } ===================================== client-core/src/main/java/fr/ird/observe/client/ui/content/data/seine/TripSeineUI.jcss ===================================== @@ -147,6 +147,10 @@ NumberEditor { enabled:{!model.isCreatingMode()} } +#tripMap { + _notBlocking: true; +} + #reopen { _toolTipText:{t("observe.common.TripDto.action.reopen.tip")}; } ===================================== client-core/src/main/java/fr/ird/observe/client/ui/storage/ObstunaAdminAction.java ===================================== @@ -37,9 +37,12 @@ import fr.ird.observe.services.configuration.topia.ObserveDataSourceConfiguratio import fr.ird.observe.services.service.BabModelVersionException; import fr.ird.observe.services.service.DatabaseConnexionNotAuthorizedException; import fr.ird.observe.services.service.DatabaseNotFoundException; -import org.apache.logging.log4j.Logger; +import fr.ird.observe.services.service.sql.AddSqlScriptProducerRequest; +import fr.ird.observe.services.service.sql.SqlScriptProducerService; import org.apache.logging.log4j.LogManager; +import org.apache.logging.log4j.Logger; import org.nuiton.jaxx.runtime.JAXXContext; +import org.nuiton.topia.persistence.script.TopiaSqlScript; import org.nuiton.version.Version; import java.awt.Window; @@ -65,7 +68,7 @@ public enum ObstunaAdminAction { CREATE() { @Override public RemoteUILauncher newLauncher(JAXXContext context, Window frame, boolean serverMode) { - return new RemoteUILauncher(this, context, frame, I18nEnumHelper.getLabel(this),serverMode ) { + return new RemoteUILauncher(this, context, frame, I18nEnumHelper.getLabel(this), serverMode) { DataSourceCreateConfigurationDto createConfigurationDto; ObserveSwingDataSource dataSource; @@ -148,6 +151,29 @@ public enum ObstunaAdminAction { log.info("Create db..."); } + ObserveDataSourceConfiguration importReferentialConfig = createConfigurationDto.getImportReferentialDataSourceConfiguration(); + + ObserveDataSourceConfiguration importDataDataSourceConfiguration = createConfigurationDto.getImportDataDataSourceConfiguration(); + + if (importReferentialConfig != null && importDataDataSourceConfiguration == null) { + + // simple referential import, prepare dump here + + Version dbVersion = dataSource.getVersion(); + AddSqlScriptProducerRequest request = AddSqlScriptProducerRequest.forPostgres(dbVersion).addSchema().addReferential(); + + TopiaSqlScript referentialDump; + + try (ObserveSwingDataSource importDataSource = Objects.requireNonNull(ObserveSwingApplicationContext.get().getDataSourcesManager().newDataSource(importReferentialConfig))) { + importDataSource.open(); + + SqlScriptProducerService dumpProducerService = importDataSource.getSqlScriptProducerService(); + referentialDump = dumpProducerService.produceAddSqlScript(request); + createConfigurationDto.setImportDatabase(referentialDump); + } + } + + try { dataSource.create(createConfigurationDto); @@ -161,6 +187,11 @@ public enum ObstunaAdminAction { } } } + /* + INSERT INTO observe_common.vessel(topiaid, + topiaversion, + topiacreatedate, lastupdatedate, code, uri, needcomment, status, label1, label2, label3, label4, label5, label6, label7, label8, vesselsizecategory, vesseltype, flagcountry, keelcode, fleetcountry, changedate, yearservice, length, capacity, power, searchmaximum, comment, iattcid, ctoiid, nationalid, comid, tuviid, imoid, radiocallsignid, shipowner) VALUES ('fr.ird.observe.entities.referentiel.Vessel#1239832677818#0.8965634485687902', 23, '2009-04-15 00:00:00.1', '2022-03-25 10:22:37.082', '225', NULL, false, 1, 'PERE BRIANT', 'PERE BRIANT', 'PERE BRIANT', NULL, NULL, NULL, NULL, NULL, 'fr.ird.observe.entities.referentiel.VesselSizeCategory#1239832675542#0.750774668545597', 'fr.ird.observe.entities.referentiel.VesselType#1239832675735#0.307197212385357', 'fr.ird.observe.entities.referentiel.Country#1239832675583#0.9493110781716075', 209, 1, NULL, 1975, 64.65, 1575, 4000, 12, clob3: STRINGDECODE('Coul\u00e9 le 22/09/2011 au large du Gabon (20/09/2012 plus de positionnement VMS)'), 'ATEU0FRA00054', NULL, 'CC243864', NULL, NULL, '7363035', NULL, NULL) + */ @Override protected void applySecurity() { @@ -180,7 +211,7 @@ public enum ObstunaAdminAction { UPDATE() { @Override public RemoteUILauncher newLauncher(JAXXContext context, Window frame, boolean serverMode) { - return new RemoteUILauncher(this, context, frame, I18nEnumHelper.getLabel(this),serverMode ) { + return new RemoteUILauncher(this, context, frame, I18nEnumHelper.getLabel(this), serverMode) { ObserveSwingDataSource dataSource; ObserveDataSourceInformation dataSourceInformation; @@ -239,7 +270,7 @@ public enum ObstunaAdminAction { SECURITY() { @Override public RemoteUILauncher newLauncher(JAXXContext context, Window frame, boolean serverMode) { - return new RemoteUILauncher(this, context, frame, I18nEnumHelper.getLabel(this),serverMode ) { + return new RemoteUILauncher(this, context, frame, I18nEnumHelper.getLabel(this), serverMode) { ObserveSwingDataSource dataSource; ImmutableSet<ObserveDbUserDto> users; @@ -269,7 +300,10 @@ public enum ObstunaAdminAction { public String getLabel() { return I18nEnumHelper.getLabel(this); } - /** Logger */ + + /** + * Logger + */ private static final Logger log = LogManager.getLogger(ObstunaAdminAction.class); public static ObstunaAdminAction valueOfIgnoreCase(String value) { ===================================== common-service/src/main/java/fr/ird/observe/services/configuration/DataSourceCreateConfigurationDto.java ===================================== @@ -111,6 +111,9 @@ public class DataSourceCreateConfigurationDto extends AbstractObserveDto { public void setImportDatabase(TopiaSqlScript importDatabase) { Objects.requireNonNull(importDatabase, "'importDatabase' can't be null."); this.optionalImportDatabase = importDatabase; + if (optionalImportReferentialDataSourceConfiguration != null && optionalImportDataDataSourceConfiguration == null) { + optionalImportReferentialDataSourceConfiguration = null; + } } public void setImportReferentialDataSourceConfiguration(ObserveDataSourceConfiguration importReferentialDataSourceConfiguration) { ===================================== persistence/src/main/models/Observe.model ===================================== @@ -387,7 +387,7 @@ startDate + {*:1} Date endDate + {*:1} Date referentiel.Gear > referentiel.I18nReferentialEntity | entity -gearCaracteristic {*:*} referentiel.GearCaracteristic | lazy=false +gearCaracteristic {*:*} referentiel.GearCaracteristic | lazy=false orderBy=code referentiel.GearCaracteristic > referentiel.I18nReferentialEntity | entity unit + {*:1} String @@ -485,7 +485,7 @@ referentiel.SizeMeasureType > referentiel.I18nReferentialEntity | entity referentiel.Species > referentiel.I18nReferentialEntity | entity speciesGroup {*:0..1} referentiel.SpeciesGroup | lazy=false -ocean {*:*} referentiel.Ocean | lazy=false +ocean {*:*} referentiel.Ocean | lazy=false orderBy=code faoCode + {*:1} String scientificLabel + {*:1} String homeId + {*:1} String @@ -497,7 +497,7 @@ maxWeight + {*:1} Float | sqlType=numeric sizeMeasureType {*:0..1} referentiel.SizeMeasureType referentiel.SpeciesGroup > referentiel.I18nReferentialEntity | entity -speciesGroupReleaseMode {*:*} referentiel.SpeciesGroupReleaseMode | unique lazy=false +speciesGroupReleaseMode {*:*} referentiel.SpeciesGroupReleaseMode | unique lazy=false orderBy=code referentiel.SpeciesGroupReleaseMode > referentiel.I18nReferentialEntity | entity ===================================== pom.xml ===================================== @@ -160,7 +160,7 @@ <!-- build timestamp configuration --> <maven.build.timestamp.format>dd/MM/yyyy HH:mm z</maven.build.timestamp.format> <buildDate>${maven.build.timestamp}</buildDate> - <maven.version>3.8.4</maven.version> + <maven.version>3.8.5</maven.version> <!--Fixed versions--> <lib.version.nuiton.validation>3.1</lib.version.nuiton.validation> @@ -170,17 +170,25 @@ <lib.version.java4all.topia>1.1.17</lib.version.java4all.topia> <lib.version.nuiton.utils>3.0</lib.version.nuiton.utils> <lib.version.java4all.jaxx>3.0-alpha-75</lib.version.java4all.jaxx> - - <lib.version.log4j2>2.17.1</lib.version.log4j2> -<!-- <lib.version.hibernate>5.6.3.Final</lib.version.hibernate>--> + <lib.version.hibernate>5.6.8.Final</lib.version.hibernate> + <lib.version.hikariCP>4.0.3</lib.version.hikariCP> <!-- <lib.version.hikariCP>5.0.0</lib.version.hikariCP>--> -<!-- <lib.version.bytebuddy>1.12.2</lib.version.bytebuddy>--> - <lib.version.postgresql>42.3.1</lib.version.postgresql> + <lib.version.bytebuddy>1.12.9</lib.version.bytebuddy> + <lib.version.nuiton.topia>3.8.1</lib.version.nuiton.topia> + <lib.version.nuiton.version>1.0</lib.version.nuiton.version> + <lib.version.log4j2>2.17.2</lib.version.log4j2> + <lib.version.slf4j>1.7.32</lib.version.slf4j> + <lib.version.javassist>3.28.0-GA</lib.version.javassist> + <lib.version.jackson>2.12.0</lib.version.jackson> + <lib.version.mockito>4.4.0</lib.version.mockito> + <lib.version.google.guava>31.1-jre</lib.version.google.guava> + <lib.version.google.gson>2.9.0</lib.version.google.gson> + <lib.version.google.auto-service>1.0.1</lib.version.google.auto-service> + <lib.version.postgresql>42.3.4</lib.version.postgresql> <lib.version.commons-io>2.11.0</lib.version.commons-io> <lib.version.commons-lang3>3.12.0</lib.version.commons-lang3> - <lib.version.checker-qual>3.20.0</lib.version.checker-qual> + <lib.version.checker-qual>3.21.4</lib.version.checker-qual> <lib.version.sisu.plexus>0.3.5</lib.version.sisu.plexus> - <!-- license header configuration --> <license.licenseName>gpl_v3</license.licenseName> <license.organizationName>IRD, Code Lutin, Ultreia.io</license.organizationName> @@ -221,6 +229,52 @@ <dependencyManagement> <dependencies> + <dependency> + <groupId>commons-validator</groupId> + <artifactId>commons-validator</artifactId> + <version>1.7</version> + </dependency> + <dependency> + <groupId>commons-io</groupId> + <artifactId>commons-io</artifactId> + <version>2.11.0</version> + </dependency> + <dependency> + <groupId>org.apache.commons</groupId> + <artifactId>commons-lang3</artifactId> + <version>3.12.0</version> + </dependency> + <dependency> + <groupId>org.apache.httpcomponents</groupId> + <artifactId>httpclient</artifactId> + <version>4.5.13</version> + </dependency> + <dependency> + <groupId>org.apache.httpcomponents</groupId> + <artifactId>httpcore</artifactId> + <version>4.4.15</version> + </dependency> + <dependency> + <groupId>org.apache.httpcomponents</groupId> + <artifactId>httpmime</artifactId> + <version>4.5.13</version> + </dependency> + <dependency> + <groupId>org.jboss.logging</groupId> + <artifactId>jboss-logging</artifactId> + <version>3.4.3.Final</version> + </dependency> + <dependency> + <groupId>org.freemarker</groupId> + <artifactId>freemarker</artifactId> + <version>2.3.31</version> + </dependency> + <dependency> + <groupId>junit</groupId> + <artifactId>junit</artifactId> + <version>4.13.2</version> + <scope>test</scope> + </dependency> <dependency> <groupId>org.eclipse.sisu</groupId> <artifactId>org.eclipse.sisu.inject</artifactId> ===================================== server-core/src/main/filtered-resources/mapping ===================================== @@ -58,7 +58,7 @@ GET /api/v1/DataSourceService/backup GET /api/v1/DataSourceService/checkCanConnect v1.DataSourceServiceRestApi.checkCanConnect GET /api/v1/DataSourceService/checkCanConnectOrBeEmpty v1.DataSourceServiceRestApi.checkCanConnectOrBeEmpty GET /api/v1/DataSourceService/close v1.DataSourceServiceRestApi.close -GET /api/v1/DataSourceService/create v1.DataSourceServiceRestApi.create +POST /api/v1/DataSourceService/create v1.DataSourceServiceRestApi.create GET /api/v1/DataSourceService/destroy v1.DataSourceServiceRestApi.destroy GET /api/v1/DataSourceService/getReferentialTypesInShell v1.DataSourceServiceRestApi.getReferentialTypesInShell GET /api/v1/DataSourceService/getUsers v1.DataSourceServiceRestApi.getUsers ===================================== server-core/src/main/java/fr/ird/observe/server/controller/v1/DataSourceServiceRestApi.java ===================================== @@ -53,6 +53,12 @@ public class DataSourceServiceRestApi extends GeneratedDataSourceServiceRestApi /** Logger. */ private static final Logger log = LogManager.getLogger(DataSourceServiceRestApi.class); + @Override + public ObserveDataSourceInformation checkCanConnectOrBeEmpty(ObserveDataSourceConfiguration dataSourceConfiguration) throws DatabaseNotFoundException, DatabaseConnexionNotAuthorizedException { + ObserveDataSourceConfiguration dataSourceConfigurationTopia = getTopiaDataSourceConfiguration(dataSourceConfiguration); + return getAnonymousService(dataSourceConfigurationTopia).checkCanConnectOrBeEmpty(dataSourceConfigurationTopia); + } + @Override public ObserveDataSourceInformation checkCanConnect(ObserveDataSourceConfiguration dataSourceConfiguration) throws DatabaseConnexionNotAuthorizedException, DatabaseNotFoundException { ===================================== services-local/src/main/java/fr/ird/observe/services/local/service/DataSourceServiceLocal.java ===================================== @@ -68,8 +68,6 @@ import org.nuiton.version.Version; import org.nuiton.version.Versions; import java.io.File; -import java.io.IOException; -import java.nio.file.Files; import java.nio.file.Path; import java.util.LinkedHashSet; import java.util.Optional; @@ -290,6 +288,7 @@ public class DataSourceServiceLocal extends ObserveServiceLocal implements DataS dataSourceCreateConfiguration.validateConfiguration(); Path temporaryDirectory = getTemporaryDirectory(dataSourceConfiguration); + log.debug("Will use temporary directory: " + temporaryDirectory); boolean initSchema = !dataSourceCreateConfiguration.isImportDatabase(); ObserveTopiaApplicationContext topiaApplicationContext = ObserveTopiaApplicationContextFactory.createTopiaApplicationContext((ObserveDataSourceConfigurationTopiaSupport) dataSourceConfiguration, initSchema); @@ -301,41 +300,45 @@ public class DataSourceServiceLocal extends ObserveServiceLocal implements DataS log.info("Create new database from a script."); TopiaSqlScript importDatabase = dataSourceCreateConfiguration.getImportDatabase(); - if (((ObserveDataSourceConfigurationTopiaSupport) dataSourceConfiguration).isH2Database()) { - topiaApplicationContext.executeSqlStatements(importDatabase); - topiaApplicationContext.getMigrationService().createSchemaIfNotExist(); - topiaApplicationContext.getMigrationService().runSchemaMigration(); - } else { // base postgres - - // on realise les import dans un base H2 temporaire - File tmpDir; - try { - tmpDir = Files.createTempDirectory(temporaryDirectory, "obstuna").toFile(); - } catch (IOException e) { - throw new IllegalStateException("could not create temporary directory ", e); - } - - ObserveDataSourceConfigurationTopiaH2 temporaryConfiguration = createTemporaryConfiguration(tmpDir, dataSourceConfiguration.getModelVersion()); - - ObserveTopiaApplicationContext temporaryTopiaApplicationContext = ObserveTopiaApplicationContextFactory.createTopiaApplicationContext(temporaryConfiguration, false); - temporaryTopiaApplicationContext.executeSqlStatements(importDatabase); - temporaryTopiaApplicationContext.getMigrationService().createSchemaIfNotExist(); - temporaryTopiaApplicationContext.getMigrationService().runSchemaMigration(); - - SqlScriptProducerService dumpProducerService = serviceContext.newService(temporaryConfiguration, SqlScriptProducerService.class); - AddSqlScriptProducerRequest request = AddSqlScriptProducerRequest.forPostgres(dataSourceConfiguration.getModelVersion()).addSchema().addReferential().addAllData(); - TopiaSqlScript dump = dumpProducerService.produceAddSqlScript(request); - topiaApplicationContext.executeSqlStatements(dump); - topiaApplicationContext.getMigrationService().createSchemaIfNotExist(); - topiaApplicationContext.getMigrationService().runSchemaMigration(); - - temporaryTopiaApplicationContext.close(); - File databaseFile = temporaryConfiguration.getDatabaseFile(); - - if (!databaseFile.delete()) { - throw new IllegalStateException("could not delete " + databaseFile); - } - } + topiaApplicationContext.executeSqlStatements(importDatabase); + topiaApplicationContext.getMigrationService().createSchemaIfNotExist(); + topiaApplicationContext.getMigrationService().runSchemaMigration(); + +// if (((ObserveDataSourceConfigurationTopiaSupport) dataSourceConfiguration).isH2Database()) { +// topiaApplicationContext.executeSqlStatements(importDatabase); +// topiaApplicationContext.getMigrationService().createSchemaIfNotExist(); +// topiaApplicationContext.getMigrationService().runSchemaMigration(); +// } else { // base postgres +// +// // on realise les import dans un base H2 temporaire +// File tmpDir; +// try { +// tmpDir = Files.createTempDirectory(temporaryDirectory, "obstuna").toFile(); +// } catch (IOException e) { +// throw new IllegalStateException("could not create temporary directory ", e); +// } +// +// ObserveDataSourceConfigurationTopiaH2 temporaryConfiguration = createTemporaryConfiguration(tmpDir, dataSourceConfiguration.getModelVersion()); +// temporaryConfiguration.setTemporaryDirectory(temporaryDirectory); +// ObserveTopiaApplicationContext temporaryTopiaApplicationContext = ObserveTopiaApplicationContextFactory.createTopiaApplicationContext(temporaryConfiguration, false); +// temporaryTopiaApplicationContext.executeSqlStatements(importDatabase); +// temporaryTopiaApplicationContext.getMigrationService().createSchemaIfNotExist(); +// temporaryTopiaApplicationContext.getMigrationService().runSchemaMigration(); +// +// SqlScriptProducerService dumpProducerService = serviceContext.newService(temporaryConfiguration, SqlScriptProducerService.class); +// AddSqlScriptProducerRequest request = AddSqlScriptProducerRequest.forPostgres(dataSourceConfiguration.getModelVersion()).addSchema().addReferential().addAllData(); +// TopiaSqlScript dump = dumpProducerService.produceAddSqlScript(request); +// topiaApplicationContext.executeSqlStatements(dump); +// topiaApplicationContext.getMigrationService().createSchemaIfNotExist(); +// topiaApplicationContext.getMigrationService().runSchemaMigration(); +// +// temporaryTopiaApplicationContext.close(); +// File databaseFile = temporaryConfiguration.getDatabaseFile(); +// +// if (!databaseFile.delete()) { +// throw new IllegalStateException("could not delete " + databaseFile); +// } +// } } else { @@ -539,7 +542,10 @@ public class DataSourceServiceLocal extends ObserveServiceLocal implements DataS @Override public Set<ObserveDbUserDto> getUsers(ObserveDataSourceConfiguration dataSourceConfiguration) { - + // Make sure temporary directory set in configuration + // See https://gitlab.com/ultreiaio/ird-observe/-/issues/2214 + Path temporaryDirectory = getTemporaryDirectory(dataSourceConfiguration); + log.debug("Will use temporary directory: " + temporaryDirectory); Set<ObserveDbUserDto> users = new LinkedHashSet<>(); // pas d'user pour les bases autres que postgresql ===================================== services-local/src/main/java/fr/ird/observe/services/local/service/actions/consolidate/ConsolidateDataServiceLocal.java ===================================== @@ -226,7 +226,7 @@ public class ConsolidateDataServiceLocal extends ObserveServiceLocal implements for (Route route : tripSeine.getRoute()) { String routePrefix = String.format("Route [%s/%s] ", ++routeIndex, routeMax); - log.info(String.format("%s Start consolidate route: %s", routePrefix, route.getTopiaId())); + log.debug(String.format("%s Start consolidate route: %s", routePrefix, route.getTopiaId())); int activityIndex = 0; int activityMax = route.sizeActivitySeine(); for (ActivitySeine activitySeine : route.getActivitySeine()) { @@ -235,7 +235,7 @@ public class ConsolidateDataServiceLocal extends ObserveServiceLocal implements boolean floatingObjectEmpty = activitySeine.isFloatingObjectEmpty(); if (!activitySeine.isSetOperation() && floatingObjectEmpty) { - log.info(String.format("%s Skip activity (No set nor dcp found): %s", activityPrefix, activitySeine.getTopiaId())); + log.debug(String.format("%s Skip activity (No set nor dcp found): %s", activityPrefix, activitySeine.getTopiaId())); continue; } @@ -300,7 +300,7 @@ public class ConsolidateDataServiceLocal extends ObserveServiceLocal implements ActivitySeine activity = activityContext.activity; - log.info(String.format("%s Start consolidate activity: %s", activityContext.activityPrefix, activity.getTopiaId())); + log.debug(String.format("%s Start consolidate activity: %s", activityContext.activityPrefix, activity.getTopiaId())); if (activity.isFloatingObjectNotEmpty()) { ===================================== services/src/main/java/fr/ird/observe/services/service/DataSourceService.java ===================================== @@ -32,6 +32,7 @@ import fr.ird.observe.services.configuration.ObserveDataSourceConfiguration; import fr.ird.observe.services.configuration.ObserveDataSourceConnection; import fr.ird.observe.services.configuration.ObserveDataSourceInformation; import io.ultreia.java4all.http.spi.Get; +import io.ultreia.java4all.http.spi.Post; import java.io.Closeable; import java.io.File; @@ -50,7 +51,7 @@ public interface DataSourceService extends ObserveService, Closeable { @Get(addAuthtoken = false) ObserveDataSourceInformation checkCanConnectOrBeEmpty(ObserveDataSourceConfiguration dataSourceConfiguration) throws DatabaseNotFoundException, DatabaseConnexionNotAuthorizedException; - @Get(addAuthtoken = false) + @Post(addAuthtoken = false, useMultiPartForm = true) ObserveDataSourceConnection create(ObserveDataSourceConfiguration dataSourceConfiguration, DataSourceCreateConfigurationDto dataSourceCreateConfiguration) throws IncompatibleDataSourceCreateConfigurationException, DataSourceCreateWithNoReferentialImportException, BabModelVersionException, DatabaseConnexionNotAuthorizedException, DatabaseNotFoundException; ===================================== services/src/main/java/fr/ird/observe/services/service/actions/synchro/referential/legacy/UnidirectionalReferentialSynchronizeEngine.java ===================================== @@ -40,6 +40,7 @@ import org.apache.commons.collections4.CollectionUtils; import org.apache.logging.log4j.LogManager; import org.apache.logging.log4j.Logger; +import java.util.Collections; import java.util.LinkedHashSet; import java.util.LinkedList; import java.util.List; @@ -110,7 +111,7 @@ public class UnidirectionalReferentialSynchronizeEngine { Set<String> insertAssociationSqlRequests = new LinkedHashSet<>(); Set<String> deleteAssociationSqlRequests = new LinkedHashSet<>(); Set<String> updateSqlRequests = new LinkedHashSet<>(); - Set<String> deleteSqlRequests = new LinkedHashSet<>(); + List<String> deleteSqlRequests = new LinkedList<>(); Set<String> sqlRequests = new LinkedHashSet<>(); @@ -142,7 +143,6 @@ public class UnidirectionalReferentialSynchronizeEngine { Set<String> generatedSqlRequests = localService.generateSqlRequests(referentialSynchronizeRequest); for (String sqlStatement : generatedSqlRequests) { - if (sqlStatement.startsWith("INSERT")) { insertSqlRequests.add(sqlStatement); } else if (sqlStatement.startsWith("$$_INSERT")) { @@ -155,12 +155,13 @@ public class UnidirectionalReferentialSynchronizeEngine { deleteSqlRequests.add(sqlStatement); } } - } sqlRequests.addAll(deleteAssociationSqlRequests); sqlRequests.addAll(insertSqlRequests); sqlRequests.addAll(insertAssociationSqlRequests); sqlRequests.addAll(updateSqlRequests); + // always reverse delete order - See 2306 + Collections.reverse(deleteSqlRequests); sqlRequests.addAll(deleteSqlRequests); context.setSqlRequests(sqlRequests); @@ -187,12 +188,18 @@ public class UnidirectionalReferentialSynchronizeEngine { UnidirectionalReferentialSynchronizeRequest.Builder<D> builder = UnidirectionalReferentialSynchronizeRequest.builder(dtoType); List<D> leftAddDifferentials = new LinkedList<>(); + List<D> leftUpdateDifferentials = new LinkedList<>(); DifferentialList leftDifferentials = leftDiffStates.get(dtoType); if (leftDifferentials != null) { - leftDifferentials.getStates().stream().filter(f -> f.getDifferentialType() == DifferentialType.ADDED).forEach(d -> { - @SuppressWarnings("unchecked") D thisSourceDto = (D) d.getThisSourceDto(); - leftAddDifferentials.add(thisSourceDto); - }); + for (Differential differential : leftDifferentials.getStates()) { + @SuppressWarnings("unchecked") D thisSourceDto = (D) differential.getThisSourceDto(); + if (differential.getDifferentialType() == DifferentialType.ADDED) { + leftAddDifferentials.add(thisSourceDto); + } else { + @SuppressWarnings("unchecked") D rightDto = (D) differential.getOptionalOtherSideDto().orElse(null); + leftUpdateDifferentials.add(rightDto); + } + } } DifferentialList rightDifferentials = rightDiffStates.get(dtoType); @@ -219,6 +226,11 @@ public class UnidirectionalReferentialSynchronizeEngine { rightUpdateDifferentials.forEach(builder::entityToUpdate); } + // Tous les référentiels mises à jour dans la base local doivent être mis à jour depuis la base centrale + if (!leftUpdateDifferentials.isEmpty()) { + leftUpdateDifferentials.forEach(builder::entityToUpdate); + } + // Tous les référentiels non présents dans la base centrale doivent être supprimés en local if (!leftAddDifferentials.isEmpty()) { ===================================== services/src/main/java/fr/ird/observe/services/service/referential/differential/DifferentialModel.java ===================================== @@ -179,9 +179,11 @@ public class DifferentialModel { D rightSideDto = rightSideDtoMap.get(id); int compareLastUpdateDate = compareTo(leftSideDto, rightSideDto); - if (0 == compareLastUpdateDate) { - continue; - } + // always compare properties to be sure to have all modifications + // See 2306 +// if (0 == compareLastUpdateDate) { +// continue; +// } // something may be modified View it on GitLab: https://gitlab.com/ultreiaio/ird-observe/-/compare/886d303e90ebe10ab2fa65827... -- View it on GitLab: https://gitlab.com/ultreiaio/ird-observe/-/compare/886d303e90ebe10ab2fa65827... You're receiving this email because of your account on gitlab.com.