Author: tchemit Date: 2013-02-03 13:46:05 +0100 (Sun, 03 Feb 2013) New Revision: 306 Url: http://forge.codelutin.com/projects/tutti/repository/revisions/306 Log: improve configuration layout normalize configuration i18n Added: trunk/tutti-persistence/src/main/resources/i18n/ trunk/tutti-persistence/src/main/resources/i18n/tutti-persistence_fr_FR.properties trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/config/TuttiApplicationConfig.java trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/config/TuttiApplicationConfigOption.java Removed: trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/config/TuttiConfig.java trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/config/TuttiConfigOption.java Modified: trunk/tutti-persistence/pom.xml trunk/tutti-persistence/src/main/java/fr/ifremer/tutti/persistence/config/TuttiPersistenceConfigOption.java trunk/tutti-persistence/src/main/java/fr/ifremer/tutti/persistence/config/TuttiPersistenceConfigProvider.java trunk/tutti-persistence/src/test/startDbManager.sh trunk/tutti-service/src/main/java/fr/ifremer/tutti/service/config/TuttiServiceConfigOption.java trunk/tutti-service/src/main/resources/i18n/tutti-service_fr_FR.properties trunk/tutti-ui-swing/src/main/assembly/min/tutti.properties trunk/tutti-ui-swing/src/main/filtered-resources/tutti.properties trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/AbstractTuttiUIHandler.java trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/MainUIHandler.java trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/RunTutti.java trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/TuttiUIContext.java trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/config/TuttiApplicationConfigProvider.java trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/config/TuttiConfigUI.java trunk/tutti-ui-swing/src/main/resources/i18n/tutti-ui-swing_fr_FR.properties Modified: trunk/tutti-persistence/pom.xml =================================================================== --- trunk/tutti-persistence/pom.xml 2013-02-03 11:43:18 UTC (rev 305) +++ trunk/tutti-persistence/pom.xml 2013-02-03 12:46:05 UTC (rev 306) @@ -54,6 +54,11 @@ </dependency> <dependency> + <groupId>org.nuiton.i18n</groupId> + <artifactId>nuiton-i18n</artifactId> + </dependency> + + <dependency> <groupId>com.google.guava</groupId> <artifactId>guava</artifactId> </dependency> @@ -193,6 +198,20 @@ </executions> </plugin> + <plugin> + <groupId>org.nuiton.i18n</groupId> + <artifactId>i18n-maven-plugin</artifactId> + <executions> + <execution> + <id>scan-sources</id> + <goals> + <goal>parserJava</goal> + <goal>gen</goal> + </goals> + </execution> + </executions> + </plugin> + </plugins> </build> Modified: trunk/tutti-persistence/src/main/java/fr/ifremer/tutti/persistence/config/TuttiPersistenceConfigOption.java =================================================================== --- trunk/tutti-persistence/src/main/java/fr/ifremer/tutti/persistence/config/TuttiPersistenceConfigOption.java 2013-02-03 11:43:18 UTC (rev 305) +++ trunk/tutti-persistence/src/main/java/fr/ifremer/tutti/persistence/config/TuttiPersistenceConfigOption.java 2013-02-03 12:46:05 UTC (rev 306) @@ -30,6 +30,8 @@ import java.io.File; +import static org.nuiton.i18n.I18n.n_; + /** * Persistence configuration options. * @@ -40,7 +42,7 @@ DB_DIRECTORY( "tutti.persistence.db.directory", - "Répertoire où est la base de données", + n_("tutti.option.persistence.db.directory.description"), "${tutti.data.directory}/db", File.class, true, @@ -48,7 +50,7 @@ PROTOCOL_DIRECTORY( "tutti.persistence.protocol.directory", - "Répertoire où sont conservés les protocoles", + n_("tutti.option.persistence.protocol.directory.description"), "${tutti.data.directory}/protocol", File.class, true, @@ -56,23 +58,23 @@ DB_CONFIGURATION_PATH( "tutti.persistence.db.configurationPath", - "Chemin du fichier de configuration d'Adagio", - "${tutti.data.directory}/resources/conf.properties", + n_("tutti.option.persistence.db.configurationPath.description"), + "${tutti.config.directory}/db/conf.properties", File.class, true, true), DB_ENUMERATION_PATH( "tutti.persistence.db.enumerationPath", - "Chemin du fichier de correspondance des constantes", - "${tutti.data.directory}/resources/enumerations-v3.properties", + n_("tutti.option.persistence.db.enumerationPath.description"), + "${tutti.config.directory}/db/enumerations-v3.properties", File.class, true, true), DB_NAME( "tutti.persistence.db.name", - "Nom du fichier de la base de données", + n_("tutti.option.persistence.db.name.description"), "allegro", String.class, true, @@ -80,56 +82,56 @@ JDBC_USERNAME( "tutti.persistence.jdbc.username", - "Login de l'utilisateur pour se connecter à la base de données", + n_("tutti.option.persistence.jdbc.username.description"), "sa", String.class, true, true), JDBC_PASSWORD( "tutti.persistence.jdbc.password", - "Mot de passe de l'utilisateur pour se connecter à la base de données", + n_("tutti.option.persistence.jdbc.password.description"), "", String.class, true, true), JDBC_URL( "tutti.persistence.jdbc.url", - "URL de connexion à la base de données", + n_("tutti.option.persistence.jdbc.url.description"), "jdbc:hsqldb:file:${tutti.persistence.db.directory}/${tutti.persistence.db.name}", String.class, true, true), JDBC_DRIVER( "tutti.persistence.jdbc.driver", - "Le pilote JDBC utilisé pour communiquer avec la base de données", + n_("tutti.option.persistence.jdbc.driver.description"), jdbcDriver.class.getName(), Class.class, true, true), HIBERNATE_DIALECT( "tutti.persistence.hibernate.dialect", - "Le dialect hibernate utilisée pour communiquer avec la base de données", + n_("tutti.option.persistence.hibernate.dialect.description"), HSQLDialect.class.getName(), Class.class, true, true), HIBERNATE_SHOW_SQL( "tutti.persistence.hibernate.showSql", - "Option pour afficher ou non les requète sql dans les logs", + n_("tutti.option.persistence.hibernate.showSql.description"), Boolean.FALSE.toString(), boolean.class, true, true), HIBERNATE_USE_SQL_COMMENT( "tutti.persistence.hibernate.useSqlComment", - "Option pour ajouter les commentaires dans les requètes sql générées", + n_("tutti.option.persistence.hibernate.useSqlComment.description"), Boolean.FALSE.toString(), boolean.class, true, true), HIBERNATE_FORMAT_SQL( "tutti.persistence.hibernate.formatSql", - "Option pour ajouter les commentaires dans les requètes sql générées", + n_("tutti.option.persistence.hibernate.formatSql.description"), Boolean.FALSE.toString(), boolean.class, true, Modified: trunk/tutti-persistence/src/main/java/fr/ifremer/tutti/persistence/config/TuttiPersistenceConfigProvider.java =================================================================== --- trunk/tutti-persistence/src/main/java/fr/ifremer/tutti/persistence/config/TuttiPersistenceConfigProvider.java 2013-02-03 11:43:18 UTC (rev 305) +++ trunk/tutti-persistence/src/main/java/fr/ifremer/tutti/persistence/config/TuttiPersistenceConfigProvider.java 2013-02-03 12:46:05 UTC (rev 306) @@ -29,6 +29,8 @@ import java.util.Locale; +import static org.nuiton.i18n.I18n.l_; + /** * Persistence config provider (for site generation). * @@ -44,7 +46,7 @@ @Override public String getDescription(Locale locale) { - return "Configuration de la persistence de Tutti."; + return l_(locale, "tutti.persistence.config"); } @Override Added: trunk/tutti-persistence/src/main/resources/i18n/tutti-persistence_fr_FR.properties =================================================================== --- trunk/tutti-persistence/src/main/resources/i18n/tutti-persistence_fr_FR.properties (rev 0) +++ trunk/tutti-persistence/src/main/resources/i18n/tutti-persistence_fr_FR.properties 2013-02-03 12:46:05 UTC (rev 306) @@ -0,0 +1,14 @@ +tutti.option.persistence.db.directory.description=Répertoire où est la base de données +tutti.option.persistence.protocol.directory.description=Répertoire où sont conservés les protocoles +tutti.option.persistence.db.configurationPath.description=Chemin du fichier de configuration d'Adagio +tutti.option.persistence.db.enumerationPath.description=Chemin du fichier de correspondance des constantes +tutti.option.persistence.db.name.description=Nom du fichier de la base de données +tutti.option.persistence.jdbc.username.description=Login de l'utilisateur pour se connecter à la base de données +tutti.option.persistence.jdbc.password.description=Mot de passe de l'utilisateur pour se connecter à la base de données +tutti.option.persistence.jdbc.url.description=URL de connexion à la base de données +tutti.option.persistence.jdbc.driver.description=Le pilote JDBC utilisé pour communiquer avec la base de données +tutti.option.persistence.hibernate.dialect.description=Le dialect hibernate utilisée pour communiquer avec la base de données +tutti.option.persistence.hibernate.showSql.description=Option pour afficher ou non les requète sql dans les logs +tutti.option.persistence.hibernate.useSqlComment.description=Option pour ajouter les commentaires dans les requètes sql générées +tutti.option.persistence.hibernate.formatSql.description=Option pour ajouter les commentaires dans les requètes sql générées. +tutti.persistence.config=Configuration de la persistence de Tutti \ No newline at end of file Property changes on: trunk/tutti-persistence/src/main/resources/i18n/tutti-persistence_fr_FR.properties ___________________________________________________________________ Added: svn:keywords + Author Date Id Revision HeadURL Added: svn:eol-style + native Property changes on: trunk/tutti-persistence/src/test/startDbManager.sh ___________________________________________________________________ Modified: svn:keywords - Author Date Id Revision + Author Date Id Revision HeadURL Modified: trunk/tutti-service/src/main/java/fr/ifremer/tutti/service/config/TuttiServiceConfigOption.java =================================================================== --- trunk/tutti-service/src/main/java/fr/ifremer/tutti/service/config/TuttiServiceConfigOption.java 2013-02-03 11:43:18 UTC (rev 305) +++ trunk/tutti-service/src/main/java/fr/ifremer/tutti/service/config/TuttiServiceConfigOption.java 2013-02-03 12:46:05 UTC (rev 306) @@ -41,43 +41,55 @@ public enum TuttiServiceConfigOption implements ApplicationConfig.OptionDef { /** Main directory where to put tutti data (logs, and others...). */ - DATA_DIRECTORY("tutti.data.directory", - n_("tutti.config.data.directory"), - "${user.home}/.tutti", - File.class), - TMP_DIRECTORY("tutti.tmp.directory", - n_("tutti.config.tmp.directory"), - "${java.io.tmpdir}/tutti", - File.class), - CSV_SEPARATOR("tutti.csv.separator", - n_("tutti.csv.separator"), - ";", - char.class), + DATA_DIRECTORY( + "tutti.data.directory", + n_("tutti.option.data.directory.description"), + "${user.home}/.tutti/data", + File.class), + CONFIG_DIRECTORY( + "tutti.config.directory", + n_("tutti.option.config.directory.description"), + "${user.home}/.tutti/config", + File.class), + TMP_DIRECTORY( + "tutti.tmp.directory", + n_("tutti.option.tmp.directory.description"), + "${java.io.tmpdir}/tutti", + File.class), + CSV_SEPARATOR( + "tutti.csv.separator", + n_("tutti.option.csv.separator.description"), + ";", + char.class), // TRANSIENT CONFIG - VERSION("tutti.version", - n_("tutti.config.application.version"), + VERSION( + "tutti.version", + n_("tutti.option.version.description"), "", Version.class, true, true), - SITE_URL("tutti.url", - n_("tutti.config.application.site.url"), - "http://forge.codelutin.com/projects/tutti", - URL.class, - true, - true), - ORGANIZATION_NAME("tutti.organizationName", - n_("tutti.config.license.organizationName"), - "", - String.class, - true, - true), - INCEPTION_YEAR("tutti.inceptionYear", - n_("tutti.config.license.organizationName"), - "2012", - Integer.class, - true, - true); + SITE_URL( + "tutti.site.url", + n_("tutti.option.site.url.description"), + "http://forge.codelutin.com/projects/tutti", + URL.class, + true, + true), + ORGANIZATION_NAME( + "tutti.organizationName", + n_("tutti.option.organizationName.description"), + "", + String.class, + true, + true), + INCEPTION_YEAR( + "tutti.inceptionYear", + n_("tutti.option.inceptionYear.description"), + "2012", + Integer.class, + true, + true); /** Configuration key. */ private final String key; Modified: trunk/tutti-service/src/main/resources/i18n/tutti-service_fr_FR.properties =================================================================== --- trunk/tutti-service/src/main/resources/i18n/tutti-service_fr_FR.properties 2013-02-03 11:43:18 UTC (rev 305) +++ trunk/tutti-service/src/main/resources/i18n/tutti-service_fr_FR.properties 2013-02-03 12:46:05 UTC (rev 306) @@ -1,9 +1,11 @@ -tutti.config.application.site.url=Url du site internet de l'application -tutti.config.application.version=Version de l'application -tutti.config.data.directory=Répertoire de données de l'application. Vous pouvez utiliser l'expression ${tutti.data.directory} pour le référence dans d'autres propriétés de configuration (ex\: ${tutti.data.directory}/tmp). -tutti.config.license.organizationName=Nom de l'organisation dans la licence -tutti.config.tmp.directory=Répertoire temporaire utilisée par l'application (est nettoyé à chaque démarrage de l'application) -tutti.csv.separator= +tutti.option.config.directory.description=Répertoire des configurations externalisées de l'application (configuration de base / internationalisation). +tutti.option.csv.separator.description=Caractère séparateur pour les import / export de fichier au format csv. +tutti.option.data.directory.description=Répertoire de données de l'application. Vous pouvez utiliser l'expression ${tutti.data.directory} pour le référence dans d'autres propriétés de configuration (ex\: ${tutti.data.directory}/tmp). +tutti.option.inceptionYear.description=Année de démarrage du projet. +tutti.option.organizationName.description=Nom de l'organisation dans la licence +tutti.option.site.url.description=Url du site internet de l'application +tutti.option.tmp.directory.description=Répertoire temporaire utilisée par l'application (est nettoyé à chaque démarrage de l'application). +tutti.option.version.description=Version courante de l'application tutti.property.attachment=Pièce jointe tutti.property.caracteristic=Caractéristique tutti.property.codeMemo=Code Memo Modified: trunk/tutti-ui-swing/src/main/assembly/min/tutti.properties =================================================================== --- trunk/tutti-ui-swing/src/main/assembly/min/tutti.properties 2013-02-03 11:43:18 UTC (rev 305) +++ trunk/tutti-ui-swing/src/main/assembly/min/tutti.properties 2013-02-03 12:46:05 UTC (rev 306) @@ -22,21 +22,15 @@ # #L% ### -# basedirectory of tutti full application (tutti + jre) +# base directory of tutti full application (tutti + jre) tutti.application.basedir=.. -# directory where tutti database is stored -tutti.persistence.db.directory=${tutti.application.basedir}/db +# directory where data (database, protocole) are stored +tutti.data.directory=${tutti.application.basedir}/data -# directory where db conf is stored -tutti.persistence.db.configurationPath=${tutti.application.basedir}/config/db/conf.properties +# directory where external configuration (db, i18n) are stored +tutti.config.directory=${tutti.application.basedir}/config -# directory where db constant mapping is stored -tutti.persistence.db.enumerationPath=${tutti.application.basedir}/config/db/enumerations-v3.properties - -# directory where i18n files are stored -tutti.i18n.directory=${tutti.application.basedir}/config/i18n - # url to update jre and application tutti.update.application.url=file://${project.basedir}/update-application.properties #tutti.update.application.url=http://maven-site.forge.codelutin.com/tutti/update/update-application.proper... Modified: trunk/tutti-ui-swing/src/main/filtered-resources/tutti.properties =================================================================== --- trunk/tutti-ui-swing/src/main/filtered-resources/tutti.properties 2013-02-03 11:43:18 UTC (rev 305) +++ trunk/tutti-ui-swing/src/main/filtered-resources/tutti.properties 2013-02-03 12:46:05 UTC (rev 306) @@ -22,6 +22,6 @@ # #L% ### tutti.version=${project.version} -tutti.url=${project.url} +tutti.site.url=${project.url} tutti.inceptionYear=${project.inceptionYear} tutti.organizationName=${license.organizationName} \ No newline at end of file Modified: trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/AbstractTuttiUIHandler.java =================================================================== --- trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/AbstractTuttiUIHandler.java 2013-02-03 11:43:18 UTC (rev 305) +++ trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/AbstractTuttiUIHandler.java 2013-02-03 12:46:05 UTC (rev 306) @@ -29,7 +29,7 @@ import com.google.common.collect.Sets; import fr.ifremer.tutti.persistence.entities.IdAware; import fr.ifremer.tutti.service.DecoratorService; -import fr.ifremer.tutti.ui.swing.config.TuttiConfig; +import fr.ifremer.tutti.ui.swing.config.TuttiApplicationConfig; import fr.ifremer.tutti.ui.swing.util.Cancelable; import fr.ifremer.tutti.ui.swing.util.TuttiUIUtil; import fr.ifremer.tutti.ui.swing.util.UIMessageNotifier; @@ -125,7 +125,7 @@ return context; } - public TuttiConfig getConfig() { + public TuttiApplicationConfig getConfig() { return context.getConfig(); } @@ -135,7 +135,7 @@ * save or not. * * @param nextScreen the next screen to display - * @return + * @return {@code true} if UI can be closed, {@code false} otherwise. */ public boolean canCloseUI(TuttiScreen nextScreen) { return true; @@ -438,8 +438,8 @@ public void propertyChange(PropertyChangeEvent evt) { if (log.isDebugEnabled()) { log.debug("Model [" + model + - "] pass to valid state [" + - evt.getNewValue() + "]"); + "] pass to valid state [" + + evt.getNewValue() + "]"); } model.setValid((Boolean) evt.getNewValue()); } Modified: trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/MainUIHandler.java =================================================================== --- trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/MainUIHandler.java 2013-02-03 11:43:18 UTC (rev 305) +++ trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/MainUIHandler.java 2013-02-03 12:46:05 UTC (rev 306) @@ -28,7 +28,7 @@ import fr.ifremer.tutti.persistence.entities.data.Program; import fr.ifremer.tutti.persistence.entities.protocol.TuttiProtocol; import fr.ifremer.tutti.service.PersistenceService; -import fr.ifremer.tutti.ui.swing.config.TuttiConfig; +import fr.ifremer.tutti.ui.swing.config.TuttiApplicationConfig; import fr.ifremer.tutti.ui.swing.config.TuttiConfigUI; import fr.ifremer.tutti.ui.swing.content.cruise.EditCruiseUI; import fr.ifremer.tutti.ui.swing.content.home.SelectCruiseUI; @@ -217,7 +217,7 @@ about.setTitle(_("tutti.title.about")); about.setAboutText(_("tutti.about.message")); - TuttiConfig config = context.getConfig(); + TuttiApplicationConfig config = context.getConfig(); int currentYear = Calendar.getInstance().get(Calendar.YEAR); int inceptionYear = config.getInceptionYear(); String years; @@ -243,7 +243,7 @@ } public void gotoSite() { - TuttiConfig config = context.getConfig(); + TuttiApplicationConfig config = context.getConfig(); URL siteURL = config.getSiteUrl(); Modified: trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/RunTutti.java =================================================================== --- trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/RunTutti.java 2013-02-03 11:43:18 UTC (rev 305) +++ trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/RunTutti.java 2013-02-03 12:46:05 UTC (rev 306) @@ -24,7 +24,7 @@ * #L% */ -import fr.ifremer.tutti.ui.swing.config.TuttiConfig; +import fr.ifremer.tutti.ui.swing.config.TuttiApplicationConfig; import jaxx.runtime.SwingUtil; import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; @@ -51,7 +51,7 @@ public static void main(String... args) { // Create configuration - TuttiConfig config = new TuttiConfig("tutti.properties", args); + TuttiApplicationConfig config = new TuttiApplicationConfig("tutti.properties", args); // Create application context TuttiUIContext context = TuttiUIContext.newContext(config); @@ -116,7 +116,7 @@ } public static void updateTuttiJreOrApplication(TuttiUIContext context) { - TuttiConfig config = context.getConfig(); + TuttiApplicationConfig config = context.getConfig(); File current = config.getTuttiBasedir(); if (current == null || !current.exists()) { @@ -143,7 +143,7 @@ } public static void updateTuttiDatabase(TuttiUIContext context) { - TuttiConfig config = context.getConfig(); + TuttiApplicationConfig config = context.getConfig(); String url = config.getDatabaseUpdateUrl(); ApplicationUpdater up = new ApplicationUpdater(); Modified: trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/TuttiUIContext.java =================================================================== --- trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/TuttiUIContext.java 2013-02-03 11:43:18 UTC (rev 305) +++ trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/TuttiUIContext.java 2013-02-03 12:46:05 UTC (rev 306) @@ -33,7 +33,7 @@ import fr.ifremer.tutti.service.PersistenceService; import fr.ifremer.tutti.service.TuttiService; import fr.ifremer.tutti.service.TuttiServiceContext; -import fr.ifremer.tutti.ui.swing.config.TuttiConfig; +import fr.ifremer.tutti.ui.swing.config.TuttiApplicationConfig; import fr.ifremer.tutti.ui.swing.util.UIMessageNotifier; import org.apache.commons.io.IOUtils; import org.apache.commons.lang3.StringUtils; @@ -101,7 +101,7 @@ * * @since 0.1 */ - protected final TuttiConfig config; + protected final TuttiApplicationConfig config; /** * ClassLoader ressource. @@ -168,7 +168,7 @@ private MainUI mainUI; - public static TuttiUIContext newContext(TuttiConfig config) { + public static TuttiUIContext newContext(TuttiApplicationConfig config) { Preconditions.checkNotNull(config); Preconditions.checkState(applicationContext == null, "Application context was already opened!"); @@ -176,7 +176,7 @@ return applicationContext; } - protected TuttiUIContext(TuttiConfig config) { + protected TuttiUIContext(TuttiApplicationConfig config) { this.config = config; this.resourceLoader = new RessourceClassLoader(Thread.currentThread().getContextClassLoader()); this.serviceContext = new TuttiServiceContext(resourceLoader, config.getServiceConfig()); @@ -198,7 +198,7 @@ return serviceContext.getService(serviceType); } - public TuttiConfig getConfig() { + public TuttiApplicationConfig getConfig() { return config; } Copied: trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/config/TuttiApplicationConfig.java (from rev 304, trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/config/TuttiConfig.java) =================================================================== --- trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/config/TuttiApplicationConfig.java (rev 0) +++ trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/config/TuttiApplicationConfig.java 2013-02-03 12:46:05 UTC (rev 306) @@ -0,0 +1,284 @@ +package fr.ifremer.tutti.ui.swing.config; + +/* + * #%L + * Tutti :: Application + * $Id$ + * $HeadURL$ + * %% + * Copyright (C) 2012 Ifremer + * %% + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as + * published by the Free Software Foundation, either version 3 of the + * License, or (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public + * License along with this program. If not, see + * <http://www.gnu.org/licenses/gpl-3.0.html>. + * #L% + */ + +import fr.ifremer.tutti.service.TuttiServiceTechnicalException; +import fr.ifremer.tutti.service.config.TuttiServiceConfig; +import fr.ifremer.tutti.ui.swing.util.editor.CoordinateEditorType; +import org.apache.commons.lang3.StringUtils; +import org.apache.commons.lang3.builder.ReflectionToStringBuilder; +import org.apache.commons.logging.Log; +import org.apache.commons.logging.LogFactory; +import org.nuiton.util.ApplicationConfig; +import org.nuiton.util.ApplicationConfigHelper; +import org.nuiton.util.ApplicationConfigProvider; +import org.nuiton.util.ArgumentsParserException; +import org.nuiton.util.Version; + +import javax.swing.KeyStroke; +import java.awt.Color; +import java.io.File; +import java.net.URL; +import java.util.Locale; +import java.util.Set; + +/** + * Tutti application config. + * + * @author tchemit <chemit@codelutin.com> + * @since 0.1 + */ +public class TuttiApplicationConfig { + + /** Logger. */ + private static final Log log = + LogFactory.getLog(TuttiApplicationConfig.class); + + /** + * Delegate application config object containing configuration. + * + * @since 0.1 + */ + protected final ApplicationConfig applicationConfig; + + /** + * Service configuration to pass to service context. + * + * @since 0.1 + */ + protected final TuttiServiceConfig serviceConfig; + + protected final String[] optionKeyToNotSave; + + public TuttiApplicationConfig(String file, String... args) { + + applicationConfig = new ApplicationConfig(); + + // get all config providers + Set<ApplicationConfigProvider> providers = + ApplicationConfigHelper.getProviders(null, + null, + null, + true); + + // load all default options + ApplicationConfigHelper.loadAllDefaultOption(applicationConfig, + providers); + + // get all transient and final option keys + Set<String> optionToSkip = + ApplicationConfigHelper.getTransientOrFinalOptionKey(providers); + + if (log.isInfoEnabled()) { + log.info("Option that won't be saved: " + optionToSkip); + } + optionKeyToNotSave = optionToSkip.toArray(new String[optionToSkip.size()]); + + applicationConfig.setConfigFileName(file); + + try { + applicationConfig.parse(args); + + } catch (ArgumentsParserException e) { + throw new TuttiServiceTechnicalException( + "Could not parse configuration", e); + } + + //TODO Review this, this is very dirty to do this... + File tuttiBasedir = getTuttiBasedir(); + + if (tuttiBasedir == null) { + tuttiBasedir = new File(""); + } + if (!tuttiBasedir.isAbsolute()) { + tuttiBasedir = new File(tuttiBasedir.getAbsolutePath()); + } + if (tuttiBasedir.getName().equals("..")) { + tuttiBasedir = tuttiBasedir.getParentFile().getParentFile(); + } + if (tuttiBasedir.getName().equals(".")) { + tuttiBasedir = tuttiBasedir.getParentFile(); + } + if (log.isInfoEnabled()) { + log.info("Application basedir: " + tuttiBasedir); + } + applicationConfig.setOption(TuttiApplicationConfigOption.TUTTI_APPLICATION_BASEDIR.getKey(), tuttiBasedir.getAbsolutePath()); + + log.info(this + " is initializing..."); + + serviceConfig = new TuttiServiceConfig(applicationConfig); + } + + public ApplicationConfig getApplicationConfig() { + return applicationConfig; + } + + public TuttiServiceConfig getServiceConfig() { + return serviceConfig; + } + + public void save() { + applicationConfig.saveForUser(optionKeyToNotSave); + } + + @Override + public String toString() { + return ReflectionToStringBuilder.toString(this); + } + + public String getTuttiLaunchMode() { + return applicationConfig.getOption(TuttiApplicationConfigOption.TUTTI_LAUNCH_MODE.getKey()); + } + + /** @return {@link TuttiApplicationConfigOption#UI_CONFIG_FILE} value */ + public File getUIConfigFile() { + return applicationConfig.getOptionAsFile(TuttiApplicationConfigOption.UI_CONFIG_FILE.getKey()); + } + + public boolean isAutoPopupNumberEditor() { + return applicationConfig.getOptionAsBoolean(TuttiApplicationConfigOption.AUTO_POPUP_NUMBER_EDITOR.getKey()); + } + + public boolean isShowNumberEditorButton() { + return applicationConfig.getOptionAsBoolean(TuttiApplicationConfigOption.SHOW_NUMBER_EDITOR_BUTTON.getKey()); + } + + public CoordinateEditorType getCoordinateEditorType() { + String value = applicationConfig.getOption(TuttiApplicationConfigOption.COORDINATE_EDITOR_TYPE.getKey()); + return CoordinateEditorType.valueOf(value); + } + + public String getProgramId() { + String result = applicationConfig.getOption(TuttiApplicationConfigOption.PROGRAM_ID.getKey()); + return StringUtils.isBlank(result) ? null : result; + } + + public String getCruiseId() { + String result = applicationConfig.getOption(TuttiApplicationConfigOption.CRUISE_ID.getKey()); + return StringUtils.isBlank(result) ? null : result; + } + + public String getProtocolId() { + String result = applicationConfig.getOption(TuttiApplicationConfigOption.PROTOCOL_ID.getKey()); + return StringUtils.isBlank(result) ? null : result; + } + + public Color getColorRowInvalid() { + return applicationConfig.getOptionAsColor(TuttiApplicationConfigOption.COLOR_ROW_INVALID.getKey()); + } + + public Color getColorRowReadOnly() { + return applicationConfig.getOptionAsColor(TuttiApplicationConfigOption.COLOR_ROW_READ_ONLY.getKey()); + } + + public Color getColorCellWithValue() { + return applicationConfig.getOptionAsColor(TuttiApplicationConfigOption.COLOR_CELL_WITH_VALUE.getKey()); + } + + public KeyStroke getShortcutClosePopup() { + return applicationConfig.getOptionAsKeyStroke(TuttiApplicationConfigOption.SHORTCUT_CLOSE_POPUP.getKey()); + } + + public KeyStroke getShortCut(String actionName) { + KeyStroke result = applicationConfig.getOptionAsKeyStroke( + "tutti.ui." + actionName); + return result; + } + + public String getDateFormat() { + return applicationConfig.getOption(TuttiApplicationConfigOption.DATE_FORMAT.getKey()); + } + + public Version getVersion() { + return serviceConfig.getVersion(); + } + + public int getInceptionYear() { + return serviceConfig.getInceptionYear(); + } + + public URL getSiteUrl() { + return serviceConfig.getSiteUrl(); + } + + public String getOrganizationName() { + return serviceConfig.getOrganizationName(); + } + + public File getTmpDirectory() { + return serviceConfig.getTmpDirectory(); + } + + public File getNewTmpDirectory(String name) { + return new File(getTmpDirectory(), name + "_" + System.nanoTime()); + } + + public File getDataDirectory() { + return serviceConfig.getDataDirectory(); + } + + public File getI18nDirectory() { + return applicationConfig.getOptionAsFile( + TuttiApplicationConfigOption.TUTTI_I18N_DIRECTORY.getKey()); + } + + public Locale getI18nLocale() { + return applicationConfig.getOptionAsLocale( + TuttiApplicationConfigOption.TUTTI_I18N_LOCALE.getKey()); + } + + public void setProgramId(String programId) { + if (programId == null) { + programId = ""; + } + applicationConfig.setOption(TuttiApplicationConfigOption.PROGRAM_ID.getKey(), programId); + } + + public void setCruiseId(String cruiseId) { + if (cruiseId == null) { + cruiseId = ""; + } + applicationConfig.setOption(TuttiApplicationConfigOption.CRUISE_ID.getKey(), cruiseId); + } + + public void setProtocolId(String protocolId) { + if (protocolId == null) { + protocolId = ""; + } + applicationConfig.setOption(TuttiApplicationConfigOption.PROTOCOL_ID.getKey(), protocolId); + } + + public File getTuttiBasedir() { + return applicationConfig.getOptionAsFile(TuttiApplicationConfigOption.TUTTI_APPLICATION_BASEDIR.getKey()); + } + + public String getApplicationUpdateUrl() { + return applicationConfig.getOption(TuttiApplicationConfigOption.TUTTI_UPDATE_APPLICATION_URL.getKey()); + } + + public String getDatabaseUpdateUrl() { + return applicationConfig.getOption(TuttiApplicationConfigOption.TUTTI_UPDATE_DATABASE_URL.getKey()); + } +} Copied: trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/config/TuttiApplicationConfigOption.java (from rev 304, trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/config/TuttiConfigOption.java) =================================================================== --- trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/config/TuttiApplicationConfigOption.java (rev 0) +++ trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/config/TuttiApplicationConfigOption.java 2013-02-03 12:46:05 UTC (rev 306) @@ -0,0 +1,262 @@ +package fr.ifremer.tutti.ui.swing.config; + +/* + * #%L + * Tutti :: Application + * $Id$ + * $HeadURL$ + * %% + * Copyright (C) 2012 Ifremer + * %% + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as + * published by the Free Software Foundation, either version 3 of the + * License, or (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public + * License along with this program. If not, see + * <http://www.gnu.org/licenses/gpl-3.0.html>. + * #L% + */ + +import fr.ifremer.tutti.ui.swing.util.editor.CoordinateEditorType; +import org.nuiton.util.ApplicationConfig; + +import javax.swing.KeyStroke; +import java.awt.Color; +import java.io.File; +import java.util.Locale; + +import static org.nuiton.i18n.I18n.n_; + +/** + * All Tutti configuration options. + * + * @author tchemit <chemit@codelutin.com> + * @since 0.1 + */ +public enum TuttiApplicationConfigOption implements ApplicationConfig.OptionDef { + + TUTTI_LAUNCH_MODE( + "tutti.launch.mode", + n_("tutti.option.launch.mode.description"), + null, + String.class, + true, + true + ), + + TUTTI_APPLICATION_BASEDIR( + "tutti.application.basedir", + n_("tutti.option.application.basedir.description"), + null, + File.class, + true, + true + ), + + TUTTI_I18N_DIRECTORY( + "tutti.i18n.directory", + n_("tutti.option.i18n.directory.description"), + "${tutti.config.directory}/i18n", + File.class + ), + + TUTTI_I18N_LOCALE( + "tutti.i18n.locale", + n_("tutti.option.i18n.locale.description"), + Locale.FRANCE.getCountry(), + Locale.class + ), + + TUTTI_UPDATE_APPLICATION_URL( + "tutti.update.application.url", + n_("tutti.option.update.application.url.description"), + null, + String.class, + true, + false + ), + + TUTTI_UPDATE_DATABASE_URL( + "tutti.update.database.url", + n_("tutti.option.update.database.url.description"), + null, + String.class, + true, + false + ), + + UI_CONFIG_FILE( + "tutti.ui.config.file", + n_("tutti.option.ui.config.file.description"), + "${tutti.data.directory}/tuttiUI.xml", + File.class + ), + + PROGRAM_ID( + "tutti.programId", + n_("tutti.option.programId.description"), + null, + String.class + ), + + CRUISE_ID( + "tutti.cruiseId", + n_("tutti.option.cruiseId.description"), + null, + String.class + ), + + PROTOCOL_ID( + "tutti.protocolId", + n_("tutti.option.protocolId.description"), + null, + String.class + ), + + AUTO_POPUP_NUMBER_EDITOR( + "tutti.ui.autoPopupNumberEditor", + n_("tutti.option.ui.autoPopupNumberEditor.description"), + String.valueOf(false), + Boolean.class + ), + + SHOW_NUMBER_EDITOR_BUTTON( + "tutti.ui.showNumberEditorButton", + n_("tutti.option.ui.showNumberEditorButton.description"), + String.valueOf(true), + Boolean.class + ), + + COLOR_ROW_READ_ONLY( + "tutti.ui.color.rowReadOnly", + n_("tutti.option.ui.color.rowReadOnly.description"), + new Color(192, 192, 192).toString(), + Color.class + ), + + COLOR_ROW_INVALID( + "tutti.ui.color.rowInvalid", + n_("tutti.option.ui.color.rowInvalid.description"), + new Color(255, 128, 128).toString(), + Color.class + ), + + COLOR_CELL_WITH_VALUE( + "tutti.ui.color.cellWithValue", + n_("tutti.option.ui.color.cellWithValue.description"), + new Color(128, 255, 128).toString(), + Color.class + ), + + SHORTCUT_CLOSE_POPUP( + "tutti.ui.shortcut.closePopup", + n_("tutti.option.ui.shortcut.closePopup.description"), + "alt pressed F", + KeyStroke.class + ), + + COORDINATE_EDITOR_TYPE( + "tutti.ui.coordinateEditorType", + n_("tutti.option.ui.coordinateEditorType.description"), + CoordinateEditorType.DD.toString(), + CoordinateEditorType.class + ), + + DATE_FORMAT( + "tutti.ui.dateFormat", + n_("tutti.option.ui.dateFormat.description"), + "dd/MM/yyyy", + String.class + ); + + /** Configuration key. */ + private final String key; + + /** I18n key of option description */ + private final String description; + + /** Type of option */ + private final Class<?> type; + + /** Default value of option. */ + private String defaultValue; + + /** Flag to not keep option value on disk */ + private boolean isTransient; + + /** Flag to not allow option value modification */ + private boolean isFinal; + + TuttiApplicationConfigOption(String key, + String description, + String defaultValue, + Class<?> type, + boolean isTransient, + boolean isFinal) { + this.key = key; + this.description = description; + this.defaultValue = defaultValue; + this.type = type; + this.isTransient = isTransient; + this.isFinal = isFinal; + } + + TuttiApplicationConfigOption(String key, + String description, + String defaultValue, + Class<?> type) { + this(key, description, defaultValue, type, false, false); + } + + @Override + public String getKey() { + return key; + } + + @Override + public Class<?> getType() { + return type; + } + + @Override + public String getDescription() { + return description; + } + + @Override + public String getDefaultValue() { + return defaultValue; + } + + @Override + public boolean isTransient() { + return isTransient; + } + + @Override + public boolean isFinal() { + return isFinal; + } + + @Override + public void setDefaultValue(String defaultValue) { + this.defaultValue = defaultValue; + } + + @Override + public void setTransient(boolean newValue) { + // not used + } + + @Override + public void setFinal(boolean newValue) { + // not used + } +} Modified: trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/config/TuttiApplicationConfigProvider.java =================================================================== --- trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/config/TuttiApplicationConfigProvider.java 2013-02-03 11:43:18 UTC (rev 305) +++ trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/config/TuttiApplicationConfigProvider.java 2013-02-03 12:46:05 UTC (rev 306) @@ -51,7 +51,7 @@ @Override public ApplicationConfig.OptionDef[] getOptions() { - return TuttiConfigOption.values(); + return TuttiApplicationConfigOption.values(); } @Override Deleted: trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/config/TuttiConfig.java =================================================================== --- trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/config/TuttiConfig.java 2013-02-03 11:43:18 UTC (rev 305) +++ trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/config/TuttiConfig.java 2013-02-03 12:46:05 UTC (rev 306) @@ -1,283 +0,0 @@ -package fr.ifremer.tutti.ui.swing.config; - -/* - * #%L - * Tutti :: Application - * $Id$ - * $HeadURL$ - * %% - * Copyright (C) 2012 Ifremer - * %% - * This program is free software: you can redistribute it and/or modify - * it under the terms of the GNU General Public License as - * published by the Free Software Foundation, either version 3 of the - * License, or (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public - * License along with this program. If not, see - * <http://www.gnu.org/licenses/gpl-3.0.html>. - * #L% - */ - -import fr.ifremer.tutti.service.TuttiServiceTechnicalException; -import fr.ifremer.tutti.service.config.TuttiServiceConfig; -import fr.ifremer.tutti.ui.swing.util.editor.CoordinateEditorType; -import org.apache.commons.lang3.StringUtils; -import org.apache.commons.lang3.builder.ReflectionToStringBuilder; -import org.apache.commons.logging.Log; -import org.apache.commons.logging.LogFactory; -import org.nuiton.util.ApplicationConfig; -import org.nuiton.util.ApplicationConfigHelper; -import org.nuiton.util.ApplicationConfigProvider; -import org.nuiton.util.ArgumentsParserException; -import org.nuiton.util.Version; - -import javax.swing.KeyStroke; -import java.awt.Color; -import java.io.File; -import java.net.URL; -import java.util.Locale; -import java.util.Set; - -/** - * Tutti application config. - * - * @author tchemit <chemit@codelutin.com> - * @since 0.1 - */ -public class TuttiConfig { - - /** Logger. */ - private static final Log log = LogFactory.getLog(TuttiConfig.class); - - /** - * Delegate application config object containing configuration. - * - * @since 0.1 - */ - protected final ApplicationConfig applicationConfig; - - /** - * Service configuration to pass to service context. - * - * @since 0.1 - */ - protected final TuttiServiceConfig serviceConfig; - - protected final String[] optionKeyToNotSave; - - public TuttiConfig(String file, String... args) { - - applicationConfig = new ApplicationConfig(); - - // get all config providers - Set<ApplicationConfigProvider> providers = - ApplicationConfigHelper.getProviders(null, - null, - null, - true); - - // load all default options - ApplicationConfigHelper.loadAllDefaultOption(applicationConfig, - providers); - - // get all transient and final option keys - Set<String> optionToSkip = - ApplicationConfigHelper.getTransientOrFinalOptionKey(providers); - - if (log.isInfoEnabled()) { - log.info("Option that won't be saved: " + optionToSkip); - } - optionKeyToNotSave = optionToSkip.toArray(new String[optionToSkip.size()]); - - applicationConfig.setConfigFileName(file); - - try { - applicationConfig.parse(args); - - } catch (ArgumentsParserException e) { - throw new TuttiServiceTechnicalException( - "Could not parse configuration", e); - } - - //TODO Review this, this is very dirty to do this... - File tuttiBasedir = getTuttiBasedir(); - - if (tuttiBasedir == null) { - tuttiBasedir = new File(""); - } - if (!tuttiBasedir.isAbsolute()) { - tuttiBasedir = new File(tuttiBasedir.getAbsolutePath()); - } - if (tuttiBasedir.getName().equals("..")) { - tuttiBasedir = tuttiBasedir.getParentFile().getParentFile(); - } - if (tuttiBasedir.getName().equals(".")) { - tuttiBasedir = tuttiBasedir.getParentFile(); - } - if (log.isInfoEnabled()) { - log.info("Application basedir: " + tuttiBasedir); - } - applicationConfig.setOption(TuttiConfigOption.TUTTI_APPLICATION_BASEDIR.getKey(), tuttiBasedir.getAbsolutePath()); - - log.info(this + " is initializing..."); - - serviceConfig = new TuttiServiceConfig(applicationConfig); - } - - public ApplicationConfig getApplicationConfig() { - return applicationConfig; - } - - public TuttiServiceConfig getServiceConfig() { - return serviceConfig; - } - - public void save() { - applicationConfig.saveForUser(optionKeyToNotSave); - } - - @Override - public String toString() { - return ReflectionToStringBuilder.toString(this); - } - - public String getTuttiLaunchMode() { - return applicationConfig.getOption(TuttiConfigOption.TUTTI_LAUNCH_MODE.getKey()); - } - - /** @return {@link TuttiConfigOption#UI_CONFIG_FILE} value */ - public File getUIConfigFile() { - return applicationConfig.getOptionAsFile(TuttiConfigOption.UI_CONFIG_FILE.getKey()); - } - - public boolean isAutoPopupNumberEditor() { - return applicationConfig.getOptionAsBoolean(TuttiConfigOption.AUTO_POPUP_NUMBER_EDITOR.getKey()); - } - - public boolean isShowNumberEditorButton() { - return applicationConfig.getOptionAsBoolean(TuttiConfigOption.SHOW_NUMBER_EDITOR_BUTTON.getKey()); - } - - public CoordinateEditorType getCoordinateEditorType() { - String value = applicationConfig.getOption(TuttiConfigOption.COORDINATE_EDITOR_TYPE.getKey()); - return CoordinateEditorType.valueOf(value); - } - - public String getProgramId() { - String result = applicationConfig.getOption(TuttiConfigOption.PROGRAM_ID.getKey()); - return StringUtils.isBlank(result) ? null : result; - } - - public String getCruiseId() { - String result = applicationConfig.getOption(TuttiConfigOption.CRUISE_ID.getKey()); - return StringUtils.isBlank(result) ? null : result; - } - - public String getProtocolId() { - String result = applicationConfig.getOption(TuttiConfigOption.PROTOCOL_ID.getKey()); - return StringUtils.isBlank(result) ? null : result; - } - - public Color getColorRowInvalid() { - return applicationConfig.getOptionAsColor(TuttiConfigOption.COLOR_ROW_INVALID.getKey()); - } - - public Color getColorRowReadOnly() { - return applicationConfig.getOptionAsColor(TuttiConfigOption.COLOR_ROW_READ_ONLY.getKey()); - } - - public Color getColorCellWithValue() { - return applicationConfig.getOptionAsColor(TuttiConfigOption.COLOR_CELL_WITH_VALUE.getKey()); - } - - public KeyStroke getShortcutClosePopup() { - return applicationConfig.getOptionAsKeyStroke(TuttiConfigOption.SHORTCUT_CLOSE_POPUP.getKey()); - } - - public KeyStroke getShortCut(String actionName) { - KeyStroke result = applicationConfig.getOptionAsKeyStroke( - "tutti.ui." + actionName); - return result; - } - - public String getDateFormat() { - return applicationConfig.getOption(TuttiConfigOption.DATE_FORMAT.getKey()); - } - - public Version getVersion() { - return serviceConfig.getVersion(); - } - - public int getInceptionYear() { - return serviceConfig.getInceptionYear(); - } - - public URL getSiteUrl() { - return serviceConfig.getSiteUrl(); - } - - public String getOrganizationName() { - return serviceConfig.getOrganizationName(); - } - - public File getTmpDirectory() { - return serviceConfig.getTmpDirectory(); - } - - public File getNewTmpDirectory(String name) { - return new File(getTmpDirectory(), name + "_" + System.nanoTime()); - } - - public File getDataDirectory() { - return serviceConfig.getDataDirectory(); - } - - public File getI18nDirectory() { - return applicationConfig.getOptionAsFile( - TuttiConfigOption.TUTTI_I18N_DIRECTORY.getKey()); - } - - public Locale getI18nLocale() { - return applicationConfig.getOptionAsLocale( - TuttiConfigOption.TUTTI_I18N_LOCALE.getKey()); - } - - public void setProgramId(String programId) { - if (programId == null) { - programId = ""; - } - applicationConfig.setOption(TuttiConfigOption.PROGRAM_ID.getKey(), programId); - } - - public void setCruiseId(String cruiseId) { - if (cruiseId == null) { - cruiseId = ""; - } - applicationConfig.setOption(TuttiConfigOption.CRUISE_ID.getKey(), cruiseId); - } - - public void setProtocolId(String protocolId) { - if (protocolId == null) { - protocolId = ""; - } - applicationConfig.setOption(TuttiConfigOption.PROTOCOL_ID.getKey(), protocolId); - } - - public File getTuttiBasedir() { - return applicationConfig.getOptionAsFile(TuttiConfigOption.TUTTI_APPLICATION_BASEDIR.getKey()); - } - - public String getApplicationUpdateUrl() { - return applicationConfig.getOption(TuttiConfigOption.TUTTI_UPDATE_APPLICATION_URL.getKey()); - } - - public String getDatabaseUpdateUrl() { - return applicationConfig.getOption(TuttiConfigOption.TUTTI_UPDATE_DATABASE_URL.getKey()); - } -} Deleted: trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/config/TuttiConfigOption.java =================================================================== --- trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/config/TuttiConfigOption.java 2013-02-03 11:43:18 UTC (rev 305) +++ trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/config/TuttiConfigOption.java 2013-02-03 12:46:05 UTC (rev 306) @@ -1,266 +0,0 @@ -package fr.ifremer.tutti.ui.swing.config; - -/* - * #%L - * Tutti :: Application - * $Id$ - * $HeadURL$ - * %% - * Copyright (C) 2012 Ifremer - * %% - * This program is free software: you can redistribute it and/or modify - * it under the terms of the GNU General Public License as - * published by the Free Software Foundation, either version 3 of the - * License, or (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public - * License along with this program. If not, see - * <http://www.gnu.org/licenses/gpl-3.0.html>. - * #L% - */ - -import fr.ifremer.tutti.ui.swing.util.editor.CoordinateEditorType; -import org.nuiton.util.ApplicationConfig; - -import javax.swing.KeyStroke; -import java.awt.Color; -import java.io.File; -import java.util.Locale; - -import static org.nuiton.i18n.I18n.n_; - -/** - * All Tutti configuration options. - * - * @author tchemit <chemit@codelutin.com> - * @since 0.1 - */ -public enum TuttiConfigOption implements ApplicationConfig.OptionDef { - - TUTTI_LAUNCH_MODE( - "tutti.launch.mode", - n_("tutti.launch.mode.description"), - null, - String.class, - true, - true - ), - - TUTTI_APPLICATION_BASEDIR( - "tutti.application.basedir", - n_("tutti.application.basedir.description"), - null, - File.class, - true, - true - ), - - TUTTI_I18N_DIRECTORY( - "tutti.i18n.directory", - n_("tutti.i18n.directory.description"), - "${tutti.data.directory}/i18n", - File.class, - true, - true - ), - - TUTTI_I18N_LOCALE( - "tutti.i18n.locale", - n_("tutti.i18n.locale.description"), - Locale.FRANCE.getCountry(), - Locale.class, - true, - true - ), - - TUTTI_UPDATE_APPLICATION_URL( - "tutti.update.application.url", - n_("tutti.update.application.url.description"), - null, - String.class, - true, - false - ), - - TUTTI_UPDATE_DATABASE_URL( - "tutti.update.database.url", - n_("tutti.update.database.url.description"), - null, - String.class, - true, - false - ), - - UI_CONFIG_FILE( - "tutti.ui.config", - n_("tutti.config.ui.config"), - "${tutti.data.directory}/tuttiUI.xml", - File.class - ), - - PROGRAM_ID( - "tutti.programId", - n_("tutti.config.programId"), - null, - String.class - ), - - CRUISE_ID( - "tutti.cruiseId", - n_("tutti.config.cruiseId"), - null, - String.class - ), - - PROTOCOL_ID( - "tutti.protocolId", - n_("tutti.config.protocolId"), - null, - String.class - ), - - AUTO_POPUP_NUMBER_EDITOR( - "tutti.ui.autoPopupNumberEditor", - n_("tutti.config.ui.autoPopupNumberEditor"), - String.valueOf(false), - Boolean.class - ), - - SHOW_NUMBER_EDITOR_BUTTON( - "tutti.ui.showNumberEditorButton", - n_("tutti.config.ui.showNumberEditorButton"), - String.valueOf(true), - Boolean.class - ), - - COLOR_ROW_READ_ONLY( - "tutti.ui.color.rowReadOnly", - n_("tutti.config.ui.color.rowReadOnly"), - new Color(192, 192, 192).toString(), - Color.class - ), - - COLOR_ROW_INVALID( - "tutti.ui.color.rowInvalid", - n_("tutti.config.ui.color.rowInvalid"), - new Color(255, 128, 128).toString(), - Color.class - ), - - COLOR_CELL_WITH_VALUE( - "tutti.ui.color.cellWithValue", - n_("tutti.config.ui.color.cellWithValue"), - new Color(128, 255, 128).toString(), - Color.class - ), - - SHORTCUT_CLOSE_POPUP( - "tutti.ui.shortcut.closePopup", - n_("tutti.config.ui.shortcut.closePopup"), - "alt pressed F", - KeyStroke.class - ), - - COORDINATE_EDITOR_TYPE( - "tutti.ui.coordinateEditorType", - n_("tutti.config.ui.coordinateEditorType"), - CoordinateEditorType.DD.toString(), - CoordinateEditorType.class - ), - - DATE_FORMAT( - "tutti.ui.dateFormat", - n_("tutti.config.ui.dateFormat"), - "dd/MM/yyyy", - String.class - ); - - /** Configuration key. */ - private final String key; - - /** I18n key of option description */ - private final String description; - - /** Type of option */ - private final Class<?> type; - - /** Default value of option. */ - private String defaultValue; - - /** Flag to not keep option value on disk */ - private boolean isTransient; - - /** Flag to not allow option value modification */ - private boolean isFinal; - - TuttiConfigOption(String key, - String description, - String defaultValue, - Class<?> type, - boolean isTransient, - boolean isFinal) { - this.key = key; - this.description = description; - this.defaultValue = defaultValue; - this.type = type; - this.isTransient = isTransient; - this.isFinal = isFinal; - } - - TuttiConfigOption(String key, - String description, - String defaultValue, - Class<?> type) { - this(key, description, defaultValue, type, false, false); - } - - @Override - public String getKey() { - return key; - } - - @Override - public Class<?> getType() { - return type; - } - - @Override - public String getDescription() { - return description; - } - - @Override - public String getDefaultValue() { - return defaultValue; - } - - @Override - public boolean isTransient() { - return isTransient; - } - - @Override - public boolean isFinal() { - return isFinal; - } - - @Override - public void setDefaultValue(String defaultValue) { - this.defaultValue = defaultValue; - } - - @Override - public void setTransient(boolean newValue) { - // not used - } - - @Override - public void setFinal(boolean newValue) { - // not used - } -} Modified: trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/config/TuttiConfigUI.java =================================================================== --- trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/config/TuttiConfigUI.java 2013-02-03 11:43:18 UTC (rev 305) +++ trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/config/TuttiConfigUI.java 2013-02-03 12:46:05 UTC (rev 306) @@ -55,7 +55,7 @@ public void createUI() { - TuttiConfig config = mainUI.getHandler().getContext().getConfig(); + TuttiApplicationConfig config = mainUI.getHandler().getContext().getConfig(); ConfigUIHelper helper = new ConfigUIHelper(config.getApplicationConfig()); @@ -99,25 +99,25 @@ CALLBACK_APPLICATION) .addOption(TuttiServiceConfigOption.DATA_DIRECTORY) .addOption(TuttiServiceConfigOption.SITE_URL) - .addOption(TuttiConfigOption.UI_CONFIG_FILE); + .addOption(TuttiApplicationConfigOption.UI_CONFIG_FILE); // UI helper.addCategory(n_("tutti.config.category.ui"), n_("tutti.config.category.ui.description"), CALLBACK_UI) - .addOption(TuttiConfigOption.COLOR_ROW_INVALID) - .addOption(TuttiConfigOption.COLOR_ROW_READ_ONLY) - .addOption(TuttiConfigOption.COLOR_CELL_WITH_VALUE) - .addOption(TuttiConfigOption.DATE_FORMAT) - .addOption(TuttiConfigOption.COORDINATE_EDITOR_TYPE); + .addOption(TuttiApplicationConfigOption.COLOR_ROW_INVALID) + .addOption(TuttiApplicationConfigOption.COLOR_ROW_READ_ONLY) + .addOption(TuttiApplicationConfigOption.COLOR_CELL_WITH_VALUE) + .addOption(TuttiApplicationConfigOption.DATE_FORMAT) + .addOption(TuttiApplicationConfigOption.COORDINATE_EDITOR_TYPE); // SHORTCUT helper.addCategory(n_("tutti.config.category.shortcuts"), n_("tutti.config.category.shortcuts.description"), CALLBACK_SHORTCUT) - .addOption(TuttiConfigOption.SHORTCUT_CLOSE_POPUP); + .addOption(TuttiApplicationConfigOption.SHORTCUT_CLOSE_POPUP); helper.setFinalizer(new MainCallBackFinalizer(CALLBACK_APPLICATION)); Modified: trunk/tutti-ui-swing/src/main/resources/i18n/tutti-ui-swing_fr_FR.properties =================================================================== --- trunk/tutti-ui-swing/src/main/resources/i18n/tutti-ui-swing_fr_FR.properties 2013-02-03 11:43:18 UTC (rev 305) +++ trunk/tutti-ui-swing/src/main/resources/i18n/tutti-ui-swing_fr_FR.properties 2013-02-03 12:46:05 UTC (rev 306) @@ -94,7 +94,6 @@ tutti.action.validate=Valider tutti.action.validateCatches=Valider les captures tutti.action.validateCatches.tip=Valider les captures -tutti.application.basedir.description=Répertoire principale de l'application tutti.application.config=Configuration de l'application Tutti tutti.application.directory.description=Répertoire contentant uniquement tutti tutti.application.name=Tutti @@ -104,19 +103,6 @@ tutti.config.category.shortcuts.description=Liste des raccourcis clavier tutti.config.category.ui=Interface utilisateur tutti.config.category.ui.description=Options de l'interface utilisateur -tutti.config.cruiseId=Identifiant de la dernière campagne utilisée -tutti.config.programId=Identifiant de la dernière série de campagne utilisée -tutti.config.protocolId=Identifiant du dernier protocole utilisé -tutti.config.ui.autoPopupNumberEditor=Toujours afficher le pavé numérique lors de l'édition d'un nombre -tutti.config.ui.color.cellWithValue=Couleur d'une cellule avec des données -tutti.config.ui.color.rowInvalid=Ligne invalide -tutti.config.ui.color.rowReadOnly=Cellule non éditable -tutti.config.ui.config=Chemin du fichier de configuration des interfaces graphiques -tutti.config.ui.coordinateEditorType=Type de l'éditeur de coordonnées -tutti.config.ui.dateFormat=Format de dates -tutti.config.ui.shortcut.closePopup=Fermer une popup -tutti.config.ui.showNumberEditorButton=Afficher le pavé numérique de saisie -tutti.config.ui.useSexagecimalEditor=Utiliser l'éditeur sexagécimal pour entrer des coordonnées tutti.dialog.askSaveBeforeLeaving.message=Vous avez fait des modifications qu vous n'avez pas enregistrées. Voulez-vous les enregistrer ? tutti.dialog.askSaveBeforeLeaving.title=Modifications non enregistrées tutti.dialog.catches.species.split.weightNotNull.message=Pour catégoriser un lot, il ne doit pas avoir de poids sous-échantillonné. Catégoriser le lot mettra le poids sous-échantillonné à nul. @@ -125,9 +111,6 @@ tutti.errorTable.title=Rapport de contrôles tutti.file.csv=Extension d'un fichier csv tutti.file.protocol=Extension d'un fichier de protocole Tutti -tutti.i18n.directory.description=Répertoire des fichiers de traductions -tutti.i18n.locale.description=Langue utilisée dans l'application -tutti.jre.directory.description=Répertoire de la jre tutti.label.attachmentEditor.file=Fichier tutti.label.attachmentEditor.fileComment=Commentaire tutti.label.attachmentEditor.fileName=Nom @@ -254,7 +237,6 @@ tutti.label.tab.protocol.species=Espèces tutti.label.tab.species=Espèces tutti.label.traitReminder=Trait \: %s -tutti.launch.mode.description= tutti.legend.catch.benthos=Benthos tutti.legend.catch.macroWaste=Macro déchets tutti.legend.catch.species=Espèces @@ -276,6 +258,26 @@ tutti.menu.synchronisations=Synchronisation tutti.menu.synchronisations.tip=Import/Export tutti.message.action.running=<html>Action <strong>%s</strong> en cours d'execution...<hr/></html> +tutti.option.application.basedir.description=Répertoire principale de l'application +tutti.option.cruiseId.description=Identifiant de la dernière campagne utilisée +tutti.option.i18n.directory.description=Répertoire des fichiers de traductions +tutti.option.i18n.locale.description=Langue utilisée dans l'application +tutti.option.jre.directory.description=Répertoire de la jre +tutti.option.launch.mode.description=Mode de démarrage de l'application +tutti.option.programId.description=Identifiant de la dernière série de campagne utilisée +tutti.option.protocolId.description=Identifiant du dernier protocole utilisé +tutti.option.ui.autoPopupNumberEditor.description=Toujours afficher le pavé numérique lors de l'édition d'un nombre +tutti.option.ui.color.cellWithValue.description=Couleur d'une cellule avec des données +tutti.option.ui.color.rowInvalid.description=Ligne invalide +tutti.option.ui.color.rowReadOnly.description=Cellule non éditable +tutti.option.ui.config.file.description=Chemin du fichier de configuration des interfaces graphiques +tutti.option.ui.coordinateEditorType.description=Type de l'éditeur de coordonnées +tutti.option.ui.dateFormat.description=Format de dates +tutti.option.ui.shortcut.closePopup.description=Fermer une popup +tutti.option.ui.showNumberEditorButton.description=Afficher le pavé numérique de saisie +tutti.option.ui.useSexagecimalEditor=Utiliser l'éditeur sexagécimal pour entrer des coordonnées +tutti.option.update.application.url.description=URL de mise à jour de la jre et de l'application +tutti.option.update.database.url.description=URL de mise à jour de la base de données tutti.sampleCategoryType.age=Age tutti.sampleCategoryType.maturity=Maturité tutti.sampleCategoryType.sex=Sexe @@ -374,8 +376,6 @@ tutti.to.be.done=< A FAIRE > tutti.tooltip.attachment.none=Pas de pièce-jointes tutti.tooltip.comment.none=Pas de commentaire -tutti.update.application.url.description=URL de mise à jour de la jre et de l'application -tutti.update.database.url.description=URL de mise à jour de la base de données tutti.validator.alert.none=Aucune alerte tutti.validator.alert.one=1 alerte tutti.validator.alert.several=%s alertes