Tony CHEMIT pushed to branch develop at ultreiaio / ird-observe
Commits:
-
9995f02b
by Tony Chemit at 2022-03-18T09:19:10+01:00
-
6883c98a
by Tony Chemit at 2022-03-18T09:40:35+01:00
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:
| ... | ... | @@ -28,7 +28,6 @@ import fr.ird.observe.client.datasource.api.event.ObserveSwingDataSourceListener |
| 28 | 28 | import fr.ird.observe.dto.db.BabModelVersionException;
|
| 29 | 29 | import fr.ird.observe.dto.db.DatabaseConnexionNotAuthorizedException;
|
| 30 | 30 | import fr.ird.observe.dto.db.DatabaseNotFoundException;
|
| 31 | -import fr.ird.observe.dto.db.configuration.DataSourceCreateConfigurationDto;
|
|
| 32 | 31 | import fr.ird.observe.dto.db.configuration.DataSourceCreateWithNoReferentialImportException;
|
| 33 | 32 | import fr.ird.observe.dto.db.configuration.IncompatibleDataSourceCreateConfigurationException;
|
| 34 | 33 | import fr.ird.observe.dto.db.configuration.ObserveDataSourceConfiguration;
|
| ... | ... | @@ -41,6 +40,7 @@ import fr.ird.observe.spi.decoration.DecoratorService; |
| 41 | 40 | import io.ultreia.java4all.i18n.I18n;
|
| 42 | 41 | import org.apache.logging.log4j.LogManager;
|
| 43 | 42 | import org.apache.logging.log4j.Logger;
|
| 43 | +import org.nuiton.topia.persistence.script.TopiaSqlScript;
|
|
| 44 | 44 | |
| 45 | 45 | import java.io.Closeable;
|
| 46 | 46 | import java.io.File;
|
| ... | ... | @@ -170,6 +170,17 @@ public class ObserveDataSourcesManager implements Closeable { |
| 170 | 170 | return dataSource;
|
| 171 | 171 | }
|
| 172 | 172 | |
| 173 | + public ObserveSwingDataSource newDataSource(ObserveDataSourceConfigurationTopiaH2 configuration, TopiaSqlScript dump) {
|
|
| 174 | + ObserveSwingDataSource dataSource = new ObserveSwingDataSource(config, serviceFactory, decoratorService, configuration) {
|
|
| 175 | + @Override
|
|
| 176 | + public void open() throws DatabaseConnexionNotAuthorizedException, DatabaseNotFoundException, BabModelVersionException, IncompatibleDataSourceCreateConfigurationException, DataSourceCreateWithNoReferentialImportException {
|
|
| 177 | + createFromDump(dump);
|
|
| 178 | + }
|
|
| 179 | + };
|
|
| 180 | + addInternalListener(dataSource);
|
|
| 181 | + return dataSource;
|
|
| 182 | + }
|
|
| 183 | + |
|
| 173 | 184 | void addInternalListener(ObserveSwingDataSource dataSource) {
|
| 174 | 185 | dataSource.addObserveSwingDataSourceListener(new ObserveSwingDataSourceListenerAdapter() {
|
| 175 | 186 | |
| ... | ... | @@ -195,18 +206,6 @@ public class ObserveDataSourcesManager implements Closeable { |
| 195 | 206 | });
|
| 196 | 207 | }
|
| 197 | 208 | |
| 198 | - public ObserveSwingDataSource newDataSource(ObserveDataSourceConfigurationTopiaH2 configuration, DataSourceCreateConfigurationDto createDto) {
|
|
| 199 | - ObserveSwingDataSource dataSource = new ObserveSwingDataSource(config, serviceFactory, decoratorService, configuration) {
|
|
| 200 | - @Override
|
|
| 201 | - public void open() throws DatabaseConnexionNotAuthorizedException, DatabaseNotFoundException, BabModelVersionException, IncompatibleDataSourceCreateConfigurationException, DataSourceCreateWithNoReferentialImportException {
|
|
| 202 | - create(createDto);
|
|
| 203 | - |
|
| 204 | - }
|
|
| 205 | - };
|
|
| 206 | - addInternalListener(dataSource);
|
|
| 207 | - return dataSource;
|
|
| 208 | - }
|
|
| 209 | - |
|
| 210 | 209 | @Override
|
| 211 | 210 | public void close() {
|
| 212 | 211 |
| ... | ... | @@ -22,6 +22,8 @@ package fr.ird.observe.client.datasource.api; |
| 22 | 22 | * #L%
|
| 23 | 23 | */
|
| 24 | 24 | |
| 25 | +import com.google.common.collect.ArrayListMultimap;
|
|
| 26 | +import com.google.common.collect.Multimap;
|
|
| 25 | 27 | import fr.ird.observe.client.WithClientUIContextApi;
|
| 26 | 28 | import fr.ird.observe.client.configuration.ClientConfig;
|
| 27 | 29 | import fr.ird.observe.client.datasource.api.event.ObserveSwingDataSourceEvent;
|
| ... | ... | @@ -38,7 +40,6 @@ import fr.ird.observe.dto.db.BabModelVersionException; |
| 38 | 40 | import fr.ird.observe.dto.db.DataSourceUserDto;
|
| 39 | 41 | import fr.ird.observe.dto.db.DatabaseConnexionNotAuthorizedException;
|
| 40 | 42 | import fr.ird.observe.dto.db.DatabaseNotFoundException;
|
| 41 | -import fr.ird.observe.dto.db.configuration.DataSourceCreateConfigurationDto;
|
|
| 42 | 43 | import fr.ird.observe.dto.db.configuration.DataSourceCreateWithNoReferentialImportException;
|
| 43 | 44 | import fr.ird.observe.dto.db.configuration.IncompatibleDataSourceCreateConfigurationException;
|
| 44 | 45 | import fr.ird.observe.dto.db.configuration.ObserveDataSourceConfiguration;
|
| ... | ... | @@ -86,6 +87,7 @@ import javax.swing.event.EventListenerList; |
| 86 | 87 | import java.io.File;
|
| 87 | 88 | import java.nio.file.Files;
|
| 88 | 89 | import java.nio.file.Path;
|
| 90 | +import java.util.Collection;
|
|
| 89 | 91 | import java.util.Collections;
|
| 90 | 92 | import java.util.Date;
|
| 91 | 93 | import java.util.Iterator;
|
| ... | ... | @@ -241,27 +243,66 @@ public class ObserveSwingDataSource extends AbstractJavaBean implements ObserveS |
| 241 | 243 | fireOpened();
|
| 242 | 244 | }
|
| 243 | 245 | |
| 244 | - public void createFrom(ObserveSwingDataSource localSource)
|
|
| 246 | + public void createEmpty()
|
|
| 245 | 247 | throws IncompatibleDataSourceCreateConfigurationException, DataSourceCreateWithNoReferentialImportException,
|
| 246 | 248 | DatabaseNotFoundException, DatabaseConnexionNotAuthorizedException, BabModelVersionException {
|
| 247 | - DataSourceCreateConfigurationDto createDto = new DataSourceCreateConfigurationDto();
|
|
| 248 | - createDto.setLeaveOpenSource(true);
|
|
| 249 | - createDto.setImportReferentialDataSourceConfiguration(localSource.getConfiguration());
|
|
| 250 | - create(createDto);
|
|
| 249 | + checkIsNotOpen();
|
|
| 250 | + fireNewMessage(t("observe.ui.datasource.storage.message.creating", getLabel()));
|
|
| 251 | + fireOpening();
|
|
| 252 | + AnonymousService dataSourceService = getAnonymousService();
|
|
| 253 | + setConnection(dataSourceService.createEmpty(getConfiguration()));
|
|
| 254 | + fireNewMessage(t("observe.ui.datasource.storage.message.created", getLabel()));
|
|
| 255 | + fireOpened();
|
|
| 251 | 256 | }
|
| 252 | 257 | |
| 253 | - public void create(DataSourceCreateConfigurationDto createDto)
|
|
| 258 | + public void createFromDump(TopiaSqlScript dump)
|
|
| 254 | 259 | throws IncompatibleDataSourceCreateConfigurationException, DataSourceCreateWithNoReferentialImportException,
|
| 255 | 260 | DatabaseNotFoundException, DatabaseConnexionNotAuthorizedException, BabModelVersionException {
|
| 256 | 261 | checkIsNotOpen();
|
| 257 | 262 | fireNewMessage(t("observe.ui.datasource.storage.message.creating", getLabel()));
|
| 258 | 263 | fireOpening();
|
| 259 | 264 | AnonymousService dataSourceService = getAnonymousService();
|
| 260 | - setConnection(dataSourceService.create(getConfiguration(), createDto));
|
|
| 265 | + setConnection(dataSourceService.createFromDump(getConfiguration(), dump));
|
|
| 261 | 266 | fireNewMessage(t("observe.ui.datasource.storage.message.created", getLabel()));
|
| 262 | 267 | fireOpened();
|
| 263 | 268 | }
|
| 264 | 269 | |
| 270 | + public void createFromImport(TopiaSqlScript referential, TopiaSqlScript data)
|
|
| 271 | + throws IncompatibleDataSourceCreateConfigurationException, DataSourceCreateWithNoReferentialImportException,
|
|
| 272 | + DatabaseNotFoundException, DatabaseConnexionNotAuthorizedException, BabModelVersionException {
|
|
| 273 | + checkIsNotOpen();
|
|
| 274 | + fireNewMessage(t("observe.ui.datasource.storage.message.creating", getLabel()));
|
|
| 275 | + fireOpening();
|
|
| 276 | + AnonymousService dataSourceService = getAnonymousService();
|
|
| 277 | + setConnection(dataSourceService.createFromImport(getConfiguration(), referential, data));
|
|
| 278 | + fireNewMessage(t("observe.ui.datasource.storage.message.created", getLabel()));
|
|
| 279 | + fireOpened();
|
|
| 280 | + }
|
|
| 281 | + |
|
| 282 | + public TopiaSqlScript extract(boolean loadSchema, Set<String> importDataIds) {
|
|
| 283 | + checkIsOpen();
|
|
| 284 | + DataSourceService dataSourceService = getDataSourceService();
|
|
| 285 | + CreateDatabaseRequest.Builder request = CreateDatabaseRequest.builder(true, getVersion());
|
|
| 286 | + if (loadSchema) {
|
|
| 287 | + request.addSchema().addStandaloneTables();
|
|
| 288 | + }
|
|
| 289 | + if (importDataIds != null) {
|
|
| 290 | + Multimap<String, String> idsByType = ArrayListMultimap.create();
|
|
| 291 | + for (String importDataId : importDataIds) {
|
|
| 292 | + //FIXME
|
|
| 293 | + String className = importDataId.contains(".ll.") ? "fr.ird.observe.entities.data.ll.common.Trip" : "fr.ird.observe.entities.data.ps.common.Trip";
|
|
| 294 | + idsByType.put(className, importDataId);
|
|
| 295 | + }
|
|
| 296 | + for (Map.Entry<String, Collection<String>> entry : idsByType.asMap().entrySet()) {
|
|
| 297 | + String type = entry.getKey();
|
|
| 298 | + Set<String> dataIds = Set.copyOf(entry.getValue());
|
|
| 299 | + log.info(String.format("Add %d data of type: %s", dataIds.size(), type));
|
|
| 300 | + request.dataIdsToAdd(type, dataIds);
|
|
| 301 | + }
|
|
| 302 | + }
|
|
| 303 | + return dataSourceService.produceCreateSqlScript(request.build());
|
|
| 304 | + }
|
|
| 305 | + |
|
| 265 | 306 | @Override
|
| 266 | 307 | public void close() {
|
| 267 | 308 | if (!configurationAndConnection.withConnection()) {
|
| ... | ... | @@ -30,7 +30,6 @@ import fr.ird.observe.client.datasource.api.ObserveSwingDataSource; |
| 30 | 30 | import fr.ird.observe.client.datasource.api.event.ObserveSwingDataSourceEvent;
|
| 31 | 31 | import fr.ird.observe.client.datasource.api.event.ObserveSwingDataSourceListenerAdapter;
|
| 32 | 32 | import fr.ird.observe.client.util.ObserveSwingTechnicalException;
|
| 33 | -import fr.ird.observe.dto.db.configuration.DataSourceCreateConfigurationDto;
|
|
| 34 | 33 | import io.ultreia.java4all.lang.Strings;
|
| 35 | 34 | import org.apache.logging.log4j.LogManager;
|
| 36 | 35 | import org.apache.logging.log4j.Logger;
|
| ... | ... | @@ -98,9 +97,6 @@ public class BackupsManager implements Closeable { |
| 98 | 97 | log.info("Will check backup " + backupStorage.getFile());
|
| 99 | 98 | |
| 100 | 99 | try {
|
| 101 | -// byte[] dump = Files.readAllBytes(backupStorage.getFile().toPath());
|
|
| 102 | - DataSourceCreateConfigurationDto createDto = new DataSourceCreateConfigurationDto();
|
|
| 103 | - createDto.setImportDatabase(TopiaSqlScript.of(backupStorage.getFile().toURI()));
|
|
| 104 | 100 | |
| 105 | 101 | try (ObserveSwingDataSource dataSource = dataSourcesManager.newTemporaryH2DataSource("check-" + backupStorage.getName())) {
|
| 106 | 102 | dataSource.addObserveSwingDataSourceListener(new ObserveSwingDataSourceListenerAdapter() {
|
| ... | ... | @@ -109,7 +105,7 @@ public class BackupsManager implements Closeable { |
| 109 | 105 | dataSource.destroy();
|
| 110 | 106 | }
|
| 111 | 107 | });
|
| 112 | - dataSource.create(createDto);
|
|
| 108 | + dataSource.createFromDump(TopiaSqlScript.of(backupStorage.getFile().toURI()));
|
|
| 113 | 109 | }
|
| 114 | 110 | backupStorage.setVerified(true);
|
| 115 | 111 | log.info("Add sane backup from " + backupStorage.getFile());
|
| ... | ... | @@ -34,7 +34,6 @@ import fr.ird.observe.client.main.ObserveMainUI; |
| 34 | 34 | import fr.ird.observe.client.util.ObserveSwingTechnicalException;
|
| 35 | 35 | import fr.ird.observe.dto.db.DatabaseConnexionNotAuthorizedException;
|
| 36 | 36 | import fr.ird.observe.dto.db.configuration.DataSourceConnectMode;
|
| 37 | -import fr.ird.observe.dto.db.configuration.DataSourceCreateConfigurationDto;
|
|
| 38 | 37 | import fr.ird.observe.dto.db.configuration.DataSourceInitMode;
|
| 39 | 38 | import fr.ird.observe.dto.db.configuration.ObserveDataSourceConfiguration;
|
| 40 | 39 | import fr.ird.observe.dto.db.configuration.ObserveDataSourceInformation;
|
| ... | ... | @@ -212,13 +211,8 @@ public class DataSourceEditorHelper implements WithClientUIContextApi { |
| 212 | 211 | |
| 213 | 212 | log.info("Will load last backup: " + backupStorage.getFile());
|
| 214 | 213 | try {
|
| 215 | - DataSourceCreateConfigurationDto createDto = new DataSourceCreateConfigurationDto();
|
|
| 216 | - createDto.setImportDatabase(TopiaSqlScript.of(backupStorage.getFile().toPath().toUri()));
|
|
| 217 | - |
|
| 218 | 214 | ObserveDataSourceConfigurationTopiaH2 dataSourceConfigurationH2 = dataSourcesManager.newH2DataSourceConfiguration(I18n.n("observe.runner.initStorage.label.local"));
|
| 219 | - |
|
| 220 | - ObserveSwingDataSource dataSource = dataSourcesManager.newDataSource(dataSourceConfigurationH2, createDto);
|
|
| 221 | - |
|
| 215 | + ObserveSwingDataSource dataSource = dataSourcesManager.newDataSource(dataSourceConfigurationH2, TopiaSqlScript.of(backupStorage.getFile().toPath().toUri()));
|
|
| 222 | 216 | //FIXME:BodyContent Review progress model, not linked to ui any more...
|
| 223 | 217 | mainUI.getMainUIBodyContentManager().getBodyTyped(DataSourceEditor.class, DataSourceEditorBodyContent.class).loadStorage(mainUI, dataSource);
|
| 224 | 218 | } catch (Exception e) {
|
| ... | ... | @@ -31,11 +31,11 @@ import fr.ird.observe.client.datasource.editor.api.DataSourceEditorBodyContent; |
| 31 | 31 | import fr.ird.observe.client.datasource.editor.api.loading.LoadingDataSourceContext;
|
| 32 | 32 | import fr.ird.observe.client.datasource.editor.api.wizard.DataSourceHelper;
|
| 33 | 33 | import fr.ird.observe.client.datasource.editor.api.wizard.StorageUIModel;
|
| 34 | -import fr.ird.observe.dto.db.configuration.DataSourceCreateConfigurationDto;
|
|
| 35 | 34 | import fr.ird.observe.dto.db.configuration.DataSourceInitModel;
|
| 36 | 35 | import fr.ird.observe.dto.db.configuration.ObserveDataSourceInformation;
|
| 37 | 36 | import org.apache.logging.log4j.LogManager;
|
| 38 | 37 | import org.apache.logging.log4j.Logger;
|
| 38 | +import org.nuiton.topia.persistence.script.TopiaSqlScript;
|
|
| 39 | 39 | |
| 40 | 40 | import static io.ultreia.java4all.i18n.I18n.t;
|
| 41 | 41 | |
| ... | ... | @@ -115,8 +115,8 @@ public class OpenDataSourceActionStep extends OpenDataSourceActionStepSupport { |
| 115 | 115 | try {
|
| 116 | 116 | if (initModel.isOnCreateMode()) {
|
| 117 | 117 | // do create local data source
|
| 118 | - DataSourceCreateConfigurationDto creationConfigurationDto = DataSourceHelper.getCreationConfigurationDto(model);
|
|
| 119 | - newDataSource.create(creationConfigurationDto);
|
|
| 118 | + TopiaSqlScript dump = DataSourceHelper.getCreationConfigurationDto(model);
|
|
| 119 | + newDataSource.createFromDump(dump);
|
|
| 120 | 120 | } else {
|
| 121 | 121 | // open data source
|
| 122 | 122 | newDataSource.open();
|
| ... | ... | @@ -32,7 +32,6 @@ import fr.ird.observe.client.util.ObserveSwingTechnicalException; |
| 32 | 32 | import fr.ird.observe.dto.db.BabModelVersionException;
|
| 33 | 33 | import fr.ird.observe.dto.db.DatabaseConnexionNotAuthorizedException;
|
| 34 | 34 | import fr.ird.observe.dto.db.DatabaseNotFoundException;
|
| 35 | -import fr.ird.observe.dto.db.configuration.DataSourceCreateConfigurationDto;
|
|
| 36 | 35 | import fr.ird.observe.dto.db.configuration.DataSourceCreateWithNoReferentialImportException;
|
| 37 | 36 | import fr.ird.observe.dto.db.configuration.DataSourceInitModel;
|
| 38 | 37 | import fr.ird.observe.dto.db.configuration.IncompatibleDataSourceCreateConfigurationException;
|
| ... | ... | @@ -49,6 +48,7 @@ import org.nuiton.topia.service.sql.request.CreateDatabaseRequest; |
| 49 | 48 | |
| 50 | 49 | import java.io.File;
|
| 51 | 50 | import java.nio.file.Path;
|
| 51 | +import java.util.Set;
|
|
| 52 | 52 | |
| 53 | 53 | /**
|
| 54 | 54 | * Created on 01/03/2021.
|
| ... | ... | @@ -57,6 +57,7 @@ import java.nio.file.Path; |
| 57 | 57 | * @since 8.0.7
|
| 58 | 58 | */
|
| 59 | 59 | public class DataSourceHelper {
|
| 60 | + public static final String referentialDbLabel = I18n.n("observe.ui.datasource.storage.label.reference.import.db");
|
|
| 60 | 61 | private static final Logger log = LogManager.getLogger(DataSourceHelper.class);
|
| 61 | 62 | |
| 62 | 63 | public static void importModel(StorageUIModel source, StorageUIModel dst) {
|
| ... | ... | @@ -79,7 +80,6 @@ public class DataSourceHelper { |
| 79 | 80 | dst.getChooseDb().updateEditConfig();
|
| 80 | 81 | }
|
| 81 | 82 | |
| 82 | - |
|
| 83 | 83 | public static void exportModel(StorageUIModel source, StorageUIModel dst) {
|
| 84 | 84 | source.getChooseDb().copyTo(dst.getChooseDb());
|
| 85 | 85 | |
| ... | ... | @@ -99,51 +99,74 @@ public class DataSourceHelper { |
| 99 | 99 | dst.setDataSourceInformation(source.getDataSourceInformation());
|
| 100 | 100 | }
|
| 101 | 101 | |
| 102 | - public static DataSourceCreateConfigurationDto getCreationConfigurationDto(StorageUIModel model) throws DatabaseConnexionNotAuthorizedException, DatabaseNotFoundException, BabModelVersionException, IncompatibleDataSourceCreateConfigurationException, DataSourceCreateWithNoReferentialImportException {
|
|
| 103 | - DataSourceCreateConfigurationDto result = null;
|
|
| 102 | + public static TopiaSqlScript getCreationConfigurationDto(StorageUIModel model) throws DatabaseConnexionNotAuthorizedException, DatabaseNotFoundException, BabModelVersionException, IncompatibleDataSourceCreateConfigurationException, DataSourceCreateWithNoReferentialImportException {
|
|
| 104 | 103 | ChooseDbModel chooseDb = model.getChooseDb();
|
| 105 | 104 | DataSourceInitModel initModel = chooseDb.getInitModel();
|
| 106 | - if (initModel.isOnCreateMode()) {
|
|
| 107 | - result = new DataSourceCreateConfigurationDto();
|
|
| 108 | - TopiaSqlScript importDatabase = null;
|
|
| 109 | - ObserveDataSourceConfiguration configSrc = null;
|
|
| 110 | - switch (initModel.getCreateMode()) {
|
|
| 105 | + TopiaSqlScript importDatabase = null;
|
|
| 106 | + ObserveDataSourceConfiguration configSrc = null;
|
|
| 107 | + switch (initModel.getCreateMode()) {
|
|
| 111 | 108 | |
| 112 | - case EMPTY:
|
|
| 113 | - break;
|
|
| 114 | - case IMPORT_INTERNAL_DUMP: {
|
|
| 115 | - File dumpFile = model.getClientConfig().getInitialDbDump();
|
|
| 116 | - importDatabase = TopiaSqlScript.of(dumpFile.toURI());
|
|
| 117 | - }
|
|
| 109 | + case EMPTY:
|
|
| 118 | 110 | break;
|
| 119 | - case IMPORT_EXTERNAL_DUMP: {
|
|
| 120 | - File dumpFile = model.getDumpFile();
|
|
| 121 | - importDatabase = TopiaSqlScript.of(dumpFile.toURI());
|
|
| 122 | - }
|
|
| 111 | + case IMPORT_INTERNAL_DUMP: {
|
|
| 112 | + File dumpFile = model.getClientConfig().getInitialDbDump();
|
|
| 113 | + importDatabase = TopiaSqlScript.of(dumpFile.toURI());
|
|
| 114 | + }
|
|
| 115 | + break;
|
|
| 116 | + case IMPORT_EXTERNAL_DUMP: {
|
|
| 117 | + File dumpFile = model.getDumpFile();
|
|
| 118 | + importDatabase = TopiaSqlScript.of(dumpFile.toURI());
|
|
| 119 | + }
|
|
| 120 | + break;
|
|
| 121 | + case IMPORT_LOCAL_STORAGE:
|
|
| 122 | + configSrc = model.getLocalConfig().getConfiguration();
|
|
| 123 | + break;
|
|
| 124 | + case IMPORT_REMOTE_STORAGE:
|
|
| 125 | + configSrc = model.getRemoteConfig().getConfiguration();
|
|
| 123 | 126 | break;
|
| 124 | - case IMPORT_LOCAL_STORAGE:
|
|
| 125 | - configSrc = model.getLocalConfig().getConfiguration();
|
|
| 126 | - break;
|
|
| 127 | - case IMPORT_REMOTE_STORAGE:
|
|
| 128 | - configSrc = model.getRemoteConfig().getConfiguration();
|
|
| 129 | - break;
|
|
| 130 | - case IMPORT_SERVER_STORAGE:
|
|
| 131 | - configSrc = model.getServerConfig().getConfiguration();
|
|
| 132 | - break;
|
|
| 127 | + case IMPORT_SERVER_STORAGE:
|
|
| 128 | + configSrc = model.getServerConfig().getConfiguration();
|
|
| 129 | + break;
|
|
| 130 | + }
|
|
| 131 | + if (configSrc != null) {
|
|
| 132 | + try (ObserveSwingDataSource source = model.getDataSourcesManager().newDataSource(configSrc)) {
|
|
| 133 | + source.open();
|
|
| 134 | + DataSourceService dumpService = source.getDataSourceService();
|
|
| 135 | + CreateDatabaseRequest request = CreateDatabaseRequest.builder(false, source.getVersion()).addSchema().addStandaloneTables().build();
|
|
| 136 | + importDatabase = dumpService.produceCreateSqlScript(request);
|
|
| 133 | 137 | }
|
| 134 | - if (configSrc != null) {
|
|
| 135 | - try (ObserveSwingDataSource source = model.getDataSourcesManager().newDataSource(configSrc)) {
|
|
| 136 | - source.open();
|
|
| 137 | - DataSourceService dumpService = source.getDataSourceService();
|
|
| 138 | - CreateDatabaseRequest request = CreateDatabaseRequest.builder(false, source.getVersion()).addSchema().addStandaloneTables().build();
|
|
| 139 | - importDatabase = dumpService.produceCreateSqlScript(request);
|
|
| 140 | - }
|
|
| 138 | + }
|
|
| 139 | + return importDatabase;
|
|
| 140 | + }
|
|
| 141 | + |
|
| 142 | + public static TopiaSqlScript extract(ObserveDataSourcesManager dataSourcesManager, File dumpFile, boolean loadSchema, Set<String> importDataIds) {
|
|
| 143 | + try (ObserveSwingDataSource importDataSource = dataSourcesManager.newTemporaryH2DataSource(referentialDbLabel)) {
|
|
| 144 | + try {
|
|
| 145 | + importDataSource.createFromDump(TopiaSqlScript.of(dumpFile.toURI()));
|
|
| 146 | + return importDataSource.extract(loadSchema, importDataIds);
|
|
| 147 | + } catch (IncompatibleDataSourceCreateConfigurationException
|
|
| 148 | + | DataSourceCreateWithNoReferentialImportException
|
|
| 149 | + | DatabaseNotFoundException
|
|
| 150 | + | DatabaseConnexionNotAuthorizedException
|
|
| 151 | + | BabModelVersionException e) {
|
|
| 152 | + throw new ObserveSwingTechnicalException("Could not create import data source", e);
|
|
| 141 | 153 | }
|
| 142 | - if (importDatabase != null) {
|
|
| 143 | - result.setImportDatabase(importDatabase);
|
|
| 154 | + }
|
|
| 155 | + }
|
|
| 156 | + |
|
| 157 | + public static TopiaSqlScript extract(ObserveDataSourcesManager dataSourcesManager, ObserveDataSourceConfiguration sourceConfiguration, boolean loadSchema, Set<String> importDataIds) {
|
|
| 158 | + try (ObserveSwingDataSource importDataSource = dataSourcesManager.newDataSource(sourceConfiguration)) {
|
|
| 159 | + try {
|
|
| 160 | + importDataSource.open();
|
|
| 161 | + return importDataSource.extract(loadSchema,importDataIds);
|
|
| 162 | + } catch (IncompatibleDataSourceCreateConfigurationException
|
|
| 163 | + | DataSourceCreateWithNoReferentialImportException
|
|
| 164 | + | DatabaseNotFoundException
|
|
| 165 | + | DatabaseConnexionNotAuthorizedException
|
|
| 166 | + | BabModelVersionException e) {
|
|
| 167 | + throw new ObserveSwingTechnicalException("Could not create import data source", e);
|
|
| 144 | 168 | }
|
| 145 | 169 | }
|
| 146 | - return result;
|
|
| 147 | 170 | }
|
| 148 | 171 | |
| 149 | 172 | public static ObserveSwingDataSource initDataSourceFromModel(StorageUIModel model) {
|
| ... | ... | @@ -214,103 +237,6 @@ public class DataSourceHelper { |
| 214 | 237 | return dataSource;
|
| 215 | 238 | }
|
| 216 | 239 | |
| 217 | - public static DataSourceCreateConfigurationDto toImportReferentielSourceConfig(StorageUIModel model) {
|
|
| 218 | - DataSourceCreateConfigurationDto importReferenceConfig = new DataSourceCreateConfigurationDto();
|
|
| 219 | - // can create empty data base
|
|
| 220 | - importReferenceConfig.setCanCreateEmptyDatabase(true);
|
|
| 221 | - if (model.getChooseDb().doImportReferential()) {
|
|
| 222 | - String dbLabel = I18n.n("observe.ui.datasource.storage.label.reference.import.db");
|
|
| 223 | - switch (model.getChooseDb().getReferentielImportMode()) {
|
|
| 224 | - case IMPORT_EXTERNAL_DUMP:
|
|
| 225 | - if (ObstunaAdminAction.CREATE.equals(model.getAdminAction())) {
|
|
| 226 | - // import referential to temporary data source
|
|
| 227 | - DataSourceCreateConfigurationDto createConfigurationDto = new DataSourceCreateConfigurationDto();
|
|
| 228 | - File dumpFile = model.getCentralSourceModel().getDumpFile();
|
|
| 229 | - createConfigurationDto.setImportDatabase(TopiaSqlScript.of(dumpFile.toURI()));
|
|
| 230 | - try (ObserveSwingDataSource importDataSource = model.getDataSourcesManager().newTemporaryH2DataSource(dbLabel)) {
|
|
| 231 | - try {
|
|
| 232 | - importDataSource.create(createConfigurationDto);
|
|
| 233 | - } catch (IncompatibleDataSourceCreateConfigurationException
|
|
| 234 | - | DataSourceCreateWithNoReferentialImportException
|
|
| 235 | - | DatabaseNotFoundException
|
|
| 236 | - | DatabaseConnexionNotAuthorizedException
|
|
| 237 | - | BabModelVersionException e) {
|
|
| 238 | - throw new ObserveSwingTechnicalException("Could not create import data source", e);
|
|
| 239 | - }
|
|
| 240 | - importReferenceConfig.setImportReferentialDataSourceConfiguration(importDataSource.getConfiguration());
|
|
| 241 | - }
|
|
| 242 | - } else {
|
|
| 243 | - File dumpFile = model.getDumpFile();
|
|
| 244 | - importReferenceConfig.setImportDatabase(TopiaSqlScript.of(dumpFile.toURI()));
|
|
| 245 | - }
|
|
| 246 | - break;
|
|
| 247 | - case IMPORT_REMOTE_STORAGE:
|
|
| 248 | - // import referentiel from a remote db
|
|
| 249 | - ObserveDataSourceConfigurationTopiaPG pgConfig = toPGStorageConfig(model.getCentralSourceModel(), dbLabel);
|
|
| 250 | - pgConfig.setCanMigrate(false);
|
|
| 251 | - importReferenceConfig.setImportReferentialDataSourceConfiguration(pgConfig);
|
|
| 252 | - break;
|
|
| 253 | - case IMPORT_SERVER_STORAGE:
|
|
| 254 | - // import referentiel from a server db
|
|
| 255 | - ObserveDataSourceConfigurationRest restConfig = toRestStorageConfig(model.getCentralSourceModel(), dbLabel);
|
|
| 256 | - importReferenceConfig.setImportReferentialDataSourceConfiguration(restConfig);
|
|
| 257 | - break;
|
|
| 258 | - default:
|
|
| 259 | - throw new IllegalStateException("Can't come here");
|
|
| 260 | - }
|
|
| 261 | - }
|
|
| 262 | - return importReferenceConfig;
|
|
| 263 | - }
|
|
| 264 | - |
|
| 265 | - public static ObserveSwingDataSource toImportDataSourceConfig(StorageUIModel model) {
|
|
| 266 | - |
|
| 267 | - ObserveSwingDataSource importDataSource;
|
|
| 268 | - |
|
| 269 | - if (model.getChooseDb().doImportData()) {
|
|
| 270 | - |
|
| 271 | - String dbLabel = I18n.n("observe.ui.datasource.storage.label.data.import.db");
|
|
| 272 | - |
|
| 273 | - ObserveDataSourcesManager dataSourcesManager = model.getDataSourcesManager();
|
|
| 274 | - switch (model.getChooseDb().getDataImportMode()) {
|
|
| 275 | - case IMPORT_EXTERNAL_DUMP:
|
|
| 276 | - DataSourceCreateConfigurationDto createConfigurationDto = new DataSourceCreateConfigurationDto();
|
|
| 277 | - File dumpFile = ObstunaAdminAction.CREATE.equals(model.getAdminAction()) ? model.getDataSourceModel().getDumpFile() : model.getDumpFile();
|
|
| 278 | - createConfigurationDto.setImportDatabase(TopiaSqlScript.of(dumpFile.toURI()));
|
|
| 279 | - try (ObserveSwingDataSource importDataSource2 = dataSourcesManager.newTemporaryH2DataSource(dbLabel)) {
|
|
| 280 | - importDataSource = importDataSource2;
|
|
| 281 | - try {
|
|
| 282 | - importDataSource2.create(createConfigurationDto);
|
|
| 283 | - } catch (IncompatibleDataSourceCreateConfigurationException
|
|
| 284 | - | DataSourceCreateWithNoReferentialImportException
|
|
| 285 | - | DatabaseNotFoundException
|
|
| 286 | - | DatabaseConnexionNotAuthorizedException
|
|
| 287 | - | BabModelVersionException e) {
|
|
| 288 | - throw new ObserveSwingTechnicalException("Could not create import data source", e);
|
|
| 289 | - }
|
|
| 290 | - }
|
|
| 291 | - break;
|
|
| 292 | - case IMPORT_REMOTE_STORAGE: {
|
|
| 293 | - // import referentiel from a remote db
|
|
| 294 | - ObserveDataSourceConfigurationTopiaPG dataSourceConfig = toPGStorageConfig(model.getDataSourceModel(), dbLabel);
|
|
| 295 | - dataSourceConfig.setCanMigrate(false);
|
|
| 296 | - importDataSource = dataSourcesManager.newDataSource(dataSourceConfig);
|
|
| 297 | - }
|
|
| 298 | - break;
|
|
| 299 | - case IMPORT_SERVER_STORAGE: {
|
|
| 300 | - // import referentiel from a server db
|
|
| 301 | - ObserveDataSourceConfigurationRest dataSourceConfig = toRestStorageConfig(model.getDataSourceModel(), dbLabel);
|
|
| 302 | - importDataSource = dataSourcesManager.newDataSource(dataSourceConfig);
|
|
| 303 | - }
|
|
| 304 | - break;
|
|
| 305 | - default:
|
|
| 306 | - throw new IllegalStateException("Can't come here");
|
|
| 307 | - }
|
|
| 308 | - } else {
|
|
| 309 | - importDataSource = null;
|
|
| 310 | - }
|
|
| 311 | - return importDataSource;
|
|
| 312 | - }
|
|
| 313 | - |
|
| 314 | 240 | static ObserveDataSourceConfigurationTopiaH2 toH2StorageConfig(StorageUIModel model, String label) {
|
| 315 | 241 | ObserveDataSourceConfigurationTopiaH2 h2Config = model.getLocalConfig().getConfiguration();
|
| 316 | 242 | return ObserveDataSourceConfigurationTopiaH2.create(
|
| ... | ... | @@ -326,7 +252,7 @@ public class DataSourceHelper { |
| 326 | 252 | );
|
| 327 | 253 | }
|
| 328 | 254 | |
| 329 | - static ObserveDataSourceConfigurationTopiaPG toPGStorageConfig(StorageUIModel model, String label) {
|
|
| 255 | + public static ObserveDataSourceConfigurationTopiaPG toPGStorageConfig(StorageUIModel model, String label) {
|
|
| 330 | 256 | ObserveDataSourceConfigurationTopiaPG pgConfig = model.getRemoteConfig().getConfiguration();
|
| 331 | 257 | return ObserveDataSourceConfigurationTopiaPG.create(
|
| 332 | 258 | label,
|
| ... | ... | @@ -341,7 +267,7 @@ public class DataSourceHelper { |
| 341 | 267 | );
|
| 342 | 268 | }
|
| 343 | 269 | |
| 344 | - static ObserveDataSourceConfigurationRest toRestStorageConfig(StorageUIModel model, String label) {
|
|
| 270 | + public static ObserveDataSourceConfigurationRest toRestStorageConfig(StorageUIModel model, String label) {
|
|
| 345 | 271 | ObserveDataSourceConfigurationRest restConfig = model.getServerConfig().getConfiguration();
|
| 346 | 272 | return ObserveDataSourceConfigurationRest.create(
|
| 347 | 273 | label,
|
| ... | ... | @@ -42,6 +42,7 @@ import fr.ird.observe.navigation.tree.selection.SelectionTreeModel; |
| 42 | 42 | import org.apache.logging.log4j.LogManager;
|
| 43 | 43 | import org.apache.logging.log4j.Logger;
|
| 44 | 44 | import org.nuiton.jaxx.runtime.JAXXContext;
|
| 45 | +import org.nuiton.topia.persistence.script.TopiaSqlScript;
|
|
| 45 | 46 | |
| 46 | 47 | import java.awt.Window;
|
| 47 | 48 | import java.io.File;
|
| ... | ... | @@ -137,7 +138,8 @@ public class StorageBackupUILauncher extends StorageUILauncher { |
| 137 | 138 | try (ObserveSwingDataSource targetSource = dataSourcesManager.newTemporaryH2DataSource("Backup-" + backupFile.getName())) {
|
| 138 | 139 | |
| 139 | 140 | // create temporary source
|
| 140 | - targetSource.createFrom(incomingSource);
|
|
| 141 | + TopiaSqlScript referentialDump = incomingSource.extract(true, null);
|
|
| 142 | + targetSource.createFromDump(referentialDump);
|
|
| 141 | 143 | progressModel.increments();
|
| 142 | 144 | |
| 143 | 145 | // insert selected data
|
| ... | ... | @@ -671,7 +671,9 @@ public class StorageUIModel extends WizardModel<StorageStep> implements WithClie |
| 671 | 671 | }
|
| 672 | 672 | break;
|
| 673 | 673 | case CONFIG_REFERENTIAL:
|
| 674 | - |
|
| 674 | + if (chooseDb.getReferentielImportMode() == null) {
|
|
| 675 | + return false;
|
|
| 676 | + }
|
|
| 675 | 677 | switch (chooseDb.getReferentielImportMode()) {
|
| 676 | 678 | |
| 677 | 679 | case EMPTY:
|
| ... | ... | @@ -703,7 +705,9 @@ public class StorageUIModel extends WizardModel<StorageStep> implements WithClie |
| 703 | 705 | break;
|
| 704 | 706 | |
| 705 | 707 | case CONFIG_DATA:
|
| 706 | - |
|
| 708 | + if (chooseDb.getDataImportMode() == null) {
|
|
| 709 | + return false;
|
|
| 710 | + }
|
|
| 707 | 711 | switch (chooseDb.getDataImportMode()) {
|
| 708 | 712 | |
| 709 | 713 | case EMPTY:
|
| ... | ... | @@ -22,29 +22,37 @@ package fr.ird.observe.client.datasource.editor.api.wizard.launchers; |
| 22 | 22 | * #L%
|
| 23 | 23 | */
|
| 24 | 24 | |
| 25 | +import fr.ird.observe.client.datasource.api.ObserveDataSourcesManager;
|
|
| 25 | 26 | import fr.ird.observe.client.datasource.api.ObserveSwingDataSource;
|
| 26 | 27 | import fr.ird.observe.client.datasource.editor.api.wizard.DataSourceHelper;
|
| 27 | 28 | import fr.ird.observe.client.datasource.editor.api.wizard.ObstunaAdminAction;
|
| 28 | 29 | import fr.ird.observe.client.datasource.editor.api.wizard.StorageUI;
|
| 29 | 30 | import fr.ird.observe.client.datasource.editor.api.wizard.StorageUIModel;
|
| 31 | +import fr.ird.observe.client.util.ObserveSwingTechnicalException;
|
|
| 30 | 32 | import fr.ird.observe.dto.db.BabModelVersionException;
|
| 31 | 33 | import fr.ird.observe.dto.db.DatabaseConnexionNotAuthorizedException;
|
| 32 | 34 | import fr.ird.observe.dto.db.DatabaseNotFoundException;
|
| 33 | 35 | import fr.ird.observe.dto.db.configuration.DataSourceConnectMode;
|
| 34 | -import fr.ird.observe.dto.db.configuration.DataSourceCreateConfigurationDto;
|
|
| 36 | +import fr.ird.observe.dto.db.configuration.DataSourceCreateMode;
|
|
| 35 | 37 | import fr.ird.observe.dto.db.configuration.DataSourceCreateWithNoReferentialImportException;
|
| 36 | 38 | import fr.ird.observe.dto.db.configuration.IncompatibleDataSourceCreateConfigurationException;
|
| 37 | 39 | import fr.ird.observe.dto.db.configuration.ObserveDataSourceConfiguration;
|
| 38 | 40 | import fr.ird.observe.dto.db.configuration.ObserveDataSourceInformation;
|
| 39 | -import fr.ird.observe.navigation.tree.selection.SelectionTreeModel;
|
|
| 41 | +import fr.ird.observe.dto.db.configuration.rest.ObserveDataSourceConfigurationRest;
|
|
| 42 | +import fr.ird.observe.dto.db.configuration.topia.ObserveDataSourceConfigurationTopiaPG;
|
|
| 43 | +import io.ultreia.java4all.i18n.I18n;
|
|
| 40 | 44 | import org.apache.logging.log4j.LogManager;
|
| 41 | 45 | import org.apache.logging.log4j.Logger;
|
| 42 | 46 | import org.nuiton.jaxx.runtime.JAXXContext;
|
| 47 | +import org.nuiton.topia.persistence.script.TopiaSqlScript;
|
|
| 43 | 48 | |
| 44 | 49 | import java.awt.Window;
|
| 50 | +import java.io.File;
|
|
| 45 | 51 | import java.util.Objects;
|
| 46 | 52 | import java.util.Set;
|
| 47 | 53 | |
| 54 | +import static fr.ird.observe.client.datasource.editor.api.wizard.DataSourceHelper.toPGStorageConfig;
|
|
| 55 | + |
|
| 48 | 56 | /**
|
| 49 | 57 | * Created on 14/09/2021.
|
| 50 | 58 | *
|
| ... | ... | @@ -53,7 +61,53 @@ import java.util.Set; |
| 53 | 61 | */
|
| 54 | 62 | public class CreateLauncher extends RemoteUILauncher {
|
| 55 | 63 | private static final Logger log = LogManager.getLogger(CreateLauncher.class);
|
| 56 | - DataSourceCreateConfigurationDto createConfigurationDto;
|
|
| 64 | + private TopiaSqlScript referential;
|
|
| 65 | + private TopiaSqlScript data;
|
|
| 66 | + |
|
| 67 | + public static ObserveSwingDataSource toImportDataSourceConfig(StorageUIModel model) {
|
|
| 68 | + |
|
| 69 | + if (!model.getChooseDb().doImportData()) {
|
|
| 70 | + throw new IllegalStateException(String.format("Must be in select data mode to come here: %s", model));
|
|
| 71 | + }
|
|
| 72 | + |
|
| 73 | + String dbLabel = I18n.n("observe.ui.datasource.storage.label.data.import.db");
|
|
| 74 | + ObserveSwingDataSource importDataSource;
|
|
| 75 | + |
|
| 76 | + ObserveDataSourcesManager dataSourcesManager = model.getDataSourcesManager();
|
|
| 77 | + switch (model.getChooseDb().getDataImportMode()) {
|
|
| 78 | + case IMPORT_EXTERNAL_DUMP:
|
|
| 79 | + File dumpFile = model.getDataSourceModel().getDumpFile();
|
|
| 80 | + try (ObserveSwingDataSource importDataSource2 = dataSourcesManager.newTemporaryH2DataSource(dbLabel)) {
|
|
| 81 | + importDataSource = importDataSource2;
|
|
| 82 | + try {
|
|
| 83 | + importDataSource2.createFromDump(TopiaSqlScript.of(dumpFile.toURI()));
|
|
| 84 | + } catch (IncompatibleDataSourceCreateConfigurationException
|
|
| 85 | + | DataSourceCreateWithNoReferentialImportException
|
|
| 86 | + | DatabaseNotFoundException
|
|
| 87 | + | DatabaseConnexionNotAuthorizedException
|
|
| 88 | + | BabModelVersionException e) {
|
|
| 89 | + throw new ObserveSwingTechnicalException("Could not create import data source", e);
|
|
| 90 | + }
|
|
| 91 | + }
|
|
| 92 | + break;
|
|
| 93 | + case IMPORT_REMOTE_STORAGE: {
|
|
| 94 | + // import referentiel from a remote db
|
|
| 95 | + ObserveDataSourceConfigurationTopiaPG dataSourceConfig = DataSourceHelper.toPGStorageConfig(model.getDataSourceModel(), dbLabel);
|
|
| 96 | + dataSourceConfig.setCanMigrate(false);
|
|
| 97 | + importDataSource = dataSourcesManager.newDataSource(dataSourceConfig);
|
|
| 98 | + }
|
|
| 99 | + break;
|
|
| 100 | + case IMPORT_SERVER_STORAGE: {
|
|
| 101 | + // import referentiel from a server db
|
|
| 102 | + ObserveDataSourceConfigurationRest dataSourceConfig = DataSourceHelper.toRestStorageConfig(model.getDataSourceModel(), dbLabel);
|
|
| 103 | + importDataSource = dataSourcesManager.newDataSource(dataSourceConfig);
|
|
| 104 | + }
|
|
| 105 | + break;
|
|
| 106 | + default:
|
|
| 107 | + throw new IllegalStateException("Can't come here");
|
|
| 108 | + }
|
|
| 109 | + return importDataSource;
|
|
| 110 | + }
|
|
| 57 | 111 | |
| 58 | 112 | public CreateLauncher(JAXXContext context, Window frame, DataSourceConnectMode connectMode) {
|
| 59 | 113 | super(ObstunaAdminAction.CREATE, context, frame, connectMode);
|
| ... | ... | @@ -67,27 +121,112 @@ public class CreateLauncher extends RemoteUILauncher { |
| 67 | 121 | //FIXME This logic should be done in StorageModel not here, like this!
|
| 68 | 122 | model.getChooseDb().setCanMigrate(true);
|
| 69 | 123 | model.getRemoteConfig().setCanCreateDatabase(true);
|
| 124 | + model.getServerConfig().setCanCreateDatabase(true);
|
|
| 70 | 125 | super.init(ui);
|
| 71 | 126 | }
|
| 72 | 127 | |
| 73 | 128 | @Override
|
| 74 | - protected ObserveSwingDataSource initTask(StorageUIModel model) throws Exception {
|
|
| 129 | + protected ObserveSwingDataSource initTask(StorageUIModel model) {
|
|
| 75 | 130 | ObserveSwingDataSource dataSource = getDataSource(model);
|
| 76 | - createConfigurationDto = DataSourceHelper.toImportReferentielSourceConfig(model);
|
|
| 77 | - ObserveDataSourceConfiguration importReferentialConfig = createConfigurationDto.getImportReferentialDataSourceConfiguration();
|
|
| 78 | - if (importReferentialConfig != null) {
|
|
| 79 | - log.info(String.format("Use referentiel import data source %s", importReferentialConfig.getLabel()));
|
|
| 80 | - checkImportDbVersion(model, importReferentialConfig);
|
|
| 131 | + // can create empty data base
|
|
| 132 | + boolean importReferential = model.getChooseDb().doImportReferential();
|
|
| 133 | + boolean importData = model.getChooseDb().doImportData();
|
|
| 134 | + if (!importReferential && !importData) {
|
|
| 135 | + // no import at all
|
|
| 136 | + log.info("Create empty database.");
|
|
| 137 | + return dataSource;
|
|
| 81 | 138 | }
|
| 82 | - // data import
|
|
| 83 | - ObserveSwingDataSource importDataConfig = DataSourceHelper.toImportDataSourceConfig(model);
|
|
| 84 | - if (importDataConfig != null) {
|
|
| 85 | - log.info(String.format("Use data import data source %s", importDataConfig.getLabel()));
|
|
| 86 | - checkImportDbVersion(model, importDataConfig.getConfiguration());
|
|
| 87 | - SelectionTreeModel dataModel = model.getSelectDataModel();
|
|
| 88 | - Set<String> importDataIds = dataModel.getSelectedDataIds();
|
|
| 89 | - createConfigurationDto.setImportDataConfiguration(importDataConfig.getConfiguration(), importDataIds);
|
|
| 139 | + |
|
| 140 | + DataSourceCreateMode referentialImportMode = model.getChooseDb().getReferentielImportMode();
|
|
| 141 | + DataSourceCreateMode dataImportMode = model.getChooseDb().getDataImportMode();
|
|
| 142 | + |
|
| 143 | + File referentialDump = null;
|
|
| 144 | + ObserveDataSourceConfiguration referentialConfig = null;
|
|
| 145 | + File dataDump = null;
|
|
| 146 | + ObserveDataSourceConfiguration dataConfig = null;
|
|
| 147 | + Set<String> selectedDataIds = null;
|
|
| 148 | + if (importReferential && referentialImportMode != null) {
|
|
| 149 | + switch (referentialImportMode) {
|
|
| 150 | + case IMPORT_EXTERNAL_DUMP:
|
|
| 151 | + referentialDump = model.getCentralSourceModel().getDumpFile();
|
|
| 152 | + |
|
| 153 | + break;
|
|
| 154 | + case IMPORT_REMOTE_STORAGE:
|
|
| 155 | + ObserveDataSourceConfigurationTopiaPG pgConfig = toPGStorageConfig(model.getCentralSourceModel(), DataSourceHelper.referentialDbLabel);
|
|
| 156 | + pgConfig.setCanMigrate(false);
|
|
| 157 | + referentialConfig = pgConfig;
|
|
| 158 | + break;
|
|
| 159 | + case IMPORT_SERVER_STORAGE:
|
|
| 160 | + referentialConfig = DataSourceHelper.toRestStorageConfig(model.getCentralSourceModel(), DataSourceHelper.referentialDbLabel);
|
|
| 161 | + break;
|
|
| 162 | + default:
|
|
| 163 | + throw new IllegalStateException("Can't come here");
|
|
| 164 | + }
|
|
| 90 | 165 | }
|
| 166 | + if (importData && dataImportMode != null) {
|
|
| 167 | + String dbLabel = I18n.n("observe.ui.datasource.storage.label.data.import.db");
|
|
| 168 | + selectedDataIds = model.getSelectDataModel().getSelectedDataIds();
|
|
| 169 | + switch (dataImportMode) {
|
|
| 170 | + case IMPORT_EXTERNAL_DUMP:
|
|
| 171 | + dataDump = model.getDataSourceModel().getDumpFile();
|
|
| 172 | + break;
|
|
| 173 | + case IMPORT_REMOTE_STORAGE: {
|
|
| 174 | + ObserveDataSourceConfigurationTopiaPG dataSourceConfig = toPGStorageConfig(model.getDataSourceModel(), dbLabel);
|
|
| 175 | + dataSourceConfig.setCanMigrate(false);
|
|
| 176 | + dataConfig = dataSourceConfig;
|
|
| 177 | + }
|
|
| 178 | + break;
|
|
| 179 | + case IMPORT_SERVER_STORAGE: {
|
|
| 180 | + dataConfig = DataSourceHelper.toRestStorageConfig(model.getDataSourceModel(), dbLabel);
|
|
| 181 | + break;
|
|
| 182 | + }
|
|
| 183 | + default:
|
|
| 184 | + throw new IllegalStateException("Can't come here");
|
|
| 185 | + }
|
|
| 186 | + }
|
|
| 187 | + |
|
| 188 | + if (referentialDump != null) {
|
|
| 189 | + if (dataDump != null) {
|
|
| 190 | + if (referentialDump.equals(dataDump)) {
|
|
| 191 | + |
|
| 192 | + log.info(String.format("Extract referential + data from dump %s", referentialDump));
|
|
| 193 | + referential = DataSourceHelper.extract(model.getDataSourcesManager(), referentialDump, true, selectedDataIds);
|
|
| 194 | + } else {
|
|
| 195 | + log.info(String.format("Extract referential from dump %s", referentialDump));
|
|
| 196 | + referential = DataSourceHelper.extract(model.getDataSourcesManager(), referentialDump, true, null);
|
|
| 197 | + log.info(String.format("Extract data from dump %s %s", dataDump, selectedDataIds));
|
|
| 198 | + data = DataSourceHelper.extract(model.getDataSourcesManager(), dataDump, false, selectedDataIds);
|
|
| 199 | + }
|
|
| 200 | + } else {
|
|
| 201 | + log.info(String.format("Extract referential from dump %s", referentialDump));
|
|
| 202 | + referential = DataSourceHelper.extract(model.getDataSourcesManager(), referentialDump, true, null);
|
|
| 203 | + if (dataConfig != null) {
|
|
| 204 | + log.info(String.format("Extract data from config %s %s", dataConfig.getLabel(), selectedDataIds));
|
|
| 205 | + data = DataSourceHelper.extract(model.getDataSourcesManager(), dataConfig, false, selectedDataIds);
|
|
| 206 | + }
|
|
| 207 | + }
|
|
| 208 | + } else {
|
|
| 209 | + Objects.requireNonNull(referentialConfig);
|
|
| 210 | + if (dataConfig != null) {
|
|
| 211 | + if (referentialConfig.equals(dataConfig)) {
|
|
| 212 | + log.info(String.format("Extract referential + data from config %s %s", referentialConfig.getLabel(), selectedDataIds));
|
|
| 213 | + referential = DataSourceHelper.extract(model.getDataSourcesManager(), referentialConfig, true, selectedDataIds);
|
|
| 214 | + } else {
|
|
| 215 | + log.info(String.format("Extract referential from config %s", referentialConfig.getLabel()));
|
|
| 216 | + referential = DataSourceHelper.extract(model.getDataSourcesManager(), referentialConfig, true, null);
|
|
| 217 | + log.info(String.format("Extract data from config %s %s", dataConfig.getLabel(), selectedDataIds));
|
|
| 218 | + data = DataSourceHelper.extract(model.getDataSourcesManager(), dataConfig, false, selectedDataIds);
|
|
| 219 | + }
|
|
| 220 | + } else {
|
|
| 221 | + log.info(String.format("Extract referential from config %s", referentialConfig.getLabel()));
|
|
| 222 | + referential = DataSourceHelper.extract(model.getDataSourcesManager(), referentialConfig, true, null);
|
|
| 223 | + if (dataDump != null) {
|
|
| 224 | + log.info(String.format("Extract data from dump %s %s", dataDump, selectedDataIds));
|
|
| 225 | + data = DataSourceHelper.extract(model.getDataSourcesManager(), dataDump, false, selectedDataIds);
|
|
| 226 | + }
|
|
| 227 | + }
|
|
| 228 | + }
|
|
| 229 | + Objects.requireNonNull(referential);
|
|
| 91 | 230 | return dataSource;
|
| 92 | 231 | }
|
| 93 | 232 | |
| ... | ... | @@ -95,21 +234,15 @@ public class CreateLauncher extends RemoteUILauncher { |
| 95 | 234 | protected void execute(ObserveSwingDataSource dataSource, ObserveDataSourceInformation dataSourceInformation) throws Exception {
|
| 96 | 235 | log.info("Create db...");
|
| 97 | 236 | try {
|
| 98 | - dataSource.create(createConfigurationDto);
|
|
| 237 | + if (referential != null) {
|
|
| 238 | + dataSource.createFromImport(referential, data);
|
|
| 239 | + } else {
|
|
| 240 | + dataSource.createEmpty();
|
|
| 241 | + }
|
|
| 99 | 242 | log.info(String.format("Open [%s] and create it.", dataSource.getLabel()));
|
| 100 | 243 | } finally {
|
| 101 | - if (dataSource.isOpen()) {
|
|
| 102 | - dataSource.close();
|
|
| 103 | - }
|
|
| 104 | - }
|
|
| 105 | - }
|
|
| 106 | - |
|
| 107 | - void checkImportDbVersion(StorageUIModel model, ObserveDataSourceConfiguration dataSourceConfig) throws DatabaseConnexionNotAuthorizedException, DatabaseNotFoundException, BabModelVersionException, IncompatibleDataSourceCreateConfigurationException, DataSourceCreateWithNoReferentialImportException {
|
|
| 108 | - try (ObserveSwingDataSource importDataSource = Objects.requireNonNull(model.getDataSourcesManager().newDataSource(dataSourceConfig))) {
|
|
| 109 | - importDataSource.open();
|
|
| 110 | - model.checkImportDbVersion(importDataSource);
|
|
| 244 | + ObserveSwingDataSource.doCloseSource(dataSource);
|
|
| 111 | 245 | }
|
| 112 | 246 | }
|
| 113 | - |
|
| 114 | 247 | }
|
| 115 | 248 |
| ... | ... | @@ -35,8 +35,8 @@ |
| 35 | 35 | <StorageStep id='step' initializer='StorageStep.CONFIG_DATA'/>
|
| 36 | 36 | |
| 37 | 37 | <StorageUIModel id='model'/>
|
| 38 | - <StorageUIModel id='centralSourceModel' initializer='model.getDataSourceModel()'/>
|
|
| 39 | 38 | <ChooseDbModel id='chooseDbModel' initializer='model.getChooseDb()'/>
|
| 39 | + <StorageUIModel id='centralSourceModel' initializer='model.getDataSourceModel()'/>
|
|
| 40 | 40 | |
| 41 | 41 | <ButtonGroup id='dataSourceCreateMode' onStateChanged='chooseDbModel.setDataImportMode((DataSourceCreateMode) dataSourceCreateMode.getSelectedValue())'/>
|
| 42 | 42 |
| ... | ... | @@ -29,9 +29,9 @@ import fr.ird.observe.client.datasource.editor.api.config.TreeConfigUIHandler; |
| 29 | 29 | import fr.ird.observe.client.datasource.editor.api.selection.SelectionTreePane;
|
| 30 | 30 | import fr.ird.observe.client.datasource.editor.api.selection.SelectionTreePaneHandler;
|
| 31 | 31 | import fr.ird.observe.client.datasource.editor.api.selection.actions.SelectUnselect;
|
| 32 | -import fr.ird.observe.client.datasource.editor.api.wizard.DataSourceHelper;
|
|
| 33 | 32 | import fr.ird.observe.client.datasource.editor.api.wizard.ObstunaAdminAction;
|
| 34 | 33 | import fr.ird.observe.client.datasource.editor.api.wizard.StorageUIModel;
|
| 34 | +import fr.ird.observe.client.datasource.editor.api.wizard.launchers.CreateLauncher;
|
|
| 35 | 35 | import fr.ird.observe.client.util.ObserveKeyStrokesSupport;
|
| 36 | 36 | import fr.ird.observe.client.util.ObserveSwingTechnicalException;
|
| 37 | 37 | import fr.ird.observe.navigation.id.Project;
|
| ... | ... | @@ -75,7 +75,7 @@ public class SelectDataUIHandler extends StorageTabUIHandler<SelectDataUI> imple |
| 75 | 75 | }
|
| 76 | 76 | if (createDataSource) {
|
| 77 | 77 | // create temporary data source
|
| 78 | - try (ObserveSwingDataSource dataSource = DataSourceHelper.toImportDataSourceConfig(model)) {
|
|
| 78 | + try (ObserveSwingDataSource dataSource = CreateLauncher.toImportDataSourceConfig(model)) {
|
|
| 79 | 79 | SelectionTreePaneHandler.initDataSource(treePane, dataSource);
|
| 80 | 80 | dataSource.open();
|
| 81 | 81 | if (init) {
|
| ... | ... | @@ -28,7 +28,6 @@ import fr.ird.observe.client.datasource.api.ObserveSwingDataSource; |
| 28 | 28 | import fr.ird.observe.dto.db.BabModelVersionException;
|
| 29 | 29 | import fr.ird.observe.dto.db.DatabaseConnexionNotAuthorizedException;
|
| 30 | 30 | import fr.ird.observe.dto.db.DatabaseNotFoundException;
|
| 31 | -import fr.ird.observe.dto.db.configuration.DataSourceCreateConfigurationDto;
|
|
| 32 | 31 | import fr.ird.observe.dto.db.configuration.DataSourceCreateWithNoReferentialImportException;
|
| 33 | 32 | import fr.ird.observe.dto.db.configuration.IncompatibleDataSourceCreateConfigurationException;
|
| 34 | 33 | import fr.ird.observe.dto.db.configuration.topia.ObserveDataSourceConfigurationTopiaH2;
|
| ... | ... | @@ -90,11 +89,9 @@ public class ClientTestClassResource extends TestClassResourceSupport { |
| 90 | 89 | boolean sharedDatabaseExist = sharedDatabaseFile.exists();
|
| 91 | 90 | if (!sharedDatabaseExist) {
|
| 92 | 91 | log.info(String.format("Create shared database: %s/%s to %s", dbVersion.toString(), dbName, sharedDatabaseFile));
|
| 93 | - DataSourceCreateConfigurationDto createConfiguration = new DataSourceCreateConfigurationDto();
|
|
| 94 | 92 | TopiaSqlScript script = dataSourcesForTestManager.getCache(dbVersion, dbName);
|
| 95 | - createConfiguration.setImportDatabase(script);
|
|
| 96 | 93 | observeSwingDataSource = ClientUIContextApplicationComponent.value().getDataSourcesManager().newDataSource(sharedDatabaseConfiguration);
|
| 97 | - observeSwingDataSource.create(createConfiguration);
|
|
| 94 | + observeSwingDataSource.createFromDump(script);
|
|
| 98 | 95 | }
|
| 99 | 96 | if (targetPath == null) {
|
| 100 | 97 | dataSourceConfiguration = sharedDatabaseConfiguration;
|
| 1 | +package fr.ird.observe.entities;
|
|
| 2 | + |
|
| 3 | +/*-
|
|
| 4 | + * #%L
|
|
| 5 | + * ObServe Core :: Persistence :: Java
|
|
| 6 | + * %%
|
|
| 7 | + * Copyright (C) 2008 - 2022 IRD, Code Lutin, Ultreia.io
|
|
| 8 | + * %%
|
|
| 9 | + * This program is free software: you can redistribute it and/or modify
|
|
| 10 | + * it under the terms of the GNU General Public License as
|
|
| 11 | + * published by the Free Software Foundation, either version 3 of the
|
|
| 12 | + * License, or (at your option) any later version.
|
|
| 13 | + *
|
|
| 14 | + * This program is distributed in the hope that it will be useful,
|
|
| 15 | + * but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
| 16 | + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
|
| 17 | + * GNU General Public License for more details.
|
|
| 18 | + *
|
|
| 19 | + * You should have received a copy of the GNU General Public
|
|
| 20 | + * License along with this program. If not, see
|
|
| 21 | + * <http://www.gnu.org/licenses/gpl-3.0.html>.
|
|
| 22 | + * #L%
|
|
| 23 | + */
|
|
| 24 | + |
|
| 25 | +import fr.ird.observe.dto.db.BabModelVersionException;
|
|
| 26 | +import fr.ird.observe.dto.db.DatabaseConnexionNotAuthorizedException;
|
|
| 27 | +import fr.ird.observe.dto.db.DatabaseNotFoundException;
|
|
| 28 | +import fr.ird.observe.dto.db.configuration.ObserveDataSourceConfiguration;
|
|
| 29 | +import fr.ird.observe.dto.db.configuration.topia.ObserveDataSourceConfigurationTopiaH2;
|
|
| 30 | +import io.ultreia.java4all.util.Version;
|
|
| 31 | +import org.apache.logging.log4j.LogManager;
|
|
| 32 | +import org.apache.logging.log4j.Logger;
|
|
| 33 | +import org.nuiton.topia.persistence.script.TopiaSqlScript;
|
|
| 34 | +import org.nuiton.topia.service.migration.TopiaMigrationService;
|
|
| 35 | +import org.nuiton.topia.service.sql.request.CreateDatabaseRequest;
|
|
| 36 | + |
|
| 37 | +import java.io.File;
|
|
| 38 | +import java.io.IOException;
|
|
| 39 | +import java.nio.file.Files;
|
|
| 40 | +import java.nio.file.Path;
|
|
| 41 | + |
|
| 42 | +/**
|
|
| 43 | + * Created on 16/03/2022.
|
|
| 44 | + *
|
|
| 45 | + * @author Tony Chemit - dev@tchemit.fr
|
|
| 46 | + * @since 6.0.7
|
|
| 47 | + */
|
|
| 48 | +public class DataSourceCreateHelper {
|
|
| 49 | + |
|
| 50 | + private static final Logger log = LogManager.getLogger(DataSourceCreateHelper.class);
|
|
| 51 | + |
|
| 52 | + public static void create(ToolkitTopiaApplicationContextSupport<?> applicationContext) throws BabModelVersionException, DatabaseConnexionNotAuthorizedException, DatabaseNotFoundException {
|
|
| 53 | + log.debug(String.format("Create topia application context: %s", applicationContext));
|
|
| 54 | + // si le referentiel n'est pas importé on aliment la table lastUpdateDate
|
|
| 55 | + //FIXME Make sure this is ok, but not sure
|
|
| 56 | + applicationContext.insertLastUpdateDate();
|
|
| 57 | + }
|
|
| 58 | + |
|
| 59 | + public static void create(ToolkitTopiaApplicationContextSupport<?> applicationContext, ObserveDataSourceConfiguration dataSourceConfiguration, TopiaSqlScript importDatabase) throws BabModelVersionException, DatabaseConnexionNotAuthorizedException, DatabaseNotFoundException {
|
|
| 60 | + log.debug(String.format("Create topia application context: %s", applicationContext));
|
|
| 61 | + Path temporaryDirectory = dataSourceConfiguration.getTemporaryDirectory();
|
|
| 62 | + log.info("Create new database from a script.");
|
|
| 63 | + TopiaMigrationService migrationService = (TopiaMigrationService) applicationContext.getMigrationService();
|
|
| 64 | + if (dataSourceConfiguration.isLocal()) {
|
|
| 65 | + applicationContext.executeSqlStatements(importDatabase);
|
|
| 66 | + migrationService.createSchemaIfNotExist();
|
|
| 67 | + migrationService.runSchemaMigration();
|
|
| 68 | + } else {
|
|
| 69 | + // base postgres
|
|
| 70 | + // do import in temporary h2 database
|
|
| 71 | + File tmpDir;
|
|
| 72 | + try {
|
|
| 73 | + tmpDir = Files.createTempDirectory(temporaryDirectory, "obstuna").toFile();
|
|
| 74 | + } catch (IOException e) {
|
|
| 75 | + throw new IllegalStateException("could not create temporary directory ", e);
|
|
| 76 | + }
|
|
| 77 | + Version modelVersion = dataSourceConfiguration.getModelVersion();
|
|
| 78 | + ObserveDataSourceConfigurationTopiaH2 temporaryConfiguration = applicationContext.createTemporaryConfiguration(tmpDir, modelVersion);
|
|
| 79 | + ObserveTopiaApplicationContext temporaryTopiaApplicationContext = ObserveTopiaApplicationContextFactory.createTopiaApplicationContext(temporaryConfiguration, false);
|
|
| 80 | + temporaryTopiaApplicationContext.executeSqlStatements(importDatabase);
|
|
| 81 | + temporaryTopiaApplicationContext.getMigrationService().createSchemaIfNotExist();
|
|
| 82 | + temporaryTopiaApplicationContext.getMigrationService().runSchemaMigration();
|
|
| 83 | + CreateDatabaseRequest request = CreateDatabaseRequest.builder(true, modelVersion).addSchema().addStandaloneTables().addAllData().build();
|
|
| 84 | + TopiaSqlScript dump = applicationContext.getSqlService().consume(request);
|
|
| 85 | + applicationContext.executeSqlStatements(dump);
|
|
| 86 | + migrationService.createSchemaIfNotExist();
|
|
| 87 | + migrationService.runSchemaMigration();
|
|
| 88 | + temporaryTopiaApplicationContext.close();
|
|
| 89 | + File databaseFile = temporaryConfiguration.getDatabaseFile();
|
|
| 90 | + if (!databaseFile.delete()) {
|
|
| 91 | + throw new IllegalStateException("could not delete " + databaseFile);
|
|
| 92 | + }
|
|
| 93 | + }
|
|
| 94 | + }
|
|
| 95 | + |
|
| 96 | + public static void create(ToolkitTopiaApplicationContextSupport<?> applicationContext, TopiaSqlScript dump, TopiaSqlScript optionalDump) throws BabModelVersionException, DatabaseConnexionNotAuthorizedException, DatabaseNotFoundException {
|
|
| 97 | + log.debug(String.format("Create topia application context: %s", applicationContext));
|
|
| 98 | + applicationContext.executeSqlStatements(dump);
|
|
| 99 | + if (optionalDump != null) {
|
|
| 100 | + applicationContext.executeSqlStatements(optionalDump);
|
|
| 101 | + }
|
|
| 102 | + }
|
|
| 103 | +} |
| ... | ... | @@ -22,14 +22,10 @@ package fr.ird.observe.entities; |
| 22 | 22 | * #L%
|
| 23 | 23 | */
|
| 24 | 24 | |
| 25 | -import com.google.common.collect.ArrayListMultimap;
|
|
| 26 | -import com.google.common.collect.Multimap;
|
|
| 27 | 25 | import fr.ird.observe.dto.db.BabModelVersionException;
|
| 28 | 26 | import fr.ird.observe.dto.db.DatabaseConnexionNotAuthorizedException;
|
| 29 | 27 | import fr.ird.observe.dto.db.DatabaseNotFoundException;
|
| 30 | -import fr.ird.observe.dto.db.configuration.DataSourceCreateConfigurationDto;
|
|
| 31 | 28 | import fr.ird.observe.dto.db.configuration.ObserveDataSourceConfiguration;
|
| 32 | -import fr.ird.observe.dto.db.configuration.topia.ObserveDataSourceConfigurationTopiaH2;
|
|
| 33 | 29 | import fr.ird.observe.dto.referential.ReferentialDto;
|
| 34 | 30 | import fr.ird.observe.entities.data.DataGroupByEntity;
|
| 35 | 31 | import fr.ird.observe.spi.module.BusinessProject;
|
| ... | ... | @@ -37,16 +33,11 @@ import fr.ird.observe.spi.referential.differential.DifferentialMetaModel; |
| 37 | 33 | import fr.ird.observe.spi.referential.synchro.OneSideSqlResultBuilder;
|
| 38 | 34 | import fr.ird.observe.spi.script.ToolkitEntitySqlScriptModel;
|
| 39 | 35 | import fr.ird.observe.spi.service.ServiceContext;
|
| 40 | -import io.ultreia.java4all.util.Version;
|
|
| 41 | -import org.apache.logging.log4j.LogManager;
|
|
| 42 | -import org.apache.logging.log4j.Logger;
|
|
| 43 | 36 | import org.nuiton.topia.persistence.TagValues;
|
| 44 | 37 | import org.nuiton.topia.persistence.TopiaConfigurationExtension;
|
| 45 | 38 | import org.nuiton.topia.persistence.TopiaEntity;
|
| 46 | -import org.nuiton.topia.persistence.TopiaIdFactory;
|
|
| 47 | 39 | import org.nuiton.topia.persistence.TopiaPersistenceContextConstructorParameterSupport;
|
| 48 | 40 | import org.nuiton.topia.persistence.script.TopiaSqlScript;
|
| 49 | -import org.nuiton.topia.service.migration.TopiaMigrationService;
|
|
| 50 | 41 | import org.nuiton.topia.service.sql.blob.TopiaEntitySqlBlobModel;
|
| 51 | 42 | import org.nuiton.topia.service.sql.metadata.TopiaMetadataModel;
|
| 52 | 43 | import org.nuiton.topia.service.sql.metadata.TopiaMetadataModelPaths;
|
| ... | ... | @@ -54,25 +45,15 @@ import org.nuiton.topia.service.sql.model.TopiaEntitySqlModel; |
| 54 | 45 | import org.nuiton.topia.service.sql.plan.copy.TopiaEntitySqlCopyPlanModel;
|
| 55 | 46 | import org.nuiton.topia.service.sql.plan.delete.TopiaEntitySqlDeletePlanModel;
|
| 56 | 47 | import org.nuiton.topia.service.sql.plan.replicate.TopiaEntitySqlReplicatePlanModel;
|
| 57 | -import org.nuiton.topia.service.sql.request.CreateDatabaseRequest;
|
|
| 58 | 48 | import org.nuiton.topia.service.sql.usage.TopiaEntitySqlUsageModel;
|
| 59 | 49 | |
| 60 | -import java.io.File;
|
|
| 61 | -import java.io.IOException;
|
|
| 62 | -import java.nio.file.Files;
|
|
| 63 | -import java.nio.file.Path;
|
|
| 64 | 50 | import java.time.Duration;
|
| 65 | -import java.util.Collection;
|
|
| 66 | 51 | import java.util.Date;
|
| 67 | -import java.util.Map;
|
|
| 68 | 52 | import java.util.Set;
|
| 69 | -import java.util.UUID;
|
|
| 70 | 53 | import java.util.function.Consumer;
|
| 71 | 54 | |
| 72 | 55 | public class ObserveTopiaApplicationContext extends AbstractObserveTopiaApplicationContext {
|
| 73 | 56 | |
| 74 | - private static final Logger log = LogManager.getLogger(ObserveTopiaApplicationContext.class);
|
|
| 75 | - |
|
| 76 | 57 | public ObserveTopiaApplicationContext(TopiaConfigurationExtension topiaConfiguration) {
|
| 77 | 58 | super(topiaConfiguration);
|
| 78 | 59 | }
|
| ... | ... | @@ -187,131 +168,15 @@ public class ObserveTopiaApplicationContext extends AbstractObserveTopiaApplicat |
| 187 | 168 | return ObserveTopiaEntitySqlModelResource.get().getScriptModel();
|
| 188 | 169 | }
|
| 189 | 170 | |
| 190 | - public void create(ObserveDataSourceConfiguration dataSourceConfiguration, DataSourceCreateConfigurationDto dataSourceCreateConfiguration) throws BabModelVersionException, DatabaseConnexionNotAuthorizedException, DatabaseNotFoundException {
|
|
| 191 | - log.debug(String.format("Create topia application context: %s", this));
|
|
| 192 | - if (dataSourceCreateConfiguration.isImportDatabase()) {
|
|
| 193 | - log.info("Create new database from a script.");
|
|
| 194 | - TopiaSqlScript importDatabase = dataSourceCreateConfiguration.getImportDatabase();
|
|
| 195 | - boolean migrate = dataSourceCreateConfiguration.isMigrate();
|
|
| 196 | - TopiaMigrationService migrationService = getMigrationService();
|
|
| 197 | - if (dataSourceConfiguration.isLocal()) {
|
|
| 198 | - executeSqlStatements(importDatabase);
|
|
| 199 | - if (migrate) {
|
|
| 200 | - migrationService.createSchemaIfNotExist();
|
|
| 201 | - migrationService.runSchemaMigration();
|
|
| 202 | - }
|
|
| 203 | - } else { // base postgres
|
|
| 204 | - // do import in temporary h2 database
|
|
| 205 | - File tmpDir;
|
|
| 206 | - try {
|
|
| 207 | - Path temporaryDirectory = dataSourceConfiguration.getTemporaryDirectory();
|
|
| 208 | - tmpDir = Files.createTempDirectory(temporaryDirectory, "obstuna").toFile();
|
|
| 209 | - } catch (IOException e) {
|
|
| 210 | - throw new IllegalStateException("could not create temporary directory ", e);
|
|
| 211 | - }
|
|
| 212 | - ObserveDataSourceConfigurationTopiaH2 temporaryConfiguration = createTemporaryConfiguration(tmpDir, dataSourceConfiguration.getModelVersion());
|
|
| 213 | - ObserveTopiaApplicationContext temporaryTopiaApplicationContext = ObserveTopiaApplicationContextFactory.createTopiaApplicationContext(temporaryConfiguration, false);
|
|
| 214 | - temporaryTopiaApplicationContext.executeSqlStatements(importDatabase);
|
|
| 215 | - if (migrate) {
|
|
| 216 | - temporaryTopiaApplicationContext.getMigrationService().createSchemaIfNotExist();
|
|
| 217 | - temporaryTopiaApplicationContext.getMigrationService().runSchemaMigration();
|
|
| 218 | - }
|
|
| 219 | - CreateDatabaseRequest request = CreateDatabaseRequest.builder(true, dataSourceConfiguration.getModelVersion()).addSchema().addStandaloneTables().addAllData().build();
|
|
| 220 | - TopiaSqlScript dump = getSqlService().consume(request);
|
|
| 221 | - executeSqlStatements(dump);
|
|
| 222 | - migrationService.createSchemaIfNotExist();
|
|
| 223 | - migrationService.runSchemaMigration();
|
|
| 224 | - temporaryTopiaApplicationContext.close();
|
|
| 225 | - File databaseFile = temporaryConfiguration.getDatabaseFile();
|
|
| 226 | - if (!databaseFile.delete()) {
|
|
| 227 | - throw new IllegalStateException("could not delete " + databaseFile);
|
|
| 228 | - }
|
|
| 229 | - }
|
|
| 230 | - } else {
|
|
| 231 | - boolean importReferential = dataSourceCreateConfiguration.isImportReferential();
|
|
| 232 | - boolean importData = dataSourceCreateConfiguration.isImportData();
|
|
| 233 | - // si le referentiel n'est pas importé on aliment la table lastUpdateDate
|
|
| 234 | - if (!importReferential) {
|
|
| 235 | - insertLastUpdateDate();
|
|
| 236 | - }
|
|
| 237 | - boolean importStandaloneReferential = importReferential;
|
|
| 238 | - if (importReferential && importData) {
|
|
| 239 | - // Si on est sur la même source de données pour les deux imports, on fait tout sur la même base temporaire
|
|
| 240 | - ObserveDataSourceConfiguration importReferentialDataSourceConfiguration = dataSourceCreateConfiguration.getImportReferentialDataSourceConfiguration();
|
|
| 241 | - ObserveDataSourceConfiguration importDataSourceConfiguration = dataSourceCreateConfiguration.getImportDataDataSourceConfiguration();
|
|
| 242 | - importStandaloneReferential = !importReferentialDataSourceConfiguration.equals(importDataSourceConfiguration);
|
|
| 243 | - }
|
|
| 244 | - boolean referentialImported = false;
|
|
| 245 | - if (importStandaloneReferential) {
|
|
| 246 | - log.info("Import referential.");
|
|
| 247 | - ObserveDataSourceConfiguration importDataSourceConfiguration = dataSourceCreateConfiguration.getImportReferentialDataSourceConfiguration();
|
|
| 248 | - Version dbVersion = Version.valueOf(getModelVersion());
|
|
| 249 | - CreateDatabaseRequest request = CreateDatabaseRequest.builder(!dataSourceConfiguration.isLocal(), dbVersion)
|
|
| 250 | - .addStandaloneTables().build();
|
|
| 251 | - TopiaSqlScript referentialDump;
|
|
| 252 | - ObserveTopiaApplicationContext temporaryTopiaApplicationContext = null;
|
|
| 253 | - try {
|
|
| 254 | - temporaryTopiaApplicationContext = ObserveTopiaApplicationContextFactory.createTopiaApplicationContext(importDataSourceConfiguration, false);
|
|
| 255 | -// ObserveDataSourceConnection importDataSourceConnection = serviceContext().newService(importDataSourceConfiguration, AnonymousService.class).open(importDataSourceConfiguration);
|
|
| 256 | -// DataSourceService dumpProducerService = serviceContext().newService(importDataSourceConnection, DataSourceService.class);
|
|
| 257 | - referentialDump = temporaryTopiaApplicationContext.getSqlService().consume(request);
|
|
| 258 | - executeSqlStatements(referentialDump);
|
|
| 259 | - } finally {
|
|
| 260 | - if (!dataSourceCreateConfiguration.isLeaveOpenSource() && temporaryTopiaApplicationContext != null) {
|
|
| 261 | - temporaryTopiaApplicationContext.close();
|
|
| 262 | - }
|
|
| 263 | - }
|
|
| 264 | - referentialImported = true;
|
|
| 265 | - }
|
|
| 266 | - |
|
| 267 | - if (importData) {
|
|
| 268 | - ObserveDataSourceConfiguration importDataSourceConfiguration = dataSourceCreateConfiguration.getImportDataDataSourceConfiguration();
|
|
| 269 | - Version dbVersion = Version.valueOf(getModelVersion());
|
|
| 270 | - CreateDatabaseRequest.Builder requestBuilder = CreateDatabaseRequest.builder(!dataSourceConfiguration.isLocal(), dbVersion);
|
|
| 271 | - if (!referentialImported) {
|
|
| 272 | - log.info("Get referential.");
|
|
| 273 | - requestBuilder.addStandaloneTables();
|
|
| 274 | - }
|
|
| 275 | - |
|
| 276 | - // Récupération du dump qui contient les données
|
|
| 277 | - Set<String> importDataIds = dataSourceCreateConfiguration.getImportDataIds();
|
|
| 278 | - TopiaIdFactory idFactory = getTopiaIdFactory();
|
|
| 279 | - Multimap<String, String> idsByType = ArrayListMultimap.create();
|
|
| 280 | - for (String importDataId : importDataIds) {
|
|
| 281 | - Class<TopiaEntity> className = idFactory.getClassName(importDataId);
|
|
| 282 | - idsByType.put(className.getName(), importDataId);
|
|
| 283 | - }
|
|
| 284 | - log.info(String.format("Get data: %s", importDataIds));
|
|
| 285 | - for (Map.Entry<String, Collection<String>> entry : idsByType.asMap().entrySet()) {
|
|
| 286 | - requestBuilder.dataIdsToAdd(entry.getKey(), Set.copyOf(entry.getValue()));
|
|
| 287 | - }
|
|
| 288 | - TopiaSqlScript dataDump;
|
|
| 289 | - ObserveTopiaApplicationContext temporaryTopiaApplicationContext = null;
|
|
| 290 | - CreateDatabaseRequest request = requestBuilder.build();
|
|
| 291 | - try {
|
|
| 292 | - temporaryTopiaApplicationContext = ObserveTopiaApplicationContextFactory.createTopiaApplicationContext(importDataSourceConfiguration, false);
|
|
| 293 | -// ObserveDataSourceConnection importDataSourceConnection = serviceContext().newService(importDataSourceConfiguration, AnonymousService.class).open(importDataSourceConfiguration);
|
|
| 294 | -// DataSourceService dumpProducerService = serviceContext().newService(importDataSourceConnection, DataSourceService.class);
|
|
| 295 | -// dataDump = dumpProducerService.produceCreateSqlScript(request);
|
|
| 296 | - dataDump = temporaryTopiaApplicationContext.getSqlService().consume(request);
|
|
| 297 | - } finally {
|
|
| 298 | - if (!dataSourceCreateConfiguration.isLeaveOpenSource() && temporaryTopiaApplicationContext != null) {
|
|
| 299 | - temporaryTopiaApplicationContext.close();
|
|
| 300 | -// serviceContext().newService(importDataSourceConfiguration, DataSourceService.class).close();
|
|
| 301 | - }
|
|
| 302 | - }
|
|
| 303 | - log.info(String.format("Import data%s", request.isAddStandaloneTables() ? " and referential." : "."));
|
|
| 304 | - executeSqlStatements(dataDump);
|
|
| 305 | - }
|
|
| 306 | - }
|
|
| 171 | + public void createEmpty() throws BabModelVersionException, DatabaseConnexionNotAuthorizedException, DatabaseNotFoundException {
|
|
| 172 | + DataSourceCreateHelper.create(this);
|
|
| 307 | 173 | }
|
| 308 | 174 | |
| 309 | - private ObserveDataSourceConfigurationTopiaH2 createTemporaryConfiguration(File tmpDirectory, Version version) {
|
|
| 310 | - File dbDirectory = new File(tmpDirectory, "obstuna" + UUID.randomUUID());
|
|
| 311 | - ObserveDataSourceConfigurationTopiaH2 result = ObserveDataSourceConfigurationTopiaH2.create(
|
|
| 312 | - "obtunaTmp", dbDirectory, "obstuna", "sa", "sa".toCharArray(), true, true, version);
|
|
| 313 | - result.setTemporaryDirectory(tmpDirectory.toPath());
|
|
| 314 | - return result;
|
|
| 175 | + public void createFromDump(ObserveDataSourceConfiguration dataSourceConfiguration, TopiaSqlScript dump) throws BabModelVersionException, DatabaseConnexionNotAuthorizedException, DatabaseNotFoundException {
|
|
| 176 | + DataSourceCreateHelper.create(this, dataSourceConfiguration, dump);
|
|
| 315 | 177 | }
|
| 316 | 178 | |
| 179 | + public void createAndImport(TopiaSqlScript dump, TopiaSqlScript optionalDump) throws BabModelVersionException, DatabaseConnexionNotAuthorizedException, DatabaseNotFoundException {
|
|
| 180 | + DataSourceCreateHelper.create(this, dump, optionalDump);
|
|
| 181 | + }
|
|
| 317 | 182 | } |
| ... | ... | @@ -25,30 +25,50 @@ package fr.ird.observe.services.client; |
| 25 | 25 | import fr.ird.observe.dto.db.BabModelVersionException;
|
| 26 | 26 | import fr.ird.observe.dto.db.DatabaseConnexionNotAuthorizedException;
|
| 27 | 27 | import fr.ird.observe.dto.db.DatabaseNotFoundException;
|
| 28 | -import fr.ird.observe.dto.db.configuration.DataSourceCreateConfigurationDto;
|
|
| 29 | 28 | import fr.ird.observe.dto.db.configuration.DataSourceCreateWithNoReferentialImportException;
|
| 30 | 29 | import fr.ird.observe.dto.db.configuration.IncompatibleDataSourceCreateConfigurationException;
|
| 31 | 30 | import fr.ird.observe.dto.db.configuration.ObserveDataSourceConfiguration;
|
| 32 | 31 | import fr.ird.observe.dto.db.configuration.ObserveDataSourceConnection;
|
| 33 | 32 | import fr.ird.observe.services.ObserveServiceInitializer;
|
| 33 | +import org.nuiton.topia.persistence.script.TopiaSqlScript;
|
|
| 34 | 34 | |
| 35 | 35 | public class AnonymousServiceClient extends GeneratedAnonymousServiceClient {
|
| 36 | 36 | |
| 37 | 37 | @Override
|
| 38 | - public ObserveDataSourceConnection create(ObserveDataSourceConfiguration config, DataSourceCreateConfigurationDto createConfiguration) throws IncompatibleDataSourceCreateConfigurationException, DataSourceCreateWithNoReferentialImportException, BabModelVersionException, DatabaseConnexionNotAuthorizedException, DatabaseNotFoundException {
|
|
| 39 | - ObserveServiceInitializer initializer = getServiceContext().getInitializer();
|
|
| 40 | - initializer.setConfiguration(config);
|
|
| 41 | - ObserveDataSourceConnection dataSourceConnection = super.create(config, createConfiguration);
|
|
| 42 | - initializer.setConnection(dataSourceConnection);
|
|
| 43 | - initializer.setConfiguration(null);
|
|
| 44 | - return dataSourceConnection;
|
|
| 38 | + public ObserveDataSourceConnection createEmpty(ObserveDataSourceConfiguration config) throws IncompatibleDataSourceCreateConfigurationException, DataSourceCreateWithNoReferentialImportException, BabModelVersionException, DatabaseConnexionNotAuthorizedException, DatabaseNotFoundException {
|
|
| 39 | + ObserveServiceInitializer initializer = start(config);
|
|
| 40 | + ObserveDataSourceConnection dataSourceConnection = super.createEmpty(config);
|
|
| 41 | + return end(initializer, dataSourceConnection);
|
|
| 42 | + }
|
|
| 43 | + |
|
| 44 | + @Override
|
|
| 45 | + public ObserveDataSourceConnection createFromDump(ObserveDataSourceConfiguration config, TopiaSqlScript dump) throws IncompatibleDataSourceCreateConfigurationException, DataSourceCreateWithNoReferentialImportException, BabModelVersionException, DatabaseConnexionNotAuthorizedException, DatabaseNotFoundException {
|
|
| 46 | + ObserveServiceInitializer initializer = start(config);
|
|
| 47 | + ObserveDataSourceConnection dataSourceConnection = super.createFromDump(config, dump);
|
|
| 48 | + return end(initializer, dataSourceConnection);
|
|
| 49 | + }
|
|
| 50 | + |
|
| 51 | + @Override
|
|
| 52 | + public ObserveDataSourceConnection createFromImport(ObserveDataSourceConfiguration config, TopiaSqlScript dump, TopiaSqlScript optionalDump) throws IncompatibleDataSourceCreateConfigurationException, DataSourceCreateWithNoReferentialImportException, BabModelVersionException, DatabaseConnexionNotAuthorizedException, DatabaseNotFoundException {
|
|
| 53 | + ObserveServiceInitializer initializer = start(config);
|
|
| 54 | + ObserveDataSourceConnection dataSourceConnection = super.createFromImport(config, dump, optionalDump);
|
|
| 55 | + return end(initializer, dataSourceConnection);
|
|
| 45 | 56 | }
|
| 46 | 57 | |
| 47 | 58 | @Override
|
| 48 | 59 | public ObserveDataSourceConnection open(ObserveDataSourceConfiguration config) throws DatabaseNotFoundException, DatabaseConnexionNotAuthorizedException, BabModelVersionException {
|
| 60 | + ObserveServiceInitializer initializer = start(config);
|
|
| 61 | + ObserveDataSourceConnection dataSourceConnection = super.open(config);
|
|
| 62 | + return end(initializer, dataSourceConnection);
|
|
| 63 | + }
|
|
| 64 | + |
|
| 65 | + private ObserveServiceInitializer start(ObserveDataSourceConfiguration config) {
|
|
| 49 | 66 | ObserveServiceInitializer initializer = getServiceContext().getInitializer();
|
| 50 | 67 | initializer.setConfiguration(config);
|
| 51 | - ObserveDataSourceConnection dataSourceConnection = super.open(config);
|
|
| 68 | + return initializer;
|
|
| 69 | + }
|
|
| 70 | + |
|
| 71 | + private ObserveDataSourceConnection end(ObserveServiceInitializer initializer, ObserveDataSourceConnection dataSourceConnection) {
|
|
| 52 | 72 | initializer.setConnection(dataSourceConnection);
|
| 53 | 73 | initializer.setConfiguration(null);
|
| 54 | 74 | return dataSourceConnection;
|
| ... | ... | @@ -25,7 +25,6 @@ package fr.ird.observe.services.client.service; |
| 25 | 25 | import fr.ird.observe.dto.db.BabModelVersionException;
|
| 26 | 26 | import fr.ird.observe.dto.db.DatabaseConnexionNotAuthorizedException;
|
| 27 | 27 | import fr.ird.observe.dto.db.DatabaseNotFoundException;
|
| 28 | -import fr.ird.observe.dto.db.configuration.DataSourceCreateConfigurationDto;
|
|
| 29 | 28 | import fr.ird.observe.dto.db.configuration.DataSourceCreateWithNoReferentialImportException;
|
| 30 | 29 | import fr.ird.observe.dto.db.configuration.IncompatibleDataSourceCreateConfigurationException;
|
| 31 | 30 | import fr.ird.observe.dto.db.configuration.ObserveDataSourceConnection;
|
| ... | ... | @@ -80,11 +79,8 @@ public class AnonymousServiceClientReadTest extends GeneratedAnonymousServiceCli |
| 80 | 79 | |
| 81 | 80 | //FIXME Should get an not implemented exception for this service
|
| 82 | 81 | ObserveDataSourceConfigurationRest dataSourceConfiguration = serviceClientTestMethodResource.getDataSourceConfiguration();
|
| 83 | - DataSourceCreateConfigurationDto dataSourceCreateConfiguration = new DataSourceCreateConfigurationDto();
|
|
| 84 | - dataSourceCreateConfiguration.setCanCreateEmptyDatabase(true);
|
|
| 85 | - |
|
| 86 | 82 | AnonymousService service = serviceClientTestMethodResource.newService(dataSourceConfiguration, AnonymousService.class);
|
| 87 | - service.create(dataSourceConfiguration, dataSourceCreateConfiguration);
|
|
| 83 | + service.createEmpty(dataSourceConfiguration);
|
|
| 88 | 84 | |
| 89 | 85 | }
|
| 90 | 86 |
| ... | ... | @@ -28,7 +28,6 @@ import fr.ird.observe.dto.db.DataSourceUserDto; |
| 28 | 28 | import fr.ird.observe.dto.db.DatabaseConnexionNotAuthorizedException;
|
| 29 | 29 | import fr.ird.observe.dto.db.DatabaseNotFoundException;
|
| 30 | 30 | import fr.ird.observe.dto.db.DatabaseVersionIsTooHighException;
|
| 31 | -import fr.ird.observe.dto.db.configuration.DataSourceCreateConfigurationDto;
|
|
| 32 | 31 | import fr.ird.observe.dto.db.configuration.DataSourceCreateWithNoReferentialImportException;
|
| 33 | 32 | import fr.ird.observe.dto.db.configuration.IncompatibleDataSourceCreateConfigurationException;
|
| 34 | 33 | import fr.ird.observe.dto.db.configuration.ObserveDataSourceConfiguration;
|
| ... | ... | @@ -45,6 +44,7 @@ import io.ultreia.java4all.util.Version; |
| 45 | 44 | import org.apache.logging.log4j.LogManager;
|
| 46 | 45 | import org.apache.logging.log4j.Logger;
|
| 47 | 46 | import org.nuiton.topia.persistence.TopiaConfigurationExtension;
|
| 47 | +import org.nuiton.topia.persistence.script.TopiaSqlScript;
|
|
| 48 | 48 | |
| 49 | 49 | import java.nio.file.Path;
|
| 50 | 50 | import java.util.Set;
|
| ... | ... | @@ -107,15 +107,39 @@ public class AnonymousServiceLocalSupport extends ObserveServiceLocal implements |
| 107 | 107 | }
|
| 108 | 108 | |
| 109 | 109 | @Override
|
| 110 | - public ObserveDataSourceConnection create(ObserveDataSourceConfiguration config, DataSourceCreateConfigurationDto createConfiguration)
|
|
| 111 | - throws IncompatibleDataSourceCreateConfigurationException, DataSourceCreateWithNoReferentialImportException,
|
|
| 112 | - BabModelVersionException, DatabaseConnexionNotAuthorizedException, DatabaseNotFoundException {
|
|
| 113 | - createConfiguration.validateConfiguration(getApplicationLocale());
|
|
| 110 | + public ObserveDataSourceConnection createEmpty(ObserveDataSourceConfiguration config) throws IncompatibleDataSourceCreateConfigurationException, DataSourceCreateWithNoReferentialImportException, BabModelVersionException, DatabaseConnexionNotAuthorizedException, DatabaseNotFoundException {
|
|
| 114 | 111 | setTemporaryDirectory(config);
|
| 115 | - boolean initSchema = !createConfiguration.isImportDatabase();
|
|
| 116 | - ObserveTopiaApplicationContext topiaApplicationContext = ObserveTopiaApplicationContextFactory.createTopiaApplicationContext(config, initSchema);
|
|
| 112 | + ObserveTopiaApplicationContext topiaApplicationContext = ObserveTopiaApplicationContextFactory.createTopiaApplicationContext(config, true);
|
|
| 117 | 113 | try {
|
| 118 | - topiaApplicationContext.create(config, createConfiguration);
|
|
| 114 | + topiaApplicationContext.createEmpty();
|
|
| 115 | + } catch (Exception e) {
|
|
| 116 | + close(config, topiaApplicationContext);
|
|
| 117 | + throw e;
|
|
| 118 | + }
|
|
| 119 | + ObserveDataSourceInformation dataSourceInformation = getDataSourceInformation(config, topiaApplicationContext.getConfiguration(), false);
|
|
| 120 | + return config.toConnection(topiaApplicationContext.getAuthenticationToken(), dataSourceInformation);
|
|
| 121 | + }
|
|
| 122 | + |
|
| 123 | + @Override
|
|
| 124 | + public ObserveDataSourceConnection createFromDump(ObserveDataSourceConfiguration config, TopiaSqlScript dump) throws IncompatibleDataSourceCreateConfigurationException, DataSourceCreateWithNoReferentialImportException, BabModelVersionException, DatabaseConnexionNotAuthorizedException, DatabaseNotFoundException {
|
|
| 125 | + setTemporaryDirectory(config);
|
|
| 126 | + ObserveTopiaApplicationContext topiaApplicationContext = ObserveTopiaApplicationContextFactory.createTopiaApplicationContext(config, false);
|
|
| 127 | + try {
|
|
| 128 | + topiaApplicationContext.createFromDump(config, dump);
|
|
| 129 | + } catch (Exception e) {
|
|
| 130 | + close(config, topiaApplicationContext);
|
|
| 131 | + throw e;
|
|
| 132 | + }
|
|
| 133 | + ObserveDataSourceInformation dataSourceInformation = getDataSourceInformation(config, topiaApplicationContext.getConfiguration(), false);
|
|
| 134 | + return config.toConnection(topiaApplicationContext.getAuthenticationToken(), dataSourceInformation);
|
|
| 135 | + }
|
|
| 136 | + |
|
| 137 | + @Override
|
|
| 138 | + public ObserveDataSourceConnection createFromImport(ObserveDataSourceConfiguration config, TopiaSqlScript dump, TopiaSqlScript optionalDump) throws IncompatibleDataSourceCreateConfigurationException, DataSourceCreateWithNoReferentialImportException, BabModelVersionException, DatabaseConnexionNotAuthorizedException, DatabaseNotFoundException {
|
|
| 139 | + setTemporaryDirectory(config);
|
|
| 140 | + ObserveTopiaApplicationContext topiaApplicationContext = ObserveTopiaApplicationContextFactory.createTopiaApplicationContext(config, false);
|
|
| 141 | + try {
|
|
| 142 | + topiaApplicationContext.createAndImport(dump, optionalDump);
|
|
| 119 | 143 | } catch (Exception e) {
|
| 120 | 144 | close(config, topiaApplicationContext);
|
| 121 | 145 | throw e;
|
| ... | ... | @@ -192,127 +216,6 @@ public class AnonymousServiceLocalSupport extends ObserveServiceLocal implements |
| 192 | 216 | return dataSourceInformation;
|
| 193 | 217 | }
|
| 194 | 218 | |
| 195 | -// private void create0(ObserveTopiaApplicationContext topiaApplicationContext, ObserveDataSourceConfiguration dataSourceConfiguration, DataSourceCreateConfigurationDto dataSourceCreateConfiguration) throws BabModelVersionException, DatabaseConnexionNotAuthorizedException, DatabaseNotFoundException {
|
|
| 196 | -// log.debug(String.format("Create topia application context: %s", topiaApplicationContext));
|
|
| 197 | -// if (dataSourceCreateConfiguration.isImportDatabase()) {
|
|
| 198 | -// log.info("Create new database from a script.");
|
|
| 199 | -// TopiaSqlScript importDatabase = dataSourceCreateConfiguration.getImportDatabase();
|
|
| 200 | -// boolean migrate = dataSourceCreateConfiguration.isMigrate();
|
|
| 201 | -// TopiaMigrationService migrationService = topiaApplicationContext.getMigrationService();
|
|
| 202 | -// if (dataSourceConfiguration.isLocal()) {
|
|
| 203 | -// topiaApplicationContext.executeSqlStatements(importDatabase);
|
|
| 204 | -// if (migrate) {
|
|
| 205 | -// migrationService.createSchemaIfNotExist();
|
|
| 206 | -// migrationService.runSchemaMigration();
|
|
| 207 | -// }
|
|
| 208 | -// } else { // base postgres
|
|
| 209 | -// // on realise les import dans un base H2 temporaire
|
|
| 210 | -// File tmpDir;
|
|
| 211 | -// try {
|
|
| 212 | -// Path temporaryDirectory = dataSourceConfiguration.getTemporaryDirectory();
|
|
| 213 | -// tmpDir = Files.createTempDirectory(temporaryDirectory, "obstuna").toFile();
|
|
| 214 | -// } catch (IOException e) {
|
|
| 215 | -// throw new IllegalStateException("could not create temporary directory ", e);
|
|
| 216 | -// }
|
|
| 217 | -// ObserveDataSourceConfigurationTopiaH2 temporaryConfiguration = createTemporaryConfiguration(tmpDir, dataSourceConfiguration.getModelVersion());
|
|
| 218 | -// ObserveTopiaApplicationContext temporaryTopiaApplicationContext = ObserveTopiaApplicationContextFactory.createTopiaApplicationContext(temporaryConfiguration, false);
|
|
| 219 | -// temporaryTopiaApplicationContext.executeSqlStatements(importDatabase);
|
|
| 220 | -// if (migrate) {
|
|
| 221 | -// temporaryTopiaApplicationContext.getMigrationService().createSchemaIfNotExist();
|
|
| 222 | -// temporaryTopiaApplicationContext.getMigrationService().runSchemaMigration();
|
|
| 223 | -// }
|
|
| 224 | -// DataSourceService dumpProducerService = serviceContext().newService(temporaryConfiguration, DataSourceService.class);
|
|
| 225 | -// CreateDatabaseRequest request = CreateDatabaseRequest.of(true, dataSourceConfiguration.getModelVersion()).addSchema().addStandaloneTables().addAllData();
|
|
| 226 | -// TopiaSqlScript dump = dumpProducerService.produceCreateSqlScript(request);
|
|
| 227 | -// topiaApplicationContext.executeSqlStatements(dump);
|
|
| 228 | -// migrationService.createSchemaIfNotExist();
|
|
| 229 | -// migrationService.runSchemaMigration();
|
|
| 230 | -// temporaryTopiaApplicationContext.close();
|
|
| 231 | -// File databaseFile = temporaryConfiguration.getDatabaseFile();
|
|
| 232 | -// if (!databaseFile.delete()) {
|
|
| 233 | -// throw new IllegalStateException("could not delete " + databaseFile);
|
|
| 234 | -// }
|
|
| 235 | -// }
|
|
| 236 | -// } else {
|
|
| 237 | -// boolean importReferential = dataSourceCreateConfiguration.isImportReferential();
|
|
| 238 | -// boolean importData = dataSourceCreateConfiguration.isImportData();
|
|
| 239 | -// // si le referentiel n'est pas importé on aliment la table lastUpdateDate
|
|
| 240 | -// if (!importReferential) {
|
|
| 241 | -// topiaApplicationContext.insertLastUpdateDate();
|
|
| 242 | -// }
|
|
| 243 | -// boolean importStandaloneReferential = importReferential;
|
|
| 244 | -// if (importReferential && importData) {
|
|
| 245 | -// // Si on est sur la même source de données pour les deux imports, on fait tout sur la même base temporaire
|
|
| 246 | -// ObserveDataSourceConfiguration importReferentialDataSourceConfiguration = dataSourceCreateConfiguration.getImportReferentialDataSourceConfiguration();
|
|
| 247 | -// ObserveDataSourceConfiguration importDataSourceConfiguration = dataSourceCreateConfiguration.getImportDataDataSourceConfiguration();
|
|
| 248 | -// importStandaloneReferential = !importReferentialDataSourceConfiguration.equals(importDataSourceConfiguration);
|
|
| 249 | -// }
|
|
| 250 | -// boolean referentialImported = false;
|
|
| 251 | -// if (importStandaloneReferential) {
|
|
| 252 | -// log.info("Import referential.");
|
|
| 253 | -// ObserveDataSourceConfiguration importDataSourceConfiguration = dataSourceCreateConfiguration.getImportReferentialDataSourceConfiguration();
|
|
| 254 | -// Version dbVersion = Version.valueOf(topiaApplicationContext.getModelVersion());
|
|
| 255 | -// CreateDatabaseRequest request = CreateDatabaseRequest.of(!dataSourceConfiguration.isLocal(), dbVersion)
|
|
| 256 | -// .addStandaloneTables();
|
|
| 257 | -// TopiaSqlScript referentialDump;
|
|
| 258 | -// try {
|
|
| 259 | -// ObserveDataSourceConnection importDataSourceConnection = serviceContext().newService(importDataSourceConfiguration, AnonymousService.class).open(importDataSourceConfiguration);
|
|
| 260 | -// DataSourceService dumpProducerService = serviceContext().newService(importDataSourceConnection, DataSourceService.class);
|
|
| 261 | -// referentialDump = dumpProducerService.produceCreateSqlScript(request);
|
|
| 262 | -// topiaApplicationContext.executeSqlStatements(referentialDump);
|
|
| 263 | -// } finally {
|
|
| 264 | -// if (!dataSourceCreateConfiguration.isLeaveOpenSource()) {
|
|
| 265 | -// serviceContext().newService(importDataSourceConfiguration, DataSourceService.class).close();
|
|
| 266 | -// }
|
|
| 267 | -// }
|
|
| 268 | -// referentialImported = true;
|
|
| 269 | -// }
|
|
| 270 | -//
|
|
| 271 | -// if (importData) {
|
|
| 272 | -// ObserveDataSourceConfiguration importDataSourceConfiguration = dataSourceCreateConfiguration.getImportDataDataSourceConfiguration();
|
|
| 273 | -// Version dbVersion = Version.valueOf(topiaApplicationContext.getModelVersion());
|
|
| 274 | -// CreateDatabaseRequest request = CreateDatabaseRequest.of(!dataSourceConfiguration.isLocal(), dbVersion);
|
|
| 275 | -// if (!referentialImported) {
|
|
| 276 | -// log.info("Get referential.");
|
|
| 277 | -// request.addStandaloneTables();
|
|
| 278 | -// }
|
|
| 279 | -//
|
|
| 280 | -// // Récupération du dump qui contient les données
|
|
| 281 | -// Set<String> importDataIds = dataSourceCreateConfiguration.getImportDataIds();
|
|
| 282 | -// TopiaIdFactory idFactory = getTopiaPersistenceContext().getIdFactory();
|
|
| 283 | -// Multimap<String, String> idsByType = ArrayListMultimap.create();
|
|
| 284 | -// for (String importDataId : importDataIds) {
|
|
| 285 | -// Class<TopiaEntity> className = idFactory.getClassName(importDataId);
|
|
| 286 | -// idsByType.put(className.getName(), importDataId);
|
|
| 287 | -// }
|
|
| 288 | -// log.info(String.format("Get data: %s", importDataIds));
|
|
| 289 | -// for (Map.Entry<String, Collection<String>> entry : idsByType.asMap().entrySet()) {
|
|
| 290 | -// request.dataIdsToAdd(entry.getKey(), Set.copyOf(entry.getValue()));
|
|
| 291 | -// }
|
|
| 292 | -// TopiaSqlScript dataDump;
|
|
| 293 | -// try {
|
|
| 294 | -// ObserveDataSourceConnection importDataSourceConnection = serviceContext().newService(importDataSourceConfiguration, AnonymousService.class).open(importDataSourceConfiguration);
|
|
| 295 | -// DataSourceService dumpProducerService = serviceContext().newService(importDataSourceConnection, DataSourceService.class);
|
|
| 296 | -// dataDump = dumpProducerService.produceCreateSqlScript(request);
|
|
| 297 | -// } finally {
|
|
| 298 | -// if (!dataSourceCreateConfiguration.isLeaveOpenSource()) {
|
|
| 299 | -// serviceContext().newService(importDataSourceConfiguration, DataSourceService.class).close();
|
|
| 300 | -// }
|
|
| 301 | -// }
|
|
| 302 | -// log.info(String.format("Import data%s", request.isAddStandaloneTables() ? " and referential." : "."));
|
|
| 303 | -// topiaApplicationContext.executeSqlStatements(dataDump);
|
|
| 304 | -// }
|
|
| 305 | -// }
|
|
| 306 | -// }
|
|
| 307 | -//
|
|
| 308 | -// private ObserveDataSourceConfigurationTopiaH2 createTemporaryConfiguration(File tmpDirectory, Version version) {
|
|
| 309 | -// File dbDirectory = new File(tmpDirectory, "obstuna" + UUID.randomUUID());
|
|
| 310 | -// ObserveDataSourceConfigurationTopiaH2 result = ObserveDataSourceConfigurationTopiaH2.create(
|
|
| 311 | -// "obtunaTmp", dbDirectory, "obstuna", "sa", "sa".toCharArray(), true, true, version);
|
|
| 312 | -// result.setTemporaryDirectory(tmpDirectory.toPath());
|
|
| 313 | -// return result;
|
|
| 314 | -// }
|
|
| 315 | - |
|
| 316 | 219 | private ObserveDataSourceInformation getDataSourceInformation(ObserveDataSourceConfiguration dataSourceConfiguration, TopiaConfigurationExtension topiaConfiguration, boolean canBeEmpty) throws DatabaseConnexionNotAuthorizedException {
|
| 317 | 220 | try {
|
| 318 | 221 | return SecurityHelper.getDataSourceInformation(SECURITY_HELPER_MODEL, dataSourceConfiguration, topiaConfiguration, canBeEmpty);
|
| ... | ... | @@ -26,7 +26,6 @@ import fr.ird.observe.dto.db.BabModelVersionException; |
| 26 | 26 | import fr.ird.observe.dto.db.DataSourceValidationMode;
|
| 27 | 27 | import fr.ird.observe.dto.db.DatabaseConnexionNotAuthorizedException;
|
| 28 | 28 | import fr.ird.observe.dto.db.DatabaseNotFoundException;
|
| 29 | -import fr.ird.observe.dto.db.configuration.DataSourceCreateConfigurationDto;
|
|
| 30 | 29 | import fr.ird.observe.dto.db.configuration.DataSourceCreateWithNoReferentialImportException;
|
| 31 | 30 | import fr.ird.observe.dto.db.configuration.IncompatibleDataSourceCreateConfigurationException;
|
| 32 | 31 | import fr.ird.observe.dto.db.configuration.ObserveDataSourceConfiguration;
|
| ... | ... | @@ -66,6 +65,7 @@ public class LocalTestClassResource extends TestClassResourceSupport { |
| 66 | 65 | private final ObserveServiceFactoryLocal serviceFactory;
|
| 67 | 66 | |
| 68 | 67 | ObserveServiceInitializerConfig serviceInitializerConfig;
|
| 68 | + private boolean generateNow;
|
|
| 69 | 69 | |
| 70 | 70 | public LocalTestClassResource() {
|
| 71 | 71 | this(DatabaseClassifier.DEFAULT);
|
| ... | ... | @@ -105,11 +105,8 @@ public class LocalTestClassResource extends TestClassResourceSupport { |
| 105 | 105 | AnonymousService service = newService(sharedDatabaseConfiguration, AnonymousService.class);
|
| 106 | 106 | |
| 107 | 107 | try {
|
| 108 | - DataSourceCreateConfigurationDto createConfiguration = new DataSourceCreateConfigurationDto();
|
|
| 109 | 108 | TopiaSqlScript script = getDataSourcesForTestManager().getCache(dbVersion, dbName);
|
| 110 | - createConfiguration.setImportDatabase(script);
|
|
| 111 | - createConfiguration.setMigrate(false);
|
|
| 112 | - service.create(sharedDatabaseConfiguration, createConfiguration);
|
|
| 109 | + service.createFromDump(sharedDatabaseConfiguration, script);
|
|
| 113 | 110 | } finally {
|
| 114 | 111 | newService(sharedDatabaseConfiguration, DataSourceService.class).close();
|
| 115 | 112 | }
|
| ... | ... | @@ -134,15 +131,13 @@ public class LocalTestClassResource extends TestClassResourceSupport { |
| 134 | 131 | ObserveServiceInitializer serviceInitializer = new ObserveServiceInitializer(getServiceInitializerConfig(), dataSourceConfiguration, null) {
|
| 135 | 132 | @Override
|
| 136 | 133 | public Date now() {
|
| 137 | - return generateNow?new Date():ObserveFixtures.DATE;
|
|
| 134 | + return generateNow ? new Date() : ObserveFixtures.DATE;
|
|
| 138 | 135 | }
|
| 139 | 136 | };
|
| 140 | 137 | serviceInitializer.setConfiguration(dataSourceConfiguration);
|
| 141 | 138 | return serviceFactory.newService(serviceInitializer, serviceType);
|
| 142 | 139 | }
|
| 143 | 140 | |
| 144 | - private boolean generateNow;
|
|
| 145 | - |
|
| 146 | 141 | public boolean isGenerateNow() {
|
| 147 | 142 | return generateNow;
|
| 148 | 143 | }
|
| ... | ... | @@ -152,10 +147,10 @@ public class LocalTestClassResource extends TestClassResourceSupport { |
| 152 | 147 | }
|
| 153 | 148 | |
| 154 | 149 | public <S extends ObserveService> S newService(ObserveDataSourceConnection dataSourceConnection, Class<S> serviceType) {
|
| 155 | - ObserveServiceInitializer serviceInitializer = new ObserveServiceInitializer(getServiceInitializerConfig(), null, dataSourceConnection){
|
|
| 150 | + ObserveServiceInitializer serviceInitializer = new ObserveServiceInitializer(getServiceInitializerConfig(), null, dataSourceConnection) {
|
|
| 156 | 151 | @Override
|
| 157 | 152 | public Date now() {
|
| 158 | - return generateNow?new Date():ObserveFixtures.DATE;
|
|
| 153 | + return generateNow ? new Date() : ObserveFixtures.DATE;
|
|
| 159 | 154 | }
|
| 160 | 155 | };
|
| 161 | 156 | return serviceFactory.newService(serviceInitializer, serviceType);
|
| ... | ... | @@ -72,11 +72,23 @@ public class AnonymousServiceFixtures extends GeneratedAnonymousServiceFixtures |
| 72 | 72 | }
|
| 73 | 73 | |
| 74 | 74 | @Override
|
| 75 | - public void create(fr.ird.observe.services.ObserveServicesProvider servicesProvider, AnonymousService service) {
|
|
| 75 | + public void createEmpty(fr.ird.observe.services.ObserveServicesProvider servicesProvider, AnonymousService service) {
|
|
| 76 | 76 | // FIXME:Test Remove super method invocation and implements fixture
|
| 77 | 77 | // actual = service.create(getProperty("create.id"));
|
| 78 | 78 | // Assert.assertNotNull(actual);
|
| 79 | - super.create(servicesProvider, service);
|
|
| 79 | + super.createEmpty(servicesProvider, service);
|
|
| 80 | + }
|
|
| 81 | + |
|
| 82 | + @Override
|
|
| 83 | + public void createFromDump(ObserveServicesProvider servicesProvider, AnonymousService service) {
|
|
| 84 | + //FIXME
|
|
| 85 | + super.createFromDump(servicesProvider, service);
|
|
| 86 | + }
|
|
| 87 | + |
|
| 88 | + @Override
|
|
| 89 | + public void createFromImport(ObserveServicesProvider servicesProvider, AnonymousService service) {
|
|
| 90 | + //FIXME
|
|
| 91 | + super.createFromImport(servicesProvider, service);
|
|
| 80 | 92 | }
|
| 81 | 93 | |
| 82 | 94 | @Override
|
| ... | ... | @@ -23,7 +23,7 @@ |
| 23 | 23 | <parent>
|
| 24 | 24 | <groupId>io.ultreia.maven</groupId>
|
| 25 | 25 | <artifactId>pom</artifactId>
|
| 26 | - <version>2022.36</version>
|
|
| 26 | + <version>2022.37</version>
|
|
| 27 | 27 | </parent>
|
| 28 | 28 | <groupId>fr.ird.observe</groupId>
|
| 29 | 29 | <artifactId>ird-observe</artifactId>
|
| ... | ... | @@ -25,7 +25,9 @@ server.main.handler.class=fr.ird.observe.server.ObserveWebMainHandler |
| 25 | 25 | GET /AnonymousService/applySecurity AnonymousServiceRestApi.applySecurity
|
| 26 | 26 | GET /AnonymousService/checkCanConnect AnonymousServiceRestApi.checkCanConnect
|
| 27 | 27 | GET /AnonymousService/checkCanConnectOrBeEmpty AnonymousServiceRestApi.checkCanConnectOrBeEmpty
|
| 28 | -GET /AnonymousService/create AnonymousServiceRestApi.create
|
|
| 28 | +POST /AnonymousService/createEmpty AnonymousServiceRestApi.createEmpty
|
|
| 29 | +POST /AnonymousService/createFromDump AnonymousServiceRestApi.createFromDump
|
|
| 30 | +POST /AnonymousService/createFromImport AnonymousServiceRestApi.createFromImport
|
|
| 29 | 31 | GET /AnonymousService/generateHomeId AnonymousServiceRestApi.generateHomeId
|
| 30 | 32 | GET /AnonymousService/getModelVersion AnonymousServiceRestApi.getModelVersion
|
| 31 | 33 | GET /AnonymousService/getServerVersion AnonymousServiceRestApi.getServerVersion
|
| ... | ... | @@ -28,6 +28,7 @@ import fr.ird.observe.dto.server.ServerModelHelper; |
| 28 | 28 | import fr.ird.observe.server.configuration.ServerConfig;
|
| 29 | 29 | import fr.ird.observe.server.configuration.ServerConfigApplicationComponent;
|
| 30 | 30 | import fr.ird.observe.server.configuration.ServerConfigFinder;
|
| 31 | +import fr.ird.observe.server.converter.JsonAwareDtoConverter;
|
|
| 31 | 32 | import fr.ird.observe.server.security.ObserveWebSecurityApplicationContext;
|
| 32 | 33 | import fr.ird.observe.services.ObserveServiceFactory;
|
| 33 | 34 | import fr.ird.observe.services.ObserveServiceInitializer;
|
| ... | ... | @@ -37,9 +38,11 @@ import fr.ird.observe.services.service.ObserveService; |
| 37 | 38 | import fr.ird.observe.spi.json.DtoGsonSupplier;
|
| 38 | 39 | import io.ultreia.java4all.application.context.ApplicationContext;
|
| 39 | 40 | import io.ultreia.java4all.util.Version;
|
| 41 | +import org.apache.commons.beanutils.ConvertUtils;
|
|
| 40 | 42 | import org.apache.logging.log4j.LogManager;
|
| 41 | 43 | import org.apache.logging.log4j.Logger;
|
| 42 | 44 | import org.debux.webmotion.server.call.HttpContext;
|
| 45 | +import org.nuiton.topia.persistence.script.TopiaSqlScript;
|
|
| 43 | 46 | |
| 44 | 47 | import javax.servlet.ServletContext;
|
| 45 | 48 | import java.io.Closeable;
|
| ... | ... | @@ -125,6 +128,9 @@ public class ObserveWebApplicationContext extends ApplicationContext { |
| 125 | 128 | closeDeleteTemporaryFilesTimer();
|
| 126 | 129 | }
|
| 127 | 130 | deleteTemporaryFilesTimer = CleanTemporaryFilesTask.create(getApplicationConfiguration());
|
| 131 | + |
|
| 132 | + JsonAwareDtoConverter<TopiaSqlScript> converter = new JsonAwareDtoConverter<>(getGsonSupplier().get(), TopiaSqlScript.class);
|
|
| 133 | + ConvertUtils.register(converter, TopiaSqlScript.class);
|
|
| 128 | 134 | }
|
| 129 | 135 | |
| 130 | 136 | @Override
|
| ... | ... | @@ -26,7 +26,6 @@ import fr.ird.observe.dto.db.BabModelVersionException; |
| 26 | 26 | import fr.ird.observe.dto.db.DataSourceUserDto;
|
| 27 | 27 | import fr.ird.observe.dto.db.DatabaseConnexionNotAuthorizedException;
|
| 28 | 28 | import fr.ird.observe.dto.db.DatabaseNotFoundException;
|
| 29 | -import fr.ird.observe.dto.db.configuration.DataSourceCreateConfigurationDto;
|
|
| 30 | 29 | import fr.ird.observe.dto.db.configuration.DataSourceCreateWithNoReferentialImportException;
|
| 31 | 30 | import fr.ird.observe.dto.db.configuration.IncompatibleDataSourceCreateConfigurationException;
|
| 32 | 31 | import fr.ird.observe.dto.db.configuration.ObserveDataSourceConfiguration;
|
| ... | ... | @@ -38,6 +37,7 @@ import fr.ird.observe.services.service.AnonymousService; |
| 38 | 37 | import io.ultreia.java4all.util.Version;
|
| 39 | 38 | import org.apache.logging.log4j.LogManager;
|
| 40 | 39 | import org.apache.logging.log4j.Logger;
|
| 40 | +import org.nuiton.topia.persistence.script.TopiaSqlScript;
|
|
| 41 | 41 | |
| 42 | 42 | import java.lang.reflect.Method;
|
| 43 | 43 | import java.util.LinkedHashMap;
|
| ... | ... | @@ -49,6 +49,12 @@ public class AnonymousServiceRestApi extends GeneratedAnonymousServiceRestApi { |
| 49 | 49 | |
| 50 | 50 | private static final Logger log = LogManager.getLogger(AnonymousServiceRestApi.class);
|
| 51 | 51 | |
| 52 | + @Override
|
|
| 53 | + public ObserveDataSourceInformation checkCanConnectOrBeEmpty(ObserveDataSourceConfiguration config) throws DatabaseNotFoundException, DatabaseConnexionNotAuthorizedException, BabModelVersionException {
|
|
| 54 | + ObserveWebUserSession session = getRequestContext().getConfigurationSession(config);
|
|
| 55 | + return getService().checkCanConnectOrBeEmpty(session.getConfiguration());
|
|
| 56 | + }
|
|
| 57 | + |
|
| 52 | 58 | @Override
|
| 53 | 59 | public ObserveDataSourceInformation checkCanConnect(ObserveDataSourceConfiguration config) throws DatabaseConnexionNotAuthorizedException, DatabaseNotFoundException, BabModelVersionException {
|
| 54 | 60 | ObserveWebUserSession session = getRequestContext().getConfigurationSession(config);
|
| ... | ... | @@ -56,11 +62,25 @@ public class AnonymousServiceRestApi extends GeneratedAnonymousServiceRestApi { |
| 56 | 62 | }
|
| 57 | 63 | |
| 58 | 64 | @Override
|
| 59 | - public ObserveDataSourceConnection create(ObserveDataSourceConfiguration config, DataSourceCreateConfigurationDto createConfiguration)
|
|
| 60 | - throws IncompatibleDataSourceCreateConfigurationException, DataSourceCreateWithNoReferentialImportException,
|
|
| 61 | - DatabaseNotFoundException, DatabaseConnexionNotAuthorizedException, BabModelVersionException {
|
|
| 65 | + public ObserveDataSourceConnection createEmpty(ObserveDataSourceConfiguration config) throws IncompatibleDataSourceCreateConfigurationException, DataSourceCreateWithNoReferentialImportException, BabModelVersionException, DatabaseConnexionNotAuthorizedException, DatabaseNotFoundException {
|
|
| 66 | + ObserveWebUserSession configurationSession = getRequestContext().getConfigurationSession(config);
|
|
| 67 | + ObserveDataSourceConnection connection = getService().createEmpty(configurationSession.getConfiguration());
|
|
| 68 | + ObserveWebUserSession authenticatedSession = getSecurityApplicationContext().registerAuthenticatedSession(configurationSession, connection);
|
|
| 69 | + return authenticatedSession.toRestConnection(config);
|
|
| 70 | + }
|
|
| 71 | + |
|
| 72 | + @Override
|
|
| 73 | + public ObserveDataSourceConnection createFromDump(ObserveDataSourceConfiguration config, TopiaSqlScript dump) throws IncompatibleDataSourceCreateConfigurationException, DataSourceCreateWithNoReferentialImportException, BabModelVersionException, DatabaseConnexionNotAuthorizedException, DatabaseNotFoundException {
|
|
| 74 | + ObserveWebUserSession configurationSession = getRequestContext().getConfigurationSession(config);
|
|
| 75 | + ObserveDataSourceConnection connection = getService().createFromDump(configurationSession.getConfiguration(), dump);
|
|
| 76 | + ObserveWebUserSession authenticatedSession = getSecurityApplicationContext().registerAuthenticatedSession(configurationSession, connection);
|
|
| 77 | + return authenticatedSession.toRestConnection(config);
|
|
| 78 | + }
|
|
| 79 | + |
|
| 80 | + @Override
|
|
| 81 | + public ObserveDataSourceConnection createFromImport(ObserveDataSourceConfiguration config, TopiaSqlScript dump, TopiaSqlScript optionalDump) throws IncompatibleDataSourceCreateConfigurationException, DataSourceCreateWithNoReferentialImportException, BabModelVersionException, DatabaseConnexionNotAuthorizedException, DatabaseNotFoundException {
|
|
| 62 | 82 | ObserveWebUserSession configurationSession = getRequestContext().getConfigurationSession(config);
|
| 63 | - ObserveDataSourceConnection connection = getService().create(configurationSession.getConfiguration(), createConfiguration);
|
|
| 83 | + ObserveDataSourceConnection connection = getService().createFromImport(configurationSession.getConfiguration(), dump,optionalDump );
|
|
| 64 | 84 | ObserveWebUserSession authenticatedSession = getSecurityApplicationContext().registerAuthenticatedSession(configurationSession, connection);
|
| 65 | 85 | return authenticatedSession.toRestConnection(config);
|
| 66 | 86 | }
|
| ... | ... | @@ -23,31 +23,32 @@ package fr.ird.observe.server.converter; |
| 23 | 23 | */
|
| 24 | 24 | |
| 25 | 25 | import com.google.gson.Gson;
|
| 26 | -import fr.ird.observe.dto.ObserveDto;
|
|
| 26 | +import io.ultreia.java4all.http.json.JsonAware;
|
|
| 27 | 27 | import org.apache.commons.beanutils.converters.AbstractConverter;
|
| 28 | 28 | import org.apache.logging.log4j.LogManager;
|
| 29 | 29 | import org.apache.logging.log4j.Logger;
|
| 30 | -import io.ultreia.java4all.http.json.JsonAware;
|
|
| 31 | 30 | |
| 32 | 31 | /**
|
| 33 | 32 | * Created on 07/09/15.
|
| 34 | 33 | *
|
| 35 | 34 | * @author Tony Chemit - dev@tchemit.fr
|
| 36 | 35 | */
|
| 37 | -public class JsonAwareDtoConverter extends AbstractConverter {
|
|
| 36 | +public class JsonAwareDtoConverter<TT extends JsonAware> extends AbstractConverter {
|
|
| 38 | 37 | |
| 39 | 38 | private static final Logger log = LogManager.getLogger(JsonAwareDtoConverter.class);
|
| 40 | 39 | |
| 41 | 40 | protected final Gson gson;
|
| 41 | + private final Class<TT> type;
|
|
| 42 | 42 | |
| 43 | - public JsonAwareDtoConverter(Gson gson) {
|
|
| 43 | + public JsonAwareDtoConverter(Gson gson, Class<TT> type) {
|
|
| 44 | 44 | this.gson = gson;
|
| 45 | + this.type = type;
|
|
| 45 | 46 | }
|
| 46 | 47 | |
| 47 | 48 | @Override
|
| 48 | 49 | protected <T> T convertToType(Class<T> type, Object value) {
|
| 49 | 50 | T observeDto;
|
| 50 | - if (JsonAware.class.isAssignableFrom(type)) {
|
|
| 51 | + if (type.isAssignableFrom(type)) {
|
|
| 51 | 52 | String gsonContent = value.toString();
|
| 52 | 53 | observeDto = gson.fromJson(gsonContent, type);
|
| 53 | 54 | log.info("convert observeDto: " + observeDto);
|
| ... | ... | @@ -59,7 +60,7 @@ public class JsonAwareDtoConverter extends AbstractConverter { |
| 59 | 60 | }
|
| 60 | 61 | |
| 61 | 62 | @Override
|
| 62 | - protected Class<?> getDefaultType() {
|
|
| 63 | - return ObserveDto.class;
|
|
| 63 | + protected Class<TT> getDefaultType() {
|
|
| 64 | + return type;
|
|
| 64 | 65 | }
|
| 65 | 66 | } |