Tony CHEMIT pushed to branch develop-7.x at ultreiaio / ird-observe Commits: 603c4e88 by tchemit at 2019-07-03T12:56:02Z update pom - - - - - 4d449fa3 by tchemit at 2019-07-03T13:26:13Z On ne peut pas sauvegarder une configuration d'un serveur distant en mode admin - Closes #1340 - - - - - 5f9d6431 by tchemit at 2019-07-03T14:02:14Z L'assistant migration via serveur pourrait refuser de continuer si l'utilisateur n'est pas assez acrédité - Closes #1145 Assistant création de base PG échoue - Closes #1331 - - - - - 16 changed files: - client-core/src/main/i18n/getters/java.getter - client-core/src/main/java/fr/ird/observe/client/db/ObserveDataSourcesManager.java - client-core/src/main/java/fr/ird/observe/client/db/ObserveSwingDataSource.java - client-core/src/main/java/fr/ird/observe/client/ui/actions/storage/SaveCurrentServerConfigurationUIAction.java - client-core/src/main/java/fr/ird/observe/client/ui/actions/storage/presets/TestRemoteUIAction.java - client-core/src/main/java/fr/ird/observe/client/ui/actions/storage/presets/TestServerUIAction.java - client-core/src/main/java/fr/ird/observe/client/ui/admin/config/ConfigModel.java - client-core/src/main/java/fr/ird/observe/client/ui/storage/StorageUIHandler.java - client-core/src/main/java/fr/ird/observe/client/ui/storage/StorageUIModel.java - observe-i18n/src/main/i18n/translations/observe_en_GB.properties - observe-i18n/src/main/i18n/translations/observe_es_ES.properties - observe-i18n/src/main/i18n/translations/observe_fr_FR.properties - pom.xml - server-core/src/main/filtered-resources/mapping - services-local/src/main/java/fr/ird/observe/services/local/service/DataSourceServiceLocal.java - services/src/main/java/fr/ird/observe/services/service/DataSourceService.java Changes: ===================================== client-core/src/main/i18n/getters/java.getter ===================================== @@ -800,6 +800,7 @@ observe.storage.error.rest.user.required observe.storage.error.rest.user.unknown observe.storage.error.serverVersionMismatch observe.storage.error.serverVersionModelMismatch +observe.storage.error.user.not.owner observe.storage.internalDump.last.modified observe.storage.internalDump.not.exist observe.storage.label.data.import.db ===================================== client-core/src/main/java/fr/ird/observe/client/db/ObserveDataSourcesManager.java ===================================== @@ -37,7 +37,6 @@ import fr.ird.observe.client.ui.ObserveUIMode; import fr.ird.observe.client.ui.actions.main.menu.storage.ChangeStorageAction; import fr.ird.observe.client.ui.storage.StorageUIModel; import fr.ird.observe.client.ui.util.ProgressModel; -import org.nuiton.topia.persistence.script.TopiaSqlScript; import fr.ird.observe.services.ObserveDataSourceConfigurationMainFactory; import fr.ird.observe.services.configuration.DataSourceCreateConfigurationDto; import fr.ird.observe.services.configuration.ObserveDataSourceConfiguration; @@ -48,6 +47,7 @@ import fr.ird.observe.services.configuration.topia.ObserveDataSourceConfiguratio import fr.ird.observe.services.service.BabModelVersionException; import fr.ird.observe.services.service.DatabaseConnexionNotAuthorizedException; import fr.ird.observe.services.service.DatabaseNotFoundException; +import org.nuiton.topia.persistence.script.TopiaSqlScript; import javax.swing.JLabel; import javax.swing.JOptionPane; @@ -123,7 +123,9 @@ public class ObserveDataSourcesManager implements Closeable { dataSource = newDataSource(configuration); break; } - + if (model.getDataSourceInformation() != null) { + dataSource.setOwner(model.getDataSourceInformation().isOwner()); + } return dataSource; } @@ -291,8 +293,8 @@ public class ObserveDataSourcesManager implements Closeable { try { - ObserveDataSourceInformation dataSourceInformation = dataSource.checkCanConnect(); - + ObserveDataSourceInformation dataSourceInformation = dataSource.checkCanConnect(false); + dataSource.setOwner(dataSourceInformation.isOwner()); dataSource.migrateDataIfPossible(dataSourceInformation, config.getModelVersion()); // la source sera utilisée dans les ui @@ -358,7 +360,8 @@ public class ObserveDataSourcesManager implements Closeable { try { - ObserveDataSourceInformation dataSourceInformation = dataSource.checkCanConnect(); + ObserveDataSourceInformation dataSourceInformation = dataSource.checkCanConnect(false); + dataSource.setOwner(dataSourceInformation.isOwner()); dataSource.migrateData(dataSourceInformation, config.getModelVersion()); @@ -704,6 +707,7 @@ public class ObserveDataSourcesManager implements Closeable { } } + @SuppressWarnings({"unused", "WeakerAccess"}) public static class InitStorageModel { private final File localDb; private final BackupStorage lastAutomaticBackup; @@ -724,7 +728,7 @@ public class ObserveDataSourcesManager implements Closeable { return lastAutomaticBackup != null; } - String getBackupDate() { + public String getBackupDate() { return Optional.ofNullable(lastAutomaticBackup).map(l -> simpleDateFormat.format(l.getDate())).orElse(""); } } ===================================== client-core/src/main/java/fr/ird/observe/client/db/ObserveSwingDataSource.java ===================================== @@ -10,12 +10,12 @@ package fr.ird.observe.client.db; * it under the terms of the GNU General Public License as * published by the Free Software Foundation, either version 3 of the * License, or (at your option) any later version. - * + * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. - * + * * You should have received a copy of the GNU General Public * License along with this program. If not, see * <http://www.gnu.org/licenses/gpl-3.0.html>. @@ -120,12 +120,9 @@ import static io.ultreia.java4all.i18n.I18n.t; */ public class ObserveSwingDataSource extends AbstractSerializableBean implements Closeable, ObserveServicesProvider { + public static final ObserveServicesProvider MAIN = new ObserveMainDataSourceServicesProvider(); private static final long serialVersionUID = 1L; - private static final Logger log = LogManager.getLogger(ObserveSwingDataSource.class); - - public static final ObserveServicesProvider MAIN = new ObserveMainDataSourceServicesProvider(); - private final EventListenerList listenerList; private final ObserveDataSourceConfiguration configuration; @@ -143,6 +140,7 @@ public class ObserveSwingDataSource extends AbstractSerializableBean implements // indique si une modification a été effectuéé sur la base depuis son ouverture private boolean modified; + private boolean owner; public ObserveSwingDataSource(ObserveDataSourceConfiguration configuration) { this.configuration = configuration; @@ -208,6 +206,7 @@ public class ObserveSwingDataSource extends AbstractSerializableBean implements canWriteReferential(), canReadData(), canWriteData(), + isOwner(), getVersion(), getVersion(), ImmutableList.of()); @@ -249,7 +248,7 @@ public class ObserveSwingDataSource extends AbstractSerializableBean implements @Override public void close() { - if (connection==null) { + if (connection == null) { return; } checkIsOpen(); @@ -368,6 +367,10 @@ public class ObserveSwingDataSource extends AbstractSerializableBean implements } + public boolean isOwner() { + return owner; + } + void migrateDataIfPossible(ObserveDataSourceInformation dataSourceInformation, Version targetVersion) { checkIsNotOpen(); @@ -398,39 +401,30 @@ public class ObserveSwingDataSource extends AbstractSerializableBean implements } public <D extends IdDto> ImmutableDtoMap<ReferentialDtoReferenceSet<?>> updateReferentialReferenceSetsCache(Class<D> dtoType) { - ReferentialService referentialService = servicesProvider.getReferentialService(); return referentialCache.loadReferenceSets(referentialService, dtoType); - } - private <R extends ReferentialDtoReference> ReferentialDtoReferenceSet<R> getReferentialReferenceSet(Class<R> type) { - + @SuppressWarnings("unchecked") + public <R extends ReferentialDtoReference> ReferentialDtoReferenceSet<R> getReferentialReferenceSet(Class<R> type) { checkIsOpen(); - ReferentialService referentialService = servicesProvider.getReferentialService(); return referentialCache.getReferentialReferenceSet(referentialService, type); } public <R extends ReferentialDtoReference> Set<R> getReferentialReferences(Class<R> type) { - ReferentialDtoReferenceSet<R> referentialReferenceSet = getReferentialReferenceSet(type); return referentialReferenceSet.toSet(); - } public boolean isOpen() { return connection != null; } - public ObserveDataSourceInformation checkCanConnect() throws DatabaseConnexionNotAuthorizedException, DatabaseNotFoundException { - + public ObserveDataSourceInformation checkCanConnect(boolean canBeEmpty) throws DatabaseConnexionNotAuthorizedException, DatabaseNotFoundException { checkIsNotAlreadyOpen(); - DataSourceService dataSourceService = servicesProvider.getDataSourceService(); - - return dataSourceService.checkCanConnect(configuration); - + return canBeEmpty ? dataSourceService.checkCanConnectOrBeEmpty(configuration) : dataSourceService.checkCanConnect(configuration); } public boolean isLocal() { @@ -454,9 +448,7 @@ public class ObserveSwingDataSource extends AbstractSerializableBean implements } public void removeObserveSwingDataSourceListener(ObserveSwingDataSourceListener listener) { - if (log.isInfoEnabled()) { - log.info("removing listener " + listener); - } + log.info("removing listener " + listener); listenerList.remove(ObserveSwingDataSourceListener.class, listener); } @@ -782,4 +774,8 @@ public class ObserveSwingDataSource extends AbstractSerializableBean implements public void setProgressModel(ProgressModel progressModel) { this.progressModel = progressModel; } + + public void setOwner(boolean owner) { + this.owner = owner; + } } ===================================== client-core/src/main/java/fr/ird/observe/client/ui/actions/storage/SaveCurrentServerConfigurationUIAction.java ===================================== @@ -22,6 +22,7 @@ package fr.ird.observe.client.ui.actions.storage; * #L% */ +import fr.ird.observe.client.ObserveSwingApplicationContext; import fr.ird.observe.client.ui.ObserveMainUI; import fr.ird.observe.client.ui.actions.main.menu.MenuActionSupport; import fr.ird.observe.client.ui.storage.StorageUIModel; @@ -116,8 +117,7 @@ public class SaveCurrentServerConfigurationUIAction extends MenuActionSupport { configuration.setLogin(model.getRemoteLogin()); configuration.setPassword(new String(model.getRemotePassword())); configuration.setDatabaseName(model.getServerDatabase()); - getMainUI().getConfig().addServerDataSourceConfiguration(configuration); - + ObserveSwingApplicationContext.get().getConfig().addServerDataSourceConfiguration(configuration); configUI.getHandler().addServerConfiguration(getMainUI(), configuration, configUI.getServerMenu().getComponentCount() - 2); } } ===================================== client-core/src/main/java/fr/ird/observe/client/ui/actions/storage/presets/TestRemoteUIAction.java ===================================== @@ -67,7 +67,8 @@ public class TestRemoteUIAction extends PresetsUIActionSupport { ObserveSwingDataSource dataSource = ObserveSwingApplicationContext.get().getDataSourcesManager().newDataSource(config); try { - ObserveDataSourceInformation dataSourceInformation = dataSource.checkCanConnect(); + ObserveDataSourceInformation dataSourceInformation = dataSource.checkCanConnect(false); + dataSource.setOwner(dataSourceInformation.isOwner()); Version versionDataSource = dataSourceInformation.getVersion(); ===================================== client-core/src/main/java/fr/ird/observe/client/ui/actions/storage/presets/TestServerUIAction.java ===================================== @@ -102,7 +102,7 @@ public class TestServerUIAction extends PresetsUIActionSupport { } if (connexionStatusError == null) { - ObserveDataSourceInformation dataSourceInformation = dataSource.checkCanConnect(); + ObserveDataSourceInformation dataSourceInformation = dataSource.checkCanConnect(false); Version versionDataSource = dataSourceInformation.getVersion(); ===================================== client-core/src/main/java/fr/ird/observe/client/ui/admin/config/ConfigModel.java ===================================== @@ -642,7 +642,7 @@ public class ConfigModel extends AdminActionModel { try { - localSourceInformation = localSource.checkCanConnect(); + localSourceInformation = localSource.checkCanConnect(false); } catch (Exception e) { //FIXME ! il faut faire quelque chose dans ce cas précis, au moins avertir l'utilisateur ===================================== client-core/src/main/java/fr/ird/observe/client/ui/storage/StorageUIHandler.java ===================================== @@ -554,8 +554,8 @@ public class StorageUIHandler implements UIHandler<StorageUI> { // si on utilise la base local on lance une migration de la base si necessaire if (DbMode.USE_LOCAL.equals((model.getDbMode()))) { - ObserveDataSourceInformation dataSourceInformation = currentDataSource.checkCanConnect(); - + ObserveDataSourceInformation dataSourceInformation = currentDataSource.checkCanConnect(false); + currentDataSource.setOwner(dataSourceInformation.isOwner()); progressModel.incrementsCurrentStep(); currentDataSource.migrateData(dataSourceInformation, config.getModelVersion()); ===================================== client-core/src/main/java/fr/ird/observe/client/ui/storage/StorageUIModel.java ===================================== @@ -1665,12 +1665,14 @@ public class StorageUIModel extends WizardModel<StorageStep> { if (!error) { - dataSourceInformation = dataSource.checkCanConnect(); + boolean createAction = ObstunaAdminAction.CREATE.equals(adminAction); + dataSourceInformation = dataSource.checkCanConnect(createAction); + dataSource.setOwner(dataSourceInformation.isOwner()); Version versionDataSource = dataSourceInformation.getVersion(); // en mise a jour de la base on ne test pas la version - if (getModelVersion().equals(versionDataSource) || isCanMigrate() || ObstunaAdminAction.CREATE.equals(adminAction)) { + if (isCanMigrate() || createAction || getModelVersion().equals(versionDataSource)) { setConnexionStatus(ConnexionStatus.SUCCESS); @@ -1738,6 +1740,16 @@ public class StorageUIModel extends WizardModel<StorageStep> { setBusy(false); } + if (result && dataSourceInformation != null && adminAction != null) { + + // must be owner of database to perform a such action + if (!dataSourceInformation.isOwner()) { + connexionStatusError = t("observe.storage.error.user.not.owner"); + log.error(connexionStatusError); + setConnexionStatus(ConnexionStatus.FAILED); + result = false; + } + } return result; } @@ -1949,7 +1961,7 @@ public class StorageUIModel extends WizardModel<StorageStep> { if (h2DataSourceInformation == null && localStorageExist) { ObserveSwingDataSource dataSource = ObserveSwingApplicationContext.get().getDataSourcesManager().newDataSource(h2Config); try { - h2DataSourceInformation = dataSource.checkCanConnect(); + h2DataSourceInformation = dataSource.checkCanConnect(false); } catch (Exception e) { if (log.isDebugEnabled()) { log.debug("error on load data source information for local storage", e); ===================================== observe-i18n/src/main/i18n/translations/observe_en_GB.properties ===================================== @@ -2043,6 +2043,7 @@ observe.storage.error.rest.user.required=User login is mandatory observe.storage.error.rest.user.unknown=User "%s" is not defined on server observe.storage.error.serverVersionMismatch=Remote server version (%s) is not compliant with the client version (%s) observe.storage.error.serverVersionModelMismatch=Remote server model version (%s) is not compliant with the client model version (%s) +observe.storage.error.user.not.owner=User must be owner of database to perform this action\! observe.storage.import.data.fromBackup=Import data from a backup of a local database (*.sql.gz) observe.storage.import.data.fromRemoteStorage=Import data from a remote database observe.storage.import.data.fromServerStorage=Import data from a remove server ===================================== observe-i18n/src/main/i18n/translations/observe_es_ES.properties ===================================== @@ -2043,6 +2043,7 @@ observe.storage.error.rest.user.required=El usuario es obligatorio observe.storage.error.rest.user.unknown=El usuario "%s" no es conocido por el servidor observe.storage.error.serverVersionMismatch=La versión del servidor remoto (%s) no es compatible con la versión del modelo (%s) observe.storage.error.serverVersionModelMismatch=La versión del modelo del servidor remoto (%s) no es compatible con la versión del modelo (%s) +observe.storage.error.user.not.owner=User must be owner of database to perform this action\! \#TODO observe.storage.import.data.fromBackup=Importar los datos de una copia de seguridad de la base local (*.sql.gz) observe.storage.import.data.fromRemoteStorage=Importar los datos de una base remota observe.storage.import.data.fromServerStorage=Importar los datos de un servidor remoto ===================================== observe-i18n/src/main/i18n/translations/observe_fr_FR.properties ===================================== @@ -2043,6 +2043,7 @@ observe.storage.error.rest.user.required=L'utilisateur est obligatoire observe.storage.error.rest.user.unknown=L'utilisateur "%s" est inconnu sur le serveur observe.storage.error.serverVersionMismatch=La version du serveur distant (%s) n'est pas compatible avec la version du client (%s) observe.storage.error.serverVersionModelMismatch=La version du modèle du serveur distant (%s) n'est pas compatible avec la version du modèle du client (%s) +observe.storage.error.user.not.owner=L'utilisateur doit être le propriétaire de la base pour effectuer cette opération \! observe.storage.import.data.fromBackup=Importer les données depuis une sauvegarde de base locale (*.sql.gz) observe.storage.import.data.fromRemoteStorage=Importer les données depuis une base distante observe.storage.import.data.fromServerStorage=Importer les données depuis un serveur distant ===================================== pom.xml ===================================== @@ -26,7 +26,7 @@ <parent> <groupId>io.ultreia.maven</groupId> <artifactId>pom</artifactId> - <version>2019.8.22</version> + <version>2019.8.23</version> </parent> <groupId>fr.ird.observe</groupId> @@ -155,7 +155,7 @@ <maven.build.timestamp.format>dd/MM/yyyy HH:mm z</maven.build.timestamp.format> <buildDate>${maven.build.timestamp}</buildDate> - <observeToolkitVersion>3.7.17</observeToolkitVersion> + <observeToolkitVersion>3.7.19-SNAPSHOT</observeToolkitVersion> <!--<lib.version.java4all.http>1.0.13</lib.version.java4all.http>--> <lib.version.nuiton.validation>3.1</lib.version.nuiton.validation> <!--<lib.version.java4all.config>1.0.3</lib.version.java4all.config>--> @@ -165,7 +165,7 @@ <lib.version.java4all.eugene>3.0-alpha-26</lib.version.java4all.eugene> <!--lib.version.java4all.jaxx>3.0-alpha-50</lib.version.java4all.jaxx--> <!--<lib.version.java4all.i18n>4.0-beta-8-SNAPSHOT</lib.version.java4all.i18n>--> - <lib.version.java4all.topia>1.1.14</lib.version.java4all.topia> + <lib.version.java4all.topia>1.1.15-SNAPSHOT</lib.version.java4all.topia> <!--<lib.version.nuiton.topia>3.6-SNAPSHOT</lib.version.nuiton.topia>--> <!--<lib.version.java4all.eugene>3.0-alpha-21</lib.version.java4all.eugene>--> ===================================== server-core/src/main/filtered-resources/mapping ===================================== @@ -56,6 +56,7 @@ GET /admin/configuration/resetAuthenticationTokens ConfigurationCo GET /api/v1/DataSourceService/applySecurity v1.DataSourceServiceRestApi.applySecurity GET /api/v1/DataSourceService/backup v1.DataSourceServiceRestApi.backup GET /api/v1/DataSourceService/checkCanConnect v1.DataSourceServiceRestApi.checkCanConnect +GET /api/v1/DataSourceService/checkCanConnectOrBeEmpty v1.DataSourceServiceRestApi.checkCanConnectOrBeEmpty GET /api/v1/DataSourceService/close v1.DataSourceServiceRestApi.close GET /api/v1/DataSourceService/create v1.DataSourceServiceRestApi.create GET /api/v1/DataSourceService/destroy v1.DataSourceServiceRestApi.destroy ===================================== services-local/src/main/java/fr/ird/observe/services/local/service/DataSourceServiceLocal.java ===================================== @@ -98,6 +98,95 @@ public class DataSourceServiceLocal extends ObserveServiceLocal implements DataS return privileges != null && !privileges.isEmpty(); } + private static boolean isOwner(ObserveDataSourceConfigurationTopiaSupport dataSourceConfiguration, JdbcPostgresHelper jdbcHelper) { + if (dataSourceConfiguration.isH2Database()) { + return true; + } + return jdbcHelper.isOwner(); + } + + @Override + public ObserveDataSourceInformation checkCanConnectOrBeEmpty(ObserveDataSourceConfiguration dataSourceConfiguration) throws DatabaseNotFoundException, DatabaseConnexionNotAuthorizedException { + Preconditions.checkState(dataSourceConfiguration instanceof ObserveDataSourceConfigurationTopiaSupport); + ObserveDataSourceConfigurationTopiaSupport dataSourceConfigurationTopiaSupport = (ObserveDataSourceConfigurationTopiaSupport) dataSourceConfiguration; + + ObserveDataSourceInformation dataSourceInformation; + + if (dataSourceConfigurationTopiaSupport.isH2Database()) { + + ObserveDataSourceConfigurationTopiaH2 h2DataSourceConfiguration = (ObserveDataSourceConfigurationTopiaH2) dataSourceConfigurationTopiaSupport; + + // On vérifie que le fichier de la base existe + File databaseFile = h2DataSourceConfiguration.getDatabaseFile(); + + if (!databaseFile.exists()) { + + String message = l(getApplicationLocale(), "observe.services.topia.error.h2.database.notFound"); + throw new DatabaseNotFoundException(message, dataSourceConfiguration); + + } + + // On vérifier que la base n'est pas déjà en cours d'utilisation + File databaseLockFile = h2DataSourceConfiguration.getLockFile(); + if (databaseLockFile.exists()) { + + String message = l(getApplicationLocale(), "observe.services.topia.error.h2.database.locked"); + if (log.isWarnEnabled()) { + log.warn(message); + } + // FIXME even if file is lock we still authorize to connect, + //throw new DatabaseConnexionNotAuthorizedException(message, dataSourceConfiguration); + } + + // On tente une connection à la base + ObserveTopiaConfiguration topiaConfiguration = ObserveTopiaConfigurationFactory.forH2Database(h2DataSourceConfiguration.getDirectory(), + h2DataSourceConfiguration.getDbName(), + h2DataSourceConfiguration.getUsername(), + new String(h2DataSourceConfiguration.getPassword()), + false, + false); + + + try { + new JdbcHelper(topiaConfiguration).runSelectOnString("SELECT 1;"); + } catch (Exception e) { + + // Authentification refusée + String message = l(getApplicationLocale(), "observe.services.topia.error.h2.database.badAuthentication"); + throw new DatabaseConnexionNotAuthorizedException(message, e, dataSourceConfiguration); + + } + + dataSourceInformation = getDataSourceInformation(h2DataSourceConfiguration, topiaConfiguration, false); + + + } else { + + ObserveDataSourceConfigurationTopiaPG pgDataSourceConfiguration = (ObserveDataSourceConfigurationTopiaPG) dataSourceConfigurationTopiaSupport; + // On tente une connexion au serveur + ObserveTopiaConfiguration topiaConfiguration = ObserveTopiaConfigurationFactory.forPostgresqlDatabase(pgDataSourceConfiguration.getJdbcUrl(), + pgDataSourceConfiguration.getUsername(), + new String(pgDataSourceConfiguration.getPassword()), + false, + false); + + try { + new JdbcHelper(topiaConfiguration).runSelectOnString("SELECT 1;"); + } catch (Exception e) { + + throw new DatabaseConnexionNotAuthorizedException(e.getMessage(), e, dataSourceConfiguration); + + } + + dataSourceInformation = getDataSourceInformation(pgDataSourceConfiguration, topiaConfiguration, true); + + } + + return dataSourceInformation; + + } + + @Override public ObserveDataSourceInformation checkCanConnect(ObserveDataSourceConfiguration dataSourceConfiguration) throws DatabaseNotFoundException, DatabaseConnexionNotAuthorizedException { @@ -134,11 +223,11 @@ public class DataSourceServiceLocal extends ObserveServiceLocal implements DataS // On tente une connection à la base ObserveTopiaConfiguration topiaConfiguration = ObserveTopiaConfigurationFactory.forH2Database(h2DataSourceConfiguration.getDirectory(), - h2DataSourceConfiguration.getDbName(), - h2DataSourceConfiguration.getUsername(), - new String(h2DataSourceConfiguration.getPassword()), - false, - false); + h2DataSourceConfiguration.getDbName(), + h2DataSourceConfiguration.getUsername(), + new String(h2DataSourceConfiguration.getPassword()), + false, + false); try { @@ -151,7 +240,7 @@ public class DataSourceServiceLocal extends ObserveServiceLocal implements DataS } - dataSourceInformation = getDataSourceInformation(h2DataSourceConfiguration, topiaConfiguration); + dataSourceInformation = getDataSourceInformation(h2DataSourceConfiguration, topiaConfiguration, false); } else { @@ -159,10 +248,10 @@ public class DataSourceServiceLocal extends ObserveServiceLocal implements DataS ObserveDataSourceConfigurationTopiaPG pgDataSourceConfiguration = (ObserveDataSourceConfigurationTopiaPG) dataSourceConfigurationTopiaSupport; // On tente une connexion au serveur ObserveTopiaConfiguration topiaConfiguration = ObserveTopiaConfigurationFactory.forPostgresqlDatabase(pgDataSourceConfiguration.getJdbcUrl(), - pgDataSourceConfiguration.getUsername(), - new String(pgDataSourceConfiguration.getPassword()), - false, - false); + pgDataSourceConfiguration.getUsername(), + new String(pgDataSourceConfiguration.getPassword()), + false, + false); try { new JdbcHelper(topiaConfiguration).runSelectOnString("SELECT 1;"); @@ -172,7 +261,7 @@ public class DataSourceServiceLocal extends ObserveServiceLocal implements DataS } - dataSourceInformation = getDataSourceInformation(pgDataSourceConfiguration, topiaConfiguration); + dataSourceInformation = getDataSourceInformation(pgDataSourceConfiguration, topiaConfiguration, false); } @@ -359,7 +448,7 @@ public class DataSourceServiceLocal extends ObserveServiceLocal implements DataS } - ObserveDataSourceInformation dataSourceInformation = getDataSourceInformation((ObserveDataSourceConfigurationTopiaSupport) dataSourceConfiguration, topiaApplicationContext.getConfiguration()); + ObserveDataSourceInformation dataSourceInformation = getDataSourceInformation((ObserveDataSourceConfigurationTopiaSupport) dataSourceConfiguration, topiaApplicationContext.getConfiguration(), false); return createDataSourceConnection(dataSourceInformation, topiaApplicationContext.getAuthenticationToken()); @@ -529,7 +618,7 @@ public class DataSourceServiceLocal extends ObserveServiceLocal implements DataS dataSourceInformation.getVersion()); } - private ObserveDataSourceInformation getDataSourceInformation(ObserveDataSourceConfigurationTopiaSupport dataSourceConfiguration, ObserveTopiaConfiguration topiaConfiguration) { + private ObserveDataSourceInformation getDataSourceInformation(ObserveDataSourceConfigurationTopiaSupport dataSourceConfiguration, ObserveTopiaConfiguration topiaConfiguration, boolean canBeEmpty) { boolean writeReferential; boolean readData; @@ -538,8 +627,37 @@ public class DataSourceServiceLocal extends ObserveServiceLocal implements DataS Version version; JdbcPostgresHelper jdbcHelper = new JdbcPostgresHelper(topiaConfiguration); + boolean owner = isOwner(dataSourceConfiguration, jdbcHelper); - version = TMSVersionHibernateDao.getVersion(jdbcHelper, "tms_version").map(TMSVersion::toVersion).orElse(Version.VZERO); + try { + version = TMSVersionHibernateDao.getVersion(jdbcHelper, "tms_version").map(TMSVersion::toVersion).orElse(Version.VZERO); + } catch (Exception e) { + if (!canBeEmpty) { + throw e; + } + if (dataSourceConfiguration.isH2Database()) { + + // Sur une base H2, on a le droit de tout lire, mais uniquement d'écrire les données + writeReferential = false; + readData = true; + writeData = true; + owner = true; + + } else { + writeReferential = true; + readData = true; + writeData = true; + } + return new ObserveDataSourceInformation( + true, + writeReferential, + readData, + writeData, + owner, + ObserveTopiaMigrationServiceAskUserToMigrate.getMinimumVersion(), + null, + null); + } if (dataSourceConfiguration.isH2Database()) { @@ -591,6 +709,7 @@ public class DataSourceServiceLocal extends ObserveServiceLocal implements DataS writeReferential, readData, writeData, + owner, ObserveTopiaMigrationServiceAskUserToMigrate.getMinimumVersion(), version, observeMigrationConfigurationProvider.getVersionsAfter(version)); ===================================== services/src/main/java/fr/ird/observe/services/service/DataSourceService.java ===================================== @@ -47,6 +47,9 @@ public interface DataSourceService extends ObserveService, Closeable { @Get(addAuthtoken = false) ObserveDataSourceInformation checkCanConnect(ObserveDataSourceConfiguration dataSourceConfiguration) throws DatabaseNotFoundException, DatabaseConnexionNotAuthorizedException; + @Get(addAuthtoken = false) + ObserveDataSourceInformation checkCanConnectOrBeEmpty(ObserveDataSourceConfiguration dataSourceConfiguration) throws DatabaseNotFoundException, DatabaseConnexionNotAuthorizedException; + @Get(addAuthtoken = false) ObserveDataSourceConnection create(ObserveDataSourceConfiguration dataSourceConfiguration, DataSourceCreateConfigurationDto dataSourceCreateConfiguration) throws IncompatibleDataSourceCreateConfigurationException, DataSourceCreateWithNoReferentialImportException, View it on GitLab: https://gitlab.com/ultreiaio/ird-observe/compare/e7cdd45e47c72f98550065e0db6... -- View it on GitLab: https://gitlab.com/ultreiaio/ird-observe/compare/e7cdd45e47c72f98550065e0db6... You're receiving this email because of your account on gitlab.com.
participants (1)
-
Tony CHEMIT