Observe-commits
Threads by month
- ----- 2026 -----
- June
- May
- April
- March
- February
- January
- ----- 2025 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2024 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2023 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2022 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2021 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2020 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2019 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2018 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2017 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2016 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2015 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2014 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2013 -----
- December
- November
- October
- September
- 7199 discussions
[Git][ultreiaio/ird-observe][develop] 2 commits: Impossible de créer une base centrale vierge, quelque soit la méthode...
by Tony CHEMIT (@tchemit) 18 Mar '22
by Tony CHEMIT (@tchemit) 18 Mar '22
18 Mar '22
Tony CHEMIT pushed to branch develop at ultreiaio / ird-observe
Commits:
9995f02b by Tony Chemit at 2022-03-18T09:19:10+01:00
Impossible de créer une base centrale vierge, quelque soit la méthode appliquée - See ultreiaio/ird-observe#2214
- - - - -
6883c98a by Tony Chemit at 2022-03-18T09:40:35+01:00
update pom
- - - - -
24 changed files:
- client/core/src/main/java/fr/ird/observe/client/datasource/api/ObserveDataSourcesManager.java
- client/core/src/main/java/fr/ird/observe/client/datasource/api/ObserveSwingDataSource.java
- client/core/src/main/java/fr/ird/observe/client/datasource/h2/backup/BackupsManager.java
- client/datasource/editor/api/src/main/java/fr/ird/observe/client/datasource/editor/api/DataSourceEditorHelper.java
- client/datasource/editor/api/src/main/java/fr/ird/observe/client/datasource/editor/api/loading/open/OpenDataSourceActionStep.java
- client/datasource/editor/api/src/main/java/fr/ird/observe/client/datasource/editor/api/wizard/DataSourceHelper.java
- client/datasource/editor/api/src/main/java/fr/ird/observe/client/datasource/editor/api/wizard/StorageBackupUILauncher.java
- client/datasource/editor/api/src/main/java/fr/ird/observe/client/datasource/editor/api/wizard/StorageUIModel.java
- client/datasource/editor/api/src/main/java/fr/ird/observe/client/datasource/editor/api/wizard/launchers/CreateLauncher.java
- client/datasource/editor/api/src/main/java/fr/ird/observe/client/datasource/editor/api/wizard/tabs/ConfigDataUI.jaxx
- client/datasource/editor/api/src/main/java/fr/ird/observe/client/datasource/editor/api/wizard/tabs/SelectDataUIHandler.java
- client/runner/src/test/java/fr/ird/observe/client/ClientTestClassResource.java
- + core/persistence/java/src/main/java/fr/ird/observe/entities/DataSourceCreateHelper.java
- core/persistence/java/src/main/java/fr/ird/observe/entities/ObserveTopiaApplicationContext.java
- core/services/client/src/main/java/fr/ird/observe/services/client/AnonymousServiceClient.java
- core/services/client/src/test/java/fr/ird/observe/services/client/service/AnonymousServiceClientReadTest.java
- core/services/local/src/main/java/fr/ird/observe/services/local/service/AnonymousServiceLocalSupport.java
- core/services/local/src/test/java/fr/ird/observe/services/local/LocalTestClassResource.java
- core/services/test/src/main/java/fr/ird/observe/services/service/AnonymousServiceFixtures.java
- pom.xml
- server/core/src/main/filtered-resources/META-INF/mapping-api-client.wm
- server/core/src/main/java/fr/ird/observe/server/ObserveWebApplicationContext.java
- server/core/src/main/java/fr/ird/observe/server/controller/AnonymousServiceRestApi.java
- server/core/src/main/java/fr/ird/observe/server/converter/JsonAwareDtoConverter.java
Changes:
=====================================
client/core/src/main/java/fr/ird/observe/client/datasource/api/ObserveDataSourcesManager.java
=====================================
@@ -28,7 +28,6 @@ import fr.ird.observe.client.datasource.api.event.ObserveSwingDataSourceListener
import fr.ird.observe.dto.db.BabModelVersionException;
import fr.ird.observe.dto.db.DatabaseConnexionNotAuthorizedException;
import fr.ird.observe.dto.db.DatabaseNotFoundException;
-import fr.ird.observe.dto.db.configuration.DataSourceCreateConfigurationDto;
import fr.ird.observe.dto.db.configuration.DataSourceCreateWithNoReferentialImportException;
import fr.ird.observe.dto.db.configuration.IncompatibleDataSourceCreateConfigurationException;
import fr.ird.observe.dto.db.configuration.ObserveDataSourceConfiguration;
@@ -41,6 +40,7 @@ import fr.ird.observe.spi.decoration.DecoratorService;
import io.ultreia.java4all.i18n.I18n;
import org.apache.logging.log4j.LogManager;
import org.apache.logging.log4j.Logger;
+import org.nuiton.topia.persistence.script.TopiaSqlScript;
import java.io.Closeable;
import java.io.File;
@@ -170,6 +170,17 @@ public class ObserveDataSourcesManager implements Closeable {
return dataSource;
}
+ public ObserveSwingDataSource newDataSource(ObserveDataSourceConfigurationTopiaH2 configuration, TopiaSqlScript dump) {
+ ObserveSwingDataSource dataSource = new ObserveSwingDataSource(config, serviceFactory, decoratorService, configuration) {
+ @Override
+ public void open() throws DatabaseConnexionNotAuthorizedException, DatabaseNotFoundException, BabModelVersionException, IncompatibleDataSourceCreateConfigurationException, DataSourceCreateWithNoReferentialImportException {
+ createFromDump(dump);
+ }
+ };
+ addInternalListener(dataSource);
+ return dataSource;
+ }
+
void addInternalListener(ObserveSwingDataSource dataSource) {
dataSource.addObserveSwingDataSourceListener(new ObserveSwingDataSourceListenerAdapter() {
@@ -195,18 +206,6 @@ public class ObserveDataSourcesManager implements Closeable {
});
}
- public ObserveSwingDataSource newDataSource(ObserveDataSourceConfigurationTopiaH2 configuration, DataSourceCreateConfigurationDto createDto) {
- ObserveSwingDataSource dataSource = new ObserveSwingDataSource(config, serviceFactory, decoratorService, configuration) {
- @Override
- public void open() throws DatabaseConnexionNotAuthorizedException, DatabaseNotFoundException, BabModelVersionException, IncompatibleDataSourceCreateConfigurationException, DataSourceCreateWithNoReferentialImportException {
- create(createDto);
-
- }
- };
- addInternalListener(dataSource);
- return dataSource;
- }
-
@Override
public void close() {
=====================================
client/core/src/main/java/fr/ird/observe/client/datasource/api/ObserveSwingDataSource.java
=====================================
@@ -22,6 +22,8 @@ package fr.ird.observe.client.datasource.api;
* #L%
*/
+import com.google.common.collect.ArrayListMultimap;
+import com.google.common.collect.Multimap;
import fr.ird.observe.client.WithClientUIContextApi;
import fr.ird.observe.client.configuration.ClientConfig;
import fr.ird.observe.client.datasource.api.event.ObserveSwingDataSourceEvent;
@@ -38,7 +40,6 @@ import fr.ird.observe.dto.db.BabModelVersionException;
import fr.ird.observe.dto.db.DataSourceUserDto;
import fr.ird.observe.dto.db.DatabaseConnexionNotAuthorizedException;
import fr.ird.observe.dto.db.DatabaseNotFoundException;
-import fr.ird.observe.dto.db.configuration.DataSourceCreateConfigurationDto;
import fr.ird.observe.dto.db.configuration.DataSourceCreateWithNoReferentialImportException;
import fr.ird.observe.dto.db.configuration.IncompatibleDataSourceCreateConfigurationException;
import fr.ird.observe.dto.db.configuration.ObserveDataSourceConfiguration;
@@ -86,6 +87,7 @@ import javax.swing.event.EventListenerList;
import java.io.File;
import java.nio.file.Files;
import java.nio.file.Path;
+import java.util.Collection;
import java.util.Collections;
import java.util.Date;
import java.util.Iterator;
@@ -241,27 +243,66 @@ public class ObserveSwingDataSource extends AbstractJavaBean implements ObserveS
fireOpened();
}
- public void createFrom(ObserveSwingDataSource localSource)
+ public void createEmpty()
throws IncompatibleDataSourceCreateConfigurationException, DataSourceCreateWithNoReferentialImportException,
DatabaseNotFoundException, DatabaseConnexionNotAuthorizedException, BabModelVersionException {
- DataSourceCreateConfigurationDto createDto = new DataSourceCreateConfigurationDto();
- createDto.setLeaveOpenSource(true);
- createDto.setImportReferentialDataSourceConfiguration(localSource.getConfiguration());
- create(createDto);
+ checkIsNotOpen();
+ fireNewMessage(t("observe.ui.datasource.storage.message.creating", getLabel()));
+ fireOpening();
+ AnonymousService dataSourceService = getAnonymousService();
+ setConnection(dataSourceService.createEmpty(getConfiguration()));
+ fireNewMessage(t("observe.ui.datasource.storage.message.created", getLabel()));
+ fireOpened();
}
- public void create(DataSourceCreateConfigurationDto createDto)
+ public void createFromDump(TopiaSqlScript dump)
throws IncompatibleDataSourceCreateConfigurationException, DataSourceCreateWithNoReferentialImportException,
DatabaseNotFoundException, DatabaseConnexionNotAuthorizedException, BabModelVersionException {
checkIsNotOpen();
fireNewMessage(t("observe.ui.datasource.storage.message.creating", getLabel()));
fireOpening();
AnonymousService dataSourceService = getAnonymousService();
- setConnection(dataSourceService.create(getConfiguration(), createDto));
+ setConnection(dataSourceService.createFromDump(getConfiguration(), dump));
fireNewMessage(t("observe.ui.datasource.storage.message.created", getLabel()));
fireOpened();
}
+ public void createFromImport(TopiaSqlScript referential, TopiaSqlScript data)
+ throws IncompatibleDataSourceCreateConfigurationException, DataSourceCreateWithNoReferentialImportException,
+ DatabaseNotFoundException, DatabaseConnexionNotAuthorizedException, BabModelVersionException {
+ checkIsNotOpen();
+ fireNewMessage(t("observe.ui.datasource.storage.message.creating", getLabel()));
+ fireOpening();
+ AnonymousService dataSourceService = getAnonymousService();
+ setConnection(dataSourceService.createFromImport(getConfiguration(), referential, data));
+ fireNewMessage(t("observe.ui.datasource.storage.message.created", getLabel()));
+ fireOpened();
+ }
+
+ public TopiaSqlScript extract(boolean loadSchema, Set<String> importDataIds) {
+ checkIsOpen();
+ DataSourceService dataSourceService = getDataSourceService();
+ CreateDatabaseRequest.Builder request = CreateDatabaseRequest.builder(true, getVersion());
+ if (loadSchema) {
+ request.addSchema().addStandaloneTables();
+ }
+ if (importDataIds != null) {
+ Multimap<String, String> idsByType = ArrayListMultimap.create();
+ for (String importDataId : importDataIds) {
+ //FIXME
+ String className = importDataId.contains(".ll.") ? "fr.ird.observe.entities.data.ll.common.Trip" : "fr.ird.observe.entities.data.ps.common.Trip";
+ idsByType.put(className, importDataId);
+ }
+ for (Map.Entry<String, Collection<String>> entry : idsByType.asMap().entrySet()) {
+ String type = entry.getKey();
+ Set<String> dataIds = Set.copyOf(entry.getValue());
+ log.info(String.format("Add %d data of type: %s", dataIds.size(), type));
+ request.dataIdsToAdd(type, dataIds);
+ }
+ }
+ return dataSourceService.produceCreateSqlScript(request.build());
+ }
+
@Override
public void close() {
if (!configurationAndConnection.withConnection()) {
=====================================
client/core/src/main/java/fr/ird/observe/client/datasource/h2/backup/BackupsManager.java
=====================================
@@ -30,7 +30,6 @@ import fr.ird.observe.client.datasource.api.ObserveSwingDataSource;
import fr.ird.observe.client.datasource.api.event.ObserveSwingDataSourceEvent;
import fr.ird.observe.client.datasource.api.event.ObserveSwingDataSourceListenerAdapter;
import fr.ird.observe.client.util.ObserveSwingTechnicalException;
-import fr.ird.observe.dto.db.configuration.DataSourceCreateConfigurationDto;
import io.ultreia.java4all.lang.Strings;
import org.apache.logging.log4j.LogManager;
import org.apache.logging.log4j.Logger;
@@ -98,9 +97,6 @@ public class BackupsManager implements Closeable {
log.info("Will check backup " + backupStorage.getFile());
try {
-// byte[] dump = Files.readAllBytes(backupStorage.getFile().toPath());
- DataSourceCreateConfigurationDto createDto = new DataSourceCreateConfigurationDto();
- createDto.setImportDatabase(TopiaSqlScript.of(backupStorage.getFile().toURI()));
try (ObserveSwingDataSource dataSource = dataSourcesManager.newTemporaryH2DataSource("check-" + backupStorage.getName())) {
dataSource.addObserveSwingDataSourceListener(new ObserveSwingDataSourceListenerAdapter() {
@@ -109,7 +105,7 @@ public class BackupsManager implements Closeable {
dataSource.destroy();
}
});
- dataSource.create(createDto);
+ dataSource.createFromDump(TopiaSqlScript.of(backupStorage.getFile().toURI()));
}
backupStorage.setVerified(true);
log.info("Add sane backup from " + backupStorage.getFile());
=====================================
client/datasource/editor/api/src/main/java/fr/ird/observe/client/datasource/editor/api/DataSourceEditorHelper.java
=====================================
@@ -34,7 +34,6 @@ import fr.ird.observe.client.main.ObserveMainUI;
import fr.ird.observe.client.util.ObserveSwingTechnicalException;
import fr.ird.observe.dto.db.DatabaseConnexionNotAuthorizedException;
import fr.ird.observe.dto.db.configuration.DataSourceConnectMode;
-import fr.ird.observe.dto.db.configuration.DataSourceCreateConfigurationDto;
import fr.ird.observe.dto.db.configuration.DataSourceInitMode;
import fr.ird.observe.dto.db.configuration.ObserveDataSourceConfiguration;
import fr.ird.observe.dto.db.configuration.ObserveDataSourceInformation;
@@ -212,13 +211,8 @@ public class DataSourceEditorHelper implements WithClientUIContextApi {
log.info("Will load last backup: " + backupStorage.getFile());
try {
- DataSourceCreateConfigurationDto createDto = new DataSourceCreateConfigurationDto();
- createDto.setImportDatabase(TopiaSqlScript.of(backupStorage.getFile().toPath().toUri()));
-
ObserveDataSourceConfigurationTopiaH2 dataSourceConfigurationH2 = dataSourcesManager.newH2DataSourceConfiguration(I18n.n("observe.runner.initStorage.label.local"));
-
- ObserveSwingDataSource dataSource = dataSourcesManager.newDataSource(dataSourceConfigurationH2, createDto);
-
+ ObserveSwingDataSource dataSource = dataSourcesManager.newDataSource(dataSourceConfigurationH2, TopiaSqlScript.of(backupStorage.getFile().toPath().toUri()));
//FIXME:BodyContent Review progress model, not linked to ui any more...
mainUI.getMainUIBodyContentManager().getBodyTyped(DataSourceEditor.class, DataSourceEditorBodyContent.class).loadStorage(mainUI, dataSource);
} catch (Exception e) {
=====================================
client/datasource/editor/api/src/main/java/fr/ird/observe/client/datasource/editor/api/loading/open/OpenDataSourceActionStep.java
=====================================
@@ -31,11 +31,11 @@ import fr.ird.observe.client.datasource.editor.api.DataSourceEditorBodyContent;
import fr.ird.observe.client.datasource.editor.api.loading.LoadingDataSourceContext;
import fr.ird.observe.client.datasource.editor.api.wizard.DataSourceHelper;
import fr.ird.observe.client.datasource.editor.api.wizard.StorageUIModel;
-import fr.ird.observe.dto.db.configuration.DataSourceCreateConfigurationDto;
import fr.ird.observe.dto.db.configuration.DataSourceInitModel;
import fr.ird.observe.dto.db.configuration.ObserveDataSourceInformation;
import org.apache.logging.log4j.LogManager;
import org.apache.logging.log4j.Logger;
+import org.nuiton.topia.persistence.script.TopiaSqlScript;
import static io.ultreia.java4all.i18n.I18n.t;
@@ -115,8 +115,8 @@ public class OpenDataSourceActionStep extends OpenDataSourceActionStepSupport {
try {
if (initModel.isOnCreateMode()) {
// do create local data source
- DataSourceCreateConfigurationDto creationConfigurationDto = DataSourceHelper.getCreationConfigurationDto(model);
- newDataSource.create(creationConfigurationDto);
+ TopiaSqlScript dump = DataSourceHelper.getCreationConfigurationDto(model);
+ newDataSource.createFromDump(dump);
} else {
// open data source
newDataSource.open();
=====================================
client/datasource/editor/api/src/main/java/fr/ird/observe/client/datasource/editor/api/wizard/DataSourceHelper.java
=====================================
@@ -32,7 +32,6 @@ import fr.ird.observe.client.util.ObserveSwingTechnicalException;
import fr.ird.observe.dto.db.BabModelVersionException;
import fr.ird.observe.dto.db.DatabaseConnexionNotAuthorizedException;
import fr.ird.observe.dto.db.DatabaseNotFoundException;
-import fr.ird.observe.dto.db.configuration.DataSourceCreateConfigurationDto;
import fr.ird.observe.dto.db.configuration.DataSourceCreateWithNoReferentialImportException;
import fr.ird.observe.dto.db.configuration.DataSourceInitModel;
import fr.ird.observe.dto.db.configuration.IncompatibleDataSourceCreateConfigurationException;
@@ -49,6 +48,7 @@ import org.nuiton.topia.service.sql.request.CreateDatabaseRequest;
import java.io.File;
import java.nio.file.Path;
+import java.util.Set;
/**
* Created on 01/03/2021.
@@ -57,6 +57,7 @@ import java.nio.file.Path;
* @since 8.0.7
*/
public class DataSourceHelper {
+ public static final String referentialDbLabel = I18n.n("observe.ui.datasource.storage.label.reference.import.db");
private static final Logger log = LogManager.getLogger(DataSourceHelper.class);
public static void importModel(StorageUIModel source, StorageUIModel dst) {
@@ -79,7 +80,6 @@ public class DataSourceHelper {
dst.getChooseDb().updateEditConfig();
}
-
public static void exportModel(StorageUIModel source, StorageUIModel dst) {
source.getChooseDb().copyTo(dst.getChooseDb());
@@ -99,51 +99,74 @@ public class DataSourceHelper {
dst.setDataSourceInformation(source.getDataSourceInformation());
}
- public static DataSourceCreateConfigurationDto getCreationConfigurationDto(StorageUIModel model) throws DatabaseConnexionNotAuthorizedException, DatabaseNotFoundException, BabModelVersionException, IncompatibleDataSourceCreateConfigurationException, DataSourceCreateWithNoReferentialImportException {
- DataSourceCreateConfigurationDto result = null;
+ public static TopiaSqlScript getCreationConfigurationDto(StorageUIModel model) throws DatabaseConnexionNotAuthorizedException, DatabaseNotFoundException, BabModelVersionException, IncompatibleDataSourceCreateConfigurationException, DataSourceCreateWithNoReferentialImportException {
ChooseDbModel chooseDb = model.getChooseDb();
DataSourceInitModel initModel = chooseDb.getInitModel();
- if (initModel.isOnCreateMode()) {
- result = new DataSourceCreateConfigurationDto();
- TopiaSqlScript importDatabase = null;
- ObserveDataSourceConfiguration configSrc = null;
- switch (initModel.getCreateMode()) {
+ TopiaSqlScript importDatabase = null;
+ ObserveDataSourceConfiguration configSrc = null;
+ switch (initModel.getCreateMode()) {
- case EMPTY:
- break;
- case IMPORT_INTERNAL_DUMP: {
- File dumpFile = model.getClientConfig().getInitialDbDump();
- importDatabase = TopiaSqlScript.of(dumpFile.toURI());
- }
+ case EMPTY:
break;
- case IMPORT_EXTERNAL_DUMP: {
- File dumpFile = model.getDumpFile();
- importDatabase = TopiaSqlScript.of(dumpFile.toURI());
- }
+ case IMPORT_INTERNAL_DUMP: {
+ File dumpFile = model.getClientConfig().getInitialDbDump();
+ importDatabase = TopiaSqlScript.of(dumpFile.toURI());
+ }
+ break;
+ case IMPORT_EXTERNAL_DUMP: {
+ File dumpFile = model.getDumpFile();
+ importDatabase = TopiaSqlScript.of(dumpFile.toURI());
+ }
+ break;
+ case IMPORT_LOCAL_STORAGE:
+ configSrc = model.getLocalConfig().getConfiguration();
+ break;
+ case IMPORT_REMOTE_STORAGE:
+ configSrc = model.getRemoteConfig().getConfiguration();
break;
- case IMPORT_LOCAL_STORAGE:
- configSrc = model.getLocalConfig().getConfiguration();
- break;
- case IMPORT_REMOTE_STORAGE:
- configSrc = model.getRemoteConfig().getConfiguration();
- break;
- case IMPORT_SERVER_STORAGE:
- configSrc = model.getServerConfig().getConfiguration();
- break;
+ case IMPORT_SERVER_STORAGE:
+ configSrc = model.getServerConfig().getConfiguration();
+ break;
+ }
+ if (configSrc != null) {
+ try (ObserveSwingDataSource source = model.getDataSourcesManager().newDataSource(configSrc)) {
+ source.open();
+ DataSourceService dumpService = source.getDataSourceService();
+ CreateDatabaseRequest request = CreateDatabaseRequest.builder(false, source.getVersion()).addSchema().addStandaloneTables().build();
+ importDatabase = dumpService.produceCreateSqlScript(request);
}
- if (configSrc != null) {
- try (ObserveSwingDataSource source = model.getDataSourcesManager().newDataSource(configSrc)) {
- source.open();
- DataSourceService dumpService = source.getDataSourceService();
- CreateDatabaseRequest request = CreateDatabaseRequest.builder(false, source.getVersion()).addSchema().addStandaloneTables().build();
- importDatabase = dumpService.produceCreateSqlScript(request);
- }
+ }
+ return importDatabase;
+ }
+
+ public static TopiaSqlScript extract(ObserveDataSourcesManager dataSourcesManager, File dumpFile, boolean loadSchema, Set<String> importDataIds) {
+ try (ObserveSwingDataSource importDataSource = dataSourcesManager.newTemporaryH2DataSource(referentialDbLabel)) {
+ try {
+ importDataSource.createFromDump(TopiaSqlScript.of(dumpFile.toURI()));
+ return importDataSource.extract(loadSchema, importDataIds);
+ } catch (IncompatibleDataSourceCreateConfigurationException
+ | DataSourceCreateWithNoReferentialImportException
+ | DatabaseNotFoundException
+ | DatabaseConnexionNotAuthorizedException
+ | BabModelVersionException e) {
+ throw new ObserveSwingTechnicalException("Could not create import data source", e);
}
- if (importDatabase != null) {
- result.setImportDatabase(importDatabase);
+ }
+ }
+
+ public static TopiaSqlScript extract(ObserveDataSourcesManager dataSourcesManager, ObserveDataSourceConfiguration sourceConfiguration, boolean loadSchema, Set<String> importDataIds) {
+ try (ObserveSwingDataSource importDataSource = dataSourcesManager.newDataSource(sourceConfiguration)) {
+ try {
+ importDataSource.open();
+ return importDataSource.extract(loadSchema,importDataIds);
+ } catch (IncompatibleDataSourceCreateConfigurationException
+ | DataSourceCreateWithNoReferentialImportException
+ | DatabaseNotFoundException
+ | DatabaseConnexionNotAuthorizedException
+ | BabModelVersionException e) {
+ throw new ObserveSwingTechnicalException("Could not create import data source", e);
}
}
- return result;
}
public static ObserveSwingDataSource initDataSourceFromModel(StorageUIModel model) {
@@ -214,103 +237,6 @@ public class DataSourceHelper {
return dataSource;
}
- public static DataSourceCreateConfigurationDto toImportReferentielSourceConfig(StorageUIModel model) {
- DataSourceCreateConfigurationDto importReferenceConfig = new DataSourceCreateConfigurationDto();
- // can create empty data base
- importReferenceConfig.setCanCreateEmptyDatabase(true);
- if (model.getChooseDb().doImportReferential()) {
- String dbLabel = I18n.n("observe.ui.datasource.storage.label.reference.import.db");
- switch (model.getChooseDb().getReferentielImportMode()) {
- case IMPORT_EXTERNAL_DUMP:
- if (ObstunaAdminAction.CREATE.equals(model.getAdminAction())) {
- // import referential to temporary data source
- DataSourceCreateConfigurationDto createConfigurationDto = new DataSourceCreateConfigurationDto();
- File dumpFile = model.getCentralSourceModel().getDumpFile();
- createConfigurationDto.setImportDatabase(TopiaSqlScript.of(dumpFile.toURI()));
- try (ObserveSwingDataSource importDataSource = model.getDataSourcesManager().newTemporaryH2DataSource(dbLabel)) {
- try {
- importDataSource.create(createConfigurationDto);
- } catch (IncompatibleDataSourceCreateConfigurationException
- | DataSourceCreateWithNoReferentialImportException
- | DatabaseNotFoundException
- | DatabaseConnexionNotAuthorizedException
- | BabModelVersionException e) {
- throw new ObserveSwingTechnicalException("Could not create import data source", e);
- }
- importReferenceConfig.setImportReferentialDataSourceConfiguration(importDataSource.getConfiguration());
- }
- } else {
- File dumpFile = model.getDumpFile();
- importReferenceConfig.setImportDatabase(TopiaSqlScript.of(dumpFile.toURI()));
- }
- break;
- case IMPORT_REMOTE_STORAGE:
- // import referentiel from a remote db
- ObserveDataSourceConfigurationTopiaPG pgConfig = toPGStorageConfig(model.getCentralSourceModel(), dbLabel);
- pgConfig.setCanMigrate(false);
- importReferenceConfig.setImportReferentialDataSourceConfiguration(pgConfig);
- break;
- case IMPORT_SERVER_STORAGE:
- // import referentiel from a server db
- ObserveDataSourceConfigurationRest restConfig = toRestStorageConfig(model.getCentralSourceModel(), dbLabel);
- importReferenceConfig.setImportReferentialDataSourceConfiguration(restConfig);
- break;
- default:
- throw new IllegalStateException("Can't come here");
- }
- }
- return importReferenceConfig;
- }
-
- public static ObserveSwingDataSource toImportDataSourceConfig(StorageUIModel model) {
-
- ObserveSwingDataSource importDataSource;
-
- if (model.getChooseDb().doImportData()) {
-
- String dbLabel = I18n.n("observe.ui.datasource.storage.label.data.import.db");
-
- ObserveDataSourcesManager dataSourcesManager = model.getDataSourcesManager();
- switch (model.getChooseDb().getDataImportMode()) {
- case IMPORT_EXTERNAL_DUMP:
- DataSourceCreateConfigurationDto createConfigurationDto = new DataSourceCreateConfigurationDto();
- File dumpFile = ObstunaAdminAction.CREATE.equals(model.getAdminAction()) ? model.getDataSourceModel().getDumpFile() : model.getDumpFile();
- createConfigurationDto.setImportDatabase(TopiaSqlScript.of(dumpFile.toURI()));
- try (ObserveSwingDataSource importDataSource2 = dataSourcesManager.newTemporaryH2DataSource(dbLabel)) {
- importDataSource = importDataSource2;
- try {
- importDataSource2.create(createConfigurationDto);
- } catch (IncompatibleDataSourceCreateConfigurationException
- | DataSourceCreateWithNoReferentialImportException
- | DatabaseNotFoundException
- | DatabaseConnexionNotAuthorizedException
- | BabModelVersionException e) {
- throw new ObserveSwingTechnicalException("Could not create import data source", e);
- }
- }
- break;
- case IMPORT_REMOTE_STORAGE: {
- // import referentiel from a remote db
- ObserveDataSourceConfigurationTopiaPG dataSourceConfig = toPGStorageConfig(model.getDataSourceModel(), dbLabel);
- dataSourceConfig.setCanMigrate(false);
- importDataSource = dataSourcesManager.newDataSource(dataSourceConfig);
- }
- break;
- case IMPORT_SERVER_STORAGE: {
- // import referentiel from a server db
- ObserveDataSourceConfigurationRest dataSourceConfig = toRestStorageConfig(model.getDataSourceModel(), dbLabel);
- importDataSource = dataSourcesManager.newDataSource(dataSourceConfig);
- }
- break;
- default:
- throw new IllegalStateException("Can't come here");
- }
- } else {
- importDataSource = null;
- }
- return importDataSource;
- }
-
static ObserveDataSourceConfigurationTopiaH2 toH2StorageConfig(StorageUIModel model, String label) {
ObserveDataSourceConfigurationTopiaH2 h2Config = model.getLocalConfig().getConfiguration();
return ObserveDataSourceConfigurationTopiaH2.create(
@@ -326,7 +252,7 @@ public class DataSourceHelper {
);
}
- static ObserveDataSourceConfigurationTopiaPG toPGStorageConfig(StorageUIModel model, String label) {
+ public static ObserveDataSourceConfigurationTopiaPG toPGStorageConfig(StorageUIModel model, String label) {
ObserveDataSourceConfigurationTopiaPG pgConfig = model.getRemoteConfig().getConfiguration();
return ObserveDataSourceConfigurationTopiaPG.create(
label,
@@ -341,7 +267,7 @@ public class DataSourceHelper {
);
}
- static ObserveDataSourceConfigurationRest toRestStorageConfig(StorageUIModel model, String label) {
+ public static ObserveDataSourceConfigurationRest toRestStorageConfig(StorageUIModel model, String label) {
ObserveDataSourceConfigurationRest restConfig = model.getServerConfig().getConfiguration();
return ObserveDataSourceConfigurationRest.create(
label,
=====================================
client/datasource/editor/api/src/main/java/fr/ird/observe/client/datasource/editor/api/wizard/StorageBackupUILauncher.java
=====================================
@@ -42,6 +42,7 @@ import fr.ird.observe.navigation.tree.selection.SelectionTreeModel;
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 java.awt.Window;
import java.io.File;
@@ -137,7 +138,8 @@ public class StorageBackupUILauncher extends StorageUILauncher {
try (ObserveSwingDataSource targetSource = dataSourcesManager.newTemporaryH2DataSource("Backup-" + backupFile.getName())) {
// create temporary source
- targetSource.createFrom(incomingSource);
+ TopiaSqlScript referentialDump = incomingSource.extract(true, null);
+ targetSource.createFromDump(referentialDump);
progressModel.increments();
// insert selected data
=====================================
client/datasource/editor/api/src/main/java/fr/ird/observe/client/datasource/editor/api/wizard/StorageUIModel.java
=====================================
@@ -671,7 +671,9 @@ public class StorageUIModel extends WizardModel<StorageStep> implements WithClie
}
break;
case CONFIG_REFERENTIAL:
-
+ if (chooseDb.getReferentielImportMode() == null) {
+ return false;
+ }
switch (chooseDb.getReferentielImportMode()) {
case EMPTY:
@@ -703,7 +705,9 @@ public class StorageUIModel extends WizardModel<StorageStep> implements WithClie
break;
case CONFIG_DATA:
-
+ if (chooseDb.getDataImportMode() == null) {
+ return false;
+ }
switch (chooseDb.getDataImportMode()) {
case EMPTY:
=====================================
client/datasource/editor/api/src/main/java/fr/ird/observe/client/datasource/editor/api/wizard/launchers/CreateLauncher.java
=====================================
@@ -22,29 +22,37 @@ package fr.ird.observe.client.datasource.editor.api.wizard.launchers;
* #L%
*/
+import fr.ird.observe.client.datasource.api.ObserveDataSourcesManager;
import fr.ird.observe.client.datasource.api.ObserveSwingDataSource;
import fr.ird.observe.client.datasource.editor.api.wizard.DataSourceHelper;
import fr.ird.observe.client.datasource.editor.api.wizard.ObstunaAdminAction;
import fr.ird.observe.client.datasource.editor.api.wizard.StorageUI;
import fr.ird.observe.client.datasource.editor.api.wizard.StorageUIModel;
+import fr.ird.observe.client.util.ObserveSwingTechnicalException;
import fr.ird.observe.dto.db.BabModelVersionException;
import fr.ird.observe.dto.db.DatabaseConnexionNotAuthorizedException;
import fr.ird.observe.dto.db.DatabaseNotFoundException;
import fr.ird.observe.dto.db.configuration.DataSourceConnectMode;
-import fr.ird.observe.dto.db.configuration.DataSourceCreateConfigurationDto;
+import fr.ird.observe.dto.db.configuration.DataSourceCreateMode;
import fr.ird.observe.dto.db.configuration.DataSourceCreateWithNoReferentialImportException;
import fr.ird.observe.dto.db.configuration.IncompatibleDataSourceCreateConfigurationException;
import fr.ird.observe.dto.db.configuration.ObserveDataSourceConfiguration;
import fr.ird.observe.dto.db.configuration.ObserveDataSourceInformation;
-import fr.ird.observe.navigation.tree.selection.SelectionTreeModel;
+import fr.ird.observe.dto.db.configuration.rest.ObserveDataSourceConfigurationRest;
+import fr.ird.observe.dto.db.configuration.topia.ObserveDataSourceConfigurationTopiaPG;
+import io.ultreia.java4all.i18n.I18n;
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 java.awt.Window;
+import java.io.File;
import java.util.Objects;
import java.util.Set;
+import static fr.ird.observe.client.datasource.editor.api.wizard.DataSourceHelper.toPGStorageConfig;
+
/**
* Created on 14/09/2021.
*
@@ -53,7 +61,53 @@ import java.util.Set;
*/
public class CreateLauncher extends RemoteUILauncher {
private static final Logger log = LogManager.getLogger(CreateLauncher.class);
- DataSourceCreateConfigurationDto createConfigurationDto;
+ private TopiaSqlScript referential;
+ private TopiaSqlScript data;
+
+ public static ObserveSwingDataSource toImportDataSourceConfig(StorageUIModel model) {
+
+ if (!model.getChooseDb().doImportData()) {
+ throw new IllegalStateException(String.format("Must be in select data mode to come here: %s", model));
+ }
+
+ String dbLabel = I18n.n("observe.ui.datasource.storage.label.data.import.db");
+ ObserveSwingDataSource importDataSource;
+
+ ObserveDataSourcesManager dataSourcesManager = model.getDataSourcesManager();
+ switch (model.getChooseDb().getDataImportMode()) {
+ case IMPORT_EXTERNAL_DUMP:
+ File dumpFile = model.getDataSourceModel().getDumpFile();
+ try (ObserveSwingDataSource importDataSource2 = dataSourcesManager.newTemporaryH2DataSource(dbLabel)) {
+ importDataSource = importDataSource2;
+ try {
+ importDataSource2.createFromDump(TopiaSqlScript.of(dumpFile.toURI()));
+ } catch (IncompatibleDataSourceCreateConfigurationException
+ | DataSourceCreateWithNoReferentialImportException
+ | DatabaseNotFoundException
+ | DatabaseConnexionNotAuthorizedException
+ | BabModelVersionException e) {
+ throw new ObserveSwingTechnicalException("Could not create import data source", e);
+ }
+ }
+ break;
+ case IMPORT_REMOTE_STORAGE: {
+ // import referentiel from a remote db
+ ObserveDataSourceConfigurationTopiaPG dataSourceConfig = DataSourceHelper.toPGStorageConfig(model.getDataSourceModel(), dbLabel);
+ dataSourceConfig.setCanMigrate(false);
+ importDataSource = dataSourcesManager.newDataSource(dataSourceConfig);
+ }
+ break;
+ case IMPORT_SERVER_STORAGE: {
+ // import referentiel from a server db
+ ObserveDataSourceConfigurationRest dataSourceConfig = DataSourceHelper.toRestStorageConfig(model.getDataSourceModel(), dbLabel);
+ importDataSource = dataSourcesManager.newDataSource(dataSourceConfig);
+ }
+ break;
+ default:
+ throw new IllegalStateException("Can't come here");
+ }
+ return importDataSource;
+ }
public CreateLauncher(JAXXContext context, Window frame, DataSourceConnectMode connectMode) {
super(ObstunaAdminAction.CREATE, context, frame, connectMode);
@@ -67,27 +121,112 @@ public class CreateLauncher extends RemoteUILauncher {
//FIXME This logic should be done in StorageModel not here, like this!
model.getChooseDb().setCanMigrate(true);
model.getRemoteConfig().setCanCreateDatabase(true);
+ model.getServerConfig().setCanCreateDatabase(true);
super.init(ui);
}
@Override
- protected ObserveSwingDataSource initTask(StorageUIModel model) throws Exception {
+ protected ObserveSwingDataSource initTask(StorageUIModel model) {
ObserveSwingDataSource dataSource = getDataSource(model);
- createConfigurationDto = DataSourceHelper.toImportReferentielSourceConfig(model);
- ObserveDataSourceConfiguration importReferentialConfig = createConfigurationDto.getImportReferentialDataSourceConfiguration();
- if (importReferentialConfig != null) {
- log.info(String.format("Use referentiel import data source %s", importReferentialConfig.getLabel()));
- checkImportDbVersion(model, importReferentialConfig);
+ // can create empty data base
+ boolean importReferential = model.getChooseDb().doImportReferential();
+ boolean importData = model.getChooseDb().doImportData();
+ if (!importReferential && !importData) {
+ // no import at all
+ log.info("Create empty database.");
+ return dataSource;
}
- // data import
- ObserveSwingDataSource importDataConfig = DataSourceHelper.toImportDataSourceConfig(model);
- if (importDataConfig != null) {
- log.info(String.format("Use data import data source %s", importDataConfig.getLabel()));
- checkImportDbVersion(model, importDataConfig.getConfiguration());
- SelectionTreeModel dataModel = model.getSelectDataModel();
- Set<String> importDataIds = dataModel.getSelectedDataIds();
- createConfigurationDto.setImportDataConfiguration(importDataConfig.getConfiguration(), importDataIds);
+
+ DataSourceCreateMode referentialImportMode = model.getChooseDb().getReferentielImportMode();
+ DataSourceCreateMode dataImportMode = model.getChooseDb().getDataImportMode();
+
+ File referentialDump = null;
+ ObserveDataSourceConfiguration referentialConfig = null;
+ File dataDump = null;
+ ObserveDataSourceConfiguration dataConfig = null;
+ Set<String> selectedDataIds = null;
+ if (importReferential && referentialImportMode != null) {
+ switch (referentialImportMode) {
+ case IMPORT_EXTERNAL_DUMP:
+ referentialDump = model.getCentralSourceModel().getDumpFile();
+
+ break;
+ case IMPORT_REMOTE_STORAGE:
+ ObserveDataSourceConfigurationTopiaPG pgConfig = toPGStorageConfig(model.getCentralSourceModel(), DataSourceHelper.referentialDbLabel);
+ pgConfig.setCanMigrate(false);
+ referentialConfig = pgConfig;
+ break;
+ case IMPORT_SERVER_STORAGE:
+ referentialConfig = DataSourceHelper.toRestStorageConfig(model.getCentralSourceModel(), DataSourceHelper.referentialDbLabel);
+ break;
+ default:
+ throw new IllegalStateException("Can't come here");
+ }
}
+ if (importData && dataImportMode != null) {
+ String dbLabel = I18n.n("observe.ui.datasource.storage.label.data.import.db");
+ selectedDataIds = model.getSelectDataModel().getSelectedDataIds();
+ switch (dataImportMode) {
+ case IMPORT_EXTERNAL_DUMP:
+ dataDump = model.getDataSourceModel().getDumpFile();
+ break;
+ case IMPORT_REMOTE_STORAGE: {
+ ObserveDataSourceConfigurationTopiaPG dataSourceConfig = toPGStorageConfig(model.getDataSourceModel(), dbLabel);
+ dataSourceConfig.setCanMigrate(false);
+ dataConfig = dataSourceConfig;
+ }
+ break;
+ case IMPORT_SERVER_STORAGE: {
+ dataConfig = DataSourceHelper.toRestStorageConfig(model.getDataSourceModel(), dbLabel);
+ break;
+ }
+ default:
+ throw new IllegalStateException("Can't come here");
+ }
+ }
+
+ if (referentialDump != null) {
+ if (dataDump != null) {
+ if (referentialDump.equals(dataDump)) {
+
+ log.info(String.format("Extract referential + data from dump %s", referentialDump));
+ referential = DataSourceHelper.extract(model.getDataSourcesManager(), referentialDump, true, selectedDataIds);
+ } else {
+ log.info(String.format("Extract referential from dump %s", referentialDump));
+ referential = DataSourceHelper.extract(model.getDataSourcesManager(), referentialDump, true, null);
+ log.info(String.format("Extract data from dump %s %s", dataDump, selectedDataIds));
+ data = DataSourceHelper.extract(model.getDataSourcesManager(), dataDump, false, selectedDataIds);
+ }
+ } else {
+ log.info(String.format("Extract referential from dump %s", referentialDump));
+ referential = DataSourceHelper.extract(model.getDataSourcesManager(), referentialDump, true, null);
+ if (dataConfig != null) {
+ log.info(String.format("Extract data from config %s %s", dataConfig.getLabel(), selectedDataIds));
+ data = DataSourceHelper.extract(model.getDataSourcesManager(), dataConfig, false, selectedDataIds);
+ }
+ }
+ } else {
+ Objects.requireNonNull(referentialConfig);
+ if (dataConfig != null) {
+ if (referentialConfig.equals(dataConfig)) {
+ log.info(String.format("Extract referential + data from config %s %s", referentialConfig.getLabel(), selectedDataIds));
+ referential = DataSourceHelper.extract(model.getDataSourcesManager(), referentialConfig, true, selectedDataIds);
+ } else {
+ log.info(String.format("Extract referential from config %s", referentialConfig.getLabel()));
+ referential = DataSourceHelper.extract(model.getDataSourcesManager(), referentialConfig, true, null);
+ log.info(String.format("Extract data from config %s %s", dataConfig.getLabel(), selectedDataIds));
+ data = DataSourceHelper.extract(model.getDataSourcesManager(), dataConfig, false, selectedDataIds);
+ }
+ } else {
+ log.info(String.format("Extract referential from config %s", referentialConfig.getLabel()));
+ referential = DataSourceHelper.extract(model.getDataSourcesManager(), referentialConfig, true, null);
+ if (dataDump != null) {
+ log.info(String.format("Extract data from dump %s %s", dataDump, selectedDataIds));
+ data = DataSourceHelper.extract(model.getDataSourcesManager(), dataDump, false, selectedDataIds);
+ }
+ }
+ }
+ Objects.requireNonNull(referential);
return dataSource;
}
@@ -95,21 +234,15 @@ public class CreateLauncher extends RemoteUILauncher {
protected void execute(ObserveSwingDataSource dataSource, ObserveDataSourceInformation dataSourceInformation) throws Exception {
log.info("Create db...");
try {
- dataSource.create(createConfigurationDto);
+ if (referential != null) {
+ dataSource.createFromImport(referential, data);
+ } else {
+ dataSource.createEmpty();
+ }
log.info(String.format("Open [%s] and create it.", dataSource.getLabel()));
} finally {
- if (dataSource.isOpen()) {
- dataSource.close();
- }
- }
- }
-
- void checkImportDbVersion(StorageUIModel model, ObserveDataSourceConfiguration dataSourceConfig) throws DatabaseConnexionNotAuthorizedException, DatabaseNotFoundException, BabModelVersionException, IncompatibleDataSourceCreateConfigurationException, DataSourceCreateWithNoReferentialImportException {
- try (ObserveSwingDataSource importDataSource = Objects.requireNonNull(model.getDataSourcesManager().newDataSource(dataSourceConfig))) {
- importDataSource.open();
- model.checkImportDbVersion(importDataSource);
+ ObserveSwingDataSource.doCloseSource(dataSource);
}
}
-
}
=====================================
client/datasource/editor/api/src/main/java/fr/ird/observe/client/datasource/editor/api/wizard/tabs/ConfigDataUI.jaxx
=====================================
@@ -35,8 +35,8 @@
<StorageStep id='step' initializer='StorageStep.CONFIG_DATA'/>
<StorageUIModel id='model'/>
- <StorageUIModel id='centralSourceModel' initializer='model.getDataSourceModel()'/>
<ChooseDbModel id='chooseDbModel' initializer='model.getChooseDb()'/>
+ <StorageUIModel id='centralSourceModel' initializer='model.getDataSourceModel()'/>
<ButtonGroup id='dataSourceCreateMode' onStateChanged='chooseDbModel.setDataImportMode((DataSourceCreateMode) dataSourceCreateMode.getSelectedValue())'/>
=====================================
client/datasource/editor/api/src/main/java/fr/ird/observe/client/datasource/editor/api/wizard/tabs/SelectDataUIHandler.java
=====================================
@@ -29,9 +29,9 @@ import fr.ird.observe.client.datasource.editor.api.config.TreeConfigUIHandler;
import fr.ird.observe.client.datasource.editor.api.selection.SelectionTreePane;
import fr.ird.observe.client.datasource.editor.api.selection.SelectionTreePaneHandler;
import fr.ird.observe.client.datasource.editor.api.selection.actions.SelectUnselect;
-import fr.ird.observe.client.datasource.editor.api.wizard.DataSourceHelper;
import fr.ird.observe.client.datasource.editor.api.wizard.ObstunaAdminAction;
import fr.ird.observe.client.datasource.editor.api.wizard.StorageUIModel;
+import fr.ird.observe.client.datasource.editor.api.wizard.launchers.CreateLauncher;
import fr.ird.observe.client.util.ObserveKeyStrokesSupport;
import fr.ird.observe.client.util.ObserveSwingTechnicalException;
import fr.ird.observe.navigation.id.Project;
@@ -75,7 +75,7 @@ public class SelectDataUIHandler extends StorageTabUIHandler<SelectDataUI> imple
}
if (createDataSource) {
// create temporary data source
- try (ObserveSwingDataSource dataSource = DataSourceHelper.toImportDataSourceConfig(model)) {
+ try (ObserveSwingDataSource dataSource = CreateLauncher.toImportDataSourceConfig(model)) {
SelectionTreePaneHandler.initDataSource(treePane, dataSource);
dataSource.open();
if (init) {
=====================================
client/runner/src/test/java/fr/ird/observe/client/ClientTestClassResource.java
=====================================
@@ -28,7 +28,6 @@ import fr.ird.observe.client.datasource.api.ObserveSwingDataSource;
import fr.ird.observe.dto.db.BabModelVersionException;
import fr.ird.observe.dto.db.DatabaseConnexionNotAuthorizedException;
import fr.ird.observe.dto.db.DatabaseNotFoundException;
-import fr.ird.observe.dto.db.configuration.DataSourceCreateConfigurationDto;
import fr.ird.observe.dto.db.configuration.DataSourceCreateWithNoReferentialImportException;
import fr.ird.observe.dto.db.configuration.IncompatibleDataSourceCreateConfigurationException;
import fr.ird.observe.dto.db.configuration.topia.ObserveDataSourceConfigurationTopiaH2;
@@ -90,11 +89,9 @@ public class ClientTestClassResource extends TestClassResourceSupport {
boolean sharedDatabaseExist = sharedDatabaseFile.exists();
if (!sharedDatabaseExist) {
log.info(String.format("Create shared database: %s/%s to %s", dbVersion.toString(), dbName, sharedDatabaseFile));
- DataSourceCreateConfigurationDto createConfiguration = new DataSourceCreateConfigurationDto();
TopiaSqlScript script = dataSourcesForTestManager.getCache(dbVersion, dbName);
- createConfiguration.setImportDatabase(script);
observeSwingDataSource = ClientUIContextApplicationComponent.value().getDataSourcesManager().newDataSource(sharedDatabaseConfiguration);
- observeSwingDataSource.create(createConfiguration);
+ observeSwingDataSource.createFromDump(script);
}
if (targetPath == null) {
dataSourceConfiguration = sharedDatabaseConfiguration;
=====================================
core/persistence/java/src/main/java/fr/ird/observe/entities/DataSourceCreateHelper.java
=====================================
@@ -0,0 +1,103 @@
+package fr.ird.observe.entities;
+
+/*-
+ * #%L
+ * ObServe Core :: Persistence :: Java
+ * %%
+ * Copyright (C) 2008 - 2022 IRD, Code Lutin, Ultreia.io
+ * %%
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as
+ * published by the Free Software Foundation, either version 3 of the
+ * License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public
+ * License along with this program. If not, see
+ * <http://www.gnu.org/licenses/gpl-3.0.html>.
+ * #L%
+ */
+
+import fr.ird.observe.dto.db.BabModelVersionException;
+import fr.ird.observe.dto.db.DatabaseConnexionNotAuthorizedException;
+import fr.ird.observe.dto.db.DatabaseNotFoundException;
+import fr.ird.observe.dto.db.configuration.ObserveDataSourceConfiguration;
+import fr.ird.observe.dto.db.configuration.topia.ObserveDataSourceConfigurationTopiaH2;
+import io.ultreia.java4all.util.Version;
+import org.apache.logging.log4j.LogManager;
+import org.apache.logging.log4j.Logger;
+import org.nuiton.topia.persistence.script.TopiaSqlScript;
+import org.nuiton.topia.service.migration.TopiaMigrationService;
+import org.nuiton.topia.service.sql.request.CreateDatabaseRequest;
+
+import java.io.File;
+import java.io.IOException;
+import java.nio.file.Files;
+import java.nio.file.Path;
+
+/**
+ * Created on 16/03/2022.
+ *
+ * @author Tony Chemit - dev(a)tchemit.fr
+ * @since 6.0.7
+ */
+public class DataSourceCreateHelper {
+
+ private static final Logger log = LogManager.getLogger(DataSourceCreateHelper.class);
+
+ public static void create(ToolkitTopiaApplicationContextSupport<?> applicationContext) throws BabModelVersionException, DatabaseConnexionNotAuthorizedException, DatabaseNotFoundException {
+ log.debug(String.format("Create topia application context: %s", applicationContext));
+ // si le referentiel n'est pas importé on aliment la table lastUpdateDate
+ //FIXME Make sure this is ok, but not sure
+ applicationContext.insertLastUpdateDate();
+ }
+
+ public static void create(ToolkitTopiaApplicationContextSupport<?> applicationContext, ObserveDataSourceConfiguration dataSourceConfiguration, TopiaSqlScript importDatabase) throws BabModelVersionException, DatabaseConnexionNotAuthorizedException, DatabaseNotFoundException {
+ log.debug(String.format("Create topia application context: %s", applicationContext));
+ Path temporaryDirectory = dataSourceConfiguration.getTemporaryDirectory();
+ log.info("Create new database from a script.");
+ TopiaMigrationService migrationService = (TopiaMigrationService) applicationContext.getMigrationService();
+ if (dataSourceConfiguration.isLocal()) {
+ applicationContext.executeSqlStatements(importDatabase);
+ migrationService.createSchemaIfNotExist();
+ migrationService.runSchemaMigration();
+ } else {
+ // base postgres
+ // do import in temporary h2 database
+ File tmpDir;
+ try {
+ tmpDir = Files.createTempDirectory(temporaryDirectory, "obstuna").toFile();
+ } catch (IOException e) {
+ throw new IllegalStateException("could not create temporary directory ", e);
+ }
+ Version modelVersion = dataSourceConfiguration.getModelVersion();
+ ObserveDataSourceConfigurationTopiaH2 temporaryConfiguration = applicationContext.createTemporaryConfiguration(tmpDir, modelVersion);
+ ObserveTopiaApplicationContext temporaryTopiaApplicationContext = ObserveTopiaApplicationContextFactory.createTopiaApplicationContext(temporaryConfiguration, false);
+ temporaryTopiaApplicationContext.executeSqlStatements(importDatabase);
+ temporaryTopiaApplicationContext.getMigrationService().createSchemaIfNotExist();
+ temporaryTopiaApplicationContext.getMigrationService().runSchemaMigration();
+ CreateDatabaseRequest request = CreateDatabaseRequest.builder(true, modelVersion).addSchema().addStandaloneTables().addAllData().build();
+ TopiaSqlScript dump = applicationContext.getSqlService().consume(request);
+ applicationContext.executeSqlStatements(dump);
+ migrationService.createSchemaIfNotExist();
+ migrationService.runSchemaMigration();
+ temporaryTopiaApplicationContext.close();
+ File databaseFile = temporaryConfiguration.getDatabaseFile();
+ if (!databaseFile.delete()) {
+ throw new IllegalStateException("could not delete " + databaseFile);
+ }
+ }
+ }
+
+ public static void create(ToolkitTopiaApplicationContextSupport<?> applicationContext, TopiaSqlScript dump, TopiaSqlScript optionalDump) throws BabModelVersionException, DatabaseConnexionNotAuthorizedException, DatabaseNotFoundException {
+ log.debug(String.format("Create topia application context: %s", applicationContext));
+ applicationContext.executeSqlStatements(dump);
+ if (optionalDump != null) {
+ applicationContext.executeSqlStatements(optionalDump);
+ }
+ }
+}
=====================================
core/persistence/java/src/main/java/fr/ird/observe/entities/ObserveTopiaApplicationContext.java
=====================================
@@ -22,14 +22,10 @@ package fr.ird.observe.entities;
* #L%
*/
-import com.google.common.collect.ArrayListMultimap;
-import com.google.common.collect.Multimap;
import fr.ird.observe.dto.db.BabModelVersionException;
import fr.ird.observe.dto.db.DatabaseConnexionNotAuthorizedException;
import fr.ird.observe.dto.db.DatabaseNotFoundException;
-import fr.ird.observe.dto.db.configuration.DataSourceCreateConfigurationDto;
import fr.ird.observe.dto.db.configuration.ObserveDataSourceConfiguration;
-import fr.ird.observe.dto.db.configuration.topia.ObserveDataSourceConfigurationTopiaH2;
import fr.ird.observe.dto.referential.ReferentialDto;
import fr.ird.observe.entities.data.DataGroupByEntity;
import fr.ird.observe.spi.module.BusinessProject;
@@ -37,16 +33,11 @@ import fr.ird.observe.spi.referential.differential.DifferentialMetaModel;
import fr.ird.observe.spi.referential.synchro.OneSideSqlResultBuilder;
import fr.ird.observe.spi.script.ToolkitEntitySqlScriptModel;
import fr.ird.observe.spi.service.ServiceContext;
-import io.ultreia.java4all.util.Version;
-import org.apache.logging.log4j.LogManager;
-import org.apache.logging.log4j.Logger;
import org.nuiton.topia.persistence.TagValues;
import org.nuiton.topia.persistence.TopiaConfigurationExtension;
import org.nuiton.topia.persistence.TopiaEntity;
-import org.nuiton.topia.persistence.TopiaIdFactory;
import org.nuiton.topia.persistence.TopiaPersistenceContextConstructorParameterSupport;
import org.nuiton.topia.persistence.script.TopiaSqlScript;
-import org.nuiton.topia.service.migration.TopiaMigrationService;
import org.nuiton.topia.service.sql.blob.TopiaEntitySqlBlobModel;
import org.nuiton.topia.service.sql.metadata.TopiaMetadataModel;
import org.nuiton.topia.service.sql.metadata.TopiaMetadataModelPaths;
@@ -54,25 +45,15 @@ import org.nuiton.topia.service.sql.model.TopiaEntitySqlModel;
import org.nuiton.topia.service.sql.plan.copy.TopiaEntitySqlCopyPlanModel;
import org.nuiton.topia.service.sql.plan.delete.TopiaEntitySqlDeletePlanModel;
import org.nuiton.topia.service.sql.plan.replicate.TopiaEntitySqlReplicatePlanModel;
-import org.nuiton.topia.service.sql.request.CreateDatabaseRequest;
import org.nuiton.topia.service.sql.usage.TopiaEntitySqlUsageModel;
-import java.io.File;
-import java.io.IOException;
-import java.nio.file.Files;
-import java.nio.file.Path;
import java.time.Duration;
-import java.util.Collection;
import java.util.Date;
-import java.util.Map;
import java.util.Set;
-import java.util.UUID;
import java.util.function.Consumer;
public class ObserveTopiaApplicationContext extends AbstractObserveTopiaApplicationContext {
- private static final Logger log = LogManager.getLogger(ObserveTopiaApplicationContext.class);
-
public ObserveTopiaApplicationContext(TopiaConfigurationExtension topiaConfiguration) {
super(topiaConfiguration);
}
@@ -187,131 +168,15 @@ public class ObserveTopiaApplicationContext extends AbstractObserveTopiaApplicat
return ObserveTopiaEntitySqlModelResource.get().getScriptModel();
}
- public void create(ObserveDataSourceConfiguration dataSourceConfiguration, DataSourceCreateConfigurationDto dataSourceCreateConfiguration) throws BabModelVersionException, DatabaseConnexionNotAuthorizedException, DatabaseNotFoundException {
- log.debug(String.format("Create topia application context: %s", this));
- if (dataSourceCreateConfiguration.isImportDatabase()) {
- log.info("Create new database from a script.");
- TopiaSqlScript importDatabase = dataSourceCreateConfiguration.getImportDatabase();
- boolean migrate = dataSourceCreateConfiguration.isMigrate();
- TopiaMigrationService migrationService = getMigrationService();
- if (dataSourceConfiguration.isLocal()) {
- executeSqlStatements(importDatabase);
- if (migrate) {
- migrationService.createSchemaIfNotExist();
- migrationService.runSchemaMigration();
- }
- } else { // base postgres
- // do import in temporary h2 database
- File tmpDir;
- try {
- Path temporaryDirectory = dataSourceConfiguration.getTemporaryDirectory();
- 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);
- if (migrate) {
- temporaryTopiaApplicationContext.getMigrationService().createSchemaIfNotExist();
- temporaryTopiaApplicationContext.getMigrationService().runSchemaMigration();
- }
- CreateDatabaseRequest request = CreateDatabaseRequest.builder(true, dataSourceConfiguration.getModelVersion()).addSchema().addStandaloneTables().addAllData().build();
- TopiaSqlScript dump = getSqlService().consume(request);
- executeSqlStatements(dump);
- migrationService.createSchemaIfNotExist();
- migrationService.runSchemaMigration();
- temporaryTopiaApplicationContext.close();
- File databaseFile = temporaryConfiguration.getDatabaseFile();
- if (!databaseFile.delete()) {
- throw new IllegalStateException("could not delete " + databaseFile);
- }
- }
- } else {
- boolean importReferential = dataSourceCreateConfiguration.isImportReferential();
- boolean importData = dataSourceCreateConfiguration.isImportData();
- // si le referentiel n'est pas importé on aliment la table lastUpdateDate
- if (!importReferential) {
- insertLastUpdateDate();
- }
- boolean importStandaloneReferential = importReferential;
- if (importReferential && importData) {
- // Si on est sur la même source de données pour les deux imports, on fait tout sur la même base temporaire
- ObserveDataSourceConfiguration importReferentialDataSourceConfiguration = dataSourceCreateConfiguration.getImportReferentialDataSourceConfiguration();
- ObserveDataSourceConfiguration importDataSourceConfiguration = dataSourceCreateConfiguration.getImportDataDataSourceConfiguration();
- importStandaloneReferential = !importReferentialDataSourceConfiguration.equals(importDataSourceConfiguration);
- }
- boolean referentialImported = false;
- if (importStandaloneReferential) {
- log.info("Import referential.");
- ObserveDataSourceConfiguration importDataSourceConfiguration = dataSourceCreateConfiguration.getImportReferentialDataSourceConfiguration();
- Version dbVersion = Version.valueOf(getModelVersion());
- CreateDatabaseRequest request = CreateDatabaseRequest.builder(!dataSourceConfiguration.isLocal(), dbVersion)
- .addStandaloneTables().build();
- TopiaSqlScript referentialDump;
- ObserveTopiaApplicationContext temporaryTopiaApplicationContext = null;
- try {
- temporaryTopiaApplicationContext = ObserveTopiaApplicationContextFactory.createTopiaApplicationContext(importDataSourceConfiguration, false);
-// ObserveDataSourceConnection importDataSourceConnection = serviceContext().newService(importDataSourceConfiguration, AnonymousService.class).open(importDataSourceConfiguration);
-// DataSourceService dumpProducerService = serviceContext().newService(importDataSourceConnection, DataSourceService.class);
- referentialDump = temporaryTopiaApplicationContext.getSqlService().consume(request);
- executeSqlStatements(referentialDump);
- } finally {
- if (!dataSourceCreateConfiguration.isLeaveOpenSource() && temporaryTopiaApplicationContext != null) {
- temporaryTopiaApplicationContext.close();
- }
- }
- referentialImported = true;
- }
-
- if (importData) {
- ObserveDataSourceConfiguration importDataSourceConfiguration = dataSourceCreateConfiguration.getImportDataDataSourceConfiguration();
- Version dbVersion = Version.valueOf(getModelVersion());
- CreateDatabaseRequest.Builder requestBuilder = CreateDatabaseRequest.builder(!dataSourceConfiguration.isLocal(), dbVersion);
- if (!referentialImported) {
- log.info("Get referential.");
- requestBuilder.addStandaloneTables();
- }
-
- // Récupération du dump qui contient les données
- Set<String> importDataIds = dataSourceCreateConfiguration.getImportDataIds();
- TopiaIdFactory idFactory = getTopiaIdFactory();
- Multimap<String, String> idsByType = ArrayListMultimap.create();
- for (String importDataId : importDataIds) {
- Class<TopiaEntity> className = idFactory.getClassName(importDataId);
- idsByType.put(className.getName(), importDataId);
- }
- log.info(String.format("Get data: %s", importDataIds));
- for (Map.Entry<String, Collection<String>> entry : idsByType.asMap().entrySet()) {
- requestBuilder.dataIdsToAdd(entry.getKey(), Set.copyOf(entry.getValue()));
- }
- TopiaSqlScript dataDump;
- ObserveTopiaApplicationContext temporaryTopiaApplicationContext = null;
- CreateDatabaseRequest request = requestBuilder.build();
- try {
- temporaryTopiaApplicationContext = ObserveTopiaApplicationContextFactory.createTopiaApplicationContext(importDataSourceConfiguration, false);
-// ObserveDataSourceConnection importDataSourceConnection = serviceContext().newService(importDataSourceConfiguration, AnonymousService.class).open(importDataSourceConfiguration);
-// DataSourceService dumpProducerService = serviceContext().newService(importDataSourceConnection, DataSourceService.class);
-// dataDump = dumpProducerService.produceCreateSqlScript(request);
- dataDump = temporaryTopiaApplicationContext.getSqlService().consume(request);
- } finally {
- if (!dataSourceCreateConfiguration.isLeaveOpenSource() && temporaryTopiaApplicationContext != null) {
- temporaryTopiaApplicationContext.close();
-// serviceContext().newService(importDataSourceConfiguration, DataSourceService.class).close();
- }
- }
- log.info(String.format("Import data%s", request.isAddStandaloneTables() ? " and referential." : "."));
- executeSqlStatements(dataDump);
- }
- }
+ public void createEmpty() throws BabModelVersionException, DatabaseConnexionNotAuthorizedException, DatabaseNotFoundException {
+ DataSourceCreateHelper.create(this);
}
- private ObserveDataSourceConfigurationTopiaH2 createTemporaryConfiguration(File tmpDirectory, Version version) {
- File dbDirectory = new File(tmpDirectory, "obstuna" + UUID.randomUUID());
- ObserveDataSourceConfigurationTopiaH2 result = ObserveDataSourceConfigurationTopiaH2.create(
- "obtunaTmp", dbDirectory, "obstuna", "sa", "sa".toCharArray(), true, true, version);
- result.setTemporaryDirectory(tmpDirectory.toPath());
- return result;
+ public void createFromDump(ObserveDataSourceConfiguration dataSourceConfiguration, TopiaSqlScript dump) throws BabModelVersionException, DatabaseConnexionNotAuthorizedException, DatabaseNotFoundException {
+ DataSourceCreateHelper.create(this, dataSourceConfiguration, dump);
}
+ public void createAndImport(TopiaSqlScript dump, TopiaSqlScript optionalDump) throws BabModelVersionException, DatabaseConnexionNotAuthorizedException, DatabaseNotFoundException {
+ DataSourceCreateHelper.create(this, dump, optionalDump);
+ }
}
=====================================
core/services/client/src/main/java/fr/ird/observe/services/client/AnonymousServiceClient.java
=====================================
@@ -25,30 +25,50 @@ package fr.ird.observe.services.client;
import fr.ird.observe.dto.db.BabModelVersionException;
import fr.ird.observe.dto.db.DatabaseConnexionNotAuthorizedException;
import fr.ird.observe.dto.db.DatabaseNotFoundException;
-import fr.ird.observe.dto.db.configuration.DataSourceCreateConfigurationDto;
import fr.ird.observe.dto.db.configuration.DataSourceCreateWithNoReferentialImportException;
import fr.ird.observe.dto.db.configuration.IncompatibleDataSourceCreateConfigurationException;
import fr.ird.observe.dto.db.configuration.ObserveDataSourceConfiguration;
import fr.ird.observe.dto.db.configuration.ObserveDataSourceConnection;
import fr.ird.observe.services.ObserveServiceInitializer;
+import org.nuiton.topia.persistence.script.TopiaSqlScript;
public class AnonymousServiceClient extends GeneratedAnonymousServiceClient {
@Override
- public ObserveDataSourceConnection create(ObserveDataSourceConfiguration config, DataSourceCreateConfigurationDto createConfiguration) throws IncompatibleDataSourceCreateConfigurationException, DataSourceCreateWithNoReferentialImportException, BabModelVersionException, DatabaseConnexionNotAuthorizedException, DatabaseNotFoundException {
- ObserveServiceInitializer initializer = getServiceContext().getInitializer();
- initializer.setConfiguration(config);
- ObserveDataSourceConnection dataSourceConnection = super.create(config, createConfiguration);
- initializer.setConnection(dataSourceConnection);
- initializer.setConfiguration(null);
- return dataSourceConnection;
+ public ObserveDataSourceConnection createEmpty(ObserveDataSourceConfiguration config) throws IncompatibleDataSourceCreateConfigurationException, DataSourceCreateWithNoReferentialImportException, BabModelVersionException, DatabaseConnexionNotAuthorizedException, DatabaseNotFoundException {
+ ObserveServiceInitializer initializer = start(config);
+ ObserveDataSourceConnection dataSourceConnection = super.createEmpty(config);
+ return end(initializer, dataSourceConnection);
+ }
+
+ @Override
+ public ObserveDataSourceConnection createFromDump(ObserveDataSourceConfiguration config, TopiaSqlScript dump) throws IncompatibleDataSourceCreateConfigurationException, DataSourceCreateWithNoReferentialImportException, BabModelVersionException, DatabaseConnexionNotAuthorizedException, DatabaseNotFoundException {
+ ObserveServiceInitializer initializer = start(config);
+ ObserveDataSourceConnection dataSourceConnection = super.createFromDump(config, dump);
+ return end(initializer, dataSourceConnection);
+ }
+
+ @Override
+ public ObserveDataSourceConnection createFromImport(ObserveDataSourceConfiguration config, TopiaSqlScript dump, TopiaSqlScript optionalDump) throws IncompatibleDataSourceCreateConfigurationException, DataSourceCreateWithNoReferentialImportException, BabModelVersionException, DatabaseConnexionNotAuthorizedException, DatabaseNotFoundException {
+ ObserveServiceInitializer initializer = start(config);
+ ObserveDataSourceConnection dataSourceConnection = super.createFromImport(config, dump, optionalDump);
+ return end(initializer, dataSourceConnection);
}
@Override
public ObserveDataSourceConnection open(ObserveDataSourceConfiguration config) throws DatabaseNotFoundException, DatabaseConnexionNotAuthorizedException, BabModelVersionException {
+ ObserveServiceInitializer initializer = start(config);
+ ObserveDataSourceConnection dataSourceConnection = super.open(config);
+ return end(initializer, dataSourceConnection);
+ }
+
+ private ObserveServiceInitializer start(ObserveDataSourceConfiguration config) {
ObserveServiceInitializer initializer = getServiceContext().getInitializer();
initializer.setConfiguration(config);
- ObserveDataSourceConnection dataSourceConnection = super.open(config);
+ return initializer;
+ }
+
+ private ObserveDataSourceConnection end(ObserveServiceInitializer initializer, ObserveDataSourceConnection dataSourceConnection) {
initializer.setConnection(dataSourceConnection);
initializer.setConfiguration(null);
return dataSourceConnection;
=====================================
core/services/client/src/test/java/fr/ird/observe/services/client/service/AnonymousServiceClientReadTest.java
=====================================
@@ -25,7 +25,6 @@ package fr.ird.observe.services.client.service;
import fr.ird.observe.dto.db.BabModelVersionException;
import fr.ird.observe.dto.db.DatabaseConnexionNotAuthorizedException;
import fr.ird.observe.dto.db.DatabaseNotFoundException;
-import fr.ird.observe.dto.db.configuration.DataSourceCreateConfigurationDto;
import fr.ird.observe.dto.db.configuration.DataSourceCreateWithNoReferentialImportException;
import fr.ird.observe.dto.db.configuration.IncompatibleDataSourceCreateConfigurationException;
import fr.ird.observe.dto.db.configuration.ObserveDataSourceConnection;
@@ -80,11 +79,8 @@ public class AnonymousServiceClientReadTest extends GeneratedAnonymousServiceCli
//FIXME Should get an not implemented exception for this service
ObserveDataSourceConfigurationRest dataSourceConfiguration = serviceClientTestMethodResource.getDataSourceConfiguration();
- DataSourceCreateConfigurationDto dataSourceCreateConfiguration = new DataSourceCreateConfigurationDto();
- dataSourceCreateConfiguration.setCanCreateEmptyDatabase(true);
-
AnonymousService service = serviceClientTestMethodResource.newService(dataSourceConfiguration, AnonymousService.class);
- service.create(dataSourceConfiguration, dataSourceCreateConfiguration);
+ service.createEmpty(dataSourceConfiguration);
}
=====================================
core/services/local/src/main/java/fr/ird/observe/services/local/service/AnonymousServiceLocalSupport.java
=====================================
@@ -28,7 +28,6 @@ import fr.ird.observe.dto.db.DataSourceUserDto;
import fr.ird.observe.dto.db.DatabaseConnexionNotAuthorizedException;
import fr.ird.observe.dto.db.DatabaseNotFoundException;
import fr.ird.observe.dto.db.DatabaseVersionIsTooHighException;
-import fr.ird.observe.dto.db.configuration.DataSourceCreateConfigurationDto;
import fr.ird.observe.dto.db.configuration.DataSourceCreateWithNoReferentialImportException;
import fr.ird.observe.dto.db.configuration.IncompatibleDataSourceCreateConfigurationException;
import fr.ird.observe.dto.db.configuration.ObserveDataSourceConfiguration;
@@ -45,6 +44,7 @@ import io.ultreia.java4all.util.Version;
import org.apache.logging.log4j.LogManager;
import org.apache.logging.log4j.Logger;
import org.nuiton.topia.persistence.TopiaConfigurationExtension;
+import org.nuiton.topia.persistence.script.TopiaSqlScript;
import java.nio.file.Path;
import java.util.Set;
@@ -107,15 +107,39 @@ public class AnonymousServiceLocalSupport extends ObserveServiceLocal implements
}
@Override
- public ObserveDataSourceConnection create(ObserveDataSourceConfiguration config, DataSourceCreateConfigurationDto createConfiguration)
- throws IncompatibleDataSourceCreateConfigurationException, DataSourceCreateWithNoReferentialImportException,
- BabModelVersionException, DatabaseConnexionNotAuthorizedException, DatabaseNotFoundException {
- createConfiguration.validateConfiguration(getApplicationLocale());
+ public ObserveDataSourceConnection createEmpty(ObserveDataSourceConfiguration config) throws IncompatibleDataSourceCreateConfigurationException, DataSourceCreateWithNoReferentialImportException, BabModelVersionException, DatabaseConnexionNotAuthorizedException, DatabaseNotFoundException {
setTemporaryDirectory(config);
- boolean initSchema = !createConfiguration.isImportDatabase();
- ObserveTopiaApplicationContext topiaApplicationContext = ObserveTopiaApplicationContextFactory.createTopiaApplicationContext(config, initSchema);
+ ObserveTopiaApplicationContext topiaApplicationContext = ObserveTopiaApplicationContextFactory.createTopiaApplicationContext(config, true);
try {
- topiaApplicationContext.create(config, createConfiguration);
+ topiaApplicationContext.createEmpty();
+ } catch (Exception e) {
+ close(config, topiaApplicationContext);
+ throw e;
+ }
+ ObserveDataSourceInformation dataSourceInformation = getDataSourceInformation(config, topiaApplicationContext.getConfiguration(), false);
+ return config.toConnection(topiaApplicationContext.getAuthenticationToken(), dataSourceInformation);
+ }
+
+ @Override
+ public ObserveDataSourceConnection createFromDump(ObserveDataSourceConfiguration config, TopiaSqlScript dump) throws IncompatibleDataSourceCreateConfigurationException, DataSourceCreateWithNoReferentialImportException, BabModelVersionException, DatabaseConnexionNotAuthorizedException, DatabaseNotFoundException {
+ setTemporaryDirectory(config);
+ ObserveTopiaApplicationContext topiaApplicationContext = ObserveTopiaApplicationContextFactory.createTopiaApplicationContext(config, false);
+ try {
+ topiaApplicationContext.createFromDump(config, dump);
+ } catch (Exception e) {
+ close(config, topiaApplicationContext);
+ throw e;
+ }
+ ObserveDataSourceInformation dataSourceInformation = getDataSourceInformation(config, topiaApplicationContext.getConfiguration(), false);
+ return config.toConnection(topiaApplicationContext.getAuthenticationToken(), dataSourceInformation);
+ }
+
+ @Override
+ public ObserveDataSourceConnection createFromImport(ObserveDataSourceConfiguration config, TopiaSqlScript dump, TopiaSqlScript optionalDump) throws IncompatibleDataSourceCreateConfigurationException, DataSourceCreateWithNoReferentialImportException, BabModelVersionException, DatabaseConnexionNotAuthorizedException, DatabaseNotFoundException {
+ setTemporaryDirectory(config);
+ ObserveTopiaApplicationContext topiaApplicationContext = ObserveTopiaApplicationContextFactory.createTopiaApplicationContext(config, false);
+ try {
+ topiaApplicationContext.createAndImport(dump, optionalDump);
} catch (Exception e) {
close(config, topiaApplicationContext);
throw e;
@@ -192,127 +216,6 @@ public class AnonymousServiceLocalSupport extends ObserveServiceLocal implements
return dataSourceInformation;
}
-// private void create0(ObserveTopiaApplicationContext topiaApplicationContext, ObserveDataSourceConfiguration dataSourceConfiguration, DataSourceCreateConfigurationDto dataSourceCreateConfiguration) throws BabModelVersionException, DatabaseConnexionNotAuthorizedException, DatabaseNotFoundException {
-// log.debug(String.format("Create topia application context: %s", topiaApplicationContext));
-// if (dataSourceCreateConfiguration.isImportDatabase()) {
-// log.info("Create new database from a script.");
-// TopiaSqlScript importDatabase = dataSourceCreateConfiguration.getImportDatabase();
-// boolean migrate = dataSourceCreateConfiguration.isMigrate();
-// TopiaMigrationService migrationService = topiaApplicationContext.getMigrationService();
-// if (dataSourceConfiguration.isLocal()) {
-// topiaApplicationContext.executeSqlStatements(importDatabase);
-// if (migrate) {
-// migrationService.createSchemaIfNotExist();
-// migrationService.runSchemaMigration();
-// }
-// } else { // base postgres
-// // on realise les import dans un base H2 temporaire
-// File tmpDir;
-// try {
-// Path temporaryDirectory = dataSourceConfiguration.getTemporaryDirectory();
-// 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);
-// if (migrate) {
-// temporaryTopiaApplicationContext.getMigrationService().createSchemaIfNotExist();
-// temporaryTopiaApplicationContext.getMigrationService().runSchemaMigration();
-// }
-// DataSourceService dumpProducerService = serviceContext().newService(temporaryConfiguration, DataSourceService.class);
-// CreateDatabaseRequest request = CreateDatabaseRequest.of(true, dataSourceConfiguration.getModelVersion()).addSchema().addStandaloneTables().addAllData();
-// TopiaSqlScript dump = dumpProducerService.produceCreateSqlScript(request);
-// topiaApplicationContext.executeSqlStatements(dump);
-// migrationService.createSchemaIfNotExist();
-// migrationService.runSchemaMigration();
-// temporaryTopiaApplicationContext.close();
-// File databaseFile = temporaryConfiguration.getDatabaseFile();
-// if (!databaseFile.delete()) {
-// throw new IllegalStateException("could not delete " + databaseFile);
-// }
-// }
-// } else {
-// boolean importReferential = dataSourceCreateConfiguration.isImportReferential();
-// boolean importData = dataSourceCreateConfiguration.isImportData();
-// // si le referentiel n'est pas importé on aliment la table lastUpdateDate
-// if (!importReferential) {
-// topiaApplicationContext.insertLastUpdateDate();
-// }
-// boolean importStandaloneReferential = importReferential;
-// if (importReferential && importData) {
-// // Si on est sur la même source de données pour les deux imports, on fait tout sur la même base temporaire
-// ObserveDataSourceConfiguration importReferentialDataSourceConfiguration = dataSourceCreateConfiguration.getImportReferentialDataSourceConfiguration();
-// ObserveDataSourceConfiguration importDataSourceConfiguration = dataSourceCreateConfiguration.getImportDataDataSourceConfiguration();
-// importStandaloneReferential = !importReferentialDataSourceConfiguration.equals(importDataSourceConfiguration);
-// }
-// boolean referentialImported = false;
-// if (importStandaloneReferential) {
-// log.info("Import referential.");
-// ObserveDataSourceConfiguration importDataSourceConfiguration = dataSourceCreateConfiguration.getImportReferentialDataSourceConfiguration();
-// Version dbVersion = Version.valueOf(topiaApplicationContext.getModelVersion());
-// CreateDatabaseRequest request = CreateDatabaseRequest.of(!dataSourceConfiguration.isLocal(), dbVersion)
-// .addStandaloneTables();
-// TopiaSqlScript referentialDump;
-// try {
-// ObserveDataSourceConnection importDataSourceConnection = serviceContext().newService(importDataSourceConfiguration, AnonymousService.class).open(importDataSourceConfiguration);
-// DataSourceService dumpProducerService = serviceContext().newService(importDataSourceConnection, DataSourceService.class);
-// referentialDump = dumpProducerService.produceCreateSqlScript(request);
-// topiaApplicationContext.executeSqlStatements(referentialDump);
-// } finally {
-// if (!dataSourceCreateConfiguration.isLeaveOpenSource()) {
-// serviceContext().newService(importDataSourceConfiguration, DataSourceService.class).close();
-// }
-// }
-// referentialImported = true;
-// }
-//
-// if (importData) {
-// ObserveDataSourceConfiguration importDataSourceConfiguration = dataSourceCreateConfiguration.getImportDataDataSourceConfiguration();
-// Version dbVersion = Version.valueOf(topiaApplicationContext.getModelVersion());
-// CreateDatabaseRequest request = CreateDatabaseRequest.of(!dataSourceConfiguration.isLocal(), dbVersion);
-// if (!referentialImported) {
-// log.info("Get referential.");
-// request.addStandaloneTables();
-// }
-//
-// // Récupération du dump qui contient les données
-// Set<String> importDataIds = dataSourceCreateConfiguration.getImportDataIds();
-// TopiaIdFactory idFactory = getTopiaPersistenceContext().getIdFactory();
-// Multimap<String, String> idsByType = ArrayListMultimap.create();
-// for (String importDataId : importDataIds) {
-// Class<TopiaEntity> className = idFactory.getClassName(importDataId);
-// idsByType.put(className.getName(), importDataId);
-// }
-// log.info(String.format("Get data: %s", importDataIds));
-// for (Map.Entry<String, Collection<String>> entry : idsByType.asMap().entrySet()) {
-// request.dataIdsToAdd(entry.getKey(), Set.copyOf(entry.getValue()));
-// }
-// TopiaSqlScript dataDump;
-// try {
-// ObserveDataSourceConnection importDataSourceConnection = serviceContext().newService(importDataSourceConfiguration, AnonymousService.class).open(importDataSourceConfiguration);
-// DataSourceService dumpProducerService = serviceContext().newService(importDataSourceConnection, DataSourceService.class);
-// dataDump = dumpProducerService.produceCreateSqlScript(request);
-// } finally {
-// if (!dataSourceCreateConfiguration.isLeaveOpenSource()) {
-// serviceContext().newService(importDataSourceConfiguration, DataSourceService.class).close();
-// }
-// }
-// log.info(String.format("Import data%s", request.isAddStandaloneTables() ? " and referential." : "."));
-// topiaApplicationContext.executeSqlStatements(dataDump);
-// }
-// }
-// }
-//
-// private ObserveDataSourceConfigurationTopiaH2 createTemporaryConfiguration(File tmpDirectory, Version version) {
-// File dbDirectory = new File(tmpDirectory, "obstuna" + UUID.randomUUID());
-// ObserveDataSourceConfigurationTopiaH2 result = ObserveDataSourceConfigurationTopiaH2.create(
-// "obtunaTmp", dbDirectory, "obstuna", "sa", "sa".toCharArray(), true, true, version);
-// result.setTemporaryDirectory(tmpDirectory.toPath());
-// return result;
-// }
-
private ObserveDataSourceInformation getDataSourceInformation(ObserveDataSourceConfiguration dataSourceConfiguration, TopiaConfigurationExtension topiaConfiguration, boolean canBeEmpty) throws DatabaseConnexionNotAuthorizedException {
try {
return SecurityHelper.getDataSourceInformation(SECURITY_HELPER_MODEL, dataSourceConfiguration, topiaConfiguration, canBeEmpty);
=====================================
core/services/local/src/test/java/fr/ird/observe/services/local/LocalTestClassResource.java
=====================================
@@ -26,7 +26,6 @@ import fr.ird.observe.dto.db.BabModelVersionException;
import fr.ird.observe.dto.db.DataSourceValidationMode;
import fr.ird.observe.dto.db.DatabaseConnexionNotAuthorizedException;
import fr.ird.observe.dto.db.DatabaseNotFoundException;
-import fr.ird.observe.dto.db.configuration.DataSourceCreateConfigurationDto;
import fr.ird.observe.dto.db.configuration.DataSourceCreateWithNoReferentialImportException;
import fr.ird.observe.dto.db.configuration.IncompatibleDataSourceCreateConfigurationException;
import fr.ird.observe.dto.db.configuration.ObserveDataSourceConfiguration;
@@ -66,6 +65,7 @@ public class LocalTestClassResource extends TestClassResourceSupport {
private final ObserveServiceFactoryLocal serviceFactory;
ObserveServiceInitializerConfig serviceInitializerConfig;
+ private boolean generateNow;
public LocalTestClassResource() {
this(DatabaseClassifier.DEFAULT);
@@ -105,11 +105,8 @@ public class LocalTestClassResource extends TestClassResourceSupport {
AnonymousService service = newService(sharedDatabaseConfiguration, AnonymousService.class);
try {
- DataSourceCreateConfigurationDto createConfiguration = new DataSourceCreateConfigurationDto();
TopiaSqlScript script = getDataSourcesForTestManager().getCache(dbVersion, dbName);
- createConfiguration.setImportDatabase(script);
- createConfiguration.setMigrate(false);
- service.create(sharedDatabaseConfiguration, createConfiguration);
+ service.createFromDump(sharedDatabaseConfiguration, script);
} finally {
newService(sharedDatabaseConfiguration, DataSourceService.class).close();
}
@@ -134,15 +131,13 @@ public class LocalTestClassResource extends TestClassResourceSupport {
ObserveServiceInitializer serviceInitializer = new ObserveServiceInitializer(getServiceInitializerConfig(), dataSourceConfiguration, null) {
@Override
public Date now() {
- return generateNow?new Date():ObserveFixtures.DATE;
+ return generateNow ? new Date() : ObserveFixtures.DATE;
}
};
serviceInitializer.setConfiguration(dataSourceConfiguration);
return serviceFactory.newService(serviceInitializer, serviceType);
}
- private boolean generateNow;
-
public boolean isGenerateNow() {
return generateNow;
}
@@ -152,10 +147,10 @@ public class LocalTestClassResource extends TestClassResourceSupport {
}
public <S extends ObserveService> S newService(ObserveDataSourceConnection dataSourceConnection, Class<S> serviceType) {
- ObserveServiceInitializer serviceInitializer = new ObserveServiceInitializer(getServiceInitializerConfig(), null, dataSourceConnection){
+ ObserveServiceInitializer serviceInitializer = new ObserveServiceInitializer(getServiceInitializerConfig(), null, dataSourceConnection) {
@Override
public Date now() {
- return generateNow?new Date():ObserveFixtures.DATE;
+ return generateNow ? new Date() : ObserveFixtures.DATE;
}
};
return serviceFactory.newService(serviceInitializer, serviceType);
=====================================
core/services/test/src/main/java/fr/ird/observe/services/service/AnonymousServiceFixtures.java
=====================================
@@ -72,11 +72,23 @@ public class AnonymousServiceFixtures extends GeneratedAnonymousServiceFixtures
}
@Override
- public void create(fr.ird.observe.services.ObserveServicesProvider servicesProvider, AnonymousService service) {
+ public void createEmpty(fr.ird.observe.services.ObserveServicesProvider servicesProvider, AnonymousService service) {
// FIXME:Test Remove super method invocation and implements fixture
// actual = service.create(getProperty("create.id"));
// Assert.assertNotNull(actual);
- super.create(servicesProvider, service);
+ super.createEmpty(servicesProvider, service);
+ }
+
+ @Override
+ public void createFromDump(ObserveServicesProvider servicesProvider, AnonymousService service) {
+ //FIXME
+ super.createFromDump(servicesProvider, service);
+ }
+
+ @Override
+ public void createFromImport(ObserveServicesProvider servicesProvider, AnonymousService service) {
+ //FIXME
+ super.createFromImport(servicesProvider, service);
}
@Override
=====================================
pom.xml
=====================================
@@ -23,7 +23,7 @@
<parent>
<groupId>io.ultreia.maven</groupId>
<artifactId>pom</artifactId>
- <version>2022.36</version>
+ <version>2022.37</version>
</parent>
<groupId>fr.ird.observe</groupId>
<artifactId>ird-observe</artifactId>
=====================================
server/core/src/main/filtered-resources/META-INF/mapping-api-client.wm
=====================================
@@ -25,7 +25,9 @@ server.main.handler.class=fr.ird.observe.server.ObserveWebMainHandler
GET /AnonymousService/applySecurity AnonymousServiceRestApi.applySecurity
GET /AnonymousService/checkCanConnect AnonymousServiceRestApi.checkCanConnect
GET /AnonymousService/checkCanConnectOrBeEmpty AnonymousServiceRestApi.checkCanConnectOrBeEmpty
-GET /AnonymousService/create AnonymousServiceRestApi.create
+POST /AnonymousService/createEmpty AnonymousServiceRestApi.createEmpty
+POST /AnonymousService/createFromDump AnonymousServiceRestApi.createFromDump
+POST /AnonymousService/createFromImport AnonymousServiceRestApi.createFromImport
GET /AnonymousService/generateHomeId AnonymousServiceRestApi.generateHomeId
GET /AnonymousService/getModelVersion AnonymousServiceRestApi.getModelVersion
GET /AnonymousService/getServerVersion AnonymousServiceRestApi.getServerVersion
=====================================
server/core/src/main/java/fr/ird/observe/server/ObserveWebApplicationContext.java
=====================================
@@ -28,6 +28,7 @@ import fr.ird.observe.dto.server.ServerModelHelper;
import fr.ird.observe.server.configuration.ServerConfig;
import fr.ird.observe.server.configuration.ServerConfigApplicationComponent;
import fr.ird.observe.server.configuration.ServerConfigFinder;
+import fr.ird.observe.server.converter.JsonAwareDtoConverter;
import fr.ird.observe.server.security.ObserveWebSecurityApplicationContext;
import fr.ird.observe.services.ObserveServiceFactory;
import fr.ird.observe.services.ObserveServiceInitializer;
@@ -37,9 +38,11 @@ import fr.ird.observe.services.service.ObserveService;
import fr.ird.observe.spi.json.DtoGsonSupplier;
import io.ultreia.java4all.application.context.ApplicationContext;
import io.ultreia.java4all.util.Version;
+import org.apache.commons.beanutils.ConvertUtils;
import org.apache.logging.log4j.LogManager;
import org.apache.logging.log4j.Logger;
import org.debux.webmotion.server.call.HttpContext;
+import org.nuiton.topia.persistence.script.TopiaSqlScript;
import javax.servlet.ServletContext;
import java.io.Closeable;
@@ -125,6 +128,9 @@ public class ObserveWebApplicationContext extends ApplicationContext {
closeDeleteTemporaryFilesTimer();
}
deleteTemporaryFilesTimer = CleanTemporaryFilesTask.create(getApplicationConfiguration());
+
+ JsonAwareDtoConverter<TopiaSqlScript> converter = new JsonAwareDtoConverter<>(getGsonSupplier().get(), TopiaSqlScript.class);
+ ConvertUtils.register(converter, TopiaSqlScript.class);
}
@Override
=====================================
server/core/src/main/java/fr/ird/observe/server/controller/AnonymousServiceRestApi.java
=====================================
@@ -26,7 +26,6 @@ import fr.ird.observe.dto.db.BabModelVersionException;
import fr.ird.observe.dto.db.DataSourceUserDto;
import fr.ird.observe.dto.db.DatabaseConnexionNotAuthorizedException;
import fr.ird.observe.dto.db.DatabaseNotFoundException;
-import fr.ird.observe.dto.db.configuration.DataSourceCreateConfigurationDto;
import fr.ird.observe.dto.db.configuration.DataSourceCreateWithNoReferentialImportException;
import fr.ird.observe.dto.db.configuration.IncompatibleDataSourceCreateConfigurationException;
import fr.ird.observe.dto.db.configuration.ObserveDataSourceConfiguration;
@@ -38,6 +37,7 @@ import fr.ird.observe.services.service.AnonymousService;
import io.ultreia.java4all.util.Version;
import org.apache.logging.log4j.LogManager;
import org.apache.logging.log4j.Logger;
+import org.nuiton.topia.persistence.script.TopiaSqlScript;
import java.lang.reflect.Method;
import java.util.LinkedHashMap;
@@ -49,6 +49,12 @@ public class AnonymousServiceRestApi extends GeneratedAnonymousServiceRestApi {
private static final Logger log = LogManager.getLogger(AnonymousServiceRestApi.class);
+ @Override
+ public ObserveDataSourceInformation checkCanConnectOrBeEmpty(ObserveDataSourceConfiguration config) throws DatabaseNotFoundException, DatabaseConnexionNotAuthorizedException, BabModelVersionException {
+ ObserveWebUserSession session = getRequestContext().getConfigurationSession(config);
+ return getService().checkCanConnectOrBeEmpty(session.getConfiguration());
+ }
+
@Override
public ObserveDataSourceInformation checkCanConnect(ObserveDataSourceConfiguration config) throws DatabaseConnexionNotAuthorizedException, DatabaseNotFoundException, BabModelVersionException {
ObserveWebUserSession session = getRequestContext().getConfigurationSession(config);
@@ -56,11 +62,25 @@ public class AnonymousServiceRestApi extends GeneratedAnonymousServiceRestApi {
}
@Override
- public ObserveDataSourceConnection create(ObserveDataSourceConfiguration config, DataSourceCreateConfigurationDto createConfiguration)
- throws IncompatibleDataSourceCreateConfigurationException, DataSourceCreateWithNoReferentialImportException,
- DatabaseNotFoundException, DatabaseConnexionNotAuthorizedException, BabModelVersionException {
+ public ObserveDataSourceConnection createEmpty(ObserveDataSourceConfiguration config) throws IncompatibleDataSourceCreateConfigurationException, DataSourceCreateWithNoReferentialImportException, BabModelVersionException, DatabaseConnexionNotAuthorizedException, DatabaseNotFoundException {
+ ObserveWebUserSession configurationSession = getRequestContext().getConfigurationSession(config);
+ ObserveDataSourceConnection connection = getService().createEmpty(configurationSession.getConfiguration());
+ ObserveWebUserSession authenticatedSession = getSecurityApplicationContext().registerAuthenticatedSession(configurationSession, connection);
+ return authenticatedSession.toRestConnection(config);
+ }
+
+ @Override
+ public ObserveDataSourceConnection createFromDump(ObserveDataSourceConfiguration config, TopiaSqlScript dump) throws IncompatibleDataSourceCreateConfigurationException, DataSourceCreateWithNoReferentialImportException, BabModelVersionException, DatabaseConnexionNotAuthorizedException, DatabaseNotFoundException {
+ ObserveWebUserSession configurationSession = getRequestContext().getConfigurationSession(config);
+ ObserveDataSourceConnection connection = getService().createFromDump(configurationSession.getConfiguration(), dump);
+ ObserveWebUserSession authenticatedSession = getSecurityApplicationContext().registerAuthenticatedSession(configurationSession, connection);
+ return authenticatedSession.toRestConnection(config);
+ }
+
+ @Override
+ public ObserveDataSourceConnection createFromImport(ObserveDataSourceConfiguration config, TopiaSqlScript dump, TopiaSqlScript optionalDump) throws IncompatibleDataSourceCreateConfigurationException, DataSourceCreateWithNoReferentialImportException, BabModelVersionException, DatabaseConnexionNotAuthorizedException, DatabaseNotFoundException {
ObserveWebUserSession configurationSession = getRequestContext().getConfigurationSession(config);
- ObserveDataSourceConnection connection = getService().create(configurationSession.getConfiguration(), createConfiguration);
+ ObserveDataSourceConnection connection = getService().createFromImport(configurationSession.getConfiguration(), dump,optionalDump );
ObserveWebUserSession authenticatedSession = getSecurityApplicationContext().registerAuthenticatedSession(configurationSession, connection);
return authenticatedSession.toRestConnection(config);
}
=====================================
server/core/src/main/java/fr/ird/observe/server/converter/JsonAwareDtoConverter.java
=====================================
@@ -23,31 +23,32 @@ package fr.ird.observe.server.converter;
*/
import com.google.gson.Gson;
-import fr.ird.observe.dto.ObserveDto;
+import io.ultreia.java4all.http.json.JsonAware;
import org.apache.commons.beanutils.converters.AbstractConverter;
import org.apache.logging.log4j.LogManager;
import org.apache.logging.log4j.Logger;
-import io.ultreia.java4all.http.json.JsonAware;
/**
* Created on 07/09/15.
*
* @author Tony Chemit - dev(a)tchemit.fr
*/
-public class JsonAwareDtoConverter extends AbstractConverter {
+public class JsonAwareDtoConverter<TT extends JsonAware> extends AbstractConverter {
private static final Logger log = LogManager.getLogger(JsonAwareDtoConverter.class);
protected final Gson gson;
+ private final Class<TT> type;
- public JsonAwareDtoConverter(Gson gson) {
+ public JsonAwareDtoConverter(Gson gson, Class<TT> type) {
this.gson = gson;
+ this.type = type;
}
@Override
protected <T> T convertToType(Class<T> type, Object value) {
T observeDto;
- if (JsonAware.class.isAssignableFrom(type)) {
+ if (type.isAssignableFrom(type)) {
String gsonContent = value.toString();
observeDto = gson.fromJson(gsonContent, type);
log.info("convert observeDto: " + observeDto);
@@ -59,7 +60,7 @@ public class JsonAwareDtoConverter extends AbstractConverter {
}
@Override
- protected Class<?> getDefaultType() {
- return ObserveDto.class;
+ protected Class<TT> getDefaultType() {
+ return type;
}
}
View it on GitLab: https://gitlab.com/ultreiaio/ird-observe/-/compare/a864fb664be6b4f57a7edf8a…
--
View it on GitLab: https://gitlab.com/ultreiaio/ird-observe/-/compare/a864fb664be6b4f57a7edf8a…
You're receiving this email because of your account on gitlab.com.
1
0
[Git][ultreiaio/ird-observe][develop] Impossible de créer une base centrale vierge, quelque soit la méthode...
by Tony CHEMIT (@tchemit) 16 Mar '22
by Tony CHEMIT (@tchemit) 16 Mar '22
16 Mar '22
Tony CHEMIT pushed to branch develop at ultreiaio / ird-observe
Commits:
a864fb66 by Tony Chemit at 2022-03-16T18:47:49+01:00
Impossible de créer une base centrale vierge, quelque soit la méthode appliquée - See ultreiaio/ird-observe#2214
- - - - -
11 changed files:
- client/core/src/main/java/fr/ird/observe/client/datasource/api/ObserveSwingDataSource.java
- client/datasource/editor/api/src/main/java/fr/ird/observe/client/datasource/editor/api/wizard/DataSourceHelper.java
- client/datasource/editor/api/src/main/java/fr/ird/observe/client/datasource/editor/api/wizard/StorageBackupUILauncher.java
- client/datasource/editor/api/src/main/java/fr/ird/observe/client/datasource/editor/api/wizard/StorageUIModel.java
- client/datasource/editor/api/src/main/java/fr/ird/observe/client/datasource/editor/api/wizard/launchers/CreateLauncher.java
- + core/persistence/java/src/main/java/fr/ird/observe/entities/DataSourceCreateHelper.java
- core/persistence/java/src/main/java/fr/ird/observe/entities/ObserveTopiaApplicationContext.java
- core/services/client/src/main/java/fr/ird/observe/services/client/AnonymousServiceClient.java
- core/services/local/src/main/java/fr/ird/observe/services/local/service/AnonymousServiceLocalSupport.java
- server/core/src/main/filtered-resources/META-INF/mapping-api-client.wm
- server/core/src/main/java/fr/ird/observe/server/controller/AnonymousServiceRestApi.java
Changes:
=====================================
client/core/src/main/java/fr/ird/observe/client/datasource/api/ObserveSwingDataSource.java
=====================================
@@ -40,6 +40,7 @@ import fr.ird.observe.dto.db.DatabaseConnexionNotAuthorizedException;
import fr.ird.observe.dto.db.DatabaseNotFoundException;
import fr.ird.observe.dto.db.configuration.DataSourceCreateConfigurationDto;
import fr.ird.observe.dto.db.configuration.DataSourceCreateWithNoReferentialImportException;
+import fr.ird.observe.dto.db.configuration.DataSourceImportConfigurationDto;
import fr.ird.observe.dto.db.configuration.IncompatibleDataSourceCreateConfigurationException;
import fr.ird.observe.dto.db.configuration.ObserveDataSourceConfiguration;
import fr.ird.observe.dto.db.configuration.ObserveDataSourceConfigurationAndConnection;
@@ -241,23 +242,26 @@ public class ObserveSwingDataSource extends AbstractJavaBean implements ObserveS
fireOpened();
}
- public void createFrom(ObserveSwingDataSource localSource)
+ public void create(DataSourceCreateConfigurationDto createDto)
throws IncompatibleDataSourceCreateConfigurationException, DataSourceCreateWithNoReferentialImportException,
DatabaseNotFoundException, DatabaseConnexionNotAuthorizedException, BabModelVersionException {
- DataSourceCreateConfigurationDto createDto = new DataSourceCreateConfigurationDto();
- createDto.setLeaveOpenSource(true);
- createDto.setImportReferentialDataSourceConfiguration(localSource.getConfiguration());
- create(createDto);
+ checkIsNotOpen();
+ fireNewMessage(t("observe.ui.datasource.storage.message.creating", getLabel()));
+ fireOpening();
+ AnonymousService dataSourceService = getAnonymousService();
+ setConnection(dataSourceService.create(getConfiguration(), createDto));
+ fireNewMessage(t("observe.ui.datasource.storage.message.created", getLabel()));
+ fireOpened();
}
- public void create(DataSourceCreateConfigurationDto createDto)
+ public void createAndImport(DataSourceImportConfigurationDto createDto)
throws IncompatibleDataSourceCreateConfigurationException, DataSourceCreateWithNoReferentialImportException,
DatabaseNotFoundException, DatabaseConnexionNotAuthorizedException, BabModelVersionException {
checkIsNotOpen();
fireNewMessage(t("observe.ui.datasource.storage.message.creating", getLabel()));
fireOpening();
AnonymousService dataSourceService = getAnonymousService();
- setConnection(dataSourceService.create(getConfiguration(), createDto));
+ setConnection(dataSourceService.createAndImport(getConfiguration(), createDto));
fireNewMessage(t("observe.ui.datasource.storage.message.created", getLabel()));
fireOpened();
}
=====================================
client/datasource/editor/api/src/main/java/fr/ird/observe/client/datasource/editor/api/wizard/DataSourceHelper.java
=====================================
@@ -259,6 +259,31 @@ public class DataSourceHelper {
throw new IllegalStateException("Can't come here");
}
}
+ if (model.getChooseDb().doImportData()) {
+
+ String dbLabel = I18n.n("observe.ui.datasource.storage.label.data.import.db");
+ switch (model.getChooseDb().getDataImportMode()) {
+ case IMPORT_EXTERNAL_DUMP:
+ File dumpFile = ObstunaAdminAction.CREATE.equals(model.getAdminAction()) ? model.getDataSourceModel().getDumpFile() : model.getDumpFile();
+ importReferenceConfig.setImportDatabase(TopiaSqlScript.of(dumpFile.toURI()));
+ break;
+ case IMPORT_REMOTE_STORAGE: {
+ // import referentiel from a remote db
+ ObserveDataSourceConfigurationTopiaPG dataSourceConfig = toPGStorageConfig(model.getDataSourceModel(), dbLabel);
+ dataSourceConfig.setCanMigrate(false);
+ importReferenceConfig.setImportDataConfiguration(dataSourceConfig, model.getSelectDataModel().getSelectedDataIds());
+ }
+ break;
+ case IMPORT_SERVER_STORAGE: {
+ // import referentiel from a server db
+ ObserveDataSourceConfigurationRest dataSourceConfig = toRestStorageConfig(model.getDataSourceModel(), dbLabel);
+ importReferenceConfig.setImportDataConfiguration(dataSourceConfig, model.getSelectDataModel().getSelectedDataIds());
+ break;
+ }
+ default:
+ throw new IllegalStateException("Can't come here");
+ }
+ }
return importReferenceConfig;
}
@@ -311,6 +336,7 @@ public class DataSourceHelper {
return importDataSource;
}
+
static ObserveDataSourceConfigurationTopiaH2 toH2StorageConfig(StorageUIModel model, String label) {
ObserveDataSourceConfigurationTopiaH2 h2Config = model.getLocalConfig().getConfiguration();
return ObserveDataSourceConfigurationTopiaH2.create(
=====================================
client/datasource/editor/api/src/main/java/fr/ird/observe/client/datasource/editor/api/wizard/StorageBackupUILauncher.java
=====================================
@@ -33,6 +33,7 @@ import fr.ird.observe.dto.db.BabModelVersionException;
import fr.ird.observe.dto.db.DatabaseConnexionNotAuthorizedException;
import fr.ird.observe.dto.db.DatabaseNotFoundException;
import fr.ird.observe.dto.db.configuration.DataSourceConnectMode;
+import fr.ird.observe.dto.db.configuration.DataSourceCreateConfigurationDto;
import fr.ird.observe.dto.db.configuration.DataSourceCreateMode;
import fr.ird.observe.dto.db.configuration.DataSourceCreateWithNoReferentialImportException;
import fr.ird.observe.dto.db.configuration.DataSourceInitMode;
@@ -137,7 +138,10 @@ public class StorageBackupUILauncher extends StorageUILauncher {
try (ObserveSwingDataSource targetSource = dataSourcesManager.newTemporaryH2DataSource("Backup-" + backupFile.getName())) {
// create temporary source
- targetSource.createFrom(incomingSource);
+ DataSourceCreateConfigurationDto createDto = new DataSourceCreateConfigurationDto();
+ createDto.setLeaveOpenSource(true);
+ createDto.setImportReferentialDataSourceConfiguration(incomingSource.getConfiguration());
+ targetSource.create(createDto);
progressModel.increments();
// insert selected data
=====================================
client/datasource/editor/api/src/main/java/fr/ird/observe/client/datasource/editor/api/wizard/StorageUIModel.java
=====================================
@@ -671,7 +671,9 @@ public class StorageUIModel extends WizardModel<StorageStep> implements WithClie
}
break;
case CONFIG_REFERENTIAL:
-
+ if (chooseDb.getReferentielImportMode() == null) {
+ return false;
+ }
switch (chooseDb.getReferentielImportMode()) {
case EMPTY:
@@ -703,7 +705,9 @@ public class StorageUIModel extends WizardModel<StorageStep> implements WithClie
break;
case CONFIG_DATA:
-
+ if (chooseDb.getDataImportMode() == null) {
+ return false;
+ }
switch (chooseDb.getDataImportMode()) {
case EMPTY:
=====================================
client/datasource/editor/api/src/main/java/fr/ird/observe/client/datasource/editor/api/wizard/launchers/CreateLauncher.java
=====================================
@@ -22,26 +22,28 @@ package fr.ird.observe.client.datasource.editor.api.wizard.launchers;
* #L%
*/
+import com.google.common.collect.ArrayListMultimap;
+import com.google.common.collect.Multimap;
import fr.ird.observe.client.datasource.api.ObserveSwingDataSource;
import fr.ird.observe.client.datasource.editor.api.wizard.DataSourceHelper;
import fr.ird.observe.client.datasource.editor.api.wizard.ObstunaAdminAction;
import fr.ird.observe.client.datasource.editor.api.wizard.StorageUI;
import fr.ird.observe.client.datasource.editor.api.wizard.StorageUIModel;
-import fr.ird.observe.dto.db.BabModelVersionException;
-import fr.ird.observe.dto.db.DatabaseConnexionNotAuthorizedException;
-import fr.ird.observe.dto.db.DatabaseNotFoundException;
import fr.ird.observe.dto.db.configuration.DataSourceConnectMode;
import fr.ird.observe.dto.db.configuration.DataSourceCreateConfigurationDto;
-import fr.ird.observe.dto.db.configuration.DataSourceCreateWithNoReferentialImportException;
-import fr.ird.observe.dto.db.configuration.IncompatibleDataSourceCreateConfigurationException;
+import fr.ird.observe.dto.db.configuration.DataSourceImportConfigurationDto;
import fr.ird.observe.dto.db.configuration.ObserveDataSourceConfiguration;
import fr.ird.observe.dto.db.configuration.ObserveDataSourceInformation;
-import fr.ird.observe.navigation.tree.selection.SelectionTreeModel;
+import io.ultreia.java4all.util.Version;
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.topia.service.sql.request.CreateDatabaseRequest;
import java.awt.Window;
+import java.util.Collection;
+import java.util.Map;
import java.util.Objects;
import java.util.Set;
@@ -54,6 +56,7 @@ import java.util.Set;
public class CreateLauncher extends RemoteUILauncher {
private static final Logger log = LogManager.getLogger(CreateLauncher.class);
DataSourceCreateConfigurationDto createConfigurationDto;
+ DataSourceImportConfigurationDto importConfiguration;
public CreateLauncher(JAXXContext context, Window frame, DataSourceConnectMode connectMode) {
super(ObstunaAdminAction.CREATE, context, frame, connectMode);
@@ -67,26 +70,82 @@ public class CreateLauncher extends RemoteUILauncher {
//FIXME This logic should be done in StorageModel not here, like this!
model.getChooseDb().setCanMigrate(true);
model.getRemoteConfig().setCanCreateDatabase(true);
+ model.getServerConfig().setCanCreateDatabase(true);
super.init(ui);
}
@Override
- protected ObserveSwingDataSource initTask(StorageUIModel model) throws Exception {
+ protected ObserveSwingDataSource initTask(StorageUIModel model) {
ObserveSwingDataSource dataSource = getDataSource(model);
createConfigurationDto = DataSourceHelper.toImportReferentielSourceConfig(model);
+ boolean importReferential = createConfigurationDto.isImportReferential();
+ boolean importData = createConfigurationDto.isImportData();
+ if (!importReferential && !importData) {
+ importConfiguration = null;
+ return dataSource;
+ }
+ Version version = dataSource.getConfiguration().getModelVersion();
+ importConfiguration = new DataSourceImportConfigurationDto();
+ importConfiguration.setMigrate(createConfigurationDto.isMigrate());
+
ObserveDataSourceConfiguration importReferentialConfig = createConfigurationDto.getImportReferentialDataSourceConfiguration();
+ ObserveDataSourceConfiguration importDataConfig = createConfigurationDto.getImportDataDataSourceConfiguration();
+ boolean importStandaloneReferential = importReferential;
+
if (importReferentialConfig != null) {
- log.info(String.format("Use referentiel import data source %s", importReferentialConfig.getLabel()));
- checkImportDbVersion(model, importReferentialConfig);
+ log.info(String.format("Will use referentiel import data source %s", importReferentialConfig.getLabel()));
}
- // data import
- ObserveSwingDataSource importDataConfig = DataSourceHelper.toImportDataSourceConfig(model);
if (importDataConfig != null) {
- log.info(String.format("Use data import data source %s", importDataConfig.getLabel()));
- checkImportDbVersion(model, importDataConfig.getConfiguration());
- SelectionTreeModel dataModel = model.getSelectDataModel();
- Set<String> importDataIds = dataModel.getSelectedDataIds();
- createConfigurationDto.setImportDataConfiguration(importDataConfig.getConfiguration(), importDataIds);
+ log.info(String.format("Will use data import data source %s", importDataConfig.getLabel()));
+ importStandaloneReferential = importReferentialConfig != null && !importReferentialConfig.equals(importDataConfig);
+ }
+
+ boolean referentialImported = false;
+ if (importStandaloneReferential) {
+ try (ObserveSwingDataSource importDataSource = Objects.requireNonNull(ui.getModel().getDataSourcesManager().newDataSource(importReferentialConfig))) {
+ log.info(String.format("Prepare standalone referential dump from %s", importDataSource.getLabel()));
+ ObserveSwingDataSource.doOpenSource(importDataSource);
+ model.checkImportDbVersion(importDataSource);
+ CreateDatabaseRequest request = CreateDatabaseRequest.builder(true, version).addStandaloneTables().build();
+ TopiaSqlScript createSqlScript = importDataSource.getDataSourceService().produceCreateSqlScript(request);
+ importConfiguration.setReferentialDump(createSqlScript);
+ }
+ referentialImported = true;
+ }
+
+ if (importData) {
+ CreateDatabaseRequest.Builder requestBuilder = CreateDatabaseRequest.builder(true, version);
+ if (!referentialImported) {
+ log.info("Add referential to data dump");
+ requestBuilder.addStandaloneTables();
+ }
+ Set<String> importDataIds = createConfigurationDto.getImportDataIds();
+ Multimap<String, String> idsByType = ArrayListMultimap.create();
+ for (String importDataId : importDataIds) {
+ //FIXME
+ String className = importDataId.contains(".ll.") ? "fr.ird.observe.entities.data.ll.common.Trip" : "fr.ird.observe.entities.data.ps.common.Trip";
+ idsByType.put(className, importDataId);
+ }
+ for (Map.Entry<String, Collection<String>> entry : idsByType.asMap().entrySet()) {
+ String type = entry.getKey();
+ Set<String> dataIds = Set.copyOf(entry.getValue());
+ log.info(String.format("Add %d data of type: %s", dataIds.size(), type));
+ requestBuilder.dataIdsToAdd(type, dataIds);
+ }
+ try (ObserveSwingDataSource importDataSource = Objects.requireNonNull(ui.getModel().getDataSourcesManager().newDataSource(importDataConfig))) {
+ log.info(String.format("Prepare data dump from %s", importDataSource.getLabel()));
+ ObserveSwingDataSource.doOpenSource(importDataSource);
+ model.checkImportDbVersion(importDataSource);
+ CreateDatabaseRequest request = requestBuilder.build();
+ TopiaSqlScript dump = importDataSource.getDataSourceService().produceCreateSqlScript(request);
+ if (referentialImported) {
+ // already a referential dump, so just data dump
+ importConfiguration.setDataDump(dump);
+ } else {
+ // referential dump not existing, will use this one
+ importConfiguration.setReferentialDump(dump);
+ }
+ }
}
return dataSource;
}
@@ -95,7 +154,11 @@ public class CreateLauncher extends RemoteUILauncher {
protected void execute(ObserveSwingDataSource dataSource, ObserveDataSourceInformation dataSourceInformation) throws Exception {
log.info("Create db...");
try {
- dataSource.create(createConfigurationDto);
+ if (importConfiguration != null) {
+ dataSource.createAndImport(importConfiguration);
+ } else {
+ dataSource.create(createConfigurationDto);
+ }
log.info(String.format("Open [%s] and create it.", dataSource.getLabel()));
} finally {
if (dataSource.isOpen()) {
@@ -104,12 +167,5 @@ public class CreateLauncher extends RemoteUILauncher {
}
}
- void checkImportDbVersion(StorageUIModel model, ObserveDataSourceConfiguration dataSourceConfig) throws DatabaseConnexionNotAuthorizedException, DatabaseNotFoundException, BabModelVersionException, IncompatibleDataSourceCreateConfigurationException, DataSourceCreateWithNoReferentialImportException {
- try (ObserveSwingDataSource importDataSource = Objects.requireNonNull(model.getDataSourcesManager().newDataSource(dataSourceConfig))) {
- importDataSource.open();
- model.checkImportDbVersion(importDataSource);
- }
- }
-
}
=====================================
core/persistence/java/src/main/java/fr/ird/observe/entities/DataSourceCreateHelper.java
=====================================
@@ -0,0 +1,179 @@
+package fr.ird.observe.entities;
+
+/*-
+ * #%L
+ * ObServe Core :: Persistence :: Java
+ * %%
+ * Copyright (C) 2008 - 2022 IRD, Code Lutin, Ultreia.io
+ * %%
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as
+ * published by the Free Software Foundation, either version 3 of the
+ * License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public
+ * License along with this program. If not, see
+ * <http://www.gnu.org/licenses/gpl-3.0.html>.
+ * #L%
+ */
+
+import com.google.common.collect.ArrayListMultimap;
+import com.google.common.collect.Multimap;
+import fr.ird.observe.dto.db.BabModelVersionException;
+import fr.ird.observe.dto.db.DatabaseConnexionNotAuthorizedException;
+import fr.ird.observe.dto.db.DatabaseNotFoundException;
+import fr.ird.observe.dto.db.configuration.DataSourceCreateConfigurationDto;
+import fr.ird.observe.dto.db.configuration.ObserveDataSourceConfiguration;
+import fr.ird.observe.dto.db.configuration.topia.ObserveDataSourceConfigurationTopiaH2;
+import io.ultreia.java4all.util.Version;
+import org.apache.logging.log4j.LogManager;
+import org.apache.logging.log4j.Logger;
+import org.nuiton.topia.persistence.TopiaEntity;
+import org.nuiton.topia.persistence.TopiaIdFactory;
+import org.nuiton.topia.persistence.script.TopiaSqlScript;
+import org.nuiton.topia.service.migration.TopiaMigrationService;
+import org.nuiton.topia.service.sql.request.CreateDatabaseRequest;
+
+import java.io.File;
+import java.io.IOException;
+import java.nio.file.Files;
+import java.nio.file.Path;
+import java.util.Collection;
+import java.util.Map;
+import java.util.Set;
+
+/**
+ * Created on 16/03/2022.
+ *
+ * @author Tony Chemit - dev(a)tchemit.fr
+ * @since 6.0.7
+ */
+public class DataSourceCreateHelper {
+
+ private static final Logger log = LogManager.getLogger(DataSourceCreateHelper.class);
+
+ public static void create(ToolkitTopiaApplicationContextSupport<?> applicationContext, ObserveDataSourceConfiguration dataSourceConfiguration, DataSourceCreateConfigurationDto dataSourceCreateConfiguration) throws BabModelVersionException, DatabaseConnexionNotAuthorizedException, DatabaseNotFoundException {
+ log.debug(String.format("Create topia application context: %s", applicationContext));
+ Path temporaryDirectory = dataSourceConfiguration.getTemporaryDirectory();
+ if (dataSourceCreateConfiguration.isImportDatabase()) {
+ log.info("Create new database from a script.");
+ TopiaSqlScript importDatabase = dataSourceCreateConfiguration.getImportDatabase();
+ boolean migrate = dataSourceCreateConfiguration.isMigrate();
+ TopiaMigrationService migrationService = (TopiaMigrationService) applicationContext.getMigrationService();
+ if (dataSourceConfiguration.isLocal()) {
+ applicationContext.executeSqlStatements(importDatabase);
+ if (migrate) {
+ migrationService.createSchemaIfNotExist();
+ migrationService.runSchemaMigration();
+ }
+ } else { // base postgres
+ // do import in temporary h2 database
+ File tmpDir;
+ try {
+ tmpDir = Files.createTempDirectory(temporaryDirectory, "obstuna").toFile();
+ } catch (IOException e) {
+ throw new IllegalStateException("could not create temporary directory ", e);
+ }
+ ObserveDataSourceConfigurationTopiaH2 temporaryConfiguration = applicationContext.createTemporaryConfiguration(tmpDir, dataSourceConfiguration.getModelVersion());
+ ObserveTopiaApplicationContext temporaryTopiaApplicationContext = ObserveTopiaApplicationContextFactory.createTopiaApplicationContext(temporaryConfiguration, false);
+ temporaryTopiaApplicationContext.executeSqlStatements(importDatabase);
+ if (migrate) {
+ temporaryTopiaApplicationContext.getMigrationService().createSchemaIfNotExist();
+ temporaryTopiaApplicationContext.getMigrationService().runSchemaMigration();
+ }
+ CreateDatabaseRequest request = CreateDatabaseRequest.builder(true, dataSourceConfiguration.getModelVersion()).addSchema().addStandaloneTables().addAllData().build();
+ TopiaSqlScript dump = applicationContext.getSqlService().consume(request);
+ applicationContext.executeSqlStatements(dump);
+ migrationService.createSchemaIfNotExist();
+ migrationService.runSchemaMigration();
+ temporaryTopiaApplicationContext.close();
+ File databaseFile = temporaryConfiguration.getDatabaseFile();
+ if (!databaseFile.delete()) {
+ throw new IllegalStateException("could not delete " + databaseFile);
+ }
+ }
+ } else {
+ boolean importReferential = dataSourceCreateConfiguration.isImportReferential();
+ boolean importData = dataSourceCreateConfiguration.isImportData();
+ // si le referentiel n'est pas importé on aliment la table lastUpdateDate
+ if (!importReferential) {
+ applicationContext.insertLastUpdateDate();
+ }
+ boolean importStandaloneReferential = importReferential;
+ if (importReferential && importData) {
+ // Si on est sur la même source de données pour les deux imports, on fait tout sur la même base temporaire
+ ObserveDataSourceConfiguration importReferentialDataSourceConfiguration = dataSourceCreateConfiguration.getImportReferentialDataSourceConfiguration();
+ ObserveDataSourceConfiguration importDataSourceConfiguration = dataSourceCreateConfiguration.getImportDataDataSourceConfiguration();
+ importStandaloneReferential = !importReferentialDataSourceConfiguration.equals(importDataSourceConfiguration);
+ }
+ boolean referentialImported = false;
+ if (importStandaloneReferential) {
+ log.info("Import referential.");
+ ObserveDataSourceConfiguration importDataSourceConfiguration = dataSourceCreateConfiguration.getImportReferentialDataSourceConfiguration();
+ if (importDataSourceConfiguration.getTemporaryDirectory() == null) {
+ importDataSourceConfiguration.setTemporaryDirectory(temporaryDirectory);
+ }
+ Version dbVersion = Version.valueOf(applicationContext.getModelVersion());
+ CreateDatabaseRequest request = CreateDatabaseRequest.builder(!dataSourceConfiguration.isLocal(), dbVersion)
+ .addStandaloneTables().build();
+ TopiaSqlScript referentialDump;
+ ObserveTopiaApplicationContext temporaryTopiaApplicationContext = null;
+ try {
+ temporaryTopiaApplicationContext = ObserveTopiaApplicationContextFactory.createTopiaApplicationContext(importDataSourceConfiguration, false);
+ referentialDump = temporaryTopiaApplicationContext.getSqlService().consume(request);
+ applicationContext.executeSqlStatements(referentialDump);
+ } finally {
+ if (!dataSourceCreateConfiguration.isLeaveOpenSource() && temporaryTopiaApplicationContext != null) {
+ temporaryTopiaApplicationContext.close();
+ }
+ }
+ referentialImported = true;
+ }
+
+ if (importData) {
+ ObserveDataSourceConfiguration importDataSourceConfiguration = dataSourceCreateConfiguration.getImportDataDataSourceConfiguration();
+ if (importDataSourceConfiguration.getTemporaryDirectory() == null) {
+ importDataSourceConfiguration.setTemporaryDirectory(temporaryDirectory);
+ }
+ Version dbVersion = Version.valueOf(applicationContext.getModelVersion());
+ CreateDatabaseRequest.Builder requestBuilder = CreateDatabaseRequest.builder(!dataSourceConfiguration.isLocal(), dbVersion);
+ if (!referentialImported) {
+ log.info("Get referential.");
+ requestBuilder.addStandaloneTables();
+ }
+
+ // Récupération du dump qui contient les données
+ Set<String> importDataIds = dataSourceCreateConfiguration.getImportDataIds();
+ TopiaIdFactory idFactory = applicationContext.getTopiaIdFactory();
+ Multimap<String, String> idsByType = ArrayListMultimap.create();
+ for (String importDataId : importDataIds) {
+ Class<TopiaEntity> className = idFactory.getClassName(importDataId);
+ idsByType.put(className.getName(), importDataId);
+ }
+ log.info(String.format("Get data: %s", importDataIds));
+ for (Map.Entry<String, Collection<String>> entry : idsByType.asMap().entrySet()) {
+ requestBuilder.dataIdsToAdd(entry.getKey(), Set.copyOf(entry.getValue()));
+ }
+ TopiaSqlScript dataDump;
+ ObserveTopiaApplicationContext temporaryTopiaApplicationContext = null;
+ CreateDatabaseRequest request = requestBuilder.build();
+ try {
+ temporaryTopiaApplicationContext = ObserveTopiaApplicationContextFactory.createTopiaApplicationContext(importDataSourceConfiguration, false);
+ dataDump = temporaryTopiaApplicationContext.getSqlService().consume(request);
+ } finally {
+ if (!dataSourceCreateConfiguration.isLeaveOpenSource() && temporaryTopiaApplicationContext != null) {
+ temporaryTopiaApplicationContext.close();
+ }
+ }
+ log.info(String.format("Import data%s", request.isAddStandaloneTables() ? " and referential." : "."));
+ applicationContext.executeSqlStatements(dataDump);
+ }
+ }
+ }
+
+}
=====================================
core/persistence/java/src/main/java/fr/ird/observe/entities/ObserveTopiaApplicationContext.java
=====================================
@@ -22,14 +22,12 @@ package fr.ird.observe.entities;
* #L%
*/
-import com.google.common.collect.ArrayListMultimap;
-import com.google.common.collect.Multimap;
import fr.ird.observe.dto.db.BabModelVersionException;
import fr.ird.observe.dto.db.DatabaseConnexionNotAuthorizedException;
import fr.ird.observe.dto.db.DatabaseNotFoundException;
import fr.ird.observe.dto.db.configuration.DataSourceCreateConfigurationDto;
+import fr.ird.observe.dto.db.configuration.DataSourceImportConfigurationDto;
import fr.ird.observe.dto.db.configuration.ObserveDataSourceConfiguration;
-import fr.ird.observe.dto.db.configuration.topia.ObserveDataSourceConfigurationTopiaH2;
import fr.ird.observe.dto.referential.ReferentialDto;
import fr.ird.observe.entities.data.DataGroupByEntity;
import fr.ird.observe.spi.module.BusinessProject;
@@ -37,16 +35,12 @@ import fr.ird.observe.spi.referential.differential.DifferentialMetaModel;
import fr.ird.observe.spi.referential.synchro.OneSideSqlResultBuilder;
import fr.ird.observe.spi.script.ToolkitEntitySqlScriptModel;
import fr.ird.observe.spi.service.ServiceContext;
-import io.ultreia.java4all.util.Version;
import org.apache.logging.log4j.LogManager;
import org.apache.logging.log4j.Logger;
import org.nuiton.topia.persistence.TagValues;
import org.nuiton.topia.persistence.TopiaConfigurationExtension;
import org.nuiton.topia.persistence.TopiaEntity;
-import org.nuiton.topia.persistence.TopiaIdFactory;
import org.nuiton.topia.persistence.TopiaPersistenceContextConstructorParameterSupport;
-import org.nuiton.topia.persistence.script.TopiaSqlScript;
-import org.nuiton.topia.service.migration.TopiaMigrationService;
import org.nuiton.topia.service.sql.blob.TopiaEntitySqlBlobModel;
import org.nuiton.topia.service.sql.metadata.TopiaMetadataModel;
import org.nuiton.topia.service.sql.metadata.TopiaMetadataModelPaths;
@@ -54,19 +48,11 @@ import org.nuiton.topia.service.sql.model.TopiaEntitySqlModel;
import org.nuiton.topia.service.sql.plan.copy.TopiaEntitySqlCopyPlanModel;
import org.nuiton.topia.service.sql.plan.delete.TopiaEntitySqlDeletePlanModel;
import org.nuiton.topia.service.sql.plan.replicate.TopiaEntitySqlReplicatePlanModel;
-import org.nuiton.topia.service.sql.request.CreateDatabaseRequest;
import org.nuiton.topia.service.sql.usage.TopiaEntitySqlUsageModel;
-import java.io.File;
-import java.io.IOException;
-import java.nio.file.Files;
-import java.nio.file.Path;
import java.time.Duration;
-import java.util.Collection;
import java.util.Date;
-import java.util.Map;
import java.util.Set;
-import java.util.UUID;
import java.util.function.Consumer;
public class ObserveTopiaApplicationContext extends AbstractObserveTopiaApplicationContext {
@@ -187,131 +173,16 @@ public class ObserveTopiaApplicationContext extends AbstractObserveTopiaApplicat
return ObserveTopiaEntitySqlModelResource.get().getScriptModel();
}
+ @Deprecated
public void create(ObserveDataSourceConfiguration dataSourceConfiguration, DataSourceCreateConfigurationDto dataSourceCreateConfiguration) throws BabModelVersionException, DatabaseConnexionNotAuthorizedException, DatabaseNotFoundException {
- log.debug(String.format("Create topia application context: %s", this));
- if (dataSourceCreateConfiguration.isImportDatabase()) {
- log.info("Create new database from a script.");
- TopiaSqlScript importDatabase = dataSourceCreateConfiguration.getImportDatabase();
- boolean migrate = dataSourceCreateConfiguration.isMigrate();
- TopiaMigrationService migrationService = getMigrationService();
- if (dataSourceConfiguration.isLocal()) {
- executeSqlStatements(importDatabase);
- if (migrate) {
- migrationService.createSchemaIfNotExist();
- migrationService.runSchemaMigration();
- }
- } else { // base postgres
- // do import in temporary h2 database
- File tmpDir;
- try {
- Path temporaryDirectory = dataSourceConfiguration.getTemporaryDirectory();
- 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);
- if (migrate) {
- temporaryTopiaApplicationContext.getMigrationService().createSchemaIfNotExist();
- temporaryTopiaApplicationContext.getMigrationService().runSchemaMigration();
- }
- CreateDatabaseRequest request = CreateDatabaseRequest.builder(true, dataSourceConfiguration.getModelVersion()).addSchema().addStandaloneTables().addAllData().build();
- TopiaSqlScript dump = getSqlService().consume(request);
- executeSqlStatements(dump);
- migrationService.createSchemaIfNotExist();
- migrationService.runSchemaMigration();
- temporaryTopiaApplicationContext.close();
- File databaseFile = temporaryConfiguration.getDatabaseFile();
- if (!databaseFile.delete()) {
- throw new IllegalStateException("could not delete " + databaseFile);
- }
- }
- } else {
- boolean importReferential = dataSourceCreateConfiguration.isImportReferential();
- boolean importData = dataSourceCreateConfiguration.isImportData();
- // si le referentiel n'est pas importé on aliment la table lastUpdateDate
- if (!importReferential) {
- insertLastUpdateDate();
- }
- boolean importStandaloneReferential = importReferential;
- if (importReferential && importData) {
- // Si on est sur la même source de données pour les deux imports, on fait tout sur la même base temporaire
- ObserveDataSourceConfiguration importReferentialDataSourceConfiguration = dataSourceCreateConfiguration.getImportReferentialDataSourceConfiguration();
- ObserveDataSourceConfiguration importDataSourceConfiguration = dataSourceCreateConfiguration.getImportDataDataSourceConfiguration();
- importStandaloneReferential = !importReferentialDataSourceConfiguration.equals(importDataSourceConfiguration);
- }
- boolean referentialImported = false;
- if (importStandaloneReferential) {
- log.info("Import referential.");
- ObserveDataSourceConfiguration importDataSourceConfiguration = dataSourceCreateConfiguration.getImportReferentialDataSourceConfiguration();
- Version dbVersion = Version.valueOf(getModelVersion());
- CreateDatabaseRequest request = CreateDatabaseRequest.builder(!dataSourceConfiguration.isLocal(), dbVersion)
- .addStandaloneTables().build();
- TopiaSqlScript referentialDump;
- ObserveTopiaApplicationContext temporaryTopiaApplicationContext = null;
- try {
- temporaryTopiaApplicationContext = ObserveTopiaApplicationContextFactory.createTopiaApplicationContext(importDataSourceConfiguration, false);
-// ObserveDataSourceConnection importDataSourceConnection = serviceContext().newService(importDataSourceConfiguration, AnonymousService.class).open(importDataSourceConfiguration);
-// DataSourceService dumpProducerService = serviceContext().newService(importDataSourceConnection, DataSourceService.class);
- referentialDump = temporaryTopiaApplicationContext.getSqlService().consume(request);
- executeSqlStatements(referentialDump);
- } finally {
- if (!dataSourceCreateConfiguration.isLeaveOpenSource() && temporaryTopiaApplicationContext != null) {
- temporaryTopiaApplicationContext.close();
- }
- }
- referentialImported = true;
- }
-
- if (importData) {
- ObserveDataSourceConfiguration importDataSourceConfiguration = dataSourceCreateConfiguration.getImportDataDataSourceConfiguration();
- Version dbVersion = Version.valueOf(getModelVersion());
- CreateDatabaseRequest.Builder requestBuilder = CreateDatabaseRequest.builder(!dataSourceConfiguration.isLocal(), dbVersion);
- if (!referentialImported) {
- log.info("Get referential.");
- requestBuilder.addStandaloneTables();
- }
-
- // Récupération du dump qui contient les données
- Set<String> importDataIds = dataSourceCreateConfiguration.getImportDataIds();
- TopiaIdFactory idFactory = getTopiaIdFactory();
- Multimap<String, String> idsByType = ArrayListMultimap.create();
- for (String importDataId : importDataIds) {
- Class<TopiaEntity> className = idFactory.getClassName(importDataId);
- idsByType.put(className.getName(), importDataId);
- }
- log.info(String.format("Get data: %s", importDataIds));
- for (Map.Entry<String, Collection<String>> entry : idsByType.asMap().entrySet()) {
- requestBuilder.dataIdsToAdd(entry.getKey(), Set.copyOf(entry.getValue()));
- }
- TopiaSqlScript dataDump;
- ObserveTopiaApplicationContext temporaryTopiaApplicationContext = null;
- CreateDatabaseRequest request = requestBuilder.build();
- try {
- temporaryTopiaApplicationContext = ObserveTopiaApplicationContextFactory.createTopiaApplicationContext(importDataSourceConfiguration, false);
-// ObserveDataSourceConnection importDataSourceConnection = serviceContext().newService(importDataSourceConfiguration, AnonymousService.class).open(importDataSourceConfiguration);
-// DataSourceService dumpProducerService = serviceContext().newService(importDataSourceConnection, DataSourceService.class);
-// dataDump = dumpProducerService.produceCreateSqlScript(request);
- dataDump = temporaryTopiaApplicationContext.getSqlService().consume(request);
- } finally {
- if (!dataSourceCreateConfiguration.isLeaveOpenSource() && temporaryTopiaApplicationContext != null) {
- temporaryTopiaApplicationContext.close();
-// serviceContext().newService(importDataSourceConfiguration, DataSourceService.class).close();
- }
- }
- log.info(String.format("Import data%s", request.isAddStandaloneTables() ? " and referential." : "."));
- executeSqlStatements(dataDump);
- }
- }
+ DataSourceCreateHelper.create(this, dataSourceConfiguration, dataSourceCreateConfiguration);
}
- private ObserveDataSourceConfigurationTopiaH2 createTemporaryConfiguration(File tmpDirectory, Version version) {
- File dbDirectory = new File(tmpDirectory, "obstuna" + UUID.randomUUID());
- ObserveDataSourceConfigurationTopiaH2 result = ObserveDataSourceConfigurationTopiaH2.create(
- "obtunaTmp", dbDirectory, "obstuna", "sa", "sa".toCharArray(), true, true, version);
- result.setTemporaryDirectory(tmpDirectory.toPath());
- return result;
+ public void createAndImport(DataSourceImportConfigurationDto dataSourceCreateConfiguration) throws BabModelVersionException, DatabaseConnexionNotAuthorizedException, DatabaseNotFoundException {
+ log.debug(String.format("Create topia application context: %s", this));
+ executeSqlStatements(dataSourceCreateConfiguration.getReferentialDump());
+ if (dataSourceCreateConfiguration.isImportData()) {
+ executeSqlStatements(dataSourceCreateConfiguration.getDataDump());
+ }
}
-
}
=====================================
core/services/client/src/main/java/fr/ird/observe/services/client/AnonymousServiceClient.java
=====================================
@@ -27,6 +27,7 @@ import fr.ird.observe.dto.db.DatabaseConnexionNotAuthorizedException;
import fr.ird.observe.dto.db.DatabaseNotFoundException;
import fr.ird.observe.dto.db.configuration.DataSourceCreateConfigurationDto;
import fr.ird.observe.dto.db.configuration.DataSourceCreateWithNoReferentialImportException;
+import fr.ird.observe.dto.db.configuration.DataSourceImportConfigurationDto;
import fr.ird.observe.dto.db.configuration.IncompatibleDataSourceCreateConfigurationException;
import fr.ird.observe.dto.db.configuration.ObserveDataSourceConfiguration;
import fr.ird.observe.dto.db.configuration.ObserveDataSourceConnection;
@@ -44,6 +45,16 @@ public class AnonymousServiceClient extends GeneratedAnonymousServiceClient {
return dataSourceConnection;
}
+ @Override
+ public ObserveDataSourceConnection createAndImport(ObserveDataSourceConfiguration config, DataSourceImportConfigurationDto createConfiguration) throws IncompatibleDataSourceCreateConfigurationException, DataSourceCreateWithNoReferentialImportException, BabModelVersionException, DatabaseConnexionNotAuthorizedException, DatabaseNotFoundException {
+ ObserveServiceInitializer initializer = getServiceContext().getInitializer();
+ initializer.setConfiguration(config);
+ ObserveDataSourceConnection dataSourceConnection = super.createAndImport(config, createConfiguration);
+ initializer.setConnection(dataSourceConnection);
+ initializer.setConfiguration(null);
+ return dataSourceConnection;
+ }
+
@Override
public ObserveDataSourceConnection open(ObserveDataSourceConfiguration config) throws DatabaseNotFoundException, DatabaseConnexionNotAuthorizedException, BabModelVersionException {
ObserveServiceInitializer initializer = getServiceContext().getInitializer();
=====================================
core/services/local/src/main/java/fr/ird/observe/services/local/service/AnonymousServiceLocalSupport.java
=====================================
@@ -30,6 +30,7 @@ import fr.ird.observe.dto.db.DatabaseNotFoundException;
import fr.ird.observe.dto.db.DatabaseVersionIsTooHighException;
import fr.ird.observe.dto.db.configuration.DataSourceCreateConfigurationDto;
import fr.ird.observe.dto.db.configuration.DataSourceCreateWithNoReferentialImportException;
+import fr.ird.observe.dto.db.configuration.DataSourceImportConfigurationDto;
import fr.ird.observe.dto.db.configuration.IncompatibleDataSourceCreateConfigurationException;
import fr.ird.observe.dto.db.configuration.ObserveDataSourceConfiguration;
import fr.ird.observe.dto.db.configuration.ObserveDataSourceConnection;
@@ -124,6 +125,22 @@ public class AnonymousServiceLocalSupport extends ObserveServiceLocal implements
return config.toConnection(topiaApplicationContext.getAuthenticationToken(), dataSourceInformation);
}
+ @Override
+ public ObserveDataSourceConnection createAndImport(ObserveDataSourceConfiguration config, DataSourceImportConfigurationDto createConfiguration) throws IncompatibleDataSourceCreateConfigurationException, DataSourceCreateWithNoReferentialImportException, BabModelVersionException, DatabaseConnexionNotAuthorizedException, DatabaseNotFoundException {
+ createConfiguration.validateConfiguration(getApplicationLocale());
+ setTemporaryDirectory(config);
+ boolean initSchema = true;
+ ObserveTopiaApplicationContext topiaApplicationContext = ObserveTopiaApplicationContextFactory.createTopiaApplicationContext(config, initSchema);
+ try {
+ topiaApplicationContext.createAndImport(createConfiguration);
+ } catch (Exception e) {
+ close(config, topiaApplicationContext);
+ throw e;
+ }
+ ObserveDataSourceInformation dataSourceInformation = getDataSourceInformation(config, topiaApplicationContext.getConfiguration(), false);
+ return config.toConnection(topiaApplicationContext.getAuthenticationToken(), dataSourceInformation);
+ }
+
@Override
public ObserveDataSourceConnection open(ObserveDataSourceConfiguration config) throws DatabaseNotFoundException, DatabaseConnexionNotAuthorizedException, BabModelVersionException {
setTemporaryDirectory(config);
=====================================
server/core/src/main/filtered-resources/META-INF/mapping-api-client.wm
=====================================
@@ -26,6 +26,7 @@ GET /AnonymousService/applySecurity Anon
GET /AnonymousService/checkCanConnect AnonymousServiceRestApi.checkCanConnect
GET /AnonymousService/checkCanConnectOrBeEmpty AnonymousServiceRestApi.checkCanConnectOrBeEmpty
GET /AnonymousService/create AnonymousServiceRestApi.create
+POST /AnonymousService/createAndImport AnonymousServiceRestApi.createAndImport
GET /AnonymousService/generateHomeId AnonymousServiceRestApi.generateHomeId
GET /AnonymousService/getModelVersion AnonymousServiceRestApi.getModelVersion
GET /AnonymousService/getServerVersion AnonymousServiceRestApi.getServerVersion
=====================================
server/core/src/main/java/fr/ird/observe/server/controller/AnonymousServiceRestApi.java
=====================================
@@ -28,6 +28,7 @@ import fr.ird.observe.dto.db.DatabaseConnexionNotAuthorizedException;
import fr.ird.observe.dto.db.DatabaseNotFoundException;
import fr.ird.observe.dto.db.configuration.DataSourceCreateConfigurationDto;
import fr.ird.observe.dto.db.configuration.DataSourceCreateWithNoReferentialImportException;
+import fr.ird.observe.dto.db.configuration.DataSourceImportConfigurationDto;
import fr.ird.observe.dto.db.configuration.IncompatibleDataSourceCreateConfigurationException;
import fr.ird.observe.dto.db.configuration.ObserveDataSourceConfiguration;
import fr.ird.observe.dto.db.configuration.ObserveDataSourceConnection;
@@ -49,6 +50,12 @@ public class AnonymousServiceRestApi extends GeneratedAnonymousServiceRestApi {
private static final Logger log = LogManager.getLogger(AnonymousServiceRestApi.class);
+ @Override
+ public ObserveDataSourceInformation checkCanConnectOrBeEmpty(ObserveDataSourceConfiguration config) throws DatabaseNotFoundException, DatabaseConnexionNotAuthorizedException, BabModelVersionException {
+ ObserveWebUserSession session = getRequestContext().getConfigurationSession(config);
+ return getService().checkCanConnectOrBeEmpty(session.getConfiguration());
+ }
+
@Override
public ObserveDataSourceInformation checkCanConnect(ObserveDataSourceConfiguration config) throws DatabaseConnexionNotAuthorizedException, DatabaseNotFoundException, BabModelVersionException {
ObserveWebUserSession session = getRequestContext().getConfigurationSession(config);
@@ -65,6 +72,14 @@ public class AnonymousServiceRestApi extends GeneratedAnonymousServiceRestApi {
return authenticatedSession.toRestConnection(config);
}
+ @Override
+ public ObserveDataSourceConnection createAndImport(ObserveDataSourceConfiguration config, DataSourceImportConfigurationDto createConfiguration) throws IncompatibleDataSourceCreateConfigurationException, DataSourceCreateWithNoReferentialImportException, BabModelVersionException, DatabaseConnexionNotAuthorizedException, DatabaseNotFoundException {
+ ObserveWebUserSession configurationSession = getRequestContext().getConfigurationSession(config);
+ ObserveDataSourceConnection connection = getService().createAndImport(configurationSession.getConfiguration(), createConfiguration);
+ ObserveWebUserSession authenticatedSession = getSecurityApplicationContext().registerAuthenticatedSession(configurationSession, connection);
+ return authenticatedSession.toRestConnection(config);
+ }
+
@Override
public ObserveDataSourceConnection open(ObserveDataSourceConfiguration config) throws DatabaseNotFoundException, DatabaseConnexionNotAuthorizedException, BabModelVersionException {
ObserveWebUserSession configurationSession = getRequestContext().getConfigurationSession(config);
View it on GitLab: https://gitlab.com/ultreiaio/ird-observe/-/commit/a864fb664be6b4f57a7edf8a1…
--
View it on GitLab: https://gitlab.com/ultreiaio/ird-observe/-/commit/a864fb664be6b4f57a7edf8a1…
You're receiving this email because of your account on gitlab.com.
1
0
[Git][ultreiaio/ird-observe][develop] 11 commits: Complêter la configuration de l'action de validation - Closes #2212
by Tony CHEMIT (@tchemit) 16 Mar '22
by Tony CHEMIT (@tchemit) 16 Mar '22
16 Mar '22
Tony CHEMIT pushed to branch develop at ultreiaio / ird-observe
Commits:
c6dfa0b7 by Tony Chemit at 2022-03-16T12:31:39+01:00
Complêter la configuration de l'action de validation - Closes #2212
- - - - -
c0996f53 by Tony Chemit at 2022-03-16T12:31:39+01:00
Amélioration rendu données non valides (avec sur Ctrl+C le copie de l'id :))
- - - - -
91d5e01c by Tony Chemit at 2022-03-16T12:31:39+01:00
Correction sur les actions du comportements lors du retour sur onglet précédent après une action - Closes #2213
- - - - -
2c8862d5 by Tony Chemit at 2022-03-16T12:31:39+01:00
Replace ObserveDto by JsonAware for Json purpose.
- - - - -
9a5c18b4 by Tony Chemit at 2022-03-16T12:31:39+01:00
Replace ObserveDto by JsonAware for Json purpose.
Remove more usage of guava evil maps
- - - - -
dfad986b by Tony Chemit at 2022-03-16T12:31:39+01:00
Improve pairing logs (replace Program by GroupBy)
- - - - -
c7535b2e by Tony Chemit at 2022-03-16T12:31:39+01:00
update pom
- - - - -
67a69fba by Tony Chemit at 2022-03-16T12:31:39+01:00
low test logs
- - - - -
af7c6479 by Tony Chemit at 2022-03-16T12:31:39+01:00
Revue des rapports
- - - - -
bbd2bcce by Tony Chemit at 2022-03-16T12:31:39+01:00
Remove TopiaSqlScriptInjector
- - - - -
18ac6443 by Tony Chemit at 2022-03-16T13:04:41+01:00
Fix NPe in advanced data synchro
- - - - -
30 changed files:
- client/core/src/main/java/fr/ird/observe/client/datasource/api/ObserveSwingDataSource.java
- client/core/src/main/java/fr/ird/observe/client/datasource/api/data/InsertMissingReferentialTask.java
- client/core/src/main/java/fr/ird/observe/client/datasource/usage/UsageForDisplayUIHandler.java
- client/datasource/actions/src/main/i18n/getters/jaxx.getter
- client/datasource/actions/src/main/java/fr/ird/observe/client/datasource/actions/AdminUIHandler.java
- client/datasource/actions/src/main/java/fr/ird/observe/client/datasource/actions/AdminUIModel.java
- client/datasource/actions/src/main/java/fr/ird/observe/client/datasource/actions/config/SelectDataUIHandler.java
- client/datasource/actions/src/main/java/fr/ird/observe/client/datasource/actions/export/actions/Prepare.java
- client/datasource/actions/src/main/java/fr/ird/observe/client/datasource/actions/pairing/actions/Prepare.java
- client/datasource/actions/src/main/java/fr/ird/observe/client/datasource/actions/pairing/ll/RootNodeBuilder.java
- client/datasource/actions/src/main/java/fr/ird/observe/client/datasource/actions/pairing/ps/RootNodeBuilder.java
- client/datasource/actions/src/main/java/fr/ird/observe/client/datasource/actions/report/ReportUI.jcss
- client/datasource/actions/src/main/java/fr/ird/observe/client/datasource/actions/synchronize/data/actions/Start.java
- client/datasource/actions/src/main/java/fr/ird/observe/client/datasource/actions/synchronize/referential/legacy/actions/Start.java
- client/datasource/actions/src/main/java/fr/ird/observe/client/datasource/actions/synchronize/referential/ng/actions/Apply.java
- client/datasource/actions/src/main/java/fr/ird/observe/client/datasource/actions/synchronize/referential/ng/actions/Start.java
- client/datasource/actions/src/main/java/fr/ird/observe/client/datasource/actions/synchronize/referential/ng/task/ReferentialSynchronizeTaskListModel.java
- client/datasource/actions/src/main/java/fr/ird/observe/client/datasource/actions/synchronize/referential/ng/tree/ReferentialSelectionTree.java
- client/datasource/actions/src/main/java/fr/ird/observe/client/datasource/actions/synchronize/referential/ng/tree/ReferentialSynchronizeTreeModel.java
- client/datasource/actions/src/main/java/fr/ird/observe/client/datasource/actions/synchronize/referential/ng/tree/ReferentialSynchronizeTreeModelsBuilder.java
- client/datasource/actions/src/main/java/fr/ird/observe/client/datasource/actions/synchronize/referential/ng/tree/node/SynchroNodeSupport.java
- client/datasource/actions/src/main/java/fr/ird/observe/client/datasource/actions/validate/ValidateConfigUI.jaxx
- client/datasource/actions/src/main/java/fr/ird/observe/client/datasource/actions/validate/ValidateConfigUI.jcss
- client/datasource/actions/src/main/java/fr/ird/observe/client/datasource/actions/validate/ValidateEntityListCellRenderer.java
- client/datasource/actions/src/main/java/fr/ird/observe/client/datasource/actions/validate/ValidateModel.java
- client/datasource/actions/src/main/java/fr/ird/observe/client/datasource/actions/validate/ValidateUI.jcss
- client/datasource/actions/src/main/java/fr/ird/observe/client/datasource/actions/validate/ValidateUIHandler.java
- server/core/src/main/java/fr/ird/observe/server/injector/TopiaSqlScriptInjector.java → client/datasource/actions/src/main/java/fr/ird/observe/client/datasource/actions/validate/actions/SelectValidationConfigFlag.java
- client/datasource/actions/src/main/java/fr/ird/observe/client/datasource/actions/validate/actions/Start.java
- client/runner/src/main/i18n/translations/client-runner_en_GB.properties
The diff was not included because it is too large.
View it on GitLab: https://gitlab.com/ultreiaio/ird-observe/-/compare/f7648313d7fbc494594876ce…
--
View it on GitLab: https://gitlab.com/ultreiaio/ird-observe/-/compare/f7648313d7fbc494594876ce…
You're receiving this email because of your account on gitlab.com.
1
0
[Git][ultreiaio/ird-observe][develop] 11 commits: improve Focus dispatch when coming from a JPanel
by Tony CHEMIT (@tchemit) 14 Mar '22
by Tony CHEMIT (@tchemit) 14 Mar '22
14 Mar '22
Tony CHEMIT pushed to branch develop at ultreiaio / ird-observe
Commits:
54899979 by Tony Chemit at 2022-03-14T08:48:58+01:00
improve Focus dispatch when coming from a JPanel
- - - - -
b010d0cd by Tony Chemit at 2022-03-14T09:20:03+01:00
Amélioration des validateurs sur collection - See ultreiaio/ird-observe#2207
- - - - -
b9a842b8 by Tony Chemit at 2022-03-14T09:44:44+01:00
Renommage i18n dataEntryOperation
- - - - -
c0faeec5 by Tony Chemit at 2022-03-14T10:25:36+01:00
re-add type for containerDto (need them for validators)
- - - - -
3240e97d by Tony Chemit at 2022-03-14T10:25:46+01:00
low log level
- - - - -
7e08fe89 by Tony Chemit at 2022-03-14T10:26:04+01:00
improve validation action messages
- - - - -
560525ef by Tony Chemit at 2022-03-14T10:43:42+01:00
Correction validation ObjectMaterial (des faux positifs étaient détecté sur tous les fils directs de parent.code == null
- - - - -
982d3cd2 by Tony Chemit at 2022-03-14T11:28:19+01:00
Add Todo See #2212
- - - - -
5dc42b2d by Tony Chemit at 2022-03-14T11:29:37+01:00
Amélioration rendu données non valides (avec sur Ctrl+C le copie de l'id :))
- - - - -
bf1521a1 by Tony Chemit at 2022-03-14T13:56:58+01:00
Complêter la configuration de l'action de validation - Closes #2212
- - - - -
f7648313 by Tony Chemit at 2022-03-14T14:32:14+01:00
Correction sur les actions du comportements lors du retour sur onglet précédent après une action - Closes #2213
- - - - -
30 changed files:
- client/core/src/main/java/fr/ird/observe/client/main/focus/FocusDispatcher.java
- client/core/src/main/java/fr/ird/observe/client/util/busy/BusyModel.java
- client/datasource/actions/src/main/i18n/getters/jaxx.getter
- client/datasource/actions/src/main/java/fr/ird/observe/client/datasource/actions/AdminUIHandler.java
- client/datasource/actions/src/main/java/fr/ird/observe/client/datasource/actions/AdminUIModel.java
- client/datasource/actions/src/main/java/fr/ird/observe/client/datasource/actions/config/SelectDataUIHandler.java
- client/datasource/actions/src/main/java/fr/ird/observe/client/datasource/actions/export/actions/Prepare.java
- client/datasource/actions/src/main/java/fr/ird/observe/client/datasource/actions/pairing/actions/Prepare.java
- client/datasource/actions/src/main/java/fr/ird/observe/client/datasource/actions/synchronize/data/actions/Start.java
- client/datasource/actions/src/main/java/fr/ird/observe/client/datasource/actions/synchronize/referential/legacy/actions/Start.java
- client/datasource/actions/src/main/java/fr/ird/observe/client/datasource/actions/synchronize/referential/ng/actions/Start.java
- client/datasource/actions/src/main/java/fr/ird/observe/client/datasource/actions/synchronize/referential/ng/tree/actions/SelectUnselect.java
- client/datasource/actions/src/main/java/fr/ird/observe/client/datasource/actions/validate/ValidateConfigUI.jaxx
- client/datasource/actions/src/main/java/fr/ird/observe/client/datasource/actions/validate/ValidateConfigUI.jcss
- client/datasource/actions/src/main/java/fr/ird/observe/client/datasource/actions/validate/ValidateEntityListCellRenderer.java
- client/datasource/actions/src/main/java/fr/ird/observe/client/datasource/actions/validate/ValidateModel.java
- client/datasource/actions/src/main/java/fr/ird/observe/client/datasource/actions/validate/ValidateUI.jcss
- client/datasource/actions/src/main/java/fr/ird/observe/client/datasource/actions/validate/ValidateUIHandler.java
- + client/datasource/actions/src/main/java/fr/ird/observe/client/datasource/actions/validate/actions/SelectValidationConfigFlag.java
- client/datasource/actions/src/main/java/fr/ird/observe/client/datasource/actions/validate/actions/Start.java
- client/datasource/editor/api/src/main/java/fr/ird/observe/client/datasource/editor/api/selection/actions/SelectUnselect.java
- client/runner/src/main/i18n/translations/client-runner_en_GB.properties
- client/runner/src/main/i18n/translations/client-runner_es_ES.properties
- client/runner/src/main/i18n/translations/client-runner_fr_FR.properties
- core/api/dto/src/main/java/fr/ird/observe/dto/data/ps/observation/RouteDto.java
- core/api/dto/src/main/java/fr/ird/observe/dto/referential/ps/common/ObjectMaterialDto.java
- core/api/dto/src/main/java/fr/ird/observe/spi/validation/validators/ps/common/TripCheckRouteObsLogValues.java
- core/api/dto/src/main/java/fr/ird/observe/spi/validation/validators/ps/observation/RouteCheckStartLogValue.java
- core/api/services/src/main/i18n/getters/labels.getter
- core/api/validation/src/main/validation/fr/ird/observe/dto/referential/ps/common/ObjectMaterialDto-create-error-validation.xml
The diff was not included because it is too large.
View it on GitLab: https://gitlab.com/ultreiaio/ird-observe/-/compare/1ec22ba2c7b59bc6cad4343c…
--
View it on GitLab: https://gitlab.com/ultreiaio/ird-observe/-/compare/1ec22ba2c7b59bc6cad4343c…
You're receiving this email because of your account on gitlab.com.
1
0
[Git][ultreiaio/ird-observe][develop] 12 commits: topia-snapshot
by Tony CHEMIT (@tchemit) 13 Mar '22
by Tony CHEMIT (@tchemit) 13 Mar '22
13 Mar '22
Tony CHEMIT pushed to branch develop at ultreiaio / ird-observe
Commits:
b3290056 by Tony Chemit at 2022-03-13T11:37:47+01:00
topia-snapshot
- - - - -
35b54995 by Tony Chemit at 2022-03-13T11:37:47+01:00
be able to change now in test + be able to copy db with classifier
- - - - -
c6a70aa8 by Tony Chemit at 2022-03-13T11:37:47+01:00
Synchro simple du référentiel, associations espèce/océan - Closes #2208
- - - - -
c6a75995 by Tony Chemit at 2022-03-13T11:38:10+01:00
Les messages de validation sont mal encodés - Closes ultreiaio/ird-observe#2210
- - - - -
2bb24522 by Tony Chemit at 2022-03-13T15:30:05+01:00
Can configure which properties which should be sorted as code - See ultreiaio/decorator#9
- - - - -
c9199c7d by Tony Chemit at 2022-03-13T15:33:03+01:00
Libellé d'affichage des marées - See ultreiaio/ird-observe#2186
- - - - -
7e447e79 by Tony Chemit at 2022-03-13T15:33:48+01:00
clean code
- - - - -
6e29e1f0 by Tony Chemit at 2022-03-13T15:39:06+01:00
sort i18n labels
- - - - -
8736896e by Tony Chemit at 2022-03-13T15:42:26+01:00
clean i18n
- - - - -
f1d278eb by Tony Chemit at 2022-03-13T15:55:49+01:00
Libellé d'affichage des marées - See ultreiaio/ird-observe#2186
- - - - -
cd0b0005 by Tony Chemit at 2022-03-13T15:55:57+01:00
tidy pom
- - - - -
1ec22ba2 by Tony Chemit at 2022-03-13T16:28:28+01:00
update pom
- - - - -
30 changed files:
- client/datasource/editor/api/src/main/java/fr/ird/observe/client/datasource/editor/api/content/data/TripUIHelper.java
- client/datasource/editor/spi/pom.xml
- core/api/dto/src/main/java/fr/ird/observe/dto/data/TripAware.java
- core/api/dto/src/main/java/fr/ird/observe/dto/data/ll/common/TripCommon.java
- core/api/dto/src/main/java/fr/ird/observe/dto/data/ps/common/TripCommon.java
- core/api/dto/src/main/java/fr/ird/observe/spi/decoration/ObserveDtoDecoratorProviderInitializer.java
- core/api/dto/src/main/java/fr/ird/observe/spi/decoration/ObserveDtoDecoratorRenderer.java
- core/api/dto/src/main/java/fr/ird/observe/spi/decoration/ObserveDtoReferenceDecoratorRenderer.java
- core/api/dto/src/main/java/fr/ird/observe/spi/decoration/ObserveI18nDecoratorHelper.java
- core/api/dto/src/main/java/fr/ird/observe/spi/decoration/ObserveI18nLabelsBuilder.java
- core/api/services/src/main/i18n/getters/labels.getter
- core/api/services/src/main/resources/META-INF/i18n/Observe-labels.properties
- + core/persistence/java/src/main/java/fr/ird/observe/entities/data/TripEntityAware.java
- core/persistence/java/src/main/java/fr/ird/observe/entities/data/ll/common/TripImpl.java
- core/persistence/java/src/main/java/fr/ird/observe/entities/data/ps/common/TripImpl.java
- core/persistence/java/src/main/java/fr/ird/observe/spi/decoration/ObserveEntityDecoratorProviderInitializer.java
- core/persistence/java/src/main/java/fr/ird/observe/spi/decoration/ObserveEntityDecoratorRenderer.java
- core/services/i18n/src/main/i18n/translations/services_en_GB.properties
- core/services/i18n/src/main/i18n/translations/services_es_ES.properties
- core/services/i18n/src/main/i18n/translations/services_fr_FR.properties
- core/services/local/src/main/java/fr/ird/observe/services/local/service/ObserveServiceLocal.java
- core/services/local/src/test/java/fr/ird/observe/services/local/LocalTestClassResource.java
- core/services/local/src/test/java/fr/ird/observe/services/local/LocalTestMethodResourceWrite.java
- + core/services/local/src/test/java/fr/ird/observe/services/local/service/referential/UnidirectionalResultIssue2208Test.java
- core/services/local/src/test/java/fr/ird/observe/services/local/service/referential/UnidirectionalResultTest.java
- model/src/main/models/Observe/dto/25-data-ps-common.model
- model/src/main/models/Observe/dto/35-data-ll-common.model
- model/src/main/models/Observe/dto/class/decorator.properties
- model/src/main/models/Observe/dto/class/decoratorWithClassifier.properties
- model/src/main/models/Observe/dto/class/i18nLabels.properties
The diff was not included because it is too large.
View it on GitLab: https://gitlab.com/ultreiaio/ird-observe/-/compare/798492d06b7304a6037cd925…
--
View it on GitLab: https://gitlab.com/ultreiaio/ird-observe/-/compare/798492d06b7304a6037cd925…
You're receiving this email because of your account on gitlab.com.
1
0
[Git][ultreiaio/ird-observe][develop] 9 commits: No more states in topia application context, all resources are in the...
by Tony CHEMIT (@tchemit) 12 Mar '22
by Tony CHEMIT (@tchemit) 12 Mar '22
12 Mar '22
Tony CHEMIT pushed to branch develop at ultreiaio / ird-observe
Commits:
89eab94a by Tony Chemit at 2022-03-12T14:52:03+01:00
No more states in topia application context, all resources are in the dedicated resources class. This one is a singleton. So any application scope can be access without any topia application context instance \o/
- - - - -
fb09ba41 by Tony Chemit at 2022-03-12T14:52:28+01:00
Synchro simple du référentiel, associations espèce/océan - See ultreiaio/ird-observe#2208
- - - - -
b53909f5 by Tony Chemit at 2022-03-12T15:45:56+01:00
Make any resource lazy loaded by a SingletonSupplier - See ultreiaio/topia-extension#115
- - - - -
0cffc6c3 by Tony Chemit at 2022-03-12T15:46:46+01:00
Add TagValues class from observe-toolkit - See ultreiaio/topia-extension#116
- - - - -
53b91978 by Tony Chemit at 2022-03-12T16:29:50+01:00
Make any resource lazy loaded by a SingletonSupplier - See ultreiaio/topia-extension#115
- - - - -
5075e882 by Tony Chemit at 2022-03-12T16:30:50+01:00
topia snapshot
- - - - -
d712a51b by Tony Chemit at 2022-03-12T17:50:26+01:00
be able to change now in test + be able to copy db with classifier
- - - - -
0a93385d by Tony Chemit at 2022-03-12T17:50:39+01:00
be able to change now in test + be able to copy db with classifier
- - - - -
798492d0 by Tony Chemit at 2022-03-12T18:08:39+01:00
Synchro simple du référentiel, associations espèce/océan - Closes #2208
- - - - -
13 changed files:
- client/datasource/actions/src/main/java/fr/ird/observe/client/datasource/actions/AdminActionModel.java
- client/datasource/editor/spi/pom.xml
- client/datasource/editor/spi/src/main/java/fr/ird/observe/client/datasource/editor/spi/content/data/table/GenerateContentTableUITableModel.java
- core/persistence/java/src/main/java/fr/ird/observe/entities/ObserveTopiaApplicationContext.java
- core/services/local/src/main/java/fr/ird/observe/services/local/service/referential/ReferentialServiceLocalSupport.java
- core/services/local/src/main/java/fr/ird/observe/services/local/service/referential/SynchronizeServiceLocalSupport.java
- core/services/local/src/test/java/fr/ird/observe/services/local/LocalTestClassResource.java
- core/services/local/src/test/java/fr/ird/observe/services/local/LocalTestMethodResourceRead.java
- core/services/local/src/test/java/fr/ird/observe/services/local/LocalTestMethodResourceWrite.java
- core/services/local/src/test/java/fr/ird/observe/services/local/service/referential/DifferentialModelTest.java
- + core/services/local/src/test/java/fr/ird/observe/services/local/service/referential/UnidirectionalResultIssue2208Test.java
- core/services/local/src/test/java/fr/ird/observe/services/local/service/referential/UnidirectionalResultTest.java
- pom.xml
Changes:
=====================================
client/datasource/actions/src/main/java/fr/ird/observe/client/datasource/actions/AdminActionModel.java
=====================================
@@ -101,7 +101,7 @@ public abstract class AdminActionModel extends WizardExtStepModel<AdminStep> imp
public DifferentialModelBuilder newDifferentialModelBuilder(ObserveServicesProvider leftSource, ObserveServicesProvider rightSource) {
- return ReferentialService.createDifferentialModelBuilder(getClientConfig().getReferentialLocale().getLocale(), leftSource.getReferentialService(), rightSource.getReferentialService());
+ return ReferentialService.createDifferentialModelBuilder(getClientConfig().getReferentialLocale().getLocale(), leftSource.getReferentialService()::differentialMetaModel,leftSource.getReferentialService(), rightSource.getReferentialService());
}
public SynchronizeEngine newReferentialSynchronizeEngine(ObserveServicesProvider leftSource, ObserveServicesProvider rightSource) {
=====================================
client/datasource/editor/spi/pom.xml
=====================================
@@ -70,6 +70,10 @@
<groupId>io.ultreia.java4all</groupId>
<artifactId>java-bean</artifactId>
</dependency>
+ <dependency>
+ <groupId>io.ultreia.java4all.topia</groupId>
+ <artifactId>persistence</artifactId>
+ </dependency>
<dependency>
<groupId>io.ultreia.java4all</groupId>
<artifactId>java-lang</artifactId>
=====================================
client/datasource/editor/spi/src/main/java/fr/ird/observe/client/datasource/editor/spi/content/data/table/GenerateContentTableUITableModel.java
=====================================
@@ -28,7 +28,8 @@ import fr.ird.observe.client.datasource.editor.api.content.data.table.ContentTab
import fr.ird.observe.client.util.table.JXTableUtil;
import fr.ird.observe.dto.reference.DataDtoReference;
import fr.ird.observe.dto.reference.ReferentialDtoReference;
-import fr.ird.observe.spi.TagValues;
+import fr.ird.observe.spi.ProjectPackagesDefinition;
+import org.nuiton.topia.persistence.TagValues;
import fr.ird.observe.spi.decoration.I18nDecoratorHelper;
import fr.ird.observe.toolkit.templates.ToolkitTagValues;
import io.ultreia.java4all.bean.definition.JavaBeanDefinition;
@@ -119,7 +120,7 @@ public class GenerateContentTableUITableModel extends GenerateContentTableUISupp
@Override
public void run() {
labelsBuilder = I18nDecoratorHelper.get().getDefaultLabelsBuilder();
- dtoTagValues = TagValues.dto( /*FIXME Use extraProperties configuration*/"Observe");
+ dtoTagValues = TagValues.dto( /*FIXME Use extraProperties configuration*/"Observe", ProjectPackagesDefinition::cleanType);
super.run();
}
=====================================
core/persistence/java/src/main/java/fr/ird/observe/entities/ObserveTopiaApplicationContext.java
=====================================
@@ -30,12 +30,17 @@ import fr.ird.observe.dto.db.DatabaseNotFoundException;
import fr.ird.observe.dto.db.configuration.DataSourceCreateConfigurationDto;
import fr.ird.observe.dto.db.configuration.ObserveDataSourceConfiguration;
import fr.ird.observe.dto.db.configuration.topia.ObserveDataSourceConfigurationTopiaH2;
+import fr.ird.observe.dto.referential.ReferentialDto;
import fr.ird.observe.entities.data.DataGroupByEntity;
-import fr.ird.observe.spi.module.ObserveBusinessProject;
+import fr.ird.observe.spi.module.BusinessProject;
import fr.ird.observe.spi.referential.differential.DifferentialMetaModel;
+import fr.ird.observe.spi.referential.synchro.OneSideSqlResultBuilder;
+import fr.ird.observe.spi.script.ToolkitEntitySqlScriptModel;
+import fr.ird.observe.spi.service.ServiceContext;
import io.ultreia.java4all.util.Version;
import org.apache.logging.log4j.LogManager;
import org.apache.logging.log4j.Logger;
+import org.nuiton.topia.persistence.TagValues;
import org.nuiton.topia.persistence.TopiaConfigurationExtension;
import org.nuiton.topia.persistence.TopiaEntity;
import org.nuiton.topia.persistence.TopiaIdFactory;
@@ -58,6 +63,7 @@ import java.nio.file.Files;
import java.nio.file.Path;
import java.time.Duration;
import java.util.Collection;
+import java.util.Date;
import java.util.Map;
import java.util.Set;
import java.util.UUID;
@@ -107,8 +113,18 @@ public class ObserveTopiaApplicationContext extends AbstractObserveTopiaApplicat
}
@Override
- protected final DifferentialMetaModel newDifferentialMetaModel() {
- return new DifferentialMetaModel(referentialForReplicationDto(), ObserveBusinessProject.get().getReferentialBusinessProperties());
+ public final OneSideSqlResultBuilder newOneSideSqlResultBuilder(ServiceContext context, Date defaultLastUpdateDate) {
+ return ObserveTopiaEntitySqlModelResource.get().newOneSideSqlResultBuilder(context, defaultLastUpdateDate);
+ }
+
+ @Override
+ public final TagValues getPersistenceTagValues() {
+ return ObserveTopiaEntitySqlModelResource.get().getPersistenceTagValues();
+ }
+
+ @Override
+ public final TagValues getDtoTagValues() {
+ return ObserveTopiaEntitySqlModelResource.get().getDtoTagValues();
}
@Override
@@ -156,6 +172,21 @@ public class ObserveTopiaApplicationContext extends AbstractObserveTopiaApplicat
return ObserveTopiaEntitySqlModelResource.get().getMetaModelPaths();
}
+ @Override
+ public Set<Class<? extends ReferentialDto>> referentialForReplicationDto() {
+ return ObserveTopiaEntitySqlModelResource.get().referentialForReplicationDto();
+ }
+
+ @Override
+ public DifferentialMetaModel getDifferentialMetaModel(BusinessProject businessProject) {
+ return ObserveTopiaEntitySqlModelResource.get().getDifferentialMetaModel(businessProject);
+ }
+
+ @Override
+ public ToolkitEntitySqlScriptModel getScriptModel() {
+ return ObserveTopiaEntitySqlModelResource.get().getScriptModel();
+ }
+
public void create(ObserveDataSourceConfiguration dataSourceConfiguration, DataSourceCreateConfigurationDto dataSourceCreateConfiguration) throws BabModelVersionException, DatabaseConnexionNotAuthorizedException, DatabaseNotFoundException {
log.debug(String.format("Create topia application context: %s", this));
if (dataSourceCreateConfiguration.isImportDatabase()) {
=====================================
core/services/local/src/main/java/fr/ird/observe/services/local/service/referential/ReferentialServiceLocalSupport.java
=====================================
@@ -30,6 +30,7 @@ import fr.ird.observe.dto.reference.ReferentialDtoReference;
import fr.ird.observe.dto.reference.ReferentialDtoReferenceSet;
import fr.ird.observe.dto.referential.ReferentialDto;
import fr.ird.observe.dto.result.SaveResultDto;
+import fr.ird.observe.entities.ObserveTopiaEntitySqlModelResource;
import fr.ird.observe.services.local.service.ObserveServiceLocal;
import fr.ird.observe.services.service.referential.ReferentialService;
import fr.ird.observe.spi.context.ReferentialDtoEntityContext;
@@ -101,7 +102,7 @@ class ReferentialServiceLocalSupport extends ObserveServiceLocal implements Refe
@Override
public DifferentialMetaModel differentialMetaModel() {
- return getTopiaApplicationContext().getDifferentialMetaModel();
+ return ObserveTopiaEntitySqlModelResource.get().getDifferentialMetaModel(ObserveBusinessProject.get());
}
@Override
=====================================
core/services/local/src/main/java/fr/ird/observe/services/local/service/referential/SynchronizeServiceLocalSupport.java
=====================================
@@ -27,6 +27,7 @@ import fr.ird.observe.dto.ToolkitIdDtoBean;
import fr.ird.observe.dto.ToolkitIdLabel;
import fr.ird.observe.dto.referential.ReferentialDto;
import fr.ird.observe.entities.LastUpdateDateTopiaDao;
+import fr.ird.observe.entities.ObserveTopiaEntitySqlModelResource;
import fr.ird.observe.services.local.service.ObserveServiceLocal;
import fr.ird.observe.services.service.referential.SynchronizeService;
import fr.ird.observe.spi.context.ReferentialDtoEntityContext;
@@ -69,7 +70,7 @@ public class SynchronizeServiceLocalSupport extends ObserveServiceLocal implemen
@Override
public OneSideSqlResult produceSqlResult(OneSideSqlRequest request) {
- return getTopiaApplicationContext()
+ return ObserveTopiaEntitySqlModelResource.get()
.newOneSideSqlResultBuilder(this, now())
.build(request);
}
=====================================
core/services/local/src/test/java/fr/ird/observe/services/local/LocalTestClassResource.java
=====================================
@@ -134,18 +134,28 @@ public class LocalTestClassResource extends TestClassResourceSupport {
ObserveServiceInitializer serviceInitializer = new ObserveServiceInitializer(getServiceInitializerConfig(), dataSourceConfiguration, null) {
@Override
public Date now() {
- return ObserveFixtures.DATE;
+ return generateNow?new Date():ObserveFixtures.DATE;
}
};
serviceInitializer.setConfiguration(dataSourceConfiguration);
return serviceFactory.newService(serviceInitializer, serviceType);
}
+ private boolean generateNow;
+
+ public boolean isGenerateNow() {
+ return generateNow;
+ }
+
+ public void setGenerateNow(boolean generateNow) {
+ this.generateNow = generateNow;
+ }
+
public <S extends ObserveService> S newService(ObserveDataSourceConnection dataSourceConnection, Class<S> serviceType) {
ObserveServiceInitializer serviceInitializer = new ObserveServiceInitializer(getServiceInitializerConfig(), null, dataSourceConnection){
@Override
public Date now() {
- return ObserveFixtures.DATE;
+ return generateNow?new Date():ObserveFixtures.DATE;
}
};
return serviceFactory.newService(serviceInitializer, serviceType);
=====================================
core/services/local/src/test/java/fr/ird/observe/services/local/LocalTestMethodResourceRead.java
=====================================
@@ -34,6 +34,7 @@ import fr.ird.observe.security.Permission;
import fr.ird.observe.services.ObserveServicesProvider;
import fr.ird.observe.services.service.AnonymousService;
import fr.ird.observe.services.service.ObserveService;
+import fr.ird.observe.test.spi.DatabaseClassifier;
import io.ultreia.java4all.util.Version;
import org.junit.runner.Description;
@@ -53,6 +54,14 @@ public class LocalTestMethodResourceRead extends LocalTestClassResource {
private ObserveDataSourceConfigurationTopiaH2 dataSourceConfiguration;
private ObserveDataSourceConnection dataSourceConnection;
+ public LocalTestMethodResourceRead(DatabaseClassifier classifier) {
+ super(classifier);
+ }
+
+ public LocalTestMethodResourceRead() {
+ this(DatabaseClassifier.DEFAULT);
+ }
+
public <S extends ObserveService> S newService(Class<S> serviceType) throws DatabaseConnexionNotAuthorizedException, DatabaseNotFoundException, BabModelVersionException {
ObserveDataSourceConnection dataSourceConnection = getDataSourceConnection();
if (dataSourceConnection == null) {
=====================================
core/services/local/src/test/java/fr/ird/observe/services/local/LocalTestMethodResourceWrite.java
=====================================
@@ -41,6 +41,7 @@ import fr.ird.observe.spi.module.ObserveBusinessProject;
import fr.ird.observe.test.ObserveTestConfiguration;
import fr.ird.observe.test.TestMethodResourceSupportWrite;
import fr.ird.observe.test.spi.CopyDatabaseConfiguration;
+import fr.ird.observe.test.spi.DatabaseClassifier;
import io.ultreia.java4all.util.Version;
import org.junit.runner.Description;
import org.nuiton.topia.persistence.TopiaDao;
@@ -134,9 +135,10 @@ public class LocalTestMethodResourceWrite extends TestMethodResourceSupportWrite
Objects.requireNonNull(getDbVersion(), "Pas de version de base spécifié");
Objects.requireNonNull(getLogin(), "Pas de login spécifié");
Objects.requireNonNull(getPassword(), "Pas de password spécifié");
- CopyDatabaseConfiguration copyDatabaseConfiguration = ObserveTestConfiguration.getCopyDatabaseConfigurationAnnotation(testClassMethod, testClassResource.getClassifier());
+ DatabaseClassifier classifier = testClassResource.getClassifier();
+ CopyDatabaseConfiguration copyDatabaseConfiguration = ObserveTestConfiguration.getCopyDatabaseConfigurationAnnotation(testClassMethod, classifier);
boolean useSharedDatabase = copyDatabaseConfiguration == null;
- File databasePath = useSharedDatabase ? null : getTestDirectory().toPath().resolve("localDb").toFile();
+ File databasePath = useSharedDatabase ? null : getTestDirectory().toPath().resolve("localDb-"+classifier).toFile();
dataSourceConfiguration = testClassResource.createDataSourceConfiguration(getDbVersion(), getDbName(), databasePath, getLogin(), getPassword());
}
=====================================
core/services/local/src/test/java/fr/ird/observe/services/local/service/referential/DifferentialModelTest.java
=====================================
@@ -24,25 +24,26 @@ package fr.ird.observe.services.local.service.referential;
import fr.ird.observe.dto.ProgressionModel;
import fr.ird.observe.dto.referential.ReferentialLocale;
-import fr.ird.observe.services.local.LocalTestClassResource;
-import fr.ird.observe.services.local.LocalTestMethodResourceWrite;
+import fr.ird.observe.entities.ObserveTopiaEntitySqlModelResource;
+import fr.ird.observe.services.local.LocalTestMethodResourceRead;
import fr.ird.observe.services.local.service.ServiceLocalTestSupportWrite;
import fr.ird.observe.services.service.DataSourceServiceFixtures;
import fr.ird.observe.services.service.referential.ReferentialService;
+import fr.ird.observe.spi.module.ObserveBusinessProject;
import fr.ird.observe.spi.referential.differential.DifferentialList;
import fr.ird.observe.spi.referential.differential.DifferentialModel;
import fr.ird.observe.spi.referential.differential.DifferentialType;
import fr.ird.observe.test.DatabaseName;
import fr.ird.observe.test.ObserveTestConfiguration;
-import fr.ird.observe.test.spi.CopyDatabaseConfiguration;
import fr.ird.observe.test.spi.DatabaseClassifier;
+import fr.ird.observe.test.spi.DatabaseLoginConfiguration;
import fr.ird.observe.test.spi.DatabaseNameConfiguration;
+import fr.ird.observe.test.spi.DatabasePasswordConfiguration;
import fr.ird.observe.test.spi.DatabaseVersionConfiguration;
import org.apache.logging.log4j.LogManager;
import org.apache.logging.log4j.Logger;
import org.junit.Assert;
import org.junit.Before;
-import org.junit.ClassRule;
import org.junit.Rule;
import org.junit.Test;
@@ -50,14 +51,16 @@ import org.junit.Test;
* @author Tony Chemit - dev(a)tchemit.fr
* @since 7.4.0
*/
+@DatabaseVersionConfiguration(ObserveTestConfiguration.MODEL_VERSION)
+@DatabaseLoginConfiguration
+@DatabasePasswordConfiguration(ObserveTestConfiguration.H2_PASSWORD)
+@DatabaseNameConfiguration(value = DatabaseName.data, classifier = DatabaseClassifier.CENTRAL)
+@DatabaseVersionConfiguration(value = ObserveTestConfiguration.MODEL_VERSION, classifier = DatabaseClassifier.CENTRAL)
public class DifferentialModelTest extends ServiceLocalTestSupportWrite<ReferentialService> {
- @ClassRule
- public static final LocalTestClassResource TOPIA_TEST_CLASS_RESOURCE_CENTRAL = new LocalTestClassResource(DatabaseClassifier.CENTRAL);
private static final Logger log = LogManager.getLogger(DifferentialModelTest.class);
@Rule
- public final LocalTestMethodResourceWrite localTestMethodResourceCentral = new LocalTestMethodResourceWrite(TOPIA_TEST_CLASS_RESOURCE_CENTRAL);
-
+ public final LocalTestMethodResourceRead localTestMethodResourceCentral = new LocalTestMethodResourceRead(DatabaseClassifier.CENTRAL);
private ReferentialService rightReferentialService;
public DifferentialModelTest() {
@@ -71,15 +74,12 @@ public class DifferentialModelTest extends ServiceLocalTestSupportWrite<Referent
}
@DatabaseNameConfiguration(DatabaseName.empty)
- @CopyDatabaseConfiguration
- @DatabaseNameConfiguration(value = DatabaseName.data, classifier = DatabaseClassifier.CENTRAL)
- @DatabaseVersionConfiguration(value = ObserveTestConfiguration.MODEL_VERSION, classifier = DatabaseClassifier.CENTRAL)
@Test
public void testSynchronizeFromEmptyDatabase() {
ProgressionModel progressionModel = new ProgressionModel();
progressionModel.addPropertyChangeListener(ProgressionModel.PROPERTY_MESSAGE, evt -> log.debug(evt.getNewValue()));
- DifferentialModel result = ReferentialService.createDifferentialModelBuilder(ReferentialLocale.FR.getLocale(), service, rightReferentialService).build(progressionModel);
+ DifferentialModel result = ReferentialService.createDifferentialModelBuilder(ReferentialLocale.FR.getLocale(), () -> ObserveTopiaEntitySqlModelResource.get().getDifferentialMetaModel(ObserveBusinessProject.get()), service, rightReferentialService).build(progressionModel);
Assert.assertNotNull(result);
DifferentialList leftSideDifferentialList = result.getLeft();
@@ -91,19 +91,15 @@ public class DifferentialModelTest extends ServiceLocalTestSupportWrite<Referent
Assert.assertNotNull(rightSideDifferentialList.getStates());
Assert.assertEquals(DataSourceServiceFixtures.REFERENTIAL_COUNT, rightSideDifferentialList.getStates().size());
Assert.assertTrue(rightSideDifferentialList.getStates().stream().allMatch(s -> DifferentialType.ADDED.equals(s.getDifferentialType())));
-
}
@DatabaseNameConfiguration(DatabaseName.data)
- @CopyDatabaseConfiguration
- @DatabaseNameConfiguration(value = DatabaseName.data, classifier = DatabaseClassifier.CENTRAL)
- @DatabaseVersionConfiguration(value = ObserveTestConfiguration.MODEL_VERSION, classifier = DatabaseClassifier.CENTRAL)
@Test
public void testSynchronizeWithNoChange() {
ProgressionModel progressionModel = new ProgressionModel();
progressionModel.addPropertyChangeListener(ProgressionModel.PROPERTY_MESSAGE, evt -> log.debug(evt.getNewValue()));
- DifferentialModel result = ReferentialService.createDifferentialModelBuilder(ReferentialLocale.FR.getLocale(), service, rightReferentialService).build(progressionModel);
+ DifferentialModel result = ReferentialService.createDifferentialModelBuilder(ReferentialLocale.FR.getLocale(), () -> ObserveTopiaEntitySqlModelResource.get().getDifferentialMetaModel(ObserveBusinessProject.get()), service, rightReferentialService).build(progressionModel);
Assert.assertNotNull(result);
DifferentialList leftSideDifferentialList = result.getLeft();
=====================================
core/services/local/src/test/java/fr/ird/observe/services/local/service/referential/UnidirectionalResultIssue2208Test.java
=====================================
@@ -0,0 +1,151 @@
+package fr.ird.observe.services.local.service.referential;
+
+/*-
+ * #%L
+ * ObServe Core :: Services :: Local
+ * %%
+ * Copyright (C) 2008 - 2022 IRD, Code Lutin, Ultreia.io
+ * %%
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as
+ * published by the Free Software Foundation, either version 3 of the
+ * License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public
+ * License along with this program. If not, see
+ * <http://www.gnu.org/licenses/gpl-3.0.html>.
+ * #L%
+ */
+
+import fr.ird.observe.dto.ProgressionModel;
+import fr.ird.observe.dto.referential.ReferentialDto;
+import fr.ird.observe.dto.referential.ReferentialLocale;
+import fr.ird.observe.dto.referential.common.OceanReference;
+import fr.ird.observe.dto.referential.common.SpeciesDto;
+import fr.ird.observe.services.local.LocalTestClassResource;
+import fr.ird.observe.services.local.LocalTestMethodResourceWrite;
+import fr.ird.observe.services.local.service.ServiceLocalTestSupportWrite;
+import fr.ird.observe.services.service.referential.ReferentialService;
+import fr.ird.observe.services.service.referential.ReferentialServiceFixtures;
+import fr.ird.observe.services.service.referential.SynchronizeService;
+import fr.ird.observe.spi.referential.SynchronizeEngine;
+import fr.ird.observe.spi.referential.UnidirectionalSynchronizeContext;
+import fr.ird.observe.spi.referential.UnidirectionalSynchronizeEngine;
+import fr.ird.observe.spi.referential.differential.DifferentialModelBuilder;
+import fr.ird.observe.spi.referential.synchro.UnidirectionalResult;
+import fr.ird.observe.test.DatabaseName;
+import fr.ird.observe.test.ObserveTestConfiguration;
+import fr.ird.observe.test.ToolkitFixtures;
+import fr.ird.observe.test.spi.CopyDatabaseConfiguration;
+import fr.ird.observe.test.spi.DatabaseClassifier;
+import fr.ird.observe.test.spi.DatabaseLoginConfiguration;
+import fr.ird.observe.test.spi.DatabaseNameConfiguration;
+import fr.ird.observe.test.spi.DatabasePasswordConfiguration;
+import fr.ird.observe.test.spi.DatabaseVersionConfiguration;
+import org.junit.Assert;
+import org.junit.Before;
+import org.junit.ClassRule;
+import org.junit.Rule;
+import org.junit.Test;
+
+import java.util.Set;
+
+/**
+ * Created on 04/07/16.
+ *
+ * @author Tony Chemit - dev(a)tchemit.fr
+ */
+@DatabaseVersionConfiguration(ObserveTestConfiguration.MODEL_VERSION)
+@DatabaseLoginConfiguration
+@DatabasePasswordConfiguration(ObserveTestConfiguration.H2_PASSWORD)
+(a)DatabaseNameConfiguration(DatabaseName.referential)
+@DatabaseNameConfiguration(value = DatabaseName.referential, classifier = DatabaseClassifier.CENTRAL)
+@DatabaseVersionConfiguration(value = ObserveTestConfiguration.MODEL_VERSION, classifier = DatabaseClassifier.CENTRAL)
+public class UnidirectionalResultIssue2208Test extends ServiceLocalTestSupportWrite<SynchronizeService> {
+
+ @ClassRule
+ public static final LocalTestClassResource TOPIA_TEST_CLASS_RESOURCE_CENTRAL = new LocalTestClassResource(DatabaseClassifier.CENTRAL);
+ @Rule
+ public final LocalTestMethodResourceWrite localTestMethodResourceCentral = new LocalTestMethodResourceWrite(TOPIA_TEST_CLASS_RESOURCE_CENTRAL);
+
+ private DifferentialModelBuilder diffsEngine;
+ private SynchronizeEngine synchronizeEngine;
+ private ReferentialServiceFixtures fixtures;
+ private ReferentialService centralReferentialService;
+ private ReferentialService localReferentialService;
+
+ public UnidirectionalResultIssue2208Test() {
+ super(SynchronizeService.class);
+ }
+
+ @Before
+ public void setUp() throws Exception {
+ super.setUp();
+ localReferentialService = localTestMethodResource.newService(ReferentialService.class);
+ centralReferentialService = localTestMethodResourceCentral.newService(ReferentialService.class);
+ diffsEngine = ReferentialService.createDifferentialModelBuilder(ReferentialLocale.FR.getLocale(), localReferentialService::differentialMetaModel, localReferentialService, centralReferentialService);
+ SynchronizeService centralService = localTestMethodResourceCentral.newService(SynchronizeService.class);
+ synchronizeEngine = new SynchronizeEngine(localTestMethodResource.getTestDirectory().toPath(), service, centralService);
+ fixtures = new ReferentialServiceFixtures();
+ }
+
+ @CopyDatabaseConfiguration
+ @CopyDatabaseConfiguration(classifier = DatabaseClassifier.CENTRAL)
+ @Test
+ public void testSynchronizeIssue2208() {
+
+ // add ocean to a species in central database
+ // synchronize
+ // check in local database that the ocean is there for the given species
+
+ String speciesVariableName = fixtures.getVariableName(SpeciesDto.class).replace(".common.", ".common.common.");
+ String speciesId = ToolkitFixtures.getVariable(speciesVariableName);
+
+ SpeciesDto localSpecies = localReferentialService.loadDto(SpeciesDto.class, speciesId);
+ Assert.assertEquals(1, localSpecies.getOceanSize());
+
+ SpeciesDto centralSpecies = centralReferentialService.loadDto(SpeciesDto.class, speciesId);
+ Assert.assertEquals(1, centralSpecies.getOceanSize());
+
+ OceanReference ocean = new OceanReference();
+ //FIXME Make it fixture
+ ocean.setId("fr.ird.referential.common.Ocean#1239832686152#0.7039171539191688");
+ centralSpecies.addOcean(ocean);
+ TOPIA_TEST_CLASS_RESOURCE_CENTRAL.setGenerateNow(true);
+ try {
+ centralReferentialService.save(centralSpecies);
+ } finally {
+ TOPIA_TEST_CLASS_RESOURCE_CENTRAL.setGenerateNow(false);
+ }
+ centralSpecies = centralReferentialService.loadDto(SpeciesDto.class, speciesId);
+ Assert.assertEquals(2, centralSpecies.getOceanSize());
+
+ // do synchro
+
+ ProgressionModel progressionModel = new ProgressionModel();
+ UnidirectionalSynchronizeEngine referentialSynchronizeEngine = new UnidirectionalSynchronizeEngine(diffsEngine, synchronizeEngine);
+ UnidirectionalSynchronizeContext unidirectionalSynchronizeContext = referentialSynchronizeEngine.prepareContext(progressionModel);
+ UnidirectionalResult result = referentialSynchronizeEngine.prepareResult(unidirectionalSynchronizeContext, null);
+ unidirectionalSynchronizeContext.finish(service);
+
+ Assert.assertNotNull(result);
+
+ Set<Class<? extends ReferentialDto>> referentialNames = result.getReferentialNames();
+ Assert.assertNotNull(referentialNames);
+ Assert.assertEquals(1, referentialNames.size());
+ Assert.assertTrue(referentialNames.contains(SpeciesDto.class));
+
+ localSpecies = localReferentialService.loadDto(SpeciesDto.class, speciesId);
+ Assert.assertEquals(2, localSpecies.getOceanSize());
+ Assert.assertEquals(centralSpecies.getTopiaVersion(), localSpecies.getTopiaVersion());
+ Assert.assertEquals(centralSpecies.getLastUpdateDate(), localSpecies.getLastUpdateDate());
+ Assert.assertEquals(centralSpecies, localSpecies);
+
+ }
+
+}
=====================================
core/services/local/src/test/java/fr/ird/observe/services/local/service/referential/UnidirectionalResultTest.java
=====================================
@@ -28,8 +28,7 @@ import fr.ird.observe.dto.referential.ReferentialLocale;
import fr.ird.observe.entities.LastUpdateDate;
import fr.ird.observe.entities.referential.common.LengthLengthParameter;
import fr.ird.observe.entities.referential.ll.common.WeightDeterminationMethod;
-import fr.ird.observe.services.local.LocalTestClassResource;
-import fr.ird.observe.services.local.LocalTestMethodResourceWrite;
+import fr.ird.observe.services.local.LocalTestMethodResourceRead;
import fr.ird.observe.services.local.service.ServiceLocalTestSupportWrite;
import fr.ird.observe.services.service.referential.ReferentialService;
import fr.ird.observe.services.service.referential.SynchronizeService;
@@ -43,7 +42,9 @@ import fr.ird.observe.test.DatabaseName;
import fr.ird.observe.test.ObserveTestConfiguration;
import fr.ird.observe.test.spi.CopyDatabaseConfiguration;
import fr.ird.observe.test.spi.DatabaseClassifier;
+import fr.ird.observe.test.spi.DatabaseLoginConfiguration;
import fr.ird.observe.test.spi.DatabaseNameConfiguration;
+import fr.ird.observe.test.spi.DatabasePasswordConfiguration;
import fr.ird.observe.test.spi.DatabaseVersionConfiguration;
import io.ultreia.java4all.lang.Objects2;
import org.apache.logging.log4j.LogManager;
@@ -52,7 +53,6 @@ import org.junit.Assert;
import org.junit.Before;
import org.junit.ClassRule;
import org.junit.Ignore;
-import org.junit.Rule;
import org.junit.Test;
import org.nuiton.topia.service.sql.model.TopiaEntitySqlDescriptor;
import org.nuiton.topia.service.sql.model.TopiaEntitySqlDescriptors;
@@ -67,16 +67,18 @@ import java.util.Set;
*
* @author Tony Chemit - dev(a)tchemit.fr
*/
+@DatabaseVersionConfiguration(ObserveTestConfiguration.MODEL_VERSION)
+@DatabaseLoginConfiguration
+@DatabasePasswordConfiguration(ObserveTestConfiguration.H2_PASSWORD)
+(a)DatabaseNameConfiguration(DatabaseName.data)
+@DatabaseNameConfiguration(value = DatabaseName.data, classifier = DatabaseClassifier.CENTRAL)
+@DatabaseVersionConfiguration(value = ObserveTestConfiguration.MODEL_VERSION, classifier = DatabaseClassifier.CENTRAL)
public class UnidirectionalResultTest extends ServiceLocalTestSupportWrite<SynchronizeService> {
@ClassRule
- public static final LocalTestClassResource TOPIA_TEST_CLASS_RESOURCE_CENTRAL = new LocalTestClassResource(DatabaseClassifier.CENTRAL);
+ public static final LocalTestMethodResourceRead localTestMethodResourceCentral = new LocalTestMethodResourceRead(DatabaseClassifier.CENTRAL);
private static final Logger log = LogManager.getLogger(UnidirectionalResultTest.class);
- @Rule
- public final LocalTestMethodResourceWrite localTestMethodResourceCentral = new LocalTestMethodResourceWrite(TOPIA_TEST_CLASS_RESOURCE_CENTRAL);
-
private DifferentialModelBuilder diffsEngine;
private SynchronizeEngine synchronizeEngine;
- private SynchronizeService localSynchronizeService;
public UnidirectionalResultTest() {
super(SynchronizeService.class);
@@ -85,16 +87,14 @@ public class UnidirectionalResultTest extends ServiceLocalTestSupportWrite<Synch
@Before
public void setUp() throws Exception {
super.setUp();
- localSynchronizeService = localTestMethodResource.newService(SynchronizeService.class);
- diffsEngine = ReferentialService.createDifferentialModelBuilder(ReferentialLocale.FR.getLocale(), localTestMethodResource.newService(ReferentialService.class), localTestMethodResourceCentral.newService(ReferentialService.class));
- synchronizeEngine = new SynchronizeEngine(localTestMethodResource.getTestDirectory().toPath(), localSynchronizeService, localTestMethodResourceCentral.newService(SynchronizeService.class));
+ ReferentialService service = localTestMethodResource.newService(ReferentialService.class);
+ diffsEngine = ReferentialService.createDifferentialModelBuilder(ReferentialLocale.FR.getLocale(), service::differentialMetaModel, service, localTestMethodResourceCentral.newService(ReferentialService.class));
+ synchronizeEngine = new SynchronizeEngine(localTestMethodResource.getTestDirectory().toPath(), this.service, localTestMethodResourceCentral.newService(SynchronizeService.class));
}
@DatabaseNameConfiguration(DatabaseName.empty)
@CopyDatabaseConfiguration
- @DatabaseNameConfiguration(value = DatabaseName.data, classifier = DatabaseClassifier.CENTRAL)
- @DatabaseVersionConfiguration(value = ObserveTestConfiguration.MODEL_VERSION, classifier = DatabaseClassifier.CENTRAL)
@Test
@Ignore // We inject some species with data... Can't continue to migrate data from empty!!!
public void testSynchronizeFromEmptyDatabase() {
@@ -104,7 +104,7 @@ public class UnidirectionalResultTest extends ServiceLocalTestSupportWrite<Synch
UnidirectionalSynchronizeEngine referentialSynchronizeEngine = new UnidirectionalSynchronizeEngine(diffsEngine, synchronizeEngine);
UnidirectionalSynchronizeContext unidirectionalSynchronizeContext = referentialSynchronizeEngine.prepareContext(progressionModel);
UnidirectionalResult result = referentialSynchronizeEngine.prepareResult(unidirectionalSynchronizeContext, null);
- unidirectionalSynchronizeContext.finish(localSynchronizeService);
+ unidirectionalSynchronizeContext.finish(service);
Assert.assertNotNull(result);
Set<Class<? extends ReferentialDto>> referentialNames = result.getReferentialNames();
@@ -132,8 +132,6 @@ public class UnidirectionalResultTest extends ServiceLocalTestSupportWrite<Synch
@DatabaseNameConfiguration(DatabaseName.data)
@CopyDatabaseConfiguration
- @DatabaseNameConfiguration(value = DatabaseName.data, classifier = DatabaseClassifier.CENTRAL)
- @DatabaseVersionConfiguration(value = ObserveTestConfiguration.MODEL_VERSION, classifier = DatabaseClassifier.CENTRAL)
@Test
public void testSynchronizeWithNoChange() {
ProgressionModel progressionModel = new ProgressionModel();
@@ -142,7 +140,7 @@ public class UnidirectionalResultTest extends ServiceLocalTestSupportWrite<Synch
UnidirectionalSynchronizeEngine referentialSynchronizeEngine = new UnidirectionalSynchronizeEngine(diffsEngine, synchronizeEngine);
UnidirectionalSynchronizeContext unidirectionalSynchronizeContext = referentialSynchronizeEngine.prepareContext(progressionModel);
UnidirectionalResult result = referentialSynchronizeEngine.prepareResult(unidirectionalSynchronizeContext, null);
- unidirectionalSynchronizeContext.finish(localSynchronizeService);
+ unidirectionalSynchronizeContext.finish(service);
Assert.assertNotNull(result);
Set<Class<? extends ReferentialDto>> referentialNames = result.getReferentialNames();
@@ -162,7 +160,6 @@ public class UnidirectionalResultTest extends ServiceLocalTestSupportWrite<Synch
Assert.assertTrue(result.getReferentialReverted(dtoType).isEmpty());
Assert.assertTrue(result.getReferentialAdded(dtoType).isEmpty());
}
-
}
// // Il faut reecrire ce test en clonant une base, y fiasant des modif puis test
=====================================
pom.xml
=====================================
@@ -121,6 +121,7 @@
</site>
</distributionManagement>
<properties>
+ <lib.version.java4all.topia>1.70-SNAPSHOT</lib.version.java4all.topia>
<organizationId>ultreiaio</organizationId>
<projectId>ird-observe</projectId>
<stageId>frirdobserve</stageId>
View it on GitLab: https://gitlab.com/ultreiaio/ird-observe/-/compare/6c46bff44a9b8590ff9dcae5…
--
View it on GitLab: https://gitlab.com/ultreiaio/ird-observe/-/compare/6c46bff44a9b8590ff9dcae5…
You're receiving this email because of your account on gitlab.com.
1
0
[Git][ultreiaio/ird-observe][develop-7.x] Boutons de cadrage sur la carte 7.6.11 - Closes #2152
by Tony CHEMIT (@tchemit) 12 Mar '22
by Tony CHEMIT (@tchemit) 12 Mar '22
12 Mar '22
Tony CHEMIT pushed to branch develop-7.x at ultreiaio / ird-observe
Commits:
886d303e by Tony Chemit at 2022-03-12T11:40:53+01:00
Boutons de cadrage sur la carte 7.6.11 - Closes #2152
- - - - -
3 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
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")};
}
View it on GitLab: https://gitlab.com/ultreiaio/ird-observe/-/commit/886d303e90ebe10ab2fa65827…
--
View it on GitLab: https://gitlab.com/ultreiaio/ird-observe/-/commit/886d303e90ebe10ab2fa65827…
You're receiving this email because of your account on gitlab.com.
1
0
[Git][ultreiaio/ird-observe][develop-7.x] Mise à jour de dépendences - See #2209
by Tony CHEMIT (@tchemit) 12 Mar '22
by Tony CHEMIT (@tchemit) 12 Mar '22
12 Mar '22
Tony CHEMIT pushed to branch develop-7.x at ultreiaio / ird-observe
Commits:
857e48b7 by Tony Chemit at 2022-03-12T11:24:04+01:00
Mise à jour de dépendences - See #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.3
* freemarker → 2.3.31
* jboss-logging → 3.4.3.Final
* hibernate → 5.6.5.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
- - - - -
1 changed file:
- pom.xml
Changes:
=====================================
pom.xml
=====================================
@@ -170,17 +170,24 @@
<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.5.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.8</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.31</lib.version.slf4j>
+ <lib.version.javassist>3.28.0-GA</lib.version.javassist>
+ <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.3</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.3</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 +228,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>
View it on GitLab: https://gitlab.com/ultreiaio/ird-observe/-/commit/857e48b79f3766ca593370fbd…
--
View it on GitLab: https://gitlab.com/ultreiaio/ird-observe/-/commit/857e48b79f3766ca593370fbd…
You're receiving this email because of your account on gitlab.com.
1
0
[Git][ultreiaio/ird-observe][develop-7.x] Petit défaut de mise en page sur 7.6.11 - Closes #2200
by Tony CHEMIT (@tchemit) 12 Mar '22
by Tony CHEMIT (@tchemit) 12 Mar '22
12 Mar '22
Tony CHEMIT pushed to branch develop-7.x at ultreiaio / ird-observe
Commits:
186510ca by Tony Chemit at 2022-03-12T10:12:45+01:00
Petit défaut de mise en page sur 7.6.11 - Closes #2200
- - - - -
5 changed files:
- client-core/src/main/i18n/getters/jaxx.getter
- client-core/src/main/java/fr/ird/observe/client/ui/content/data/longline/SetLonglineUI.jaxx
- observe-i18n/src/main/i18n/translations/observe_en_GB.properties
- observe-i18n/src/main/i18n/translations/observe_es_ES.properties
- observe-i18n/src/main/i18n/translations/observe_fr_FR.properties
Changes:
=====================================
client-core/src/main/i18n/getters/jaxx.getter
=====================================
@@ -505,6 +505,7 @@ observe.common.SetLonglineDto.settingStartTimeStamp
observe.common.SetLonglineDto.settingTab
observe.common.SetLonglineDto.settingVesselSpeed
observe.common.SetLonglineDto.shooterSpeed
+observe.common.SetLonglineDto.shooterUsed
observe.common.SetLonglineDto.snapWeight
observe.common.SetLonglineDto.swivelWeight
observe.common.SetLonglineDto.timeBetweenHooks
=====================================
client-core/src/main/java/fr/ird/observe/client/ui/content/data/longline/SetLonglineUI.jaxx
=====================================
@@ -194,7 +194,7 @@
<!-- shooter speed -->
<row>
<cell anchor="east">
- <JCheckBox id='shooterUsed'/>
+ <JCheckBox id='shooterUsed' styleClass="i18n"/>
</cell>
<cell>
<JLabel id='shooterSpeedLabel'/>
=====================================
observe-i18n/src/main/i18n/translations/observe_en_GB.properties
=====================================
@@ -1273,6 +1273,7 @@ observe.common.SetLonglineDto.settingStartTimeStamp=Start timestamp
observe.common.SetLonglineDto.settingTab=Setting
observe.common.SetLonglineDto.settingVesselSpeed=Vessel speed (kts)
observe.common.SetLonglineDto.shooterSpeed=Shooter speed (kts)
+observe.common.SetLonglineDto.shooterUsed=Shooter used?
observe.common.SetLonglineDto.snapWeight=Snap weight (kg)
observe.common.SetLonglineDto.swivelWeight=swivel weight (kg)
observe.common.SetLonglineDto.timeBetweenHooks=time between hooks
=====================================
observe-i18n/src/main/i18n/translations/observe_es_ES.properties
=====================================
@@ -1273,6 +1273,7 @@ observe.common.SetLonglineDto.settingStartTimeStamp=FechaHora de inicio de calad
observe.common.SetLonglineDto.settingTab=Calada
observe.common.SetLonglineDto.settingVesselSpeed=Velocidad del barco (nd)
observe.common.SetLonglineDto.shooterSpeed=Velocidad virador (nd)
+observe.common.SetLonglineDto.shooterUsed=Shooter used?
observe.common.SetLonglineDto.snapWeight=Peso mosquetón (kg)
observe.common.SetLonglineDto.swivelWeight=Peso destorcedor (kg)
observe.common.SetLonglineDto.timeBetweenHooks=Tiempo entre anzuelos (s)
=====================================
observe-i18n/src/main/i18n/translations/observe_fr_FR.properties
=====================================
@@ -1273,6 +1273,7 @@ observe.common.SetLonglineDto.settingStartTimeStamp=Horodatage début
observe.common.SetLonglineDto.settingTab=Filage
observe.common.SetLonglineDto.settingVesselSpeed=Vitesse bateau (nd)
observe.common.SetLonglineDto.shooterSpeed=Vitesse shooter (nd)
+observe.common.SetLonglineDto.shooterUsed=Utilisation shooter ?
observe.common.SetLonglineDto.snapWeight=Poids snap (kg)
observe.common.SetLonglineDto.swivelWeight=Poids de l'émerillon (kg)
observe.common.SetLonglineDto.timeBetweenHooks=Temps entre hameçons (s)
View it on GitLab: https://gitlab.com/ultreiaio/ird-observe/-/commit/186510cae63449cad5fb14063…
--
View it on GitLab: https://gitlab.com/ultreiaio/ird-observe/-/commit/186510cae63449cad5fb14063…
You're receiving this email because of your account on gitlab.com.
1
0
[Git][ultreiaio/ird-observe][develop-7.x] Référentiel / Systèmes Observés / 'Voir toutes les utilisations de ce...
by Tony CHEMIT (@tchemit) 12 Mar '22
by Tony CHEMIT (@tchemit) 12 Mar '22
12 Mar '22
Tony CHEMIT pushed to branch develop-7.x at ultreiaio / ird-observe
Commits:
75d64c9f by Tony Chemit at 2022-03-12T09:56:41+01:00
Référentiel / Systèmes Observés / 'Voir toutes les utilisations de ce référentiel' ne fonctionne plus - Closes #2177
- - - - -
2 changed files:
- common-dto/src/main/java/fr/ird/observe/dto/IdHelper.java
- services-local/src/main/java/fr/ird/observe/services/local/service/referential/ReferentialServiceLocal.java
Changes:
=====================================
common-dto/src/main/java/fr/ird/observe/dto/IdHelper.java
=====================================
@@ -77,6 +77,10 @@ public class IdHelper {
return DTO_REFERENTIAL_LONGLINE_PACKAGE.startsWith(packageName);
}
+ public static boolean isEntityData(Class<?> type) {
+ return type.getPackage().getName().startsWith(ENTITY_DATA_PACKAGE);
+ }
+
public static boolean isData(Class type) {
return isDataFromPackageName(type.getPackage().getName());
}
=====================================
services-local/src/main/java/fr/ird/observe/services/local/service/referential/ReferentialServiceLocal.java
=====================================
@@ -95,7 +95,6 @@ import java.util.Objects;
import java.util.Optional;
import java.util.Set;
import java.util.function.Predicate;
-import java.util.stream.Collector;
import java.util.stream.Collectors;
/**
@@ -268,7 +267,7 @@ public class ReferentialServiceLocal extends ObserveServiceLocal implements Refe
ObserveReferentialEntity entity = loadEntity(spi.toDtoType(), bean.getId());
Map<Class<? extends TopiaEntity>, List<? extends TopiaEntity>> compositions = serviceContext.getTopiaApplicationContext().findReverseCompositions(getTopiaPersistenceContext(), entity, e -> true);
- Map<Class<? extends TopiaEntity>, List<? extends TopiaEntity>> associations = serviceContext.getTopiaApplicationContext().findReverseAssociations(getTopiaPersistenceContext(), entity, IdHelper::isData);
+ Map<Class<? extends TopiaEntity>, List<? extends TopiaEntity>> associations = serviceContext.getTopiaApplicationContext().findReverseAssociations(getTopiaPersistenceContext(), entity, IdHelper::isEntityData);
ImmutableSetDtoMap.Builder<DtoReference> result = ImmutableSetDtoMap.builder();
View it on GitLab: https://gitlab.com/ultreiaio/ird-observe/-/commit/75d64c9fbc75ca6d978a2a1df…
--
View it on GitLab: https://gitlab.com/ultreiaio/ird-observe/-/commit/75d64c9fbc75ca6d978a2a1df…
You're receiving this email because of your account on gitlab.com.
1
0