This is an automated email from the git hooks/post-receive script. New commit to branch develop in repository observe. See http://git.codelutin.com/observe.git commit 733fcf27ac8f520ed11b51934bbdeefd62e98ae6 Author: Sylvain Bavencoff <bavencoff@codelutin.com> Date: Wed Sep 23 17:59:04 2015 +0200 creation d'un base local (refs #7529) --- .../main/java/fr/ird/observe/ObserveRunner.java | 2 +- .../observe/ObserveSwingApplicationContext.java | 32 +++ .../ird/observe/ui/storage/StorageUIHandler.java | 52 ++-- .../fr/ird/observe/ui/storage/StorageUIModel.java | 290 ++++++++++++--------- .../fr/ird/observe/ui/storage/tabs/ConfigUI.css | 14 +- .../fr/ird/observe/ui/storage/tabs/ConfigUI.jaxx | 17 ++ .../ui/storage/tabs/StorageTabUIHandler.java | 9 +- .../observe-application-swing_en_GB.properties | 2 + .../observe-application-swing_es_ES.properties | 2 + .../observe-application-swing_fr_FR.properties | 2 + .../DataSourceDumpProducerServiceController.java | 29 +++ .../observe/services/dto/gson/VersionAdapter.java | 9 +- .../services/dto/referential/ProgramDtos.java | 24 +- .../services/ObserveServiceContextTopia.java | 3 + .../EntityToReferentialReferenceDtoBuilder.java | 13 + .../services/dto/ObserveDtosInitializer.java | 284 ++++++++++---------- ...EntityToReferentialReferenceDtoBuilderTest.java | 57 ++++ 17 files changed, 551 insertions(+), 290 deletions(-) diff --git a/observe-application-swing/src/main/java/fr/ird/observe/ObserveRunner.java b/observe-application-swing/src/main/java/fr/ird/observe/ObserveRunner.java index 0398e30..1158503 100644 --- a/observe-application-swing/src/main/java/fr/ird/observe/ObserveRunner.java +++ b/observe-application-swing/src/main/java/fr/ird/observe/ObserveRunner.java @@ -506,7 +506,7 @@ public abstract class ObserveRunner extends ApplicationRunner { } protected void detectLocalDataBase(ObserveSwingApplicationConfig config) throws IOException { - boolean hasLocalStorage = config.getLocalDBDirectory().exists(); + boolean hasLocalStorage = new File(config.getLocalDBDirectory(),ObserveSwingApplicationConfig.DB_NAME).exists(); config.setLocalStorageExist(hasLocalStorage); if (!hasLocalStorage) { if (log.isInfoEnabled()) { diff --git a/observe-application-swing/src/main/java/fr/ird/observe/ObserveSwingApplicationContext.java b/observe-application-swing/src/main/java/fr/ird/observe/ObserveSwingApplicationContext.java index 9f5fc4b..5dc2fd9 100644 --- a/observe-application-swing/src/main/java/fr/ird/observe/ObserveSwingApplicationContext.java +++ b/observe-application-swing/src/main/java/fr/ird/observe/ObserveSwingApplicationContext.java @@ -37,7 +37,16 @@ import fr.ird.observe.services.ObserveDataSourceConfigurationMainFactory; import fr.ird.observe.services.ObserveService; import fr.ird.observe.services.ObserveServiceMainFactory; import fr.ird.observe.services.configuration.ObserveDataSourceConfigurationTopiaH2; +import fr.ird.observe.services.dto.ReferenceDto; +import fr.ird.observe.services.dto.ReferenceSetDto; import fr.ird.observe.services.dto.constants.ReferentialLocale; +import fr.ird.observe.services.dto.longline.TripLonglineStubDto; +import fr.ird.observe.services.dto.referential.ProgramDto; +import fr.ird.observe.services.dto.referential.ProgramDtos; +import fr.ird.observe.services.dto.seine.TripSeineStubDto; +import fr.ird.observe.services.service.ReferentialService; +import fr.ird.observe.services.service.longline.TripLonglineService; +import fr.ird.observe.services.service.seine.TripSeineService; import fr.ird.observe.ui.ObserveMainUI; import fr.ird.observe.ui.ObserveMainUIHandler; import fr.ird.observe.ui.ObserveUIMode; @@ -718,6 +727,29 @@ public class ObserveSwingApplicationContext extends DefaultApplicationContext { t("observe.message.db.loaded", source.getLabel())); } + + if (log.isInfoEnabled()) { + ReferentialService referentialService = source.newService(ReferentialService.class); + TripSeineService tripSeineService = source.newService(TripSeineService.class); + TripLonglineService tripLonglineService = source.newService(TripLonglineService.class); + + ReferenceSetDto<ProgramDto> programDtoRefs = referentialService.getReferentialReferenceSet(ProgramDto.class); + for (ReferenceDto<ProgramDto> programDtoRef : programDtoRefs.getReference()) { + String programName = (String) programDtoRef.getPropertyValue("label"); + log.info("- " + programName); + if (ProgramDtos.isProgramSeine(programDtoRef)) { + List<TripSeineStubDto> tripSeines = tripSeineService.getTripSeineByProgram(programDtoRef.getId()); + for (TripSeineStubDto tripSeine :tripSeines) { + log.info(" - " + tripSeine.getVesselLabel() + " " + tripSeine.getStartDate() + " - " + tripSeine.getEndDate()); + } + } else if (ProgramDtos.isProgramLongline(programDtoRef)) { + List<TripLonglineStubDto> tripLonglines = tripLonglineService.getTripLonglineStubByProgram(programDtoRef.getId()); + for (TripLonglineStubDto tripLongline :tripLonglines) { + log.info(" - " + tripLongline.getVesselLabel() + " " + tripLongline.getStartDate() + " - " + tripLongline.getEndDate()); + } + } + } + } } }); } diff --git a/observe-application-swing/src/main/java/fr/ird/observe/ui/storage/StorageUIHandler.java b/observe-application-swing/src/main/java/fr/ird/observe/ui/storage/StorageUIHandler.java index 2b69301..fc0c6a0 100644 --- a/observe-application-swing/src/main/java/fr/ird/observe/ui/storage/StorageUIHandler.java +++ b/observe-application-swing/src/main/java/fr/ird/observe/ui/storage/StorageUIHandler.java @@ -41,6 +41,7 @@ import fr.ird.observe.db.event.ObserveSwingDataSourceListenerAdapter; import fr.ird.observe.services.configuration.ObserveDataSourceConfiguration; import fr.ird.observe.services.configuration.ObserveDataSourceConfigurationTopiaH2; import fr.ird.observe.services.configuration.ObserveDataSourceConfigurationTopiaPG; +import fr.ird.observe.services.dto.DataSourceCreateConfigurationDto; import fr.ird.observe.services.dto.IdDto; import fr.ird.observe.services.dto.IdDtos; import fr.ird.observe.services.service.DataSourceDumpProducerService; @@ -488,21 +489,9 @@ public class StorageUIHandler { observeContext.setDataSource(currentDataSource); observeContext.prepareMainStorage(currentDataSource); - // ouverture du nouveau storage - currentDataSource.open(); - - - - if (log.isInfoEnabled()) { - log.info(">>> main storage opened " + currentDataSource.getLabel()); - } - - if (model.isStoreRemoteConfig()) { - storeRemoteConfig(context, model); - } - if (model.getDbMode() == DbMode.CREATE_LOCAL && - model.getCreationMode() == - CreationMode.IMPORT_REMOTE_STORAGE) { + if (DbMode.CREATE_LOCAL.equals(model.getDbMode()) + && (CreationMode.IMPORT_REMOTE_STORAGE.equals(model.getCreationMode()) || CreationMode.IMPORT_SERVER_STORAGE.equals(model.getCreationMode())) + && config.isLocalStorageExist()) { // si on a creer la base locale a partir d'un import d'une base // distante, on sauvegarde la base locale comme dump initial // il s'agit d'un dump du référentiel @@ -511,12 +500,12 @@ public class StorageUIHandler { // on supprime le dump sql de la base embarquée if (!f.delete()) { throw new IllegalStateException("could not delete " + - f); + f); } } if (log.isInfoEnabled()) { log.info(">>> create initial dump with " + localDataSource + - " in " + f); + " in " + f); } try { DataSourceDumpProducerService dumpProducerService = observeContext.newService(DataSourceDumpProducerService.class); @@ -529,6 +518,31 @@ public class StorageUIHandler { } } } + + + if (model.getDbMode() == DbMode.CREATE_LOCAL) { + + DataSourceCreateConfigurationDto creationConfigurationDto = model.getCreationConfigurationDto(); + + currentDataSource.create(creationConfigurationDto); + } else { + // ouverture du nouveau storage + currentDataSource.open(); + } + + + + + + + if (log.isInfoEnabled()) { + log.info(">>> main storage opened " + currentDataSource.getLabel()); + } + + if (model.isStoreRemoteConfig()) { + storeRemoteConfig(context, model); + } + } catch (Exception ex) { ErrorDialogUI.showError(ex); if (log.isErrorEnabled()) { @@ -758,13 +772,13 @@ public class StorageUIHandler { addTag("h3", sb, t("observe.storage.report.action.import.remote.referentiel")); - addTag("pre", sb, model.getPgConfig().toString()); + addTag("pre", sb, model.getDataSourceConfigDetail()); break; case IMPORT_SERVER_STORAGE: addTag("h3", sb, t("observe.storage.report.action.import.server.referentiel")); - addTag("pre", sb, model.getRestConfig().toString()); + addTag("pre", sb, model.getDataSourceConfigDetail()); break; case EMPTY: diff --git a/observe-application-swing/src/main/java/fr/ird/observe/ui/storage/StorageUIModel.java b/observe-application-swing/src/main/java/fr/ird/observe/ui/storage/StorageUIModel.java index 0d1cc85..dfdd5de 100644 --- a/observe-application-swing/src/main/java/fr/ird/observe/ui/storage/StorageUIModel.java +++ b/observe-application-swing/src/main/java/fr/ird/observe/ui/storage/StorageUIModel.java @@ -35,6 +35,9 @@ import fr.ird.observe.services.configuration.ObserveDataSourceConfigurationTopia import fr.ird.observe.services.configuration.ObserveDataSourceConfigurationTopiaPG; import fr.ird.observe.services.configuration.ObserveDataSourceConnection; import fr.ird.observe.services.dto.DataSourceCreateConfigurationDto; +import fr.ird.observe.services.service.DataSourceDumpProducerService; +import fr.ird.observe.services.service.DatabaseConnexionNotAuthorizedException; +import fr.ird.observe.services.service.DatabaseNotFoundException; import fr.ird.observe.services.service.PingService; import fr.ird.observe.ui.storage.tabs.DataSelectionModel; import jaxx.runtime.JAXXContext; @@ -54,6 +57,7 @@ import java.io.FileInputStream; import java.io.IOException; import java.net.MalformedURLException; import java.net.URL; +import java.nio.file.Files; import java.util.ArrayList; import java.util.List; import java.util.Set; @@ -117,6 +121,10 @@ public class StorageUIModel extends WizardModel<StorageStep> { public static final String DATA_IMPORT_MODE_PROPERTY_NAME = "dataImportMode"; + public static final String EDIT_REMOTE_CONFIG_PROPERTY_NAME = "editRemoteConfig"; + + public static final String EDIT_SERVER_CONFIG_PROPERTY_NAME = "editServerConfig"; + public static final String VALID_PROPERTY_NAME = "valid"; private static final char[] EMPTY_PASSWORD = new char[0]; @@ -126,6 +134,10 @@ public class StorageUIModel extends WizardModel<StorageStep> { /** Le dbMode de connexion requis. */ protected DbMode dbMode; + protected boolean editServerConfig; + + protected boolean editRemoteConfig; + /** Un drapeau pour savoir si une base locale existe. */ protected boolean localStorageExist; @@ -816,9 +828,11 @@ public class StorageUIModel extends WizardModel<StorageStep> { case IMPORT_REMOTE_STORAGE: importDataConfig = pgConfig; universe.add(StorageStep.CONFIG); + break; case IMPORT_SERVER_STORAGE: importDataConfig = restConfig; universe.add(StorageStep.CONFIG); + break; } } break; @@ -894,7 +908,11 @@ public class StorageUIModel extends WizardModel<StorageStep> { } break; case CONFIG: - if (dbMode == DbMode.USE_REMOTE || dbMode == DbMode.USE_SERVER) { + if (DbMode.USE_REMOTE.equals(dbMode) + || DbMode.USE_SERVER.equals(dbMode) + || DbMode.CREATE_LOCAL.equals(dbMode) + && (CreationMode.IMPORT_SERVER_STORAGE.equals(creationMode) + || CreationMode.IMPORT_REMOTE_STORAGE.equals(creationMode))) { validate = ConnexionStatus.SUCCESS.equals(getConnexionStatus()); //FIXME Il faut savoir si l'utilisateur est le //FIXME propriétaire de la base @@ -1116,6 +1134,14 @@ public class StorageUIModel extends WizardModel<StorageStep> { return dbMode; } + public boolean isEditRemoteConfig() { + return editRemoteConfig; + } + + public boolean isEditServerConfig() { + return editServerConfig; + } + public ObserveDataSourceConfiguration getPreviousDataSourceConfiguration() { return previousDataSourceConfiguration; } @@ -1128,6 +1154,7 @@ public class StorageUIModel extends WizardModel<StorageStep> { DbMode oldValue = this.dbMode; this.dbMode = dbMode; firePropertyChange(DB_MODE_PROPERTY_NAME, oldValue, dbMode); + updateEditConfig(); if (oldValue != dbMode) { // on recalcule l'univers des étapes disponibles @@ -1141,6 +1168,21 @@ public class StorageUIModel extends WizardModel<StorageStep> { firePropertyChange(CAN_MIGRATE_PROPERTY_NAME, null, isCanMigrate()); } + protected void updateEditConfig() { + + boolean oldValueRemote = isEditRemoteConfig(); + editRemoteConfig = DbMode.USE_REMOTE.equals(dbMode) || + DbMode.CREATE_LOCAL.equals(dbMode) && CreationMode.IMPORT_REMOTE_STORAGE.equals(creationMode); + firePropertyChange(EDIT_REMOTE_CONFIG_PROPERTY_NAME, oldValueRemote, editRemoteConfig); + + boolean oldValueServer = isEditServerConfig(); + editServerConfig = DbMode.USE_SERVER.equals(dbMode) || + DbMode.CREATE_LOCAL.equals(dbMode) && CreationMode.IMPORT_SERVER_STORAGE.equals(creationMode); + firePropertyChange(EDIT_SERVER_CONFIG_PROPERTY_NAME, oldValueServer, editServerConfig); + + } + + public void setLocalStorageExist(boolean localStorageExist) { boolean oldValue = this.localStorageExist; this.localStorageExist = localStorageExist; @@ -1236,10 +1278,11 @@ public class StorageUIModel extends WizardModel<StorageStep> { CreationMode oldValue = getCreationMode(); this.creationMode = creationMode; firePropertyChange(CREATION_MODE_PROPERTY_NAME, oldValue, creationMode); + updateEditConfig(); if (oldValue != creationMode) { updateUniverse(); } - if (creationMode == CreationMode.IMPORT_REMOTE_STORAGE) { + if (CreationMode.IMPORT_REMOTE_STORAGE.equals(creationMode) || CreationMode.IMPORT_SERVER_STORAGE.equals(creationMode)) { //TC-20100308 : dans le cas d'un import du référentiel distant //TC-20100308 : on utilise toujours l'utilisateur referentiel String s = getRemoteLogin(); @@ -1264,45 +1307,45 @@ public class StorageUIModel extends WizardModel<StorageStep> { public String getRemoteLogin() { String login = ""; - if (dbMode != null) { - switch (dbMode) { - case USE_REMOTE: - login = pgConfig.getUsername(); - break; - case USE_SERVER: - login = restConfig.getLogin(); - break; - } + + if (isEditRemoteConfig()) { + + login = pgConfig.getUsername(); + + } else if (isEditServerConfig()) { + + login = restConfig.getLogin(); + } return login; } public char[] getRemotePassword() { char[] password = EMPTY_PASSWORD; - if (dbMode != null) { - switch (dbMode) { - case USE_REMOTE: - password = pgConfig.getPassword(); - break; - case USE_SERVER: - password = restConfig.getPassword(); - break; - } + + if (isEditRemoteConfig()) { + + password = pgConfig.getPassword(); + + } else if (isEditServerConfig()) { + + password = restConfig.getPassword(); + } return password; } public String getRemoteUrl() { String url = ""; - if (dbMode != null) { - switch (dbMode) { - case USE_REMOTE: - url = pgConfig.getJdbcUrl(); - break; - case USE_SERVER: - url = serverUrl; - break; - } + + if (isEditRemoteConfig()) { + + url = pgConfig.getJdbcUrl(); + + } else if (isEditServerConfig()) { + + url = serverUrl; + } return url; } @@ -1337,63 +1380,55 @@ public class StorageUIModel extends WizardModel<StorageStep> { public String getDataSourceConfigDetail() { String result = null; - if (dbMode != null) { - switch (dbMode) { - case USE_LOCAL: - case CREATE_LOCAL: - result = t("observe.storage.detail.local", h2Config.getDbName()); - break; - case USE_REMOTE: - String yes = t("observe.boolean.yes"); - String no = t("observe.boolean.no"); - result = t("observe.storage.detail.remote", - pgConfig.getJdbcUrl(), - pgConfig.getUsername(), - "***", - (pgConfig.isUseSsl() ? yes : no)); - break; - case USE_SERVER: - result = t("observe.storage.detail.server", - restConfig.getServerUrl(), - restConfig.getLogin(), - "***", - restConfig.getOptionalDatabaseName().orNull()); - break; - } + if (isEditRemoteConfig()) { + String yes = t("observe.boolean.yes"); + String no = t("observe.boolean.no"); + result = t("observe.storage.detail.remote", + pgConfig.getJdbcUrl(), + pgConfig.getUsername(), + "***", + (pgConfig.isUseSsl() ? yes : no)); + } else if (isEditServerConfig()) { + result = t("observe.storage.detail.server", + restConfig.getServerUrl(), + restConfig.getLogin(), + "***", + restConfig.getOptionalDatabaseName().orNull()); + } else { + result = t("observe.storage.detail.local", h2Config.getDbName()); } return result; } - - public void setRemoteLogin(String remoteLogin) { + String oldValue = getRemoteLogin(); - if (dbMode != null) { - switch (dbMode) { - case USE_REMOTE: - pgConfig.setUsername(remoteLogin); - break; - case USE_SERVER: - restConfig.setLogin(remoteLogin); - break; - } + + if (isEditRemoteConfig()) { + + pgConfig.setUsername(remoteLogin); + + } else if (isEditServerConfig()) { + + restConfig.setLogin(remoteLogin); + } + firePgConfigChanged(REMOTE_LOGIN_ROPERTY_NAME, oldValue, remoteLogin); } public void setRemotePassword(char[] remotePassword) { char[] oldValue = getRemotePassword(); - if (dbMode != null) { - switch (dbMode) { - case USE_REMOTE: - pgConfig.setPassword(remotePassword); - break; - case USE_SERVER: - restConfig.setPassword(remotePassword); - break; - } + if (isEditRemoteConfig()) { + + pgConfig.setPassword(remotePassword); + + } else if (isEditServerConfig()) { + + restConfig.setPassword(remotePassword); + } firePgConfigChanged(REMOTE_PASSWORD_PROPERTY_NAME, oldValue, remotePassword); @@ -1423,15 +1458,15 @@ public class StorageUIModel extends WizardModel<StorageStep> { public void setRemoteUrl(String remoteUrl) { String oldValue = getRemoteUrl(); - if (dbMode != null) { - switch (dbMode) { - case USE_REMOTE: - pgConfig.setJdbcUrl(remoteUrl); - break; - case USE_SERVER: - serverUrl = remoteUrl; - break; - } + + if (isEditRemoteConfig()) { + + pgConfig.setJdbcUrl(remoteUrl); + + } else if (isEditServerConfig()) { + + serverUrl = remoteUrl; + } firePgConfigChanged(REMOTE_URL_ROPERTY_NAME, oldValue, remoteUrl); } @@ -1472,43 +1507,58 @@ public class StorageUIModel extends WizardModel<StorageStep> { restConfig = sourceConfig; } - public DataSourceCreateConfigurationDto getCreationConfigurationDto() { - - DataSourceCreateConfigurationDto createConfigurationDto = null; - // FIXME -// if (getDbMode() == DbMode.CREATE_LOCAL) { -// switch (getCreationMode()) { -// case EMPTY: -// case IMPORT_EXTERNAL_DUMP: -// // rien a faire -// break; -// case IMPORT_INTERNAL_DUMP: -// -// createConfigurationDto = new DataSourceCreateConfigurationDto(); -// -// -// try { -// result.setDbDump( -// config.getInitialDbDump().toURI().toURL()); -// } catch (MalformedURLException ex) { -// throw new IllegalArgumentException( -// "can not build url for initialDbDump for " + -// "reason " + ex.getMessage(), ex); -// } -// break; -// case IMPORT_LOCAL_STORAGE: -// result.getImportConfig().setShortLabel( -// n("observe.storage.label.import.local")); -// break; -// case IMPORT_REMOTE_STORAGE: -// result.getImportConfig().setShortLabel( -// n("observe.storage.label.import.remote")); -// break; -// } -// -// -// } - return createConfigurationDto; + public DataSourceCreateConfigurationDto getCreationConfigurationDto() throws IOException, DatabaseConnexionNotAuthorizedException, DatabaseNotFoundException { + + DataSourceCreateConfigurationDto result = null; + + if (getDbMode() == DbMode.CREATE_LOCAL) { + result = new DataSourceCreateConfigurationDto(); + + if (CreationMode.IMPORT_EXTERNAL_DUMP.equals(creationMode) || CreationMode.IMPORT_INTERNAL_DUMP.equals(creationMode)) { + + File dumpFile; + + if (CreationMode.IMPORT_EXTERNAL_DUMP.equals(creationMode)) { + dumpFile = getDumpFile(); + } else { + dumpFile = config.getInitialDbDump(); + } + + byte[] dump = Files.readAllBytes(dumpFile.toPath()); + result.setImportDatabase(dump); + + } else { + + ObserveDataSourceConfiguration configSrc = null; + + switch (getCreationMode()) { + case IMPORT_LOCAL_STORAGE: + configSrc = h2Config; + break; + case IMPORT_REMOTE_STORAGE: + configSrc = pgConfig; + break; + case IMPORT_SERVER_STORAGE: + configSrc = restConfig; + break; + } + + if (configSrc != null) { + ObserveSwingDataSource source = new ObserveSwingDataSource(configSrc); + source.open(); + DataSourceDumpProducerService dumpService = source.newService(DataSourceDumpProducerService.class); + byte[] dump = dumpService.getReferentialDump(); + result.setImportDatabase(dump); + + source.close(); + + } + + } + + } + + return result; } public ObserveDataSourceConfigurationTopiaH2 toH2StorageConfig(String label) { @@ -1595,9 +1645,9 @@ public class StorageUIModel extends WizardModel<StorageStep> { boolean result = false; connexionStatusError = ""; - if (DbMode.USE_REMOTE.equals(getDbMode())) { + if (isEditRemoteConfig()) { config = pgConfig; - } else if (DbMode.USE_SERVER.equals(getDbMode())) { + } else if (isEditServerConfig()) { try { URL url = new URL(serverUrl); diff --git a/observe-application-swing/src/main/java/fr/ird/observe/ui/storage/tabs/ConfigUI.css b/observe-application-swing/src/main/java/fr/ird/observe/ui/storage/tabs/ConfigUI.css index cfcb07b..4399f7b 100644 --- a/observe-application-swing/src/main/java/fr/ird/observe/ui/storage/tabs/ConfigUI.css +++ b/observe-application-swing/src/main/java/fr/ird/observe/ui/storage/tabs/ConfigUI.css @@ -44,6 +44,14 @@ layout:{new BorderLayout()}; } +#IMPORT_SERVER_STORAGE { + _description:{n("observe.storage.importServerStorage.description")}; +} + +#IMPORT_SERVER_STORAGE_content { + layout:{new BorderLayout()}; +} + #USE_REMOTE { _description:{n("observe.storage.useRemoteStorage.description")}; } @@ -77,16 +85,16 @@ } #serverDataBaseLabel { - visible: {DbMode.USE_SERVER.equals(model.getDbMode())}; + visible: {model.isEditServerConfig()}; } #serverDataBase { - visible: {DbMode.USE_SERVER.equals(model.getDbMode())}; + visible: {model.isEditServerConfig()}; text:{model.getServerDatabase()}; } #remoteUseSsl { - visible: {DbMode.USE_REMOTE.equals(model.getDbMode())}; + visible: {model.isEditRemoteConfig()}; text:"observe.storage.remote.useSll"; selected:{model.isUseSsl()}; } diff --git a/observe-application-swing/src/main/java/fr/ird/observe/ui/storage/tabs/ConfigUI.jaxx b/observe-application-swing/src/main/java/fr/ird/observe/ui/storage/tabs/ConfigUI.jaxx index 779fd17..aed93d0 100644 --- a/observe-application-swing/src/main/java/fr/ird/observe/ui/storage/tabs/ConfigUI.jaxx +++ b/observe-application-swing/src/main/java/fr/ird/observe/ui/storage/tabs/ConfigUI.jaxx @@ -118,6 +118,23 @@ public void init() { </Table> + <!-- configurer creation base locale et import referentiel depuis un server distant --> + <Table id='IMPORT_SERVER_STORAGE' + fill="both" + constraints='"IMPORT_SERVER_STORAGE"'> + <row> + <cell> + <JLabel text='observe.storage.importServerStorage.config'/> + </cell> + </row> + <row> + <cell weighty='1' weightx='1'> + <JPanel id='IMPORT_SERVER_STORAGE_content'/> + </cell> + </row> + + </Table> + <!-- configurer connexion a base distante --> <Table id='USE_REMOTE' constraints='"USE_REMOTE"' fill='both'> diff --git a/observe-application-swing/src/main/java/fr/ird/observe/ui/storage/tabs/StorageTabUIHandler.java b/observe-application-swing/src/main/java/fr/ird/observe/ui/storage/tabs/StorageTabUIHandler.java index b0cee4b..1a5d591 100644 --- a/observe-application-swing/src/main/java/fr/ird/observe/ui/storage/tabs/StorageTabUIHandler.java +++ b/observe-application-swing/src/main/java/fr/ird/observe/ui/storage/tabs/StorageTabUIHandler.java @@ -21,7 +21,6 @@ */ package fr.ird.observe.ui.storage.tabs; -import com.google.common.collect.ImmutableSet; import fr.ird.observe.configuration.ObserveSwingApplicationConfig; import fr.ird.observe.db.ObserveSwingDataSource; import fr.ird.observe.db.constantes.ConnexionStatus; @@ -302,6 +301,8 @@ public class StorageTabUIHandler { ui.setDescriptionText(t(text)); if (c.equals(ui.IMPORT_REMOTE_STORAGE)) { ui.IMPORT_REMOTE_STORAGE_content.add(ui.remoteConfig, BorderLayout.CENTER); + } else if (c.equals(ui.IMPORT_SERVER_STORAGE)) { + ui.IMPORT_SERVER_STORAGE_content.add(ui.remoteConfig, BorderLayout.CENTER); } else if (c.equals(ui.USE_REMOTE)) { ui.USE_REMOTE_content.add(ui.remoteConfig, BorderLayout.CENTER); } else if (c.equals(ui.USE_SERVER)) { @@ -448,7 +449,8 @@ public class StorageTabUIHandler { // on recopie la configuration de la source d'import ObserveDataSourceConfiguration config = sourceModel.toPGStorageConfig("Import référentiel"); - ui.getModel().getCreationConfigurationDto().setImportReferentialDataSourceConfiguration(config); + //Fixme + //ui.getModel().getCreationConfigurationDto().setImportReferentialDataSourceConfiguration(config); sourceModel.validate(StorageStep.CONFIG); @@ -465,7 +467,8 @@ public class StorageTabUIHandler { // on recopie la configuration de la source d'import ObserveDataSourceConfiguration config = sourceModel.toPGStorageConfig("Import référentiel"); - ui.getModel().getCreationConfigurationDto().setImportDataConfiguration(config, ImmutableSet.<String>of()); + // Fixme + //ui.getModel().getCreationConfigurationDto().setImportDataConfiguration(config, ImmutableSet.<String>of()); sourceModel.validate(StorageStep.CONFIG); diff --git a/observe-application-swing/src/main/resources/i18n/observe-application-swing_en_GB.properties b/observe-application-swing/src/main/resources/i18n/observe-application-swing_en_GB.properties index dfd2c7e..edc8d1e 100644 --- a/observe-application-swing/src/main/resources/i18n/observe-application-swing_en_GB.properties +++ b/observe-application-swing/src/main/resources/i18n/observe-application-swing_en_GB.properties @@ -1800,6 +1800,8 @@ observe.storage.importRemoteStorage.config= observe.storage.importRemoteStorage.description= observe.storage.importRemoteStorageData.config= observe.storage.importRemoteStorageReferentiel.config= +observe.storage.importServerStorage.config= +observe.storage.importServerStorage.description= observe.storage.internalDump.last.modified= observe.storage.internalDump.not.exist= observe.storage.label.backup= diff --git a/observe-application-swing/src/main/resources/i18n/observe-application-swing_es_ES.properties b/observe-application-swing/src/main/resources/i18n/observe-application-swing_es_ES.properties index 082d33d..5fa9165 100644 --- a/observe-application-swing/src/main/resources/i18n/observe-application-swing_es_ES.properties +++ b/observe-application-swing/src/main/resources/i18n/observe-application-swing_es_ES.properties @@ -1802,6 +1802,8 @@ observe.storage.importRemoteStorage.config=Seleccione la base remota a importar observe.storage.importRemoteStorage.description=Configurar la conección hacia una base remota.\nAntes de continuar, debe validad la conexión. observe.storage.importRemoteStorageData.config= observe.storage.importRemoteStorageReferentiel.config=Escoja la base remota que contenga el referencial a importar +observe.storage.importServerStorage.config= +observe.storage.importServerStorage.description= observe.storage.internalDump.last.modified=(última importación \: %1$td/%1$tm/%1$tY à %1$tH\:%1$tM) observe.storage.internalDump.not.exist=No hay base de embarque. observe.storage.label.backup=Base temporal para backup diff --git a/observe-application-swing/src/main/resources/i18n/observe-application-swing_fr_FR.properties b/observe-application-swing/src/main/resources/i18n/observe-application-swing_fr_FR.properties index 7884eda..1ca4299 100644 --- a/observe-application-swing/src/main/resources/i18n/observe-application-swing_fr_FR.properties +++ b/observe-application-swing/src/main/resources/i18n/observe-application-swing_fr_FR.properties @@ -1801,6 +1801,8 @@ observe.storage.importRemoteStorage.config=Sélection de la base distante à imp observe.storage.importRemoteStorage.description=Veuillez configurer la connexion vers une base distante.\nAvant de pouvoir poursuivre, vous devez valider la connexion. observe.storage.importRemoteStorageData.config=Choisir la base distante contenant les données à importer observe.storage.importRemoteStorageReferentiel.config=Choisir la base distante contenant le référentiel à importer +observe.storage.importServerStorage.config= +observe.storage.importServerStorage.description= observe.storage.internalDump.last.modified=(dernier import \: %1$td/%1$tm/%1$tY à %1$tH\:%1$tM) observe.storage.internalDump.not.exist=Pas de base embarquée. observe.storage.label.backup=Base temporaire pour backup diff --git a/observe-application-web/src/main/java/fr/ird/observe/application/web/controller/v1/DataSourceDumpProducerServiceController.java b/observe-application-web/src/main/java/fr/ird/observe/application/web/controller/v1/DataSourceDumpProducerServiceController.java new file mode 100644 index 0000000..d93f13d --- /dev/null +++ b/observe-application-web/src/main/java/fr/ird/observe/application/web/controller/v1/DataSourceDumpProducerServiceController.java @@ -0,0 +1,29 @@ +package fr.ird.observe.application.web.controller.v1; + +import com.google.common.collect.ImmutableSet; +import fr.ird.observe.services.service.DataSourceDumpProducerService; + +/** + * @author Sylvain Bavencoff - bavencoff@codelutin.com + */ +public class DataSourceDumpProducerServiceController extends ObserveAuthenticatedServiceControllerSupport<DataSourceDumpProducerService> implements DataSourceDumpProducerService{ + + public DataSourceDumpProducerServiceController() { + super(DataSourceDumpProducerService.class); + } + + @Override + public byte[] getReferentialDump() { + return service.getReferentialDump(); + } + + @Override + public byte[] getAllDataDump() { + return service.getAllDataDump(); + } + + @Override + public byte[] getDataDump(ImmutableSet<String> importDataIds) { + return service.getDataDump(importDataIds); + } +} diff --git a/observe-services-model/src/main/java/fr/ird/observe/services/dto/gson/VersionAdapter.java b/observe-services-model/src/main/java/fr/ird/observe/services/dto/gson/VersionAdapter.java index 15c576d..7ee9d9d 100644 --- a/observe-services-model/src/main/java/fr/ird/observe/services/dto/gson/VersionAdapter.java +++ b/observe-services-model/src/main/java/fr/ird/observe/services/dto/gson/VersionAdapter.java @@ -21,11 +21,16 @@ public class VersionAdapter implements JsonSerializer<Version>, JsonDeserializer String versionStr = json.getAsString(); - return Versions.valueOf(versionStr); + Version version = Versions.valueOf(versionStr); + + return version; } @Override public JsonElement serialize(Version src, Type typeOfSrc, JsonSerializationContext context) { - return context.serialize(src.getVersion()); + + JsonElement jsonElement = context.serialize(src.getVersion()); + + return jsonElement; } } diff --git a/observe-services-model/src/main/java/fr/ird/observe/services/dto/referential/ProgramDtos.java b/observe-services-model/src/main/java/fr/ird/observe/services/dto/referential/ProgramDtos.java index ce96aa0..ec2f720 100644 --- a/observe-services-model/src/main/java/fr/ird/observe/services/dto/referential/ProgramDtos.java +++ b/observe-services-model/src/main/java/fr/ird/observe/services/dto/referential/ProgramDtos.java @@ -10,21 +10,35 @@ public class ProgramDtos extends AbstractProgramDtos { } public static boolean isProgramSeine(ProgramDto programDto) { - return GearType.longline.equals(programDto.getGearType()); + return GearType.seine.equals(programDto.getGearType()); } public static boolean isProgramLongline(ReferenceDto<ProgramDto> programDtoRef) { - GearType gearType = (GearType) programDtoRef.getPropertyValue(ProgramDto.PROPERTY_GEAR_TYPE); + boolean result = false; + + if (programDtoRef.getPropertyNames().contains(ProgramDto.PROPERTY_GEAR_TYPE)) { + + GearType gearType = (GearType) programDtoRef.getPropertyValue(ProgramDto.PROPERTY_GEAR_TYPE); + + result = GearType.longline.equals(gearType); + } - return GearType.longline.equals(gearType); + return result; } public static boolean isProgramSeine(ReferenceDto<ProgramDto> programDtoRef) { - GearType gearType = (GearType) programDtoRef.getPropertyValue(ProgramDto.PROPERTY_GEAR_TYPE); + boolean result = false; + + if (programDtoRef.getPropertyNames().contains(ProgramDto.PROPERTY_GEAR_TYPE)) { + + GearType gearType = (GearType) programDtoRef.getPropertyValue(ProgramDto.PROPERTY_GEAR_TYPE); + + result = GearType.seine.equals(gearType); + } - return GearType.longline.equals(gearType); + return result; } } diff --git a/observe-services-topia/src/main/java/fr/ird/observe/services/ObserveServiceContextTopia.java b/observe-services-topia/src/main/java/fr/ird/observe/services/ObserveServiceContextTopia.java index cac1eb6..6ebad2b 100644 --- a/observe-services-topia/src/main/java/fr/ird/observe/services/ObserveServiceContextTopia.java +++ b/observe-services-topia/src/main/java/fr/ird/observe/services/ObserveServiceContextTopia.java @@ -135,6 +135,9 @@ public class ObserveServiceContextTopia { public File createTemporaryDirectory(String prefix) { Set<PosixFilePermission> posixFilePermissions = PosixFilePermissions.fromString("rwxr-x---"); FileAttribute<Set<PosixFilePermission>> fileAttribute = PosixFilePermissions.asFileAttribute(posixFilePermissions); + if (! getTemporaryDirectoryRoot().exists()) { + getTemporaryDirectoryRoot().mkdirs(); + } try { return Files.createTempDirectory(getTemporaryDirectoryRoot().toPath(), prefix, fileAttribute).toFile(); } catch (IOException e) { diff --git a/observe-services-topia/src/main/java/fr/ird/observe/services/builder/EntityToReferentialReferenceDtoBuilder.java b/observe-services-topia/src/main/java/fr/ird/observe/services/builder/EntityToReferentialReferenceDtoBuilder.java index b8af7db..72616eb 100644 --- a/observe-services-topia/src/main/java/fr/ird/observe/services/builder/EntityToReferentialReferenceDtoBuilder.java +++ b/observe-services-topia/src/main/java/fr/ird/observe/services/builder/EntityToReferentialReferenceDtoBuilder.java @@ -22,10 +22,12 @@ package fr.ird.observe.services.builder; * #L% */ +import com.google.common.base.Function; import com.google.common.base.Preconditions; import fr.ird.observe.entities.referentiel.ReferenceEntity; import fr.ird.observe.services.ObserveServiceTopia; import fr.ird.observe.services.dto.ObserveDtoBinders; +import fr.ird.observe.services.dto.ObserveDtosInitializer; import fr.ird.observe.services.dto.constants.ReferentialLocale; import fr.ird.observe.services.dto.referential.ReferentialDto; import fr.ird.observe.services.dto.referential.ReferentialReferenceDto; @@ -75,6 +77,8 @@ public class EntityToReferentialReferenceDtoBuilder<E extends TopiaEntity, D ext Class referenceDtoType = ObserveServiceTopia.getDtoType(topiaEntity.getClass()); propertyValue = EntityToReferenceDtoBuilder.build(referenceDtoType, referentialLocale, topiaEntity); + } else { + propertyValue = transform(propertyValue); } result.setPropertyValue(referentialLocale, propertyName, (Serializable) propertyValue); @@ -87,4 +91,13 @@ public class EntityToReferentialReferenceDtoBuilder<E extends TopiaEntity, D ext } + protected static Object transform(Object propertyValue) { + Function function = ObserveDtosInitializer.ENTITY_TO_DTO_FUNCTIONS.get(propertyValue.getClass()); + if (function != null) { + propertyValue = function.apply(propertyValue); + } + return propertyValue; + } + + } diff --git a/observe-services-topia/src/main/java/fr/ird/observe/services/dto/ObserveDtosInitializer.java b/observe-services-topia/src/main/java/fr/ird/observe/services/dto/ObserveDtosInitializer.java index b914890..ebc41b6 100644 --- a/observe-services-topia/src/main/java/fr/ird/observe/services/dto/ObserveDtosInitializer.java +++ b/observe-services-topia/src/main/java/fr/ird/observe/services/dto/ObserveDtosInitializer.java @@ -234,6 +234,8 @@ import org.nuiton.util.beans.Binder; import org.nuiton.util.beans.BinderFactory; import org.nuiton.util.beans.BinderModelBuilder; +import java.util.Map; + /** * Pour initialiser tous les binders. * @@ -867,7 +869,7 @@ public class ObserveDtosInitializer implements ObserveModelInitializer { ProgramDto.PROPERTY_BIRDS_OBSERVATION, ProgramDto.PROPERTY_TARGET_DISCARDS_OBSERVATION, ProgramDto.PROPERTY_GEAR_TYPE); - registerReferentialReferenceDtoBinder(ProgramDto.class, Program.class); + registerReferentialReferenceDtoBinder(ProgramDto.class, Program.class, ProgramDto.PROPERTY_GEAR_TYPE); } @Override @@ -1277,22 +1279,22 @@ public class ObserveDtosInitializer implements ObserveModelInitializer { @Override public void initActivitySeineDto() { registerMainDto(ActivitySeineDto.class, ActivitySeine.class, - ActivitySeineDto.PROPERTY_COMMENT, - ActivitySeineDto.PROPERTY_TIME, - ActivitySeineDto.PROPERTY_LATITUDE, - ActivitySeineDto.PROPERTY_LONGITUDE, - ActivitySeineDto.PROPERTY_VESSEL_SPEED, - ActivitySeineDto.PROPERTY_SEA_SURFACE_TEMPERATURE, - ActivitySeineDto.PROPERTY_ERS_ID, - ActivitySeineDto.PROPERTY_VESSEL_ACTIVITY_SEINE, - ActivitySeineDto.PROPERTY_SURROUNDING_ACTIVITY, - ActivitySeineDto.PROPERTY_DETECTION_MODE, - ActivitySeineDto.PROPERTY_REASON_FOR_NO_FISHING, - ActivitySeineDto.PROPERTY_PREVIOUS_FPA_ZONE, - ActivitySeineDto.PROPERTY_CURRENT_FPA_ZONE, - ActivitySeineDto.PROPERTY_NEXT_FPA_ZONE, - ActivitySeineDto.PROPERTY_WIND, - ActivitySeineDto.PROPERTY_LAST_UPDATE + ActivitySeineDto.PROPERTY_COMMENT, + ActivitySeineDto.PROPERTY_TIME, + ActivitySeineDto.PROPERTY_LATITUDE, + ActivitySeineDto.PROPERTY_LONGITUDE, + ActivitySeineDto.PROPERTY_VESSEL_SPEED, + ActivitySeineDto.PROPERTY_SEA_SURFACE_TEMPERATURE, + ActivitySeineDto.PROPERTY_ERS_ID, + ActivitySeineDto.PROPERTY_VESSEL_ACTIVITY_SEINE, + ActivitySeineDto.PROPERTY_SURROUNDING_ACTIVITY, + ActivitySeineDto.PROPERTY_DETECTION_MODE, + ActivitySeineDto.PROPERTY_REASON_FOR_NO_FISHING, + ActivitySeineDto.PROPERTY_PREVIOUS_FPA_ZONE, + ActivitySeineDto.PROPERTY_CURRENT_FPA_ZONE, + ActivitySeineDto.PROPERTY_NEXT_FPA_ZONE, + ActivitySeineDto.PROPERTY_WIND, + ActivitySeineDto.PROPERTY_LAST_UPDATE ); } @@ -1315,12 +1317,12 @@ public class ObserveDtosInitializer implements ObserveModelInitializer { @Override public void initFloatingObjectDto() { registerMainDto(FloatingObjectDto.class, FloatingObject.class, - FloatingObjectDto.PROPERTY_COMMENT, - FloatingObjectDto.PROPERTY_DAYS_AT_SEA_COUNT, - FloatingObjectDto.PROPERTY_SUPPORT_VESSEL_NAME, - FloatingObjectDto.PROPERTY_OBJECT_FATE, - FloatingObjectDto.PROPERTY_OBJECT_OPERATION, - FloatingObjectDto.PROPERTY_OBJECT_TYPE + FloatingObjectDto.PROPERTY_COMMENT, + FloatingObjectDto.PROPERTY_DAYS_AT_SEA_COUNT, + FloatingObjectDto.PROPERTY_SUPPORT_VESSEL_NAME, + FloatingObjectDto.PROPERTY_OBJECT_FATE, + FloatingObjectDto.PROPERTY_OBJECT_OPERATION, + FloatingObjectDto.PROPERTY_OBJECT_TYPE ); } @@ -1348,8 +1350,8 @@ public class ObserveDtosInitializer implements ObserveModelInitializer { @Override public void initFloatingObjectTransmittingBuoyDto() { registerDto(FloatingObjectTransmittingBuoyDto.class, FloatingObject.class, - FloatingObjectTransmittingBuoyDto.PROPERTY_COMMENT, - FloatingObjectTransmittingBuoyDto.PROPERTY_TRANSMITTING_BUOY + FloatingObjectTransmittingBuoyDto.PROPERTY_COMMENT, + FloatingObjectTransmittingBuoyDto.PROPERTY_TRANSMITTING_BUOY ); } @@ -1459,23 +1461,23 @@ public class ObserveDtosInitializer implements ObserveModelInitializer { @Override public void initSetSeineDto() { registerMainDto(SetSeineDto.class, SetSeine.class, - SetSeineDto.PROPERTY_COMMENT, - SetSeineDto.PROPERTY_START_TIME, - SetSeineDto.PROPERTY_END_PURSING_TIME_STAMP, - SetSeineDto.PROPERTY_END_SET_TIME_STAMP, - SetSeineDto.PROPERTY_MAX_GEAR_DEPTH, - SetSeineDto.PROPERTY_CURRENT_SPEED, - SetSeineDto.PROPERTY_CURRENT_DIRECTION, - SetSeineDto.PROPERTY_SCHOOL_TOP_DEPTH, - SetSeineDto.PROPERTY_SCHOOL_MEAN_DEPTH, - SetSeineDto.PROPERTY_SCHOOL_THICKNESS, - SetSeineDto.PROPERTY_SONAR_USED, - SetSeineDto.PROPERTY_SUPPORT_VESSEL_NAME, - SetSeineDto.PROPERTY_NON_TARGET_DISCARDED, - SetSeineDto.PROPERTY_CURRENT_MEASURE_DEPTH, - SetSeineDto.PROPERTY_SCHOOL_TYPE, - SetSeineDto.PROPERTY_REASON_FOR_NULL_SET, - SetSeineDto.PROPERTY_LAST_UPDATE + SetSeineDto.PROPERTY_COMMENT, + SetSeineDto.PROPERTY_START_TIME, + SetSeineDto.PROPERTY_END_PURSING_TIME_STAMP, + SetSeineDto.PROPERTY_END_SET_TIME_STAMP, + SetSeineDto.PROPERTY_MAX_GEAR_DEPTH, + SetSeineDto.PROPERTY_CURRENT_SPEED, + SetSeineDto.PROPERTY_CURRENT_DIRECTION, + SetSeineDto.PROPERTY_SCHOOL_TOP_DEPTH, + SetSeineDto.PROPERTY_SCHOOL_MEAN_DEPTH, + SetSeineDto.PROPERTY_SCHOOL_THICKNESS, + SetSeineDto.PROPERTY_SONAR_USED, + SetSeineDto.PROPERTY_SUPPORT_VESSEL_NAME, + SetSeineDto.PROPERTY_NON_TARGET_DISCARDED, + SetSeineDto.PROPERTY_CURRENT_MEASURE_DEPTH, + SetSeineDto.PROPERTY_SCHOOL_TYPE, + SetSeineDto.PROPERTY_REASON_FOR_NULL_SET, + SetSeineDto.PROPERTY_LAST_UPDATE ); } @@ -1499,8 +1501,8 @@ public class ObserveDtosInitializer implements ObserveModelInitializer { @Override public void initSetSeineTargetCatchDto() { registerDto(SetSeineTargetCatchDto.class, SetSeine.class, - SetSeineTargetCatchDto.PROPERTY_TARGET_CATCH, - SetSeineTargetCatchDto.PROPERTY_LAST_UPDATE + SetSeineTargetCatchDto.PROPERTY_TARGET_CATCH, + SetSeineTargetCatchDto.PROPERTY_LAST_UPDATE ); } @@ -1544,11 +1546,11 @@ public class ObserveDtosInitializer implements ObserveModelInitializer { @Override public void initTransmittingBuoyDto() { registerMainDto(TransmittingBuoyDto.class, TransmittingBuoy.class, - TransmittingBuoyDto.PROPERTY_CODE, - TransmittingBuoyDto.PROPERTY_BRAND, - TransmittingBuoyDto.PROPERTY_OWNERSHIP, - TransmittingBuoyDto.PROPERTY_TRANSMITTING_BUOY_OPERATION, - TransmittingBuoyDto.PROPERTY_TRANSMITTING_BUOY_TYPE + TransmittingBuoyDto.PROPERTY_CODE, + TransmittingBuoyDto.PROPERTY_BRAND, + TransmittingBuoyDto.PROPERTY_OWNERSHIP, + TransmittingBuoyDto.PROPERTY_TRANSMITTING_BUOY_OPERATION, + TransmittingBuoyDto.PROPERTY_TRANSMITTING_BUOY_TYPE ); } @@ -1740,101 +1742,109 @@ public class ObserveDtosInitializer implements ObserveModelInitializer { return builder; } - protected static <Source extends IdDto, Target> void addDtoToEntityFunctions(BinderModelBuilder<Source, Target> builder) { - - builder.addFunction(fr.ird.observe.services.dto.constants.GearType.class, new Function<fr.ird.observe.services.dto.constants.GearType, fr.ird.observe.entities.constants.GearType>() { - - @Override - public fr.ird.observe.entities.constants.GearType apply(fr.ird.observe.services.dto.constants.GearType input) { - return fr.ird.observe.entities.constants.GearType.valueOf(input.name()); - } - }); - builder.addFunction(fr.ird.observe.services.dto.constants.ReferenceStatus.class, new Function<fr.ird.observe.services.dto.constants.ReferenceStatus, fr.ird.observe.entities.constants.ReferenceStatus>() { - - @Override - public fr.ird.observe.entities.constants.ReferenceStatus apply(fr.ird.observe.services.dto.constants.ReferenceStatus input) { - return fr.ird.observe.entities.constants.ReferenceStatus.valueOf(input.name()); - } - }); - builder.addFunction(fr.ird.observe.services.dto.constants.seine.Ownership.class, new Function<fr.ird.observe.services.dto.constants.seine.Ownership, fr.ird.observe.entities.constants.seine.Ownership>() { - - @Override - public fr.ird.observe.entities.constants.seine.Ownership apply(fr.ird.observe.services.dto.constants.seine.Ownership input) { - return fr.ird.observe.entities.constants.seine.Ownership.valueOf(input.name()); - } - }); - builder.addFunction(fr.ird.observe.services.dto.constants.seine.SchoolType.class, new Function<fr.ird.observe.services.dto.constants.seine.SchoolType, fr.ird.observe.entities.constants.seine.SchoolType>() { + public static ImmutableMap<Class, Function> DTO_TO_ENTITY_FUNCTIONS = ImmutableMap.<Class, Function>builder() + .put(fr.ird.observe.services.dto.constants.GearType.class, new Function<fr.ird.observe.services.dto.constants.GearType, fr.ird.observe.entities.constants.GearType>() { + + @Override + public fr.ird.observe.entities.constants.GearType apply(fr.ird.observe.services.dto.constants.GearType input) { + return fr.ird.observe.entities.constants.GearType.valueOf(input.name()); + } + }) + .put(fr.ird.observe.services.dto.constants.ReferenceStatus.class, new Function<fr.ird.observe.services.dto.constants.ReferenceStatus, fr.ird.observe.entities.constants.ReferenceStatus>() { + + @Override + public fr.ird.observe.entities.constants.ReferenceStatus apply(fr.ird.observe.services.dto.constants.ReferenceStatus input) { + return fr.ird.observe.entities.constants.ReferenceStatus.valueOf(input.name()); + } + }) + .put(fr.ird.observe.services.dto.constants.seine.Ownership.class, new Function<fr.ird.observe.services.dto.constants.seine.Ownership, fr.ird.observe.entities.constants.seine.Ownership>() { + + @Override + public fr.ird.observe.entities.constants.seine.Ownership apply(fr.ird.observe.services.dto.constants.seine.Ownership input) { + return fr.ird.observe.entities.constants.seine.Ownership.valueOf(input.name()); + } + }) + .put(fr.ird.observe.services.dto.constants.seine.SchoolType.class, new Function<fr.ird.observe.services.dto.constants.seine.SchoolType, fr.ird.observe.entities.constants.seine.SchoolType>() { + + @Override + public fr.ird.observe.entities.constants.seine.SchoolType apply(fr.ird.observe.services.dto.constants.seine.SchoolType input) { + return fr.ird.observe.entities.constants.seine.SchoolType.valueOf(input.name()); + } + }) + .put(fr.ird.observe.services.dto.constants.seine.TypeTransmittingBuoyOperation.class, new Function<fr.ird.observe.services.dto.constants.seine.TypeTransmittingBuoyOperation, fr.ird.observe.entities.constants.seine.TypeTransmittingBuoyOperation>() { + + @Override + public fr.ird.observe.entities.constants.seine.TypeTransmittingBuoyOperation apply(fr.ird.observe.services.dto.constants.seine.TypeTransmittingBuoyOperation input) { + return fr.ird.observe.entities.constants.seine.TypeTransmittingBuoyOperation.valueOf(input.name()); + } + }) + .put(fr.ird.observe.services.dto.constants.seine.NonTargetCatchComputedValueSource.class, new Function<fr.ird.observe.services.dto.constants.seine.NonTargetCatchComputedValueSource, fr.ird.observe.entities.constants.seine.NonTargetCatchComputedValueSource>() { + + @Override + public fr.ird.observe.entities.constants.seine.NonTargetCatchComputedValueSource apply(fr.ird.observe.services.dto.constants.seine.NonTargetCatchComputedValueSource input) { + return fr.ird.observe.entities.constants.seine.NonTargetCatchComputedValueSource.valueOf(input.name()); + } + }) + .build(); + + public static ImmutableMap<Class, Function> ENTITY_TO_DTO_FUNCTIONS = ImmutableMap.<Class, Function>builder() + .put(fr.ird.observe.entities.constants.GearType.class, new Function<fr.ird.observe.entities.constants.GearType, fr.ird.observe.services.dto.constants.GearType>() { + + @Override + public fr.ird.observe.services.dto.constants.GearType apply(fr.ird.observe.entities.constants.GearType input) { + return fr.ird.observe.services.dto.constants.GearType.valueOf(input.name()); + } + }) + .put(fr.ird.observe.entities.constants.ReferenceStatus.class, new Function<fr.ird.observe.entities.constants.ReferenceStatus, fr.ird.observe.services.dto.constants.ReferenceStatus>() { + + @Override + public fr.ird.observe.services.dto.constants.ReferenceStatus apply(fr.ird.observe.entities.constants.ReferenceStatus input) { + return fr.ird.observe.services.dto.constants.ReferenceStatus.valueOf(input.name()); + } + }) + .put(fr.ird.observe.entities.constants.seine.Ownership.class, new Function<fr.ird.observe.entities.constants.seine.Ownership, fr.ird.observe.services.dto.constants.seine.Ownership>() { + + @Override + public fr.ird.observe.services.dto.constants.seine.Ownership apply(fr.ird.observe.entities.constants.seine.Ownership input) { + return fr.ird.observe.services.dto.constants.seine.Ownership.valueOf(input.name()); + } + }) + .put(fr.ird.observe.entities.constants.seine.SchoolType.class, new Function<fr.ird.observe.entities.constants.seine.SchoolType, fr.ird.observe.services.dto.constants.seine.SchoolType>() { + + @Override + public fr.ird.observe.services.dto.constants.seine.SchoolType apply(fr.ird.observe.entities.constants.seine.SchoolType input) { + return fr.ird.observe.services.dto.constants.seine.SchoolType.valueOf(input.name()); + } + }) + .put(fr.ird.observe.entities.constants.seine.TypeTransmittingBuoyOperation.class, new Function<fr.ird.observe.entities.constants.seine.TypeTransmittingBuoyOperation, fr.ird.observe.services.dto.constants.seine.TypeTransmittingBuoyOperation>() { + + @Override + public fr.ird.observe.services.dto.constants.seine.TypeTransmittingBuoyOperation apply(fr.ird.observe.entities.constants.seine.TypeTransmittingBuoyOperation input) { + return fr.ird.observe.services.dto.constants.seine.TypeTransmittingBuoyOperation.valueOf(input.name()); + } + }) + .put(fr.ird.observe.entities.constants.seine.NonTargetCatchComputedValueSource.class, new Function<fr.ird.observe.entities.constants.seine.NonTargetCatchComputedValueSource, fr.ird.observe.services.dto.constants.seine.NonTargetCatchComputedValueSource>() { + + @Override + public fr.ird.observe.services.dto.constants.seine.NonTargetCatchComputedValueSource apply(fr.ird.observe.entities.constants.seine.NonTargetCatchComputedValueSource input) { + return fr.ird.observe.services.dto.constants.seine.NonTargetCatchComputedValueSource.valueOf(input.name()); + } + }) + .build(); - @Override - public fr.ird.observe.entities.constants.seine.SchoolType apply(fr.ird.observe.services.dto.constants.seine.SchoolType input) { - return fr.ird.observe.entities.constants.seine.SchoolType.valueOf(input.name()); - } - }); - builder.addFunction(fr.ird.observe.services.dto.constants.seine.TypeTransmittingBuoyOperation.class, new Function<fr.ird.observe.services.dto.constants.seine.TypeTransmittingBuoyOperation, fr.ird.observe.entities.constants.seine.TypeTransmittingBuoyOperation>() { - @Override - public fr.ird.observe.entities.constants.seine.TypeTransmittingBuoyOperation apply(fr.ird.observe.services.dto.constants.seine.TypeTransmittingBuoyOperation input) { - return fr.ird.observe.entities.constants.seine.TypeTransmittingBuoyOperation.valueOf(input.name()); - } - }); - builder.addFunction(fr.ird.observe.services.dto.constants.seine.NonTargetCatchComputedValueSource.class, new Function<fr.ird.observe.services.dto.constants.seine.NonTargetCatchComputedValueSource, fr.ird.observe.entities.constants.seine.NonTargetCatchComputedValueSource>() { + protected static <Source extends IdDto, Target> void addDtoToEntityFunctions(BinderModelBuilder<Source, Target> builder) { - @Override - public fr.ird.observe.entities.constants.seine.NonTargetCatchComputedValueSource apply(fr.ird.observe.services.dto.constants.seine.NonTargetCatchComputedValueSource input) { - return fr.ird.observe.entities.constants.seine.NonTargetCatchComputedValueSource.valueOf(input.name()); - } - }); + for(Map.Entry<Class, Function> entry : DTO_TO_ENTITY_FUNCTIONS.entrySet()) { + builder.addFunction(entry.getKey(), entry.getValue()); + } } protected static <Source extends TopiaEntity, Target> void addEntityToDtoFunctions(BinderModelBuilder<Source, Target> builder) { - builder.addFunction(fr.ird.observe.entities.constants.GearType.class, new Function<fr.ird.observe.entities.constants.GearType, fr.ird.observe.services.dto.constants.GearType>() { - - @Override - public fr.ird.observe.services.dto.constants.GearType apply(fr.ird.observe.entities.constants.GearType input) { - return fr.ird.observe.services.dto.constants.GearType.valueOf(input.name()); - } - }); - - builder.addFunction(fr.ird.observe.entities.constants.ReferenceStatus.class, new Function<fr.ird.observe.entities.constants.ReferenceStatus, fr.ird.observe.services.dto.constants.ReferenceStatus>() { - - @Override - public fr.ird.observe.services.dto.constants.ReferenceStatus apply(fr.ird.observe.entities.constants.ReferenceStatus input) { - return fr.ird.observe.services.dto.constants.ReferenceStatus.valueOf(input.name()); - } - }); - - builder.addFunction(fr.ird.observe.entities.constants.seine.Ownership.class, new Function<fr.ird.observe.entities.constants.seine.Ownership, fr.ird.observe.services.dto.constants.seine.Ownership>() { - - @Override - public fr.ird.observe.services.dto.constants.seine.Ownership apply(fr.ird.observe.entities.constants.seine.Ownership input) { - return fr.ird.observe.services.dto.constants.seine.Ownership.valueOf(input.name()); - } - }); - - builder.addFunction(fr.ird.observe.entities.constants.seine.SchoolType.class, new Function<fr.ird.observe.entities.constants.seine.SchoolType, fr.ird.observe.services.dto.constants.seine.SchoolType>() { - - @Override - public fr.ird.observe.services.dto.constants.seine.SchoolType apply(fr.ird.observe.entities.constants.seine.SchoolType input) { - return fr.ird.observe.services.dto.constants.seine.SchoolType.valueOf(input.name()); - } - }); - - builder.addFunction(fr.ird.observe.entities.constants.seine.TypeTransmittingBuoyOperation.class, new Function<fr.ird.observe.entities.constants.seine.TypeTransmittingBuoyOperation, fr.ird.observe.services.dto.constants.seine.TypeTransmittingBuoyOperation>() { - - @Override - public fr.ird.observe.services.dto.constants.seine.TypeTransmittingBuoyOperation apply(fr.ird.observe.entities.constants.seine.TypeTransmittingBuoyOperation input) { - return fr.ird.observe.services.dto.constants.seine.TypeTransmittingBuoyOperation.valueOf(input.name()); - } - }); - - builder.addFunction(fr.ird.observe.entities.constants.seine.NonTargetCatchComputedValueSource.class, new Function<fr.ird.observe.entities.constants.seine.NonTargetCatchComputedValueSource, fr.ird.observe.services.dto.constants.seine.NonTargetCatchComputedValueSource>() { - - @Override - public fr.ird.observe.services.dto.constants.seine.NonTargetCatchComputedValueSource apply(fr.ird.observe.entities.constants.seine.NonTargetCatchComputedValueSource input) { - return fr.ird.observe.services.dto.constants.seine.NonTargetCatchComputedValueSource.valueOf(input.name()); - } - }); + for(Map.Entry<Class, Function> entry : ENTITY_TO_DTO_FUNCTIONS.entrySet()) { + builder.addFunction(entry.getKey(), entry.getValue()); + } } diff --git a/observe-services-topia/src/test/java/fr/ird/observe/services/builder/EntityToReferentialReferenceDtoBuilderTest.java b/observe-services-topia/src/test/java/fr/ird/observe/services/builder/EntityToReferentialReferenceDtoBuilderTest.java new file mode 100644 index 0000000..c64795b --- /dev/null +++ b/observe-services-topia/src/test/java/fr/ird/observe/services/builder/EntityToReferentialReferenceDtoBuilderTest.java @@ -0,0 +1,57 @@ +package fr.ird.observe.services.builder; + +import fr.ird.observe.entities.constants.GearType; +import fr.ird.observe.entities.constants.ReferenceStatus; +import fr.ird.observe.entities.referentiel.Program; +import fr.ird.observe.entities.referentiel.ProgramImpl; +import fr.ird.observe.services.ObserveServiceTopia; +import fr.ird.observe.services.dto.constants.ReferentialLocale; +import fr.ird.observe.services.dto.referential.ProgramDto; +import fr.ird.observe.services.dto.referential.ReferentialReferenceDto; +import org.junit.Assert; +import org.junit.BeforeClass; +import org.junit.Test; +import org.nuiton.util.DateUtil; + +/** + * @author Sylvain Bavencoff - bavencoff@codelutin.com + */ +public class EntityToReferentialReferenceDtoBuilderTest { + + @BeforeClass + public static void setUp() throws Exception { + ObserveServiceTopia.init(); + } + + @Test + public void testCopy() { + + Program program = new ProgramImpl(); + program.setCode("code"); + program.setNeedComment(true); + program.setStatus(ReferenceStatus.enabled); + program.setLabel1("label1"); + program.setLabel2("label2"); + program.setLabel3("label3"); + program.setLabel4("label4"); + program.setLabel5("label5"); + program.setLabel6("label6"); + program.setLabel7("label7"); + program.setLabel8("label8"); + program.setTopiaId("Program1"); + program.setStartDate(DateUtil.createDate(1, 1, 1)); + program.setEndDate(DateUtil.createDate(1, 1, 2)); + program.setGearType(GearType.seine); + program.setTargetDiscardsObservation(1); + + ReferentialReferenceDto<ProgramDto> referenceProgramDto = EntityToReferentialReferenceDtoBuilder.build(ProgramDto.class, ReferentialLocale.FR, program); + + // On vérife que le program a bien été copié + Assert.assertEquals(program.getTopiaId(), referenceProgramDto.getId()); + Assert.assertEquals(program.getCode(), referenceProgramDto.getPropertyValue(ProgramDto.PROPERTY_CODE)); + Assert.assertEquals(program.getLabel2(), referenceProgramDto.getPropertyValue("label")); + Assert.assertEquals(fr.ird.observe.services.dto.constants.GearType.seine, referenceProgramDto.getPropertyValue(ProgramDto.PROPERTY_GEAR_TYPE)); + + } + +} -- To stop receiving notification emails like this one, please contact codelutin.com SCM administrator <admin+scm@list.forge.codelutin.com>.