This is an automated email from the git hooks/post-receive script. New commit to branch develop in repository observe. See https://gitlab.nuiton.org/codelutin/observe.git commit 6eaef96358e18fd4f2ee45e63a55d3c4f531c60f Author: Tony CHEMIT <chemit@codelutin.com> Date: Sun Dec 18 12:06:47 2016 +0100 Ajout de la sauvegarde des configurations de source de données (Refs #8555) --- .../src/main/config/ObserveSwingApplication.ini | 10 ++ .../ObserveSwingApplicationConfig.java | 41 ++++++++ .../RemoteDataSourceConfiguration.java | 56 +++++++++++ .../ServerDataSourceConfiguration.java | 56 +++++++++++ ...pplication-swing-configuration_en_GB.properties | 2 + ...pplication-swing-configuration_es_ES.properties | 2 + ...pplication-swing-configuration_fr_FR.properties | 2 + .../swing/ui/actions/AbstractUIAction.java | 8 +- .../swing/ui/actions/content/GoDownUIAction.java | 3 +- .../swing/ui/actions/content/GoUpUIAction.java | 8 +- .../SaveCurrentRemoteConfigurationUIAction.java | 101 ++++++++++++++++++++ .../SaveCurrentServerConfigurationUIAction.java | 104 +++++++++++++++++++++ .../storage/UseRemoteConfigurationUIAction.java | 61 ++++++++++++ .../storage/UseServerConfigurationUIAction.java | 63 +++++++++++++ .../swing/ui/storage/tabs/ConfigUI.jaxx | 46 +++++---- .../swing/ui/storage/tabs/ConfigUI.jcss | 34 +++++++ .../swing/ui/storage/tabs/ConfigUIHandler.java | 74 ++++++++++++++- .../nodes/NavigationTreeNodeSupport.java | 3 +- .../i18n/application-swing_en_GB.properties | 4 + .../i18n/application-swing_es_ES.properties | 4 + .../i18n/application-swing_fr_FR.properties | 4 + pom.xml | 2 +- 22 files changed, 655 insertions(+), 33 deletions(-) diff --git a/application-swing-configuration/src/main/config/ObserveSwingApplication.ini b/application-swing-configuration/src/main/config/ObserveSwingApplication.ini index fbfece9..332a225 100644 --- a/application-swing-configuration/src/main/config/ObserveSwingApplication.ini +++ b/application-swing-configuration/src/main/config/ObserveSwingApplication.ini @@ -152,6 +152,16 @@ key = h2.serverPort type = Integer defaultValue = 9093 +[option remoteDataSourceConfigurations] +description = observe.config.remoteDataSourceConfigurations.description +key = remoteDataSourceConfigurations +type = fr.ird.observe.application.swing.configuration.RemoteDataSourceConfiguration[] + +[option serverDataSourceConfigurations] +description = observe.config.serverDataSourceConfigurations.description +key = serverDataSourceConfigurations +type = fr.ird.observe.application.swing.configuration.ServerDataSourceConfiguration[] + [option obstunaUrl] description = observe.config.obstuna.url.description key = obstuna.url diff --git a/application-swing-configuration/src/main/java/fr/ird/observe/application/swing/configuration/ObserveSwingApplicationConfig.java b/application-swing-configuration/src/main/java/fr/ird/observe/application/swing/configuration/ObserveSwingApplicationConfig.java index c5d653d..753a194 100644 --- a/application-swing-configuration/src/main/java/fr/ird/observe/application/swing/configuration/ObserveSwingApplicationConfig.java +++ b/application-swing-configuration/src/main/java/fr/ird/observe/application/swing/configuration/ObserveSwingApplicationConfig.java @@ -24,6 +24,7 @@ package fr.ird.observe.application.swing.configuration; import com.google.common.collect.ImmutableList; import com.google.common.collect.ImmutableSet; import com.google.common.collect.Sets; +import com.google.gson.Gson; import fr.ird.observe.application.swing.configuration.constants.CreationMode; import fr.ird.observe.application.swing.configuration.constants.DbMode; import org.apache.commons.lang3.StringUtils; @@ -39,6 +40,8 @@ import java.beans.PropertyChangeListener; import java.io.File; import java.io.IOException; import java.nio.charset.StandardCharsets; +import java.util.ArrayList; +import java.util.Arrays; import java.util.Calendar; import java.util.Date; import java.util.LinkedList; @@ -388,6 +391,44 @@ public class ObserveSwingApplicationConfig extends GeneratedObserveSwingApplicat return longlinVesselTypeIds; } + @Override + public RemoteDataSourceConfiguration[] getRemoteDataSourceConfigurations() { + String option = get().getOption(ObserveSwingApplicationConfigOption.REMOTE_DATA_SOURCE_CONFIGURATIONS.getKey()); + return option == null ? new RemoteDataSourceConfiguration[0] : new Gson().fromJson(option, RemoteDataSourceConfiguration[].class); + } + + public void addRemoteDataSourceConfigurations(RemoteDataSourceConfiguration remoteDataSourceConfiguration) { + List<RemoteDataSourceConfiguration> remoteDataSourceConfigurations = new ArrayList<>(Arrays.asList(getRemoteDataSourceConfigurations())); + remoteDataSourceConfigurations.add(remoteDataSourceConfiguration); + setRemoteDataSourceConfigurations(remoteDataSourceConfigurations.toArray(new RemoteDataSourceConfiguration[remoteDataSourceConfigurations.size()])); + saveForUser(); + } + + @Override + public void setRemoteDataSourceConfigurations(RemoteDataSourceConfiguration[] remoteDataSourceConfigurations) { + String option = new Gson().toJson(remoteDataSourceConfigurations); + get().setOption(ObserveSwingApplicationConfigOption.REMOTE_DATA_SOURCE_CONFIGURATIONS.getKey(), option); + } + + @Override + public ServerDataSourceConfiguration[] getServerDataSourceConfigurations() { + String option = get().getOption(ObserveSwingApplicationConfigOption.SERVER_DATA_SOURCE_CONFIGURATIONS.getKey()); + return option == null ? new ServerDataSourceConfiguration[0] : new Gson().fromJson(option, ServerDataSourceConfiguration[].class); + } + + public void addServerDataSourceConfigurations(ServerDataSourceConfiguration remoteDataSourceConfiguration) { + List<ServerDataSourceConfiguration> remoteDataSourceConfigurations = new ArrayList<>(Arrays.asList(getServerDataSourceConfigurations())); + remoteDataSourceConfigurations.add(remoteDataSourceConfiguration); + setServerDataSourceConfigurations(remoteDataSourceConfigurations.toArray(new ServerDataSourceConfiguration[remoteDataSourceConfigurations.size()])); + saveForUser(); + } + + @Override + public void setServerDataSourceConfigurations(ServerDataSourceConfiguration[] serverDataSourceConfigurations) { + String option = new Gson().toJson(serverDataSourceConfigurations); + get().setOption(ObserveSwingApplicationConfigOption.SERVER_DATA_SOURCE_CONFIGURATIONS.getKey(), option); + } + ////////////////////////////////////////////////// // Toutes les étapes d'actions ////////////////////////////////////////////////// diff --git a/application-swing-configuration/src/main/java/fr/ird/observe/application/swing/configuration/RemoteDataSourceConfiguration.java b/application-swing-configuration/src/main/java/fr/ird/observe/application/swing/configuration/RemoteDataSourceConfiguration.java new file mode 100644 index 0000000..5a3a32d --- /dev/null +++ b/application-swing-configuration/src/main/java/fr/ird/observe/application/swing/configuration/RemoteDataSourceConfiguration.java @@ -0,0 +1,56 @@ +package fr.ird.observe.application.swing.configuration; + +/** + * Created on 18/12/16. + * + * @author Tony Chemit - chemit@codelutin.com + * @since 6.0 + */ +public class RemoteDataSourceConfiguration { + + private String name; + private String url; + private String login; + private String password; + private boolean useSsl; + + public String getName() { + return name; + } + + public void setName(String name) { + this.name = name; + } + + public String getUrl() { + return url; + } + + public void setUrl(String url) { + this.url = url; + } + + public String getLogin() { + return login; + } + + public void setLogin(String login) { + this.login = login; + } + + public String getPassword() { + return password; + } + + public void setPassword(String password) { + this.password = password; + } + + public boolean isUseSsl() { + return useSsl; + } + + public void setUseSsl(boolean useSsl) { + this.useSsl = useSsl; + } +} diff --git a/application-swing-configuration/src/main/java/fr/ird/observe/application/swing/configuration/ServerDataSourceConfiguration.java b/application-swing-configuration/src/main/java/fr/ird/observe/application/swing/configuration/ServerDataSourceConfiguration.java new file mode 100644 index 0000000..4c588ed --- /dev/null +++ b/application-swing-configuration/src/main/java/fr/ird/observe/application/swing/configuration/ServerDataSourceConfiguration.java @@ -0,0 +1,56 @@ +package fr.ird.observe.application.swing.configuration; + +/** + * Created on 18/12/16. + * + * @author Tony Chemit - chemit@codelutin.com + * @since 6.0 + */ +public class ServerDataSourceConfiguration { + + private String name; + private String url; + private String login; + private String password; + private String databaseName; + + public String getName() { + return name; + } + + public void setName(String name) { + this.name = name; + } + + public String getUrl() { + return url; + } + + public void setUrl(String url) { + this.url = url; + } + + public String getLogin() { + return login; + } + + public void setLogin(String login) { + this.login = login; + } + + public String getPassword() { + return password; + } + + public void setPassword(String password) { + this.password = password; + } + + public String getDatabaseName() { + return databaseName; + } + + public void setDatabaseName(String databaseName) { + this.databaseName = databaseName; + } +} diff --git a/application-swing-configuration/src/main/resources/i18n/application-swing-configuration_en_GB.properties b/application-swing-configuration/src/main/resources/i18n/application-swing-configuration_en_GB.properties index dbd5181..b6bfcef 100644 --- a/application-swing-configuration/src/main/resources/i18n/application-swing-configuration_en_GB.properties +++ b/application-swing-configuration/src/main/resources/i18n/application-swing-configuration_en_GB.properties @@ -58,10 +58,12 @@ observe.config.obstuna.password.description=Remote password observe.config.obstuna.url.description=URL of remote data source observe.config.obstuna.useSsl.description=Flag sets to true when your are using remote with ssl observe.config.pg.can.migrate.description=Flat sets to true when you can migrate remote data sources +observe.config.remoteDataSourceConfigurations.description=Remote data source configurations observe.config.server.dataBaseName.description=Optional name of database name on server observe.config.server.login.description=Server login observe.config.server.password.description=Server password observe.config.server.url.description=Server url +observe.config.serverDataSourceConfigurations.description=Server data source configurations observe.config.showMigrationProgression=Show migration progression observe.config.showMigrationSql=Show migration sql queries observe.config.showSql=Show sql diff --git a/application-swing-configuration/src/main/resources/i18n/application-swing-configuration_es_ES.properties b/application-swing-configuration/src/main/resources/i18n/application-swing-configuration_es_ES.properties index 28a7a37..496295e 100644 --- a/application-swing-configuration/src/main/resources/i18n/application-swing-configuration_es_ES.properties +++ b/application-swing-configuration/src/main/resources/i18n/application-swing-configuration_es_ES.properties @@ -58,10 +58,12 @@ observe.config.obstuna.password.description=Contraseña para conectarse a la bas observe.config.obstuna.url.description=Url de conexión a la base Obstuna observe.config.obstuna.useSsl.description=Bandera para permitir la utilización del modo ssl para la conexión a Obstuna observe.config.pg.can.migrate.description=Autorizar la actualización de las bases remotas (debe ser el propietario de la base) +observe.config.remoteDataSourceConfigurations.description=Configuration de bases distantes \#TODO observe.config.server.dataBaseName.description=El nombre opcinal de la base de referencia sobre el servidor observe.config.server.login.description=Identificador del usuario observe.config.server.password.description=La contraseña del usuario observe.config.server.url.description=La dirección (url) del servidor +observe.config.serverDataSourceConfigurations.description=Configurations de serveurs distants \#TODO observe.config.showMigrationProgression=Mostar los logs de actualización de una base de datos observe.config.showMigrationSql=Mostrar en los logs las consultas realizadas durante la actualización de una base de datos observe.config.showSql=Mostrar en los los todas las consultas sql ejecutadas diff --git a/application-swing-configuration/src/main/resources/i18n/application-swing-configuration_fr_FR.properties b/application-swing-configuration/src/main/resources/i18n/application-swing-configuration_fr_FR.properties index ccdc3e7..4e368f3 100644 --- a/application-swing-configuration/src/main/resources/i18n/application-swing-configuration_fr_FR.properties +++ b/application-swing-configuration/src/main/resources/i18n/application-swing-configuration_fr_FR.properties @@ -58,10 +58,12 @@ observe.config.obstuna.password.description=Le mote de passe pour se connecter observe.config.obstuna.url.description=L'url de connexion à la base Obstuna observe.config.obstuna.useSsl.description=Drapeau pour permettre l'utilisation du mode ssl pour la connexion à Obstuna observe.config.pg.can.migrate.description=Autoriser la mise à jour des bases distantes (il faut être propriétaire de la base) +observe.config.remoteDataSourceConfigurations.description=Configurations de bases distantes observe.config.server.dataBaseName.description=Le nom optionel de la base cible sur le serveur observe.config.server.login.description=Identifiant de l'utilisateur observe.config.server.password.description=Le mot de passe de l'utilisateur observe.config.server.url.description=L'url du serveur +observe.config.serverDataSourceConfigurations.description=Configuration de serveurs distants observe.config.showMigrationProgression=Afficher dans les logs la progression de la mise à jour d'une base observe.config.showMigrationSql=Afficher dans les logs les requêtes jouées lors de la mise à jour d'une base observe.config.showSql=Afficher dans les logs toutes les requêtes sql executées diff --git a/application-swing/src/main/java/fr/ird/observe/application/swing/ui/actions/AbstractUIAction.java b/application-swing/src/main/java/fr/ird/observe/application/swing/ui/actions/AbstractUIAction.java index 90efdfa..f548de7 100644 --- a/application-swing/src/main/java/fr/ird/observe/application/swing/ui/actions/AbstractUIAction.java +++ b/application-swing/src/main/java/fr/ird/observe/application/swing/ui/actions/AbstractUIAction.java @@ -26,6 +26,7 @@ import fr.ird.observe.application.swing.ui.MnemonicHelper; import fr.ird.observe.application.swing.ui.ObserveMainUI; import fr.ird.observe.application.swing.ui.UIHelper; import fr.ird.observe.application.swing.ui.content.ContentUI; +import jaxx.runtime.JAXXObject; import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; @@ -52,6 +53,7 @@ public abstract class AbstractUIAction extends AbstractAction { private static final Log log = LogFactory.getLog(AbstractUIAction.class); public static final String EDITOR = "editor"; + public static final String CLIENT_PROPERTY_UI = "ui"; private final ObserveMainUI mainUI; @@ -74,9 +76,9 @@ public abstract class AbstractUIAction extends AbstractAction { return mainUI; } - public void initAction(ContentUI<?, ?> ui, AbstractButton editor) { + public void initAction(JComponent ui, AbstractButton editor) { editor.setAction(this); - editor.putClientProperty("ui", ui); + editor.putClientProperty(CLIENT_PROPERTY_UI, ui); //FIXME Attention on introduit un état dans l'action et si l'action est utilisée plusieurs fois dans un même écran //FIXME cela va introduire des effets de bord putValue(EDITOR, editor); @@ -106,7 +108,7 @@ public abstract class AbstractUIAction extends AbstractAction { } } - public void updateAction(ContentUI<?, ?> ui, AbstractButton editor) { + public void updateAction(JAXXObject ui, AbstractButton editor) { MnemonicHelper.addKeyStroke2(editor, getAcceleratorKey()); diff --git a/application-swing/src/main/java/fr/ird/observe/application/swing/ui/actions/content/GoDownUIAction.java b/application-swing/src/main/java/fr/ird/observe/application/swing/ui/actions/content/GoDownUIAction.java index f29d495..4285cc4 100644 --- a/application-swing/src/main/java/fr/ird/observe/application/swing/ui/actions/content/GoDownUIAction.java +++ b/application-swing/src/main/java/fr/ird/observe/application/swing/ui/actions/content/GoDownUIAction.java @@ -25,6 +25,7 @@ import fr.ird.observe.application.swing.ui.ObserveMainUI; import fr.ird.observe.application.swing.ui.content.ContentUI; import fr.ird.observe.application.swing.ui.tree.navigation.NavigationTree; import fr.ird.observe.application.swing.ui.tree.navigation.nodes.NavigationTreeNodeSupport; +import jaxx.runtime.JAXXObject; import javax.swing.AbstractButton; import javax.swing.JComponent; @@ -66,7 +67,7 @@ public class GoDownUIAction extends AbstractContentUIAction { } @Override - public void updateAction(ContentUI<?, ?> ui, AbstractButton editor) { + public void updateAction(JAXXObject ui, AbstractButton editor) { ObserveMainUI mainUI = getMainUI(); NavigationTree tree = getMainUI().getNavigation(); diff --git a/application-swing/src/main/java/fr/ird/observe/application/swing/ui/actions/content/GoUpUIAction.java b/application-swing/src/main/java/fr/ird/observe/application/swing/ui/actions/content/GoUpUIAction.java index 2c80fcc..6e0380d 100644 --- a/application-swing/src/main/java/fr/ird/observe/application/swing/ui/actions/content/GoUpUIAction.java +++ b/application-swing/src/main/java/fr/ird/observe/application/swing/ui/actions/content/GoUpUIAction.java @@ -25,8 +25,7 @@ import fr.ird.observe.application.swing.ui.ObserveMainUI; import fr.ird.observe.application.swing.ui.content.ContentUI; import fr.ird.observe.application.swing.ui.tree.navigation.NavigationTree; import fr.ird.observe.application.swing.ui.tree.navigation.nodes.NavigationTreeNodeSupport; -import org.apache.commons.logging.Log; -import org.apache.commons.logging.LogFactory; +import jaxx.runtime.JAXXObject; import javax.swing.AbstractButton; import javax.swing.JComponent; @@ -48,9 +47,6 @@ public class GoUpUIAction extends AbstractContentUIAction { private static final long serialVersionUID = 1L; - /** Logger */ - private static final Log log = LogFactory.getLog(GoUpUIAction.class); - public static final String ACTION_NAME = "goUp"; public GoUpUIAction(ObserveMainUI mainUI) { @@ -74,7 +70,7 @@ public class GoUpUIAction extends AbstractContentUIAction { } @Override - public void updateAction(ContentUI<?, ?> ui, AbstractButton editor) { + public void updateAction(JAXXObject ui, AbstractButton editor) { NavigationTree treeHelper = getMainUI().getNavigation(); diff --git a/application-swing/src/main/java/fr/ird/observe/application/swing/ui/actions/storage/SaveCurrentRemoteConfigurationUIAction.java b/application-swing/src/main/java/fr/ird/observe/application/swing/ui/actions/storage/SaveCurrentRemoteConfigurationUIAction.java new file mode 100644 index 0000000..9f1071e --- /dev/null +++ b/application-swing/src/main/java/fr/ird/observe/application/swing/ui/actions/storage/SaveCurrentRemoteConfigurationUIAction.java @@ -0,0 +1,101 @@ +package fr.ird.observe.application.swing.ui.actions.storage; + +import fr.ird.observe.application.swing.configuration.RemoteDataSourceConfiguration; +import fr.ird.observe.application.swing.ui.ObserveMainUI; +import fr.ird.observe.application.swing.ui.UIHelper; +import fr.ird.observe.application.swing.ui.actions.AbstractUIAction; +import fr.ird.observe.application.swing.ui.storage.StorageUIModel; +import fr.ird.observe.application.swing.ui.storage.tabs.ConfigUI; +import org.apache.commons.logging.Log; +import org.apache.commons.logging.LogFactory; + +import javax.swing.AbstractButton; +import javax.swing.JCheckBox; +import javax.swing.JLabel; +import javax.swing.JOptionPane; +import javax.swing.JPanel; +import javax.swing.JTextField; +import java.awt.Dimension; +import java.awt.GridLayout; +import java.awt.event.ActionEvent; + +import static org.nuiton.i18n.I18n.t; + +/** + * Created on 18/12/16. + * + * @author Tony Chemit - chemit@codelutin.com + * @since 6.0 + */ +public class SaveCurrentRemoteConfigurationUIAction extends AbstractUIAction { + + /** Logger */ + private static final Log log = LogFactory.getLog(SaveCurrentRemoteConfigurationUIAction.class); + + public static final String ACTION_NAME = SaveCurrentRemoteConfigurationUIAction.class.getName(); + + public SaveCurrentRemoteConfigurationUIAction(ObserveMainUI mainUI) { + super(mainUI, ACTION_NAME, t("observe.storage.remoteConfiguration.presets.save"), t("observe.storage.remoteConfiguration.presets.save"), "save", "ctrl pressed S"); + } + + @Override + public void actionPerformed(ActionEvent e) { + + AbstractButton value = (AbstractButton) getValue(EDITOR); + ConfigUI configUI = (ConfigUI) value.getClientProperty(CLIENT_PROPERTY_UI); + StorageUIModel model = configUI.getModel(); + + JPanel panel = new JPanel(); + panel.setLayout(new GridLayout(0, 2)); + + JTextField question = new JTextField(); + panel.add(new JLabel("Nom de la connexion")); + panel.add(question); + + panel.add(new JLabel("Url")); + JTextField url = new JTextField(model.getRemoteUrl()); + url.setEditable(false); + panel.add(url); + + panel.add(new JLabel("Login")); + JTextField login = new JTextField(model.getRemoteLogin()); + login.setEditable(false); + panel.add(login); + + panel.add(new JLabel("Mot de passe")); + JTextField password = new JTextField(new String(model.getRemotePassword())); + password.setEditable(false); + panel.add(password); + + JCheckBox databaseName = new JCheckBox("Utilisation SSL", model.isUseSsl()); + databaseName.setEnabled(false); + panel.add(databaseName); + + question.setPreferredSize(new Dimension(200, 30)); + int response = UIHelper.askUser(getMainUI(), "Enregistrement de la configuration", panel, JOptionPane.QUESTION_MESSAGE, new String[]{ + t("observe.action.save"), + t("observe.action.cancel") + }, 0); + String configurationName = question.getText().trim(); + + if (response != 0 || configurationName.isEmpty()) { + if (log.isInfoEnabled()) { + log.info("User skip save of configuration"); + } + return; + } + if (log.isInfoEnabled()) { + log.info("Will add remote configuration: " + configurationName); + } + getMainUI().getStatus().setStatus("Ajout de la configuration " + configurationName); + + RemoteDataSourceConfiguration configuration = new RemoteDataSourceConfiguration(); + configuration.setName(configurationName); + configuration.setUrl(model.getRemoteUrl()); + configuration.setLogin(model.getRemoteLogin()); + configuration.setPassword(new String(model.getRemotePassword())); + configuration.setUseSsl(model.isUseSsl()); + getMainUI().getConfig().addRemoteDataSourceConfigurations(configuration); + configUI.getHandler().addRemoteConfiguration(configuration); + } +} diff --git a/application-swing/src/main/java/fr/ird/observe/application/swing/ui/actions/storage/SaveCurrentServerConfigurationUIAction.java b/application-swing/src/main/java/fr/ird/observe/application/swing/ui/actions/storage/SaveCurrentServerConfigurationUIAction.java new file mode 100644 index 0000000..adf9b17 --- /dev/null +++ b/application-swing/src/main/java/fr/ird/observe/application/swing/ui/actions/storage/SaveCurrentServerConfigurationUIAction.java @@ -0,0 +1,104 @@ +package fr.ird.observe.application.swing.ui.actions.storage; + +import fr.ird.observe.application.swing.configuration.ServerDataSourceConfiguration; +import fr.ird.observe.application.swing.ui.ObserveMainUI; +import fr.ird.observe.application.swing.ui.UIHelper; +import fr.ird.observe.application.swing.ui.actions.AbstractUIAction; +import fr.ird.observe.application.swing.ui.storage.StorageUIModel; +import fr.ird.observe.application.swing.ui.storage.tabs.ConfigUI; +import org.apache.commons.logging.Log; +import org.apache.commons.logging.LogFactory; + +import javax.swing.AbstractButton; +import javax.swing.JLabel; +import javax.swing.JOptionPane; +import javax.swing.JPanel; +import javax.swing.JTextField; +import java.awt.Dimension; +import java.awt.GridLayout; +import java.awt.event.ActionEvent; + +import static org.nuiton.i18n.I18n.t; + +/** + * Created on 18/12/16. + * + * @author Tony Chemit - chemit@codelutin.com + * @since 6.0 + */ +public class SaveCurrentServerConfigurationUIAction extends AbstractUIAction { + + /** Logger */ + private static final Log log = LogFactory.getLog(SaveCurrentServerConfigurationUIAction.class); + + public static final String ACTION_NAME = SaveCurrentServerConfigurationUIAction.class.getName(); + + public SaveCurrentServerConfigurationUIAction(ObserveMainUI mainUI) { + super(mainUI, ACTION_NAME, t("observe.storage.serverConfiguration.presets.save"), t("observe.storage.serverConfiguration.presets.save"), "save", "ctrl pressed S"); + } + + @Override + public void actionPerformed(ActionEvent e) { + + AbstractButton value = (AbstractButton) getValue(EDITOR); + ConfigUI configUI = (ConfigUI) value.getClientProperty(CLIENT_PROPERTY_UI); + StorageUIModel model = configUI.getModel(); + + JPanel panel = new JPanel(); + panel.setLayout(new GridLayout(0, 2)); + + JTextField question = new JTextField(); + panel.add(new JLabel("Nom de la connexion")); + panel.add(question); + + panel.add(new JLabel("Url")); + JTextField url = new JTextField(model.getRemoteUrl()); + url.setEditable(false); + panel.add(url); + + panel.add(new JLabel("Login")); + JTextField login = new JTextField(model.getRemoteLogin()); + login.setEditable(false); + panel.add(login); + + panel.add(new JLabel("Mot de passe")); + JTextField password = new JTextField(new String(model.getRemotePassword())); + password.setEditable(false); + panel.add(password); + + panel.add(new JLabel("Nom de la base")); + JTextField databaseName = new JTextField(model.getServerDatabase()); + databaseName.setEditable(false); + panel.add(databaseName); + + question.setPreferredSize(new Dimension(200, 30)); + int response = UIHelper.askUser(getMainUI(), "Enregistrement de la configuration", panel, JOptionPane.QUESTION_MESSAGE, new String[]{ + t("observe.action.save"), + t("observe.action.cancel") + }, 0); + String configurationName = question.getText().trim(); + + if (response != 0 || configurationName.isEmpty()) { + if (log.isInfoEnabled()) { + log.info("User skip save of configuration"); + } + return; + } + if (log.isInfoEnabled()) { + log.info("Will add remote configuration: " + configurationName); + } + getMainUI().getStatus().setStatus("Ajout de la configuration " + configurationName); + + + ServerDataSourceConfiguration configuration = new ServerDataSourceConfiguration(); + configuration.setName(configurationName); + configuration.setUrl(model.getRemoteUrl()); + configuration.setLogin(model.getRemoteLogin()); + configuration.setPassword(new String(model.getRemotePassword())); + configuration.setDatabaseName(model.getServerDatabase()); + getMainUI().getConfig().addServerDataSourceConfigurations(configuration); + + configUI.getHandler().addServerConfiguration(configuration); + } +} + diff --git a/application-swing/src/main/java/fr/ird/observe/application/swing/ui/actions/storage/UseRemoteConfigurationUIAction.java b/application-swing/src/main/java/fr/ird/observe/application/swing/ui/actions/storage/UseRemoteConfigurationUIAction.java new file mode 100644 index 0000000..d0e1c58 --- /dev/null +++ b/application-swing/src/main/java/fr/ird/observe/application/swing/ui/actions/storage/UseRemoteConfigurationUIAction.java @@ -0,0 +1,61 @@ +package fr.ird.observe.application.swing.ui.actions.storage; + +import fr.ird.observe.application.swing.configuration.RemoteDataSourceConfiguration; +import fr.ird.observe.application.swing.db.constants.ConnexionStatus; +import fr.ird.observe.application.swing.ui.ObserveMainUI; +import fr.ird.observe.application.swing.ui.actions.AbstractUIAction; +import fr.ird.observe.application.swing.ui.storage.StorageUI; +import fr.ird.observe.application.swing.ui.storage.StorageUIModel; +import fr.ird.observe.application.swing.ui.storage.tabs.ConfigUI; +import org.apache.commons.logging.Log; +import org.apache.commons.logging.LogFactory; + +import javax.swing.AbstractButton; +import javax.swing.SwingUtilities; +import java.awt.event.ActionEvent; + +/** + * Created on 18/12/16. + * + * @author Tony Chemit - chemit@codelutin.com + * @since 6.0 + */ +public class UseRemoteConfigurationUIAction extends AbstractUIAction { + + /** Logger */ + private static final Log log = LogFactory.getLog(UseRemoteConfigurationUIAction.class); + + public static final String ACTION_NAME = UseRemoteConfigurationUIAction.class.getName(); + + public UseRemoteConfigurationUIAction(ObserveMainUI mainUI) { + super(mainUI, ACTION_NAME, null, null, "db-remote", null); + } + + @Override + public void actionPerformed(ActionEvent e) { + + AbstractButton value = (AbstractButton) getValue(EDITOR); + ConfigUI configUI = (ConfigUI) value.getClientProperty(CLIENT_PROPERTY_UI); + RemoteDataSourceConfiguration configuration = (RemoteDataSourceConfiguration) value.getClientProperty("configuration"); + + if (log.isInfoEnabled()) { + log.info("Use remote configuration: " + configuration.getName()); + } + StorageUIModel model = configUI.getModel(); + + model.setRemoteUrl(configuration.getUrl()); + model.setRemoteLogin(configuration.getLogin()); + model.setRemotePassword(configuration.getPassword().toCharArray()); + model.setUseSsl(configuration.isUseSsl()); + + StorageUI parentContainer = configUI.getParentContainer(StorageUI.class); + SwingUtilities.invokeLater(() -> { + configUI.getTestRemoteAction().doClick(); + if (ConnexionStatus.FAILED == configUI.getModel().getConnexionStatus()) { + configUI.getRemoteUrl().requestFocusInWindow(); + } else { + parentContainer.getNextAction().requestFocusInWindow(); + } + }); + } +} diff --git a/application-swing/src/main/java/fr/ird/observe/application/swing/ui/actions/storage/UseServerConfigurationUIAction.java b/application-swing/src/main/java/fr/ird/observe/application/swing/ui/actions/storage/UseServerConfigurationUIAction.java new file mode 100644 index 0000000..ff37bad --- /dev/null +++ b/application-swing/src/main/java/fr/ird/observe/application/swing/ui/actions/storage/UseServerConfigurationUIAction.java @@ -0,0 +1,63 @@ +package fr.ird.observe.application.swing.ui.actions.storage; + +import fr.ird.observe.application.swing.configuration.ServerDataSourceConfiguration; +import fr.ird.observe.application.swing.db.constants.ConnexionStatus; +import fr.ird.observe.application.swing.ui.ObserveMainUI; +import fr.ird.observe.application.swing.ui.actions.AbstractUIAction; +import fr.ird.observe.application.swing.ui.storage.StorageUI; +import fr.ird.observe.application.swing.ui.storage.StorageUIModel; +import fr.ird.observe.application.swing.ui.storage.tabs.ConfigUI; +import org.apache.commons.logging.Log; +import org.apache.commons.logging.LogFactory; + +import javax.swing.AbstractButton; +import javax.swing.SwingUtilities; +import java.awt.event.ActionEvent; + +/** + * Created on 18/12/16. + * + * @author Tony Chemit - chemit@codelutin.com + * @since 6.0 + */ +public class UseServerConfigurationUIAction extends AbstractUIAction { + + /** Logger */ + private static final Log log = LogFactory.getLog(UseServerConfigurationUIAction.class); + + public static final String ACTION_NAME = UseServerConfigurationUIAction.class.getName(); + + public UseServerConfigurationUIAction(ObserveMainUI mainUI) { + super(mainUI, ACTION_NAME, null, null, "db-server", null); + } + + @Override + public void actionPerformed(ActionEvent e) { + + AbstractButton value = (AbstractButton) getValue(EDITOR); + ConfigUI configUI = (ConfigUI) value.getClientProperty(CLIENT_PROPERTY_UI); + ServerDataSourceConfiguration configuration = (ServerDataSourceConfiguration) value.getClientProperty("configuration"); + if (log.isInfoEnabled()) { + log.info("Use server configuration: " + configuration.getName()); + } + + StorageUIModel model = configUI.getModel(); + + model.setRemoteUrl(configuration.getUrl()); + model.setRemoteLogin(configuration.getLogin()); + model.setRemotePassword(configuration.getPassword().toCharArray()); + model.setServerDatabase(configuration.getDatabaseName()); + + StorageUI parentContainer = configUI.getParentContainer(StorageUI.class); + + SwingUtilities.invokeLater(() -> { + configUI.getTestRemoteAction().doClick(); + if (ConnexionStatus.FAILED == configUI.getModel().getConnexionStatus()) { + configUI.getRemoteUrl().requestFocusInWindow(); + } else { + parentContainer.getNextAction().requestFocusInWindow(); + } + }); + + } +} diff --git a/application-swing/src/main/java/fr/ird/observe/application/swing/ui/storage/tabs/ConfigUI.jaxx b/application-swing/src/main/java/fr/ird/observe/application/swing/ui/storage/tabs/ConfigUI.jaxx index d992cb1..9c8c984 100644 --- a/application-swing/src/main/java/fr/ird/observe/application/swing/ui/storage/tabs/ConfigUI.jaxx +++ b/application-swing/src/main/java/fr/ird/observe/application/swing/ui/storage/tabs/ConfigUI.jaxx @@ -28,8 +28,10 @@ <import> fr.ird.observe.application.swing.I18nEnumHelper - fr.ird.observe.application.swing.ui.storage.StorageStep fr.ird.observe.application.swing.db.constants.ConnexionStatus + fr.ird.observe.application.swing.ui.actions.storage.SaveCurrentRemoteConfigurationUIAction + fr.ird.observe.application.swing.ui.actions.storage.SaveCurrentServerConfigurationUIAction + fr.ird.observe.application.swing.ui.storage.StorageStep java.awt.Color java.awt.Dimension @@ -85,9 +87,7 @@ </Table> <!-- configurer creation base locale et import referentiel depuis un server distant --> - <Table id='IMPORT_SERVER_STORAGE' - fill="both" - constraints='"IMPORT_SERVER_STORAGE"'> + <Table id='IMPORT_SERVER_STORAGE' fill="both" constraints='"IMPORT_SERVER_STORAGE"'> <row> <cell> <JLabel text='observe.storage.importServerStorage.config'/> @@ -102,33 +102,45 @@ </Table> <!-- configurer connexion a base distante --> - <Table id='USE_REMOTE' - constraints='"USE_REMOTE"' fill='both'> + <Table id='USE_REMOTE' constraints='"USE_REMOTE"' fill='both'> <row> <cell> - <JLabel text='observe.storage.useRemoteStorage.config'/> + <JPanel layout="{new BorderLayout()}"> + <JLabel constraints='BorderLayout.WEST' text='observe.storage.useRemoteStorage.config'/> + <JMenuBar id='remoteMenuBar' constraints='BorderLayout.EAST'> + <JMenu id='remoteMenu'> + <JMenuItem id="saveRemoteConfiguration" /> + <JSeparator/> + </JMenu> + </JMenuBar> + </JPanel> </cell> </row> <row> <cell weighty='1' weightx='1'> - <JPanel id='USE_REMOTE_content' - minimumSize='{new Dimension(20,300)}'/> + <JPanel id='USE_REMOTE_content' minimumSize='{new Dimension(20,300)}'/> </cell> </row> </Table> <!-- configurer connexion au server base distante --> - <Table id='USE_SERVER' - constraints='"USE_SERVER"' fill='both'> + <Table id='USE_SERVER' constraints='"USE_SERVER"' fill='both'> <row> <cell> - <JLabel text='observe.storage.useServerStorage.config'/> + <JPanel layout="{new BorderLayout()}"> + <JLabel constraints='BorderLayout.WEST' text='observe.storage.useServerStorage.config'/> + <JMenuBar id='serverMenuBar' constraints='BorderLayout.EAST'> + <JMenu id='serverMenu'> + <JMenuItem id="saveServerConfiguration"/> + <JSeparator/> + </JMenu> + </JMenuBar> + </JPanel> </cell> </row> <row> <cell weighty='1' weightx='1'> - <JPanel id='USE_SERVER_content' - minimumSize='{new Dimension(20,300)}'/> + <JPanel id='USE_SERVER_content' minimumSize='{new Dimension(20,300)}'/> </cell> </row> </Table> @@ -165,8 +177,7 @@ </row> <row> <cell anchor='west'> - <JLabel id="serverDataBaseLabel" - text='observe.storage.server.dataBase'/> + <JLabel id="serverDataBaseLabel" text='observe.storage.server.dataBase'/> </cell> <cell weightx='1' fill="both" anchor='east'> <JTextField id="serverDataBase" @@ -190,8 +201,7 @@ <!-- tester la connexion --> <row> <cell columns='2'> - <JButton id="testRemoteAction" - onActionPerformed='getModel().testRemote()'/> + <JButton id="testRemoteAction" onActionPerformed='getModel().testRemote()'/> </cell> </row> </Table> diff --git a/application-swing/src/main/java/fr/ird/observe/application/swing/ui/storage/tabs/ConfigUI.jcss b/application-swing/src/main/java/fr/ird/observe/application/swing/ui/storage/tabs/ConfigUI.jcss index 75a2b01..6a707c3 100644 --- a/application-swing/src/main/java/fr/ird/observe/application/swing/ui/storage/tabs/ConfigUI.jcss +++ b/application-swing/src/main/java/fr/ird/observe/application/swing/ui/storage/tabs/ConfigUI.jcss @@ -20,6 +20,20 @@ * #L% */ +JMenuBar { + opaque:true; + borderPainted:false; + margin:{new Insets(0, 0, 0, 0)}; + border: {null}; +} + +JMenu { + opaque:true; + borderPainted:false; + border: {null}; + margin:{new Insets(0, 0, 0, 0)}; +} + #configContent { layout:{configLayout}; } @@ -137,3 +151,23 @@ toolTipText:"observe.storage.store.remote.config.tip"; selected:{model.isStoreRemoteConfig()}; } + +#serverMenu { + text:"observe.storage.serverConfiguration.presets"; + actionIcon:db-server; + mnemonic:S; +} + +#remoteMenu { + text:"observe.storage.remoteConfiguration.presets"; + actionIcon:db-remote; + mnemonic:R; +} + +#saveRemoteConfiguration { + _observeAction:{SaveCurrentRemoteConfigurationUIAction.ACTION_NAME}; +} + +#saveServerConfiguration { + _observeAction:{SaveCurrentServerConfigurationUIAction.ACTION_NAME}; +} \ No newline at end of file diff --git a/application-swing/src/main/java/fr/ird/observe/application/swing/ui/storage/tabs/ConfigUIHandler.java b/application-swing/src/main/java/fr/ird/observe/application/swing/ui/storage/tabs/ConfigUIHandler.java index 012b728..77382c3 100644 --- a/application-swing/src/main/java/fr/ird/observe/application/swing/ui/storage/tabs/ConfigUIHandler.java +++ b/application-swing/src/main/java/fr/ird/observe/application/swing/ui/storage/tabs/ConfigUIHandler.java @@ -24,10 +24,16 @@ package fr.ird.observe.application.swing.ui.storage.tabs; import fr.ird.observe.application.swing.ObserveSwingApplicationContext; import fr.ird.observe.application.swing.ObserveTextGenerator; +import fr.ird.observe.application.swing.configuration.RemoteDataSourceConfiguration; +import fr.ird.observe.application.swing.configuration.ServerDataSourceConfiguration; import fr.ird.observe.application.swing.configuration.constants.DbMode; import fr.ird.observe.application.swing.db.constants.ConnexionStatus; import fr.ird.observe.application.swing.ui.MnemonicHelper; import fr.ird.observe.application.swing.ui.UIHelper; +import fr.ird.observe.application.swing.ui.actions.AbstractUIAction; +import fr.ird.observe.application.swing.ui.actions.storage.UseRemoteConfigurationUIAction; +import fr.ird.observe.application.swing.ui.actions.storage.UseServerConfigurationUIAction; +import fr.ird.observe.application.swing.ui.content.ObserveActionMap; import fr.ird.observe.application.swing.ui.storage.StorageStep; import fr.ird.observe.application.swing.ui.storage.StorageUIModel; import jaxx.runtime.spi.UIHandler; @@ -35,14 +41,19 @@ import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; import javax.swing.AbstractAction; +import javax.swing.AbstractButton; +import javax.swing.ActionMap; import javax.swing.Icon; import javax.swing.JComponent; +import javax.swing.JMenuItem; import java.awt.BorderLayout; import java.awt.Color; import java.awt.event.ActionEvent; import java.beans.PropertyChangeListener; import java.io.File; +import java.util.Objects; +import static fr.ird.observe.application.swing.ui.content.ContentUIInitializer.OBSERVE_ACTION; import static javax.swing.JComponent.WHEN_IN_FOCUSED_WINDOW; import static org.nuiton.i18n.I18n.t; @@ -87,7 +98,8 @@ public class ConfigUIHandler extends StorageTabUIHandler<ConfigUI> implements UI }; ui.getModel().addPropertyChangeListener(listener); - ui.getActionMap().put(ACTION_DO_CHOOSE_FILE, new AbstractAction() { + ActionMap actionMap = ui.getActionMap(); + actionMap.put(ACTION_DO_CHOOSE_FILE, new AbstractAction() { @Override public void actionPerformed(ActionEvent e) { if (StorageStep.CONFIG == ui.getModel().getStep()) { @@ -98,7 +110,7 @@ public class ConfigUIHandler extends StorageTabUIHandler<ConfigUI> implements UI ui.getInputMap(WHEN_IN_FOCUSED_WINDOW).put(MnemonicHelper.KEY_STROKE_STORAGE_DO_CHOOSE_FILE, ACTION_DO_CHOOSE_FILE); MnemonicHelper.addKeyStroke(ui.getFileChooserAction(), MnemonicHelper.KEY_STROKE_STORAGE_DO_CHOOSE_FILE); - ui.getActionMap().put(ACTION_DO_USE_SSL, new AbstractAction() { + actionMap.put(ACTION_DO_USE_SSL, new AbstractAction() { @Override public void actionPerformed(ActionEvent e) { if (StorageStep.CONFIG == ui.getModel().getStep()) { @@ -109,7 +121,7 @@ public class ConfigUIHandler extends StorageTabUIHandler<ConfigUI> implements UI ui.getInputMap(WHEN_IN_FOCUSED_WINDOW).put(MnemonicHelper.KEY_STROKE_STORAGE_DO_USE_SSL, ACTION_DO_USE_SSL); MnemonicHelper.addKeyStroke(ui.getRemoteUseSsl(), MnemonicHelper.KEY_STROKE_STORAGE_DO_USE_SSL); - ui.getActionMap().put(ACTION_DO_KEEP_CONFIGURATION, new AbstractAction() { + actionMap.put(ACTION_DO_KEEP_CONFIGURATION, new AbstractAction() { @Override public void actionPerformed(ActionEvent e) { if (StorageStep.CONFIG == ui.getModel().getStep()) { @@ -119,6 +131,44 @@ public class ConfigUIHandler extends StorageTabUIHandler<ConfigUI> implements UI }); ui.getInputMap(WHEN_IN_FOCUSED_WINDOW).put(MnemonicHelper.KEY_STROKE_STORAGE_KEEP_CONFIGURATION, ACTION_DO_KEEP_CONFIGURATION); MnemonicHelper.addKeyStroke(ui.getStoreRemoteConfig(), MnemonicHelper.KEY_STROKE_STORAGE_KEEP_CONFIGURATION); + + ObserveActionMap observeActionMap = ObserveSwingApplicationContext.get().getMainUI().getObserveActionMap(); + init(observeActionMap, ui.getSaveRemoteConfiguration()); + init(observeActionMap, ui.getSaveServerConfiguration()); + init(observeActionMap, ui.getServerMenu()); + init(observeActionMap, ui.getRemoteMenu()); + + for (RemoteDataSourceConfiguration configuration : ObserveSwingApplicationContext.get().getMainUI().getConfig().getRemoteDataSourceConfigurations()) { + addRemoteConfiguration(configuration); + } + + for (ServerDataSourceConfiguration configuration : ObserveSwingApplicationContext.get().getMainUI().getConfig().getServerDataSourceConfigurations()) { + addServerConfiguration(configuration); + } + } + + public void addRemoteConfiguration(RemoteDataSourceConfiguration configuration) { + ObserveActionMap observeActionMap = ObserveSwingApplicationContext.get().getMainUI().getObserveActionMap(); + JMenuItem item = new JMenuItem(configuration.getName()); + item.putClientProperty("configuration", configuration); + item.putClientProperty("text", configuration.getName()); + item.putClientProperty("toolTipText", configuration.getName()); + item.putClientProperty(OBSERVE_ACTION, UseRemoteConfigurationUIAction.ACTION_NAME); + AbstractUIAction action = init(observeActionMap, item); + action.updateAction(ui, item); + ui.getRemoteMenu().add(item); + } + + public void addServerConfiguration(ServerDataSourceConfiguration configuration) { + ObserveActionMap observeActionMap = ObserveSwingApplicationContext.get().getMainUI().getObserveActionMap(); + JMenuItem item = new JMenuItem(configuration.getName()); + item.putClientProperty("configuration", configuration); + item.putClientProperty("text", configuration.getName()); + item.putClientProperty("toolTipText", configuration.getName()); + item.putClientProperty(OBSERVE_ACTION, UseServerConfigurationUIAction.ACTION_NAME); + AbstractUIAction action = init(observeActionMap, item); + action.updateAction(ui, item); + ui.getServerMenu().add(item); } public void refreshConfig(ConfigUI ui, String configId) { @@ -168,4 +218,22 @@ public class ConfigUIHandler extends StorageTabUIHandler<ConfigUI> implements UI } + protected AbstractUIAction init(ActionMap actionMap, AbstractButton editor) { + String actionId = (String) editor.getClientProperty(OBSERVE_ACTION); + if (actionId == null) { + // le boutton n'est pas commun + return null; + } + + // on a trouve une action commune + AbstractUIAction action = (AbstractUIAction) actionMap.get(actionId); + Objects.requireNonNull(action, "action [" + actionId + "] not found for ui " + ui.getClass().getName()); + + if (log.isDebugEnabled()) { + log.debug("init common action " + actionId); + } + + action.initAction(ui, editor); + return action; + } } diff --git a/application-swing/src/main/java/fr/ird/observe/application/swing/ui/tree/navigation/nodes/NavigationTreeNodeSupport.java b/application-swing/src/main/java/fr/ird/observe/application/swing/ui/tree/navigation/nodes/NavigationTreeNodeSupport.java index b2d3ed0..f4ac6e4 100644 --- a/application-swing/src/main/java/fr/ird/observe/application/swing/ui/tree/navigation/nodes/NavigationTreeNodeSupport.java +++ b/application-swing/src/main/java/fr/ird/observe/application/swing/ui/tree/navigation/nodes/NavigationTreeNodeSupport.java @@ -28,6 +28,7 @@ import fr.ird.observe.application.swing.ui.actions.content.SelectNodeUIAction; import fr.ird.observe.application.swing.ui.content.ContentUI; import fr.ird.observe.application.swing.ui.tree.ObserveTreeNodeSupport; import fr.ird.observe.services.ObserveServicesProvider; +import jaxx.runtime.JAXXObject; import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; @@ -195,7 +196,7 @@ public abstract class NavigationTreeNodeSupport<O> extends ObserveTreeNodeSuppor return isOpen() ? Color.BLACK : Color.GRAY; } - public JMenuItem toMenuItem(SelectNodeUIAction action, ContentUI<?, ?> ui) { + public JMenuItem toMenuItem(SelectNodeUIAction action, JAXXObject ui) { JMenuItem mi = new JMenuItem(); AbstractAction a = new AbstractAction() { diff --git a/application-swing/src/main/resources/i18n/application-swing_en_GB.properties b/application-swing/src/main/resources/i18n/application-swing_en_GB.properties index cf99d5a..e65d73f 100644 --- a/application-swing/src/main/resources/i18n/application-swing_en_GB.properties +++ b/application-swing/src/main/resources/i18n/application-swing_en_GB.properties @@ -1684,6 +1684,8 @@ observe.storage.remote.login=Login observe.storage.remote.password=Password observe.storage.remote.url=Url observe.storage.remote.useSll=Use ssl? +observe.storage.remoteConfiguration.presets=Remote configuration presets +observe.storage.remoteConfiguration.presets.save=Save current configuration observe.storage.report.action.migrate=Update policy observe.storage.report.can.migrate=Update if necessary (current version\: %1$s) observe.storage.report.can.not.migrate=No update possible @@ -1697,6 +1699,8 @@ observe.storage.server.sessionExpire.change=Change observe.storage.server.sessionExpire.close=Close observe.storage.server.sessionExpire.reload=Re-connect observe.storage.server.sessionExpire.title=Lost connexion +observe.storage.serverConfiguration.presets=Server configuration presets +observe.storage.serverConfiguration.presets.save=Save current configuration observe.storage.showMigrationProgression=Display progression while updating observe.storage.showMigrationSql=display sql request while updating observe.storage.step.creationMode=Create local database diff --git a/application-swing/src/main/resources/i18n/application-swing_es_ES.properties b/application-swing/src/main/resources/i18n/application-swing_es_ES.properties index 0f838ee..460f430 100644 --- a/application-swing/src/main/resources/i18n/application-swing_es_ES.properties +++ b/application-swing/src/main/resources/i18n/application-swing_es_ES.properties @@ -1684,6 +1684,8 @@ observe.storage.remote.login=Login observe.storage.remote.password=Contraseña observe.storage.remote.url=Url observe.storage.remote.useSll=¿modo ssl? +observe.storage.remoteConfiguration.presets=Configuration enregistrées \#TODO +observe.storage.remoteConfiguration.presets.save=Enregister cette configuration \#TODO observe.storage.report.action.migrate=Politica de actualización observe.storage.report.can.migrate=Actualizar si es necesario (version actual \: %1$s) observe.storage.report.can.not.migrate=No es posible actualizar @@ -1697,6 +1699,8 @@ observe.storage.server.sessionExpire.change=Cambiar observe.storage.server.sessionExpire.close=Fermer observe.storage.server.sessionExpire.reload=Connectar de nuevo observe.storage.server.sessionExpire.title=Conexión perdida +observe.storage.serverConfiguration.presets=Configuration enregistrées \#TODO +observe.storage.serverConfiguration.presets.save=Enregister cette configuration \#TODO observe.storage.showMigrationProgression=Mostrar el progreso de las actualizaciones observe.storage.showMigrationSql=Mostrar las consultas sql de las actualizaciones observe.storage.step.creationMode=Creación de la base local diff --git a/application-swing/src/main/resources/i18n/application-swing_fr_FR.properties b/application-swing/src/main/resources/i18n/application-swing_fr_FR.properties index 87ecd91..e5b2f4a 100644 --- a/application-swing/src/main/resources/i18n/application-swing_fr_FR.properties +++ b/application-swing/src/main/resources/i18n/application-swing_fr_FR.properties @@ -1684,6 +1684,8 @@ observe.storage.remote.login=Utilisateur observe.storage.remote.password=Mot de passe observe.storage.remote.url=Url observe.storage.remote.useSll=mode ssl ? +observe.storage.remoteConfiguration.presets=Configurations enregistrées +observe.storage.remoteConfiguration.presets.save=Enregister cette configuration observe.storage.report.action.migrate=Politique de mise à jour observe.storage.report.can.migrate=Mise à jour si nécessaire (version actuelle \: %1$s) observe.storage.report.can.not.migrate=Pas de mise à jour possible @@ -1697,6 +1699,8 @@ observe.storage.server.sessionExpire.change=Changer observe.storage.server.sessionExpire.close=Fermer observe.storage.server.sessionExpire.reload=Re-connecter observe.storage.server.sessionExpire.title=Connexion perdue +observe.storage.serverConfiguration.presets=Configurations enregistrées +observe.storage.serverConfiguration.presets.save=Enregister cette configuration observe.storage.showMigrationProgression=Afficher la progression lors des mises à jour observe.storage.showMigrationSql=Afficher les requêtes sql lors des mises à jour observe.storage.step.creationMode=Création base locale diff --git a/pom.xml b/pom.xml index 6c3a5bf..40f3911 100644 --- a/pom.xml +++ b/pom.xml @@ -169,7 +169,7 @@ <nuitonI18nVersion>3.6.2</nuitonI18nVersion> <nuitonValidatorVersion>3.0.1</nuitonValidatorVersion> <nuitonUtilsVersion>3.0-rc-16</nuitonUtilsVersion> - <nuitonConfigVersion>3.1</nuitonConfigVersion> + <nuitonConfigVersion>3.2-SNAPSHOT</nuitonConfigVersion> <xworkVersion>2.3.31</xworkVersion> <hibernateVersion>5.1.3.Final</hibernateVersion> <sl4jVersion>1.7.21</sl4jVersion> -- To stop receiving notification emails like this one, please contact codelutin.com SCM administrator <admin+scm@codelutin.com>.