Observe-commits
Threads by month
- ----- 2026 -----
- June
- May
- April
- March
- February
- January
- ----- 2025 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2024 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2023 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2022 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2021 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2020 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2019 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2018 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2017 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2016 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2015 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2014 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2013 -----
- December
- November
- October
- September
April 2020
- 1 participants
- 54 discussions
[Git][ultreiaio/ird-observe][develop] Accumulation de fichiers - Closes #1462
by Tony CHEMIT 13 Apr '20
by Tony CHEMIT 13 Apr '20
13 Apr '20
Tony CHEMIT pushed to branch develop at ultreiaio / ird-observe
Commits:
31be83c4 by tchemit at 2020-04-14T00:49:37+02:00
Accumulation de fichiers - Closes #1462
- - - - -
26 changed files:
- client-configuration/src/main/config/Client.ini
- client-configuration/src/main/i18n/getters/config.getter
- client-configuration/src/main/java/fr/ird/observe/client/configuration/ClientConfig.java
- client-core/src/main/java/fr/ird/observe/client/ClientUIContext.java
- client-core/src/main/java/fr/ird/observe/client/ObserveSwingApplicationContext.java
- client-core/src/main/java/fr/ird/observe/client/datasource/api/ObserveDataSourcesManager.java
- client-core/src/main/java/fr/ird/observe/client/datasource/api/ObserveSwingDataSource.java
- observe-i18n/src/main/i18n/translations/observe_en_GB.properties
- observe-i18n/src/main/i18n/translations/observe_es_ES.properties
- observe-i18n/src/main/i18n/translations/observe_fr_FR.properties
- − persistence/src/main/java/fr/ird/observe/entities/AbstractObserveTopiaDao.java
- − persistence/src/main/java/fr/ird/observe/entities/ObserveTopiaConfiguration.java
- − persistence/src/main/java/fr/ird/observe/entities/ObserveTopiaConfigurationFactory.java
- persistence/src/test/java/fr/ird/observe/persistence/ObserveTopiaApplicationContextTest.java → persistence/src/test/java/fr/ird/observe/entities/ObserveTopiaApplicationContextTest.java
- pom.xml
- server-configuration/pom.xml
- server-configuration/src/main/config/Server.ini
- server-configuration/src/main/i18n/getters/config.getter
- server-configuration/src/main/java/fr/ird/observe/server/configuration/ServerConfig.java
- server-core/src/main/java/fr/ird/observe/server/ObserveWebApplicationContext.java
- services-local/src/main/java/fr/ird/observe/services/local/ObserveSecurityHelper.java
- services-local/src/main/java/fr/ird/observe/services/local/ObserveTopiaApplicationContextFactory.java
- services-local/src/main/java/fr/ird/observe/services/local/service/DataSourceServiceLocal.java
- services-local/src/test/java/fr/ird/observe/services/local/LocalTestClassResource.java
- + services/src/main/java/fr/ird/observe/services/service/CleanTemporaryFilesTask.java
- persistence/src/main/java/fr/ird/observe/entities/ObserveTopiaIdFactory.java → services/src/main/java/fr/ird/observe/services/service/CleanTemporaryFilesTaskConfiguration.java
Changes:
=====================================
client-configuration/src/main/config/Client.ini
=====================================
@@ -146,8 +146,16 @@ defaultValue = ${dcp.presets.directory}/ps/logbook
transient = true
final = true
+[option temporaryDirectory]
+description = observe.config.temporaryDirectory.description
+key = temporary.directory
+type = file
+defaultValue = ${data.directory}/tmp
+transient = true
+final = true
+
[option tmpDirectory]
-description = observe.config.defaultTmpDirectory.description
+description = observe.config.temporaryDirectory.description
key = tmp.directory
type = file
defaultValue = ${data.directory}/tmp
@@ -717,6 +725,12 @@ key = ui.seineBycatchObservedSystem
type = fr.ird.observe.validation.SeineBycatchObservedSystemConfig
defaultValue = {\"fr.ird.referential.common.Species#1239832684290#0.04680507324710936\": [\"fr.ird.referential.ps.observation.ObservedSystem#0#1.0\",\"fr.ird.referential.ps.observation.ObservedSystem#0#1.1\"]}
+[option temporaryFilesTimeout]
+description = observe.config.temporaryFilesTimeout.description
+key = observe.config.temporaryFilesTimeout
+type = int
+defaultValue = 120
+
[action help]
description = observe.action.commandline.help
action = "fr.ird.observe.client.ObserveCLAction#help"
=====================================
client-configuration/src/main/i18n/getters/config.getter
=====================================
@@ -33,7 +33,6 @@ observe.config.defaultLocalDbDirectory.description
observe.config.defaultMapDirectory.description
observe.config.defaultReportDirectory.description
observe.config.defaultResourcesDirectory.description
-observe.config.defaultTmpDirectory.description
observe.config.defaultValidationReportDirectory.description
observe.config.h2.can.editReferential.description
observe.config.h2.can.migrate.description
@@ -91,6 +90,8 @@ observe.config.speciesList.seine.observation.schoolEstimate
observe.config.speciesList.seine.observation.targetCatch
observe.config.swingSessionFile.description
observe.config.temperature.format
+observe.config.temporaryDirectory.description
+observe.config.temporaryFilesTimeout.description
observe.config.ui.autoPopupNumberEditor
observe.config.ui.blockStateColor
observe.config.ui.busyStateColor
=====================================
client-configuration/src/main/java/fr/ird/observe/client/configuration/ClientConfig.java
=====================================
@@ -35,6 +35,7 @@ import fr.ird.observe.dto.referential.ReferentialLocale;
import fr.ird.observe.gson.ObserveDtoGsonSupplier;
import fr.ird.observe.navigation.model.edit.ObserveEditModel;
import fr.ird.observe.navigation.model.select.ObserveSelectModel;
+import fr.ird.observe.services.service.CleanTemporaryFilesTaskConfiguration;
import io.ultreia.java4all.application.context.spi.ApplicationComponentInstantiateStrategy;
import io.ultreia.java4all.application.context.spi.GenerateApplicationComponent;
import io.ultreia.java4all.application.template.TemplateGeneratorConfig;
@@ -92,12 +93,13 @@ import static io.ultreia.java4all.i18n.I18n.t;
hints = {
TemplateGeneratorConfig.class,
ObServeSwingSessionConfig.class,
- ReferentialLocaleConfig.class},
+ ReferentialLocaleConfig.class,
+ CleanTemporaryFilesTaskConfiguration.class},
instantiateStrategy = ApplicationComponentInstantiateStrategy.SUPPLIER,
instantiateSupplier = ClientConfigFinder.class
)
@GenerateTemplate(template = "about.ftl")
-public class ClientConfig extends GeneratedClientConfig implements TemplateGeneratorConfig, ObServeSwingSessionConfig, ReferentialLocaleConfig, NavigationTreeConfig {
+public class ClientConfig extends GeneratedClientConfig implements TemplateGeneratorConfig, ObServeSwingSessionConfig, ReferentialLocaleConfig, NavigationTreeConfig, CleanTemporaryFilesTaskConfiguration {
public static final String DB_NAME = "obstuna";
public static final List<ClientConfigOption> MAP_LAYERS = ImmutableList.of(
@@ -266,7 +268,7 @@ public class ClientConfig extends GeneratedClientConfig implements TemplateGener
resourceManager.createDirectory(this, ClientConfigOption.TMP_DIRECTORY);
// suppression du contenu du répertoire temporaire
- FileUtils.cleanDirectory(this.getTmpDirectory());
+ FileUtils.cleanDirectory(this.getTemporaryDirectory());
// 3 - backup directory
=====================================
client-core/src/main/java/fr/ird/observe/client/ClientUIContext.java
=====================================
@@ -34,6 +34,7 @@ import fr.ird.observe.dto.IdDto;
import fr.ird.observe.dto.decoration.DecoratorService;
import fr.ird.observe.dto.decoration.DecoratorServiceApplicationComponent;
import fr.ird.observe.dto.decoration.ObserveI18nDecoratorHelper;
+import fr.ird.observe.services.service.CleanTemporaryFilesTask;
import io.ultreia.java4all.application.context.ApplicationContext;
import io.ultreia.java4all.application.context.spi.GenerateApplicationComponent;
import io.ultreia.java4all.i18n.I18n;
@@ -57,9 +58,11 @@ import java.awt.event.ComponentEvent;
import java.awt.event.WindowAdapter;
import java.awt.event.WindowEvent;
import java.beans.PropertyChangeListener;
+import java.io.Closeable;
import java.util.List;
import java.util.Locale;
import java.util.Objects;
+import java.util.Timer;
import static io.ultreia.java4all.i18n.I18n.t;
import static javax.swing.JOptionPane.CLOSED_OPTION;
@@ -71,7 +74,7 @@ import static javax.swing.JOptionPane.VALUE_PROPERTY;
ObserveSwingSessionHelper.class,
ActionExecutor.class
})
-public class ClientUIContext {
+public class ClientUIContext implements Closeable {
private static final Logger log = LogManager.getLogger(ClientUIContext.class);
@@ -81,7 +84,9 @@ public class ClientUIContext {
private final ActionExecutor actionExecutor;
private ObserveMainUI mainUI;
private ObserveUICallbackManager uiCallbackManager;
+ private Timer deleteTemporaryFilesTimer;
private final BusyModel busyModel;
+
public ClientUIContext(DecoratorService decoratorService, ClientConfig clientConfig, ObserveSwingSessionHelper observeSwingSessionHelper, ActionExecutor actionExecutor) {
this.decoratorService = decoratorService;
this.clientConfig = clientConfig;
@@ -90,6 +95,13 @@ public class ClientUIContext {
this.busyModel = new BusyModel();
}
+ public void initDeleteTemporaryFilesTimer() {
+ if (deleteTemporaryFilesTimer != null) {
+ closeDeleteTemporaryFilesTimer();
+ }
+ deleteTemporaryFilesTimer = CleanTemporaryFilesTask.create(getClientConfig());
+ }
+
public static void displayInfo(String text) {
JFrame ui = ClientUIContextApplicationComponent.value().getMainUI();
if (ui == null) {
@@ -365,7 +377,9 @@ public class ClientUIContext {
return observeSwingSessionHelper;
}
+ @Override
public void close() {
+ closeDeleteTemporaryFilesTimer();
mainUI = null;
}
@@ -464,4 +478,16 @@ public class ClientUIContext {
public BusyModel getBusyModel() {
return busyModel;
}
+
+
+ void closeDeleteTemporaryFilesTimer() {
+ if (deleteTemporaryFilesTimer != null) {
+ try {
+ deleteTemporaryFilesTimer.cancel();
+ } catch (Exception e) {
+ log.error("Could not terminates delete temporary files timer...", e);
+ }
+ }
+ }
+
}
=====================================
client-core/src/main/java/fr/ird/observe/client/ObserveSwingApplicationContext.java
=====================================
@@ -22,6 +22,7 @@
package fr.ird.observe.client;
import fr.ird.observe.client.configuration.ClientConfig;
+import fr.ird.observe.client.configuration.ClientConfigApplicationComponent;
import fr.ird.observe.services.ObserveServiceMainFactory;
import fr.ird.observe.services.ObserveServiceMainFactoryApplicationComponent;
import fr.ird.observe.spi.DtoModelHelper;
@@ -53,9 +54,12 @@ public class ObserveSwingApplicationContext extends ApplicationContext {
//FIXME Je ne comprends pas pourquoi cela ne fonctionne plus.
// config.get().setOption("user.home", SystemUtils.USER_HOME);
- log.debug("Init model helper: " + DtoModelHelper.class);
+ log.debug(String.format("Init model helper: %s", DtoModelHelper.class));
ObserveServiceMainFactory serviceMainFactory = ObserveServiceMainFactoryApplicationComponent.value();
- log.info("Initialize services factory: " + serviceMainFactory);
+ log.info(String.format("Initialize services factory: %s", serviceMainFactory));
+ ClientUIContext clientUIContext = ClientUIContextApplicationComponent.value();
+ log.info("Initialize delete temporary files task.");
+ clientUIContext.initDeleteTemporaryFilesTimer();
}
// We put here the i18n keys from the client-runner module, otherwise we need yet another module before observe-i18n
=====================================
client-core/src/main/java/fr/ird/observe/client/datasource/api/ObserveDataSourcesManager.java
=====================================
@@ -126,7 +126,7 @@ public class ObserveDataSourcesManager implements Closeable {
public ObserveSwingDataSource newTemporaryH2DataSource(String label) {
- File tmpDirectory = config.getTmpDirectory();
+ File tmpDirectory = config.getTemporaryDirectory();
File dbDirectory = new File(tmpDirectory, ClientConfig.DB_NAME + UUID.randomUUID().toString());
=====================================
client-core/src/main/java/fr/ird/observe/client/datasource/api/ObserveSwingDataSource.java
=====================================
@@ -482,7 +482,7 @@ public class ObserveSwingDataSource extends ObserveServicesProviderSupport {
Locale locale = config.getLocale();
- File tmpDirectory = config.getTmpDirectory();
+ File tmpDirectory = config.getTemporaryDirectory();
ReferentialLocale referentialLocale = ReferentialLocale.valueOf(locale);
=====================================
observe-i18n/src/main/i18n/translations/observe_en_GB.properties
=====================================
@@ -482,7 +482,6 @@ observe.config.defaultLocalDbDirectory.description=Default directory where to st
observe.config.defaultMapDirectory.description=Default directory where to store map layers
observe.config.defaultReportDirectory.description=Default directory where to store report definition files
observe.config.defaultResourcesDirectory.description=Default user resources directory
-observe.config.defaultTmpDirectory.description=Default temporary directory used by application and clean at each launch.
observe.config.defaultValidationReportDirectory.description=Default validation report directory
observe.config.devMode=Dev mode
observe.config.floatingObjectPresets.description=Floating Objects references
@@ -542,6 +541,8 @@ observe.config.speciesList.seine.observation.schoolEstimate=Species for school e
observe.config.speciesList.seine.observation.targetCatch=Species for target catches
observe.config.swingSessionFile.description=Swing session file.
observe.config.temperature.format=Default temperature format
+observe.config.temporaryDirectory.description=Default temporary directory used by application and clean at each launch.
+observe.config.temporaryFilesTimeout.description=Temporary files delete (in hours)
observe.config.ui.autoPopupNumberEditor=Flag sets to true when number editor show automaticly popup
observe.config.ui.blockStateColor=Color of block state
observe.config.ui.busyStateColor=Color of busy state
@@ -3519,7 +3520,7 @@ observeweb.devMode.description=Dev mode
observeweb.host.description=Application host
observeweb.httpTimeout.description=Http timeout in milli seconds
observeweb.log4jConfigurationFile.description=Path to log configuration file
-observeweb.sessionExpirationDelay.description=Session expiration deplay (in minutes)
+observeweb.sessionExpirationDelay.description=Session expiration delay (in minutes)
observeweb.sessionMaximumSize.description=Session maximum size
observeweb.temporaryDirectory.description=Path to temporary directory
observeweb.usersConfigurationFile.description=Path to users configuration file
=====================================
observe-i18n/src/main/i18n/translations/observe_es_ES.properties
=====================================
@@ -482,7 +482,6 @@ observe.config.defaultLocalDbDirectory.description=Directorio de almacenamiento
observe.config.defaultMapDirectory.description=El directorio donde se ubican los mapas.
observe.config.defaultReportDirectory.description=Directorio por defecto de los informes de la aplicación
observe.config.defaultResourcesDirectory.description=Directorio de almacenamiento de los recursos de usuario como las traducciones o la consultas de informes
-observe.config.defaultTmpDirectory.description=Directorio temporal por defecto
observe.config.defaultValidationReportDirectory.description=Directorio por defecto de almacenamiento de los informes de validación
observe.config.devMode=Modo desarrollador
observe.config.floatingObjectPresets.description=Objetos flotantes de referencia
@@ -542,6 +541,8 @@ observe.config.speciesList.seine.observation.schoolEstimate=Especies para las es
observe.config.speciesList.seine.observation.targetCatch=Especies par las capturas objetivo
observe.config.swingSessionFile.description=Copia de seguridad del estado del UI.
observe.config.temperature.format=Unidad de temperatura
+observe.config.temporaryDirectory.description=Directorio temporal por defecto
+observe.config.temporaryFilesTimeout.description=Temporary files delete (in hours) \#TODO
observe.config.ui.autoPopupNumberEditor=Para mostrar automáticamente el editor numérico durante la edición de un número
observe.config.ui.blockStateColor=Color of block state \#TODO
observe.config.ui.busyStateColor=Color of busy state \#TODO
=====================================
observe-i18n/src/main/i18n/translations/observe_fr_FR.properties
=====================================
@@ -482,7 +482,6 @@ observe.config.defaultLocalDbDirectory.description=Le répertoire où est stock
observe.config.defaultMapDirectory.description=Le répertoire où sont stockées les cartes.
observe.config.defaultReportDirectory.description=Répertoire par défaut des rapports de l'application
observe.config.defaultResourcesDirectory.description=Le répertoire où sont stockées les ressources de l'utilisateur comme les traductions ou les requêtes de rapports.
-observe.config.defaultTmpDirectory.description=Le répertoire temporaire par défaut
observe.config.defaultValidationReportDirectory.description=Le répertoire par défaut où sont stockés les rapports de validation
observe.config.devMode=Mode développeur
observe.config.floatingObjectPresets.description=Objets flottants de référence
@@ -542,6 +541,8 @@ observe.config.speciesList.seine.observation.schoolEstimate=Espèces pour les es
observe.config.speciesList.seine.observation.targetCatch=Espèces pour les captures cible
observe.config.swingSessionFile.description=Fichier de sauvegarde des états des UI.
observe.config.temperature.format=Unité de température
+observe.config.temporaryDirectory.description=Le répertoire temporaire par défaut
+observe.config.temporaryFilesTimeout.description=Nettoyage des fichiers temporaires (en heures)
observe.config.ui.autoPopupNumberEditor=Pour afficher automatiquement l'éditeur numérique lors de l'édition d'un nombre
observe.config.ui.blockStateColor=Couleur lorsque l'on bloque une partie de l'application
observe.config.ui.busyStateColor=Couleur lorsque l'application est occupée
=====================================
persistence/src/main/java/fr/ird/observe/entities/AbstractObserveTopiaDao.java deleted
=====================================
@@ -1,76 +0,0 @@
-package fr.ird.observe.entities;
-
-/*
- * #%L
- * ObServe :: Persistence
- * %%
- * Copyright (C) 2008 - 2020 IRD, Code Lutin, Ultreia.io
- * %%
- * 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 org.nuiton.topia.persistence.internal.AbstractTopiaDao;
-import org.nuiton.topia.persistence.support.TopiaSqlQuery;
-
-import java.sql.Connection;
-import java.sql.PreparedStatement;
-import java.sql.ResultSet;
-import java.sql.SQLException;
-import java.sql.Timestamp;
-import java.util.Date;
-import java.util.List;
-import java.util.Map;
-
-public abstract class AbstractObserveTopiaDao<E extends Entity> extends AbstractTopiaDao<E> {
-
- private final GetLastUpdateDateSqlQuery getLastUpdateDateSqlQuery;
-
- protected AbstractObserveTopiaDao() {
- String schemaName = getTopiaEntityEnum().dbSchemaName();
- String tableName = getTopiaEntityEnum().dbTableName();
- getLastUpdateDateSqlQuery = new GetLastUpdateDateSqlQuery(schemaName, tableName);
- }
-
- public Date getLastUpdateDate() {
- return topiaSqlSupport.findSingleResult(getLastUpdateDateSqlQuery);
- }
-
- public <O> List<O> findAllFromHql(String hql, Map<String, Object> hqlParameters) {
- return findAll(hql, hqlParameters);
- }
-
- private static class GetLastUpdateDateSqlQuery extends TopiaSqlQuery<Timestamp> {
-
- protected final String sql;
-
- private GetLastUpdateDateSqlQuery(String schemaName, String tableName) {
- this.sql = "SELECT max(" + Entity.PROPERTY_LAST_UPDATE_DATE + ") FROM " + schemaName + "." + tableName;
- }
-
- @Override
- public PreparedStatement prepareQuery(Connection connection) throws SQLException {
- return connection.prepareStatement(sql);
- }
-
- @Override
- public Timestamp prepareResult(ResultSet set) throws SQLException {
- return set.getTimestamp(1);
- }
-
- }
-
-
-}
=====================================
persistence/src/main/java/fr/ird/observe/entities/ObserveTopiaConfiguration.java deleted
=====================================
@@ -1,84 +0,0 @@
-package fr.ird.observe.entities;
-
-/*
- * #%L
- * ObServe :: Persistence
- * %%
- * Copyright (C) 2008 - 2020 IRD, Code Lutin, Ultreia.io
- * %%
- * 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 org.nuiton.topia.persistence.BeanTopiaConfiguration;
-import org.nuiton.topia.persistence.HibernateAvailableSettings;
-import org.nuiton.topia.persistence.jdbc.JdbcConfiguration;
-
-import java.io.IOException;
-import java.io.InputStream;
-import java.util.Map;
-import java.util.Properties;
-import java.util.TreeMap;
-
-/**
- * Created on 23/08/15.
- *
- * @author Tony Chemit - dev(a)tchemit.fr
- */
-public class ObserveTopiaConfiguration extends BeanTopiaConfiguration {
-
- private static final long serialVersionUID = 1L;
-
- private final boolean h2Configuration;
- protected final boolean showSql;
- private static final Map<String, String> HIBERNATE_GLOBAL_PROPERTIES;
-
- static {
-
- Properties p = new Properties();
- try (InputStream stream = ObserveTopiaPersistenceContext.class.getResourceAsStream("/hibernate.properties")) {
- try {
- p.load(stream);
- } catch (IOException e) {
- throw new IllegalStateException(e);
- }
- } catch (IOException e) {
- throw new IllegalStateException(e);
- }
- HIBERNATE_GLOBAL_PROPERTIES = new TreeMap<>();
- for (String s : p.stringPropertyNames()) {
- HIBERNATE_GLOBAL_PROPERTIES.put(s, p.getProperty(s));
- }
-
- }
-
- public ObserveTopiaConfiguration(JdbcConfiguration jdbcConfiguration, boolean h2Configuration, boolean showSql) {
- super(jdbcConfiguration);
- this.h2Configuration = h2Configuration;
- this.showSql = showSql;
- if (showSql) {
- hibernateExtraConfiguration.put(HibernateAvailableSettings.SHOW_SQL, Boolean.TRUE.toString());
- }
- hibernateExtraConfiguration.putAll(HIBERNATE_GLOBAL_PROPERTIES);
- }
-
- public boolean isH2Configuration() {
- return h2Configuration;
- }
-
- public boolean isShowSql() {
- return showSql;
- }
-}
=====================================
persistence/src/main/java/fr/ird/observe/entities/ObserveTopiaConfigurationFactory.java deleted
=====================================
@@ -1,143 +0,0 @@
-package fr.ird.observe.entities;
-
-/*
- * #%L
- * ObServe :: Persistence
- * %%
- * Copyright (C) 2008 - 2020 IRD, Code Lutin, Ultreia.io
- * %%
- * 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 org.apache.logging.log4j.Logger;
-import org.apache.logging.log4j.LogManager;
-import org.nuiton.topia.persistence.jdbc.JdbcConfiguration;
-import org.nuiton.topia.persistence.jdbc.JdbcConfigurationBuilder;
-import org.nuiton.topia.service.migration.TopiaMigrationService;
-import org.nuiton.topia.service.script.TopiaSqlScriptGeneratorServiceImpl;
-
-import java.io.File;
-
-/**
- * Created on 23/08/15.
- *
- * @author Tony Chemit - dev(a)tchemit.fr
- */
-public class ObserveTopiaConfigurationFactory {
-
- /** l'url d'acces a la base locale */
- private static final String H2_LOCAL_URL =
- "jdbc:h2:file:%s;" +
- // on peut aussi utiliser file, socket
- "FILE_LOCK=file;" +
- //1 or 2 is needed to restore avec crash
- // 0: logging is disabled (faster),
- // 1: logging of the data is enabled, but logging of the index
- // changes is disabled (default), 2: logging of both data and index
- // changes are enabled
- "LOG=0;" +
- // on peut aussi utiliser hsqldb, mysql ou postgresql
- "MODE=postgresql;" +
- //"MODE=hsqldb;" +
- // Sets the default lock timeout (in milliseconds) in this
- // database that is used for the new sessions.
- "DEFAULT_LOCK_TIMEOUT=100;" +
- // -1: the database is never closed until the close delay is set to
- // some other rev or SHUTDOWN is called., 0: no delay (default; the
- // database is closed if the last connection to it is closed)., n:
- // the database is left open for n second after the last connection
- // is closed.
- "DB_CLOSE_DELAY=0;" +
- // 0: no locking (should only be used for testing),
- // 1: table level locking (default),
- // 2: table level locking with garbage collection (if the
- // application does not close all connections).
- // LOCK_MODE 3 (READ_COMMITTED). Table level locking, but only when
- // writing (no read locks).
- "LOCK_MODE=3;" +
- // Levels: 0=off, 1=error, 2=info, 3=debug.
- "TRACE_LEVEL_FILE=0;" +
- // on system.out: 0=off, 1=error, 2=info, 3=debug.
- "TRACE_LEVEL_SYSTEM_OUT=0;" +
- // maximumn cache to improve performance...
- "CACHE_SIZE=65536;" +
- // avoid timeout on reading tables (see http://stackoverflow.com/questions/4162557/timeout-error-trying-to-lock-tab…)
- "MVCC=true";
-
- private static final JdbcConfigurationBuilder JDBC_CONFIGURATION_BUILDER = new JdbcConfigurationBuilder();
- private static final Logger log = LogManager.getLogger(ObserveTopiaConfigurationFactory.class);
-
- public static ObserveTopiaConfiguration forPostgresqlDatabase(String jdbcUrl,
- String username,
- String password,
- boolean initSchema,
- boolean traceSql) {
-
- JdbcConfiguration jdbcConfiguration = JDBC_CONFIGURATION_BUILDER.forPostgresqlDatabase(jdbcUrl, username, password);
-
- ObserveTopiaConfiguration topiaConfiguration = createTopiaConfiguration(jdbcConfiguration,
- initSchema,
- false,
- traceSql);
-
- log.debug("PG topia configuration: " + topiaConfiguration);
- return topiaConfiguration;
-
- }
-
- public static ObserveTopiaConfiguration forH2Database(File dbDirectory,
- String dbName,
- String username,
- String password,
- boolean initSchema,
- boolean traceSql) {
-
- String dbPath = new File(dbDirectory, dbName).getPath();
- String jdbcUrl = String.format(H2_LOCAL_URL, dbPath);
-
- JdbcConfiguration jdbcConfiguration = JDBC_CONFIGURATION_BUILDER.forH2Database(jdbcUrl, username, password);
-
- ObserveTopiaConfiguration topiaConfiguration = createTopiaConfiguration(jdbcConfiguration,
- initSchema,
- true,
- traceSql);
-
- log.debug("H2 topia configuration: " + topiaConfiguration);
- return topiaConfiguration;
-
- }
-
- private static ObserveTopiaConfiguration createTopiaConfiguration(JdbcConfiguration jdbcConfiguration,
- boolean initSchema,
- boolean h2Configuration,
- boolean traceSql) {
-
- ObserveTopiaConfiguration topiaConfiguration = new ObserveTopiaConfiguration(jdbcConfiguration, h2Configuration, traceSql);
- topiaConfiguration.setTopiaIdFactoryClass(ObserveTopiaIdFactory.class);
- topiaConfiguration.setInitSchema(initSchema);
- topiaConfiguration.setValidateSchema(false);
- topiaConfiguration.setUseHikariForJdbcConnectionPooling(true);
-
- log.debug("jdbcUrl: " + topiaConfiguration.getJdbcConnectionUrl());
-
- topiaConfiguration.addDeclaredService(ObserveTopiaApplicationContext.MIGRATION_SERVICE_NAME, TopiaMigrationService.class);
- topiaConfiguration.addDeclaredService(ObserveTopiaApplicationContext.SQL_SCRIPT_GENERATOR_BATCH_SERVICE_NAME, TopiaSqlScriptGeneratorServiceImpl.class);
-
- return topiaConfiguration;
-
- }
-
-}
=====================================
persistence/src/test/java/fr/ird/observe/persistence/ObserveTopiaApplicationContextTest.java → persistence/src/test/java/fr/ird/observe/entities/ObserveTopiaApplicationContextTest.java
=====================================
@@ -1,4 +1,4 @@
-package fr.ird.observe.persistence;
+package fr.ird.observe.entities;
/*-
* #%L
@@ -22,9 +22,6 @@ package fr.ird.observe.persistence;
* #L%
*/
-import fr.ird.observe.entities.ObserveTopiaApplicationContext;
-import fr.ird.observe.entities.ObserveTopiaConfiguration;
-import fr.ird.observe.entities.ObserveTopiaConfigurationFactory;
import fr.ird.observe.test.TestHelper;
import fr.ird.observe.test.TestSupportWithConfig;
import org.junit.Assert;
@@ -46,7 +43,7 @@ public class ObserveTopiaApplicationContextTest extends TestSupportWithConfig {
File testBasedir = TestHelper.getTestBasedir(getClass());
- ObserveTopiaConfiguration observeTopiaConfiguration = ObserveTopiaConfigurationFactory.forH2Database(testBasedir, "testReplicateModel", "sa", "sa", true, false);
+ ObserveTopiaConfiguration observeTopiaConfiguration = ObserveTopiaConfigurationFactory.forH2Database(testBasedir, "testReplicateModel", "sa", "sa", testBasedir.toPath().resolve("temporary"), true, false);
try (ObserveTopiaApplicationContext applicationContext = new ObserveTopiaApplicationContext(observeTopiaConfiguration)) {
TopiaSqlTables tripLonglineTables = applicationContext.getTripLonglineTables();
Assert.assertNotNull(tripLonglineTables);
=====================================
pom.xml
=====================================
@@ -24,7 +24,7 @@
<parent>
<groupId>io.ultreia.maven</groupId>
<artifactId>pom</artifactId>
- <version>2020.15</version>
+ <version>2020.17</version>
</parent>
<groupId>fr.ird.observe</groupId>
@@ -162,7 +162,7 @@
<maven.build.timestamp.format>dd/MM/yyyy HH:mm z</maven.build.timestamp.format>
<buildDate>${maven.build.timestamp}</buildDate>
- <lib.version.toolkit>4.27</lib.version.toolkit>
+ <lib.version.toolkit>4.28</lib.version.toolkit>
<lib.version.nuiton.validation>3.1</lib.version.nuiton.validation>
<!--can't use 1.4.197 (date has changed + blob also)-->
<lib.version.h2>1.4.196</lib.version.h2>
@@ -176,7 +176,7 @@
<!--<lib.version.java4all.i18n>4.0-beta-3-SNAPSHOT</lib.version.java4all.i18n>-->
<!--<lib.version.java4all.config>1.0.8-SNAPSHOT</lib.version.java4all.config>-->
<!--<lib.version.nuiton.topia>3.4.2-SNAPSHOT</lib.version.nuiton.topia>-->
- <!--<lib.version.java4all.topia>1.14</lib.version.java4all.topia>-->
+<!-- <lib.version.java4all.topia>1.19-SNAPSHOT</lib.version.java4all.topia>-->
<!--<lib.version.java4all.http>1.0.17-SNAPSHOT</lib.version.java4all.http>-->
<!-- license header configuration -->
=====================================
server-configuration/pom.xml
=====================================
@@ -48,7 +48,11 @@
<version>${project.version}</version>
<scope>provided</scope>
</dependency>
-
+ <dependency>
+ <groupId>${project.groupId}</groupId>
+ <artifactId>services</artifactId>
+ <version>${project.version}</version>
+ </dependency>
<dependency>
<groupId>io.ultreia.java4all</groupId>
<artifactId>application-context</artifactId>
=====================================
server-configuration/src/main/config/Server.ini
=====================================
@@ -103,3 +103,9 @@ key = observeweb.httpTimeout
type = int
defaultValue = 30000
+[option temporaryFilesTimeout]
+description = observe.config.temporaryFilesTimeout.description
+key = observeweb.temporaryFilesTimeout
+type = int
+defaultValue = 120
+
=====================================
server-configuration/src/main/i18n/getters/config.getter
=====================================
@@ -1,4 +1,5 @@
ObserveWebApplicationConfig.description
+observe.config.temporaryFilesTimeout.description
observe.model.version
observeweb.adminApiKey.description
observeweb.baseDirectory.description
=====================================
server-configuration/src/main/java/fr/ird/observe/server/configuration/ServerConfig.java
=====================================
@@ -24,6 +24,7 @@ package fr.ird.observe.server.configuration;
import fr.ird.observe.dto.ObserveUtil;
import fr.ird.observe.dto.decoration.ReferentialLocaleConfig;
+import fr.ird.observe.services.service.CleanTemporaryFilesTaskConfiguration;
import io.ultreia.java4all.application.context.spi.GenerateApplicationComponent;
import io.ultreia.java4all.application.template.TemplateGeneratorConfig;
import io.ultreia.java4all.config.ApplicationConfig;
@@ -46,8 +47,8 @@ import java.nio.file.Paths;
* @author Tony Chemit - dev(a)tchemit.fr
*/
@GenerateApplicationComponent(name = "ObServe Web configuration",
- hints = {TemplateGeneratorConfig.class, ReferentialLocaleConfig.class})
-public class ServerConfig extends GeneratedServerConfig {
+ hints = {TemplateGeneratorConfig.class, ReferentialLocaleConfig.class, CleanTemporaryFilesTaskConfiguration.class})
+public class ServerConfig extends GeneratedServerConfig implements CleanTemporaryFilesTaskConfiguration {
private static Logger log = LogManager.getLogger(ServerConfig.class);
=====================================
server-core/src/main/java/fr/ird/observe/server/ObserveWebApplicationContext.java
=====================================
@@ -43,6 +43,7 @@ import fr.ird.observe.server.configuration.user.ObserveWebUsersHelperApplication
import fr.ird.observe.server.configuration.user.impl.ObserveWebUsersImmutable;
import fr.ird.observe.server.security.ObserveWebSecurityApplicationContext;
import fr.ird.observe.server.security.ObserveWebSecurityApplicationContextApplicationComponent;
+import fr.ird.observe.services.service.CleanTemporaryFilesTask;
import fr.ird.observe.services.ObserveServiceFactory;
import fr.ird.observe.services.ObserveServiceInitializer;
import fr.ird.observe.services.ObserveServiceMainFactoryApplicationComponent;
@@ -51,11 +52,14 @@ import fr.ird.observe.services.service.ObserveService;
import fr.ird.observe.services.service.actions.consolidate.dcp.FloatingObjectModification;
import io.ultreia.java4all.application.context.ApplicationComponent;
import io.ultreia.java4all.application.context.ApplicationContext;
+import org.apache.logging.log4j.LogManager;
+import org.apache.logging.log4j.Logger;
import org.debux.webmotion.server.call.HttpContext;
import org.nuiton.version.Version;
import javax.servlet.ServletContext;
import java.util.Map;
+import java.util.Timer;
/**
* @author Tony Chemit - dev(a)tchemit.fr
@@ -67,6 +71,8 @@ public class ObserveWebApplicationContext extends ApplicationContext {
private static final String MISSING_APPLICATION_CONTEXT =
String.format("%s not found. You probably forgot to register %s in your web.xml", ObserveWebApplicationContext.class.getSimpleName(), ObserveWebApplicationListener.class.getName());
+ private static final Logger log = LogManager.getLogger(ObserveWebApplicationContext.class);
+
private ObserveDtoGsonSupplier gsonSupplier;
private ServerConfig applicationConfiguration;
private ObserveServiceFactory mainServiceFactory;
@@ -75,6 +81,7 @@ public class ObserveWebApplicationContext extends ApplicationContext {
private ObserveWebSecurityApplicationContext securityApplicationContext;
private static ServerConfig applicationConfiguration1;
+ private Timer deleteTemporaryFilesTimer;
static ObserveWebApplicationContext getApplicationContext(HttpContext context) {
@@ -153,18 +160,26 @@ public class ObserveWebApplicationContext extends ApplicationContext {
}
};
}
+ if (deleteTemporaryFilesTimer != null) {
+ closeDeleteTemporaryFilesTimer();
+ }
+ deleteTemporaryFilesTimer = CleanTemporaryFilesTask.create(getApplicationConfiguration());
+ }
+
+ @Override
+ public void close() {
+
+ closeDeleteTemporaryFilesTimer();
+ super.close();
}
-// @Override
-// public void close() {
-//
-// // Supprimer le cache des sessions
-// securityApplicationContext.close();
-//
-// // Fermer l'usine de services
-// mainServiceFactory.close();
-//
-// }
+ void closeDeleteTemporaryFilesTimer() {
+ try {
+ deleteTemporaryFilesTimer.cancel();
+ } catch (Exception e) {
+ log.error("Could not terminates delete temporary files timer...", e);
+ }
+ }
public ObserveDtoGsonSupplier getGsonSupplier() {
return gsonSupplier;
=====================================
services-local/src/main/java/fr/ird/observe/services/local/ObserveSecurityHelper.java
=====================================
@@ -27,13 +27,13 @@ import fr.ird.observe.dto.ObserveDbRole;
import fr.ird.observe.dto.db.ObserveDbUserDto;
import fr.ird.observe.entities.Entities;
import fr.ird.observe.entities.ObserveTopiaApplicationContext;
+import fr.ird.observe.entities.ObserveTopiaConfiguration;
import org.apache.commons.lang3.tuple.Pair;
import org.apache.logging.log4j.LogManager;
import org.apache.logging.log4j.Logger;
import org.nuiton.topia.migration.mappings.TMSVersionHibernateDao;
import org.nuiton.topia.persistence.TopiaEntityEnum;
import org.nuiton.topia.persistence.TopiaException;
-import org.nuiton.topia.persistence.jdbc.JdbcConfiguration;
import org.nuiton.topia.persistence.jdbc.JdbcPostgresHelper;
import org.nuiton.topia.persistence.script.SqlScriptConsumer;
import org.nuiton.topia.persistence.script.SqlScriptWriter;
@@ -81,10 +81,12 @@ public class ObserveSecurityHelper {
private static final String SCHEMA_PUBLIC = "public";
private static final Logger log = LogManager.getLogger(ObserveSecurityHelper.class);
private final JdbcPostgresHelper jdbcHelper;
+ private final Path temporaryDirectory;
- public ObserveSecurityHelper(JdbcConfiguration jdbcConfiguration) {
+ public ObserveSecurityHelper(ObserveTopiaConfiguration jdbcConfiguration) {
this.jdbcHelper = new JdbcPostgresHelper(jdbcConfiguration);
+ this.temporaryDirectory = jdbcConfiguration.getTemporaryDirectory();
}
public void applySecurity(Set<ObserveDbUserDto> users) {
@@ -93,7 +95,7 @@ public class ObserveSecurityHelper {
}
Path scriptPath;
try {
- scriptPath = Files.createTempFile("topia-sql-script-", ".sql");
+ scriptPath = Files.createTempFile(temporaryDirectory, "topia-sql-script-", ".sql");
} catch (IOException e) {
throw new IllegalStateException("Can't create temporary path", e);
}
=====================================
services-local/src/main/java/fr/ird/observe/services/local/ObserveTopiaApplicationContextFactory.java
=====================================
@@ -150,6 +150,7 @@ public class ObserveTopiaApplicationContextFactory {
configuration.getJdbcUrl(),
configuration.getUsername(),
String.valueOf(configuration.getPassword()),
+ configuration.getTemporaryDirectory(),
initSchema,
configuration.isTraceSql()
);
@@ -175,6 +176,7 @@ public class ObserveTopiaApplicationContextFactory {
configuration.getDbName(),
configuration.getUsername(),
String.valueOf(configuration.getPassword()),
+ configuration.getTemporaryDirectory(),
initSchema,
configuration.isTraceSql()
);
=====================================
services-local/src/main/java/fr/ird/observe/services/local/service/DataSourceServiceLocal.java
=====================================
@@ -69,6 +69,7 @@ import org.nuiton.version.Versions;
import java.io.File;
import java.io.IOException;
import java.nio.file.Files;
+import java.nio.file.Path;
import java.util.LinkedHashSet;
import java.util.Optional;
import java.util.Set;
@@ -108,6 +109,7 @@ public class DataSourceServiceLocal extends ObserveServiceLocal implements DataS
public ObserveDataSourceInformation checkCanConnectOrBeEmpty(ObserveDataSourceConfiguration dataSourceConfiguration) throws DatabaseNotFoundException, DatabaseConnexionNotAuthorizedException {
ObserveDataSourceConfigurationTopiaSupport dataSourceConfigurationTopiaSupport = (ObserveDataSourceConfigurationTopiaSupport) dataSourceConfiguration;
+ Path temporaryDirectory = serviceContext.getTemporaryDirectoryRoot().toPath();
ObserveDataSourceInformation dataSourceInformation;
if (dataSourceConfigurationTopiaSupport.isH2Database()) {
@@ -141,7 +143,7 @@ public class DataSourceServiceLocal extends ObserveServiceLocal implements DataS
h2DataSourceConfiguration.getDbName(),
h2DataSourceConfiguration.getUsername(),
new String(h2DataSourceConfiguration.getPassword()),
- false,
+ temporaryDirectory, false,
false);
@@ -165,7 +167,7 @@ public class DataSourceServiceLocal extends ObserveServiceLocal implements DataS
ObserveTopiaConfiguration topiaConfiguration = ObserveTopiaConfigurationFactory.forPostgresqlDatabase(pgDataSourceConfiguration.getJdbcUrl(),
pgDataSourceConfiguration.getUsername(),
new String(pgDataSourceConfiguration.getPassword()),
- false,
+ temporaryDirectory, false,
false);
try {
@@ -188,6 +190,7 @@ public class DataSourceServiceLocal extends ObserveServiceLocal implements DataS
@Override
public ObserveDataSourceInformation checkCanConnect(ObserveDataSourceConfiguration dataSourceConfiguration) throws DatabaseNotFoundException, DatabaseConnexionNotAuthorizedException {
+ Path temporaryDirectory = getTemporaryDirectory(dataSourceConfiguration);
ObserveDataSourceConfigurationTopiaSupport dataSourceConfigurationTopiaSupport = (ObserveDataSourceConfigurationTopiaSupport) dataSourceConfiguration;
ObserveDataSourceInformation dataSourceInformation;
@@ -223,6 +226,7 @@ public class DataSourceServiceLocal extends ObserveServiceLocal implements DataS
h2DataSourceConfiguration.getDbName(),
h2DataSourceConfiguration.getUsername(),
new String(h2DataSourceConfiguration.getPassword()),
+ temporaryDirectory,
false,
false);
@@ -247,6 +251,7 @@ public class DataSourceServiceLocal extends ObserveServiceLocal implements DataS
ObserveTopiaConfiguration topiaConfiguration = ObserveTopiaConfigurationFactory.forPostgresqlDatabase(pgDataSourceConfiguration.getJdbcUrl(),
pgDataSourceConfiguration.getUsername(),
new String(pgDataSourceConfiguration.getPassword()),
+ temporaryDirectory,
false,
false);
@@ -266,13 +271,22 @@ public class DataSourceServiceLocal extends ObserveServiceLocal implements DataS
}
+ Path getTemporaryDirectory(ObserveDataSourceConfiguration dataSourceConfiguration) {
+ Path temporaryDirectory = dataSourceConfiguration.getTemporaryDirectory();
+ if (temporaryDirectory == null) {
+ temporaryDirectory = serviceContext.getTemporaryDirectoryRoot().toPath();
+ dataSourceConfiguration.setTemporaryDirectory(temporaryDirectory);
+ }
+ return temporaryDirectory;
+ }
+
@Override
public ObserveDataSourceConnectionTopia create(ObserveDataSourceConfiguration dataSourceConfiguration, DataSourceCreateConfigurationDto dataSourceCreateConfiguration)
throws IncompatibleDataSourceCreateConfigurationException, DataSourceCreateWithNoReferentialImportException,
BabModelVersionException, DatabaseConnexionNotAuthorizedException, DatabaseNotFoundException {
dataSourceCreateConfiguration.validateConfiguration();
-
+ Path temporaryDirectory = getTemporaryDirectory(dataSourceConfiguration);
boolean initSchema = !dataSourceCreateConfiguration.isImportDatabase();
ObserveTopiaApplicationContext topiaApplicationContext = ObserveTopiaApplicationContextFactory.createTopiaApplicationContext((ObserveDataSourceConfigurationTopiaSupport) dataSourceConfiguration, initSchema);
@@ -291,10 +305,9 @@ public class DataSourceServiceLocal extends ObserveServiceLocal implements DataS
} else { // base postgres
// on realise les import dans un base H2 temporaire
- // FIXME il faut obtenir le repertoit temporaire d'observe plutot que celui du système
File tmpDir;
try {
- tmpDir = Files.createTempDirectory("obstuna").toFile();
+ tmpDir = Files.createTempDirectory(temporaryDirectory, "obstuna").toFile();
} catch (IOException e) {
throw new IllegalStateException("could not create temporary directory ", e);
}
@@ -455,7 +468,8 @@ public class DataSourceServiceLocal extends ObserveServiceLocal implements DataS
@Override
public ObserveDataSourceConnectionTopia open(ObserveDataSourceConfiguration dataSourceConfiguration) throws DatabaseNotFoundException, DatabaseConnexionNotAuthorizedException, BabModelVersionException {
-
+ Path temporaryDirectory = getTemporaryDirectory(dataSourceConfiguration);
+ log.debug("Will use temporary directory: " + temporaryDirectory);
ObserveDataSourceInformation dataSourceInformation = checkCanConnect(dataSourceConfiguration);
Version dbVersion = dataSourceInformation.getVersion();
@@ -557,6 +571,9 @@ public class DataSourceServiceLocal extends ObserveServiceLocal implements DataS
@Override
public void applySecurity(ObserveDataSourceConfiguration dataSourceConfiguration, ImmutableSet<ObserveDbUserDto> users) {
+ Path temporaryDirectory = getTemporaryDirectory(dataSourceConfiguration);
+ log.debug("Will use temporary directory: " + temporaryDirectory);
+
// pas de securité pour les bases autres que postgresql
if (dataSourceConfiguration instanceof ObserveDataSourceConfigurationTopiaPG) {
@@ -575,6 +592,9 @@ public class DataSourceServiceLocal extends ObserveServiceLocal implements DataS
@Override
public void migrateData(ObserveDataSourceConfiguration dataSourceConfiguration) {
+ Path temporaryDirectory = getTemporaryDirectory(dataSourceConfiguration);
+ log.debug("Will use temporary directory: " + temporaryDirectory);
+
ObserveTopiaApplicationContext topiaApplicationContext = ObserveTopiaApplicationContextFactory.getOrCreateTopiaApplicationContext((ObserveDataSourceConfigurationTopiaSupport) dataSourceConfiguration);
topiaApplicationContext.getMigrationService().runSchemaMigration();
}
=====================================
services-local/src/test/java/fr/ird/observe/services/local/LocalTestClassResource.java
=====================================
@@ -90,7 +90,6 @@ public class LocalTestClassResource extends TestClassResourceSupport {
public ObserveDataSourceConfigurationTopiaH2 createDataSourceConfiguration(Version dbVersion, String dbName, File targetPath, String login, char[] password) throws DataSourceCreateWithNoReferentialImportException, IOException, IncompatibleDataSourceCreateConfigurationException, DatabaseNotFoundException, DatabaseConnexionNotAuthorizedException, BabModelVersionException {
ObserveDataSourceConfigurationTopiaH2 sharedDatabaseConfiguration = dataSourcesForTestManager.createSharedDataSourceConfigurationH2(dbVersion, dbName, login, password);
-
File sharedDatabaseFile = sharedDatabaseConfiguration.getDatabaseFile();
ObserveDataSourceConfigurationTopiaH2 dataSourceConfiguration;
@@ -101,6 +100,7 @@ public class LocalTestClassResource extends TestClassResourceSupport {
if (log.isInfoEnabled()) {
log.info("Create shared database: " + dbVersion.toString() + "/" + dbName + " to " + sharedDatabaseFile);
}
+ sharedDatabaseConfiguration.setTemporaryDirectory(getTemporaryDirectoryRoot());
try (DataSourceService dataSourceService = newService(sharedDatabaseConfiguration, DataSourceService.class)) {
DataSourceCreateConfigurationDto createConfiguration = new DataSourceCreateConfigurationDto();
@@ -135,12 +135,14 @@ public class LocalTestClassResource extends TestClassResourceSupport {
}
dataSourceConfiguration.setModelVersion(ObserveTestConfiguration.getModelVersion());
+ dataSourceConfiguration.setTemporaryDirectory(getTemporaryDirectoryRoot());
return dataSourceConfiguration;
}
public <S extends ObserveService> S newService(ObserveDataSourceConfiguration dataSourceConfiguration, Class<S> serviceType) {
+ dataSourceConfiguration.setTemporaryDirectory(getTemporaryDirectoryRoot());
ObserveServiceInitializer observeServiceInitializer = ObserveServiceInitializer.create(
Locale.FRANCE,
ReferentialLocale.FR,
=====================================
services/src/main/java/fr/ird/observe/services/service/CleanTemporaryFilesTask.java
=====================================
@@ -0,0 +1,120 @@
+package fr.ird.observe.services.service;
+
+/*-
+ * #%L
+ * ObServe :: Services API
+ * %%
+ * Copyright (C) 2008 - 2020 IRD, Code Lutin, Ultreia.io
+ * %%
+ * 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 io.ultreia.java4all.util.Dates;
+import org.apache.logging.log4j.LogManager;
+import org.apache.logging.log4j.Logger;
+
+import java.io.IOException;
+import java.nio.file.DirectoryStream;
+import java.nio.file.Files;
+import java.nio.file.Path;
+import java.util.Calendar;
+import java.util.Date;
+import java.util.Objects;
+import java.util.Timer;
+import java.util.TimerTask;
+import java.util.concurrent.TimeUnit;
+
+/**
+ * To clean temporaries files.
+ *
+ * @author Tony Chemit - dev(a)tchemit.fr
+ * @since 8.0
+ */
+
+public class CleanTemporaryFilesTask extends TimerTask {
+
+ private static final Logger log = LogManager.getLogger(CleanTemporaryFilesTask.class);
+
+ private final CleanTemporaryFilesTaskConfiguration configuration;
+
+ public static Timer create(CleanTemporaryFilesTaskConfiguration configuration) {
+ Timer result = new Timer("Delete temporary files daemon", true);
+ result.scheduleAtFixedRate(new CleanTemporaryFilesTask(configuration), new Date(), TimeUnit.HOURS.toMillis(1));
+ return result;
+ }
+
+ public CleanTemporaryFilesTask(CleanTemporaryFilesTaskConfiguration configuration) {
+ this.configuration = configuration;
+ }
+
+ @Override
+ public void run() {
+
+ Path temporaryDirectory = configuration.getTemporaryDirectory().toPath();
+ Calendar calendar = Calendar.getInstance();
+ calendar.setTime(new Date());
+ calendar.add(Calendar.HOUR_OF_DAY, -configuration.getTemporaryFilesTimeout());
+ Date deleteBefore = calendar.getTime();
+ long deleteBeforeTime = deleteBefore.getTime();
+
+ log.info(String.format("Delete temporary files in directory %s before %s", temporaryDirectory, deleteBefore));
+ delete(temporaryDirectory, deleteBeforeTime);
+ }
+
+ private boolean delete(Path path, long deleteBeforeTime) {
+ try {
+ Files.walk(path).forEach(p -> {
+ if (Objects.equals(path, p)) {
+ return;
+ }
+ if (Files.isDirectory(p)) {
+ boolean deleted = delete(p, deleteBeforeTime);
+ if (deleted) {
+ delete0(p, deleteBeforeTime);
+ }
+ }
+ if (Files.isRegularFile(p)) {
+ delete0(p, deleteBeforeTime);
+ }
+ });
+ if (Files.isRegularFile(path)) {
+ return Files.notExists(path);
+ }
+ if (Files.isDirectory(path)) {
+ return isDirEmpty(path);
+ }
+ return false;
+ } catch (IOException e) {
+ throw new RuntimeException(String.format("Could not walk through temporary directory: %s", path), e);
+ }
+ }
+
+ private static boolean isDirEmpty(final Path directory) throws IOException {
+ try(DirectoryStream<Path> dirStream = Files.newDirectoryStream(directory)) {
+ return !dirStream.iterator().hasNext();
+ }
+ }
+ private void delete0(Path p, long deleteBeforeTime) {
+ try {
+ if (Files.getLastModifiedTime(p).toMillis() < deleteBeforeTime) {
+ log.info("Delete temporary file: " + p);
+ Files.delete(p);
+ }
+ } catch (IOException e) {
+ log.error("Something wrong while process file: " + p, e);
+ }
+ }
+}
=====================================
persistence/src/main/java/fr/ird/observe/entities/ObserveTopiaIdFactory.java → services/src/main/java/fr/ird/observe/services/service/CleanTemporaryFilesTaskConfiguration.java
=====================================
@@ -1,8 +1,8 @@
-package fr.ird.observe.entities;
+package fr.ird.observe.services.service;
-/*
+/*-
* #%L
- * ObServe :: Persistence
+ * ObServe :: Services API
* %%
* Copyright (C) 2008 - 2020 IRD, Code Lutin, Ultreia.io
* %%
@@ -22,17 +22,19 @@ package fr.ird.observe.entities;
* #L%
*/
+import java.io.File;
+
/**
- * Created on 21/08/15.
- *
* @author Tony Chemit - dev(a)tchemit.fr
+ * @since 8.0
*/
-public class ObserveTopiaIdFactory extends ObserveTopiaIdFactorySupport {
+public interface CleanTemporaryFilesTaskConfiguration {
+
+ File getTemporaryDirectory();
- private static final long serialVersionUID = 1L;
+ void setTemporaryDirectory(File temporaryDirectory);
- public ObserveTopiaIdFactory() {
- super("fr.ird.observe.entities.");
- }
+ int getTemporaryFilesTimeout();
+ void setTemporaryFilesTimeout(int temporaryFilesTimeout);
}
View it on GitLab: https://gitlab.com/ultreiaio/ird-observe/-/commit/31be83c4c1554f685caa5ee47…
--
View it on GitLab: https://gitlab.com/ultreiaio/ird-observe/-/commit/31be83c4c1554f685caa5ee47…
You're receiving this email because of your account on gitlab.com.
1
0
[Git][ultreiaio/ird-observe][develop-7.x] Accumulation de fichiers - Closes #1462 (report v7)
by Tony CHEMIT 13 Apr '20
by Tony CHEMIT 13 Apr '20
13 Apr '20
Tony CHEMIT pushed to branch develop-7.x at ultreiaio / ird-observe
Commits:
ae6dc319 by tchemit at 2020-04-14T00:44:33+02:00
Accumulation de fichiers - Closes #1462 (report v7)
- - - - -
27 changed files:
- client-configuration/src/main/config/Client.ini
- client-configuration/src/main/i18n/getters/config.getter
- client-configuration/src/main/java/fr/ird/observe/client/configuration/ClientConfig.java
- client-core/src/main/java/fr/ird/observe/client/ObserveRunner.java
- client-core/src/main/java/fr/ird/observe/client/ObserveSwingApplicationContext.java
- client-core/src/main/java/fr/ird/observe/client/db/ObserveDataSourcesManager.java
- client-core/src/main/java/fr/ird/observe/client/db/ObserveSwingDataSource.java
- client-core/src/main/java/fr/ird/observe/client/ui/actions/main/menu/config/ShowConfigAction.java
- observe-i18n/src/main/i18n/translations/observe_en_GB.properties
- observe-i18n/src/main/i18n/translations/observe_es_ES.properties
- observe-i18n/src/main/i18n/translations/observe_fr_FR.properties
- − persistence/src/main/java/fr/ird/observe/persistence/AbstractObserveTopiaDao.java
- − persistence/src/main/java/fr/ird/observe/persistence/ObserveTopiaConfiguration.java
- − persistence/src/main/java/fr/ird/observe/persistence/ObserveTopiaConfigurationFactory.java
- − persistence/src/main/java/fr/ird/observe/persistence/ObserveTopiaIdFactory.java
- pom.xml
- server-configuration/pom.xml
- server-configuration/src/main/config/Server.ini
- server-configuration/src/main/i18n/getters/config.getter
- server-configuration/src/main/java/fr/ird/observe/server/configuration/ServerConfig.java
- server-core/src/main/java/fr/ird/observe/server/ObserveWebApplicationContext.java
- services-local/src/main/java/fr/ird/observe/services/local/ObserveSecurityHelper.java
- services-local/src/main/java/fr/ird/observe/services/local/ObserveTopiaApplicationContextFactory.java
- services-local/src/main/java/fr/ird/observe/services/local/service/DataSourceServiceLocal.java
- services-local/src/test/java/fr/ird/observe/services/local/LocalTestClassResource.java
- + services/src/main/java/fr/ird/observe/services/service/CleanTemporaryFilesTask.java
- + services/src/main/java/fr/ird/observe/services/service/CleanTemporaryFilesTaskConfiguration.java
Changes:
=====================================
client-configuration/src/main/config/Client.ini
=====================================
@@ -130,8 +130,8 @@ defaultValue = ${data.directory}/validation-report
transient = true
final = true
-[option tmpDirectory]
-description = observe.config.defaultTmpDirectory.description
+[option temporaryDirectory]
+description = observe.config.temporaryDirectory.description
key = tmp.directory
type = file
defaultValue = ${data.directory}/tmp
@@ -599,6 +599,12 @@ key = ui.seineBycatchObservedSystem
type = fr.ird.observe.validation.SeineBycatchObservedSystemConfig
defaultValue = {\"fr.ird.observe.entities.referentiel.Species#1239832684290#0.04680507324710936\": [\"fr.ird.observe.entities.referentiel.seine.ObservedSystem#0#1.0\",\"fr.ird.observe.entities.referentiel.seine.ObservedSystem#0#1.1\"]}
+[option temporaryFilesTimeout]
+description = observe.config.temporaryFilesTimeout.description
+key = observe.config.temporaryFilesTimeout
+type = int
+defaultValue = 120
+
[action help]
description = observe.action.commandline.help
action = "fr.ird.observe.client.ObserveCLAction#help"
=====================================
client-configuration/src/main/i18n/getters/config.getter
=====================================
@@ -30,7 +30,6 @@ observe.config.defaultLocalDbDirectory.description
observe.config.defaultMapDirectory.description
observe.config.defaultReportDirectory.description
observe.config.defaultResourcesDirectory.description
-observe.config.defaultTmpDirectory.description
observe.config.defaultValidationReportDirectory.description
observe.config.devMode
observe.config.floatingObjectPresets.description
@@ -78,6 +77,8 @@ observe.config.speciesList.seine.schoolEstimate
observe.config.speciesList.seine.targetCatch
observe.config.swingSessionFile.description
observe.config.temperature.format
+observe.config.temporaryDirectory.description
+observe.config.temporaryFilesTimeout.description
observe.config.ui.autoPopupNumberEditor
observe.config.ui.changeSynchroSrc
observe.config.ui.dcp.error.color
=====================================
client-configuration/src/main/java/fr/ird/observe/client/configuration/ClientConfig.java
=====================================
@@ -30,6 +30,7 @@ import fr.ird.observe.client.constants.DbMode;
import fr.ird.observe.dto.FloatingObjectPreset;
import fr.ird.observe.dto.presets.RemoteDataSourceConfiguration;
import fr.ird.observe.dto.presets.ServerDataSourceConfiguration;
+import fr.ird.observe.services.service.CleanTemporaryFilesTaskConfiguration;
import io.ultreia.java4all.config.ApplicationConfig;
import io.ultreia.java4all.config.ApplicationConfigInit;
import io.ultreia.java4all.config.ApplicationConfigScope;
@@ -66,7 +67,7 @@ import static io.ultreia.java4all.i18n.I18n.t;
* @author Tony Chemit - dev(a)tchemit.fr
* @since 1.0
*/
-public class ClientConfig extends GeneratedClientConfig implements NavigationTreeConfig {
+public class ClientConfig extends GeneratedClientConfig implements NavigationTreeConfig, CleanTemporaryFilesTaskConfiguration {
public static final String DB_NAME = "obstuna";
public static final List<ClientConfigOption> MAP_LAYERS = ImmutableList.of(
=====================================
client-core/src/main/java/fr/ird/observe/client/ObserveRunner.java
=====================================
@@ -37,7 +37,6 @@ import io.ultreia.java4all.i18n.runtime.boot.UserI18nBootLoader;
import org.apache.commons.beanutils.ConvertUtils;
import org.apache.commons.beanutils.Converter;
import org.apache.commons.beanutils.converters.DateConverter;
-import org.apache.commons.io.FileUtils;
import org.apache.commons.lang3.BooleanUtils;
import org.apache.logging.log4j.LogManager;
import org.apache.logging.log4j.Logger;
@@ -71,7 +70,7 @@ import static fr.ird.observe.client.configuration.ClientConfigOption.INITIAL_DB_
import static fr.ird.observe.client.configuration.ClientConfigOption.MAP_DIRECTORY;
import static fr.ird.observe.client.configuration.ClientConfigOption.REPORT_DIRECTORY;
import static fr.ird.observe.client.configuration.ClientConfigOption.RESOURCES_DIRECTORY;
-import static fr.ird.observe.client.configuration.ClientConfigOption.TMP_DIRECTORY;
+import static fr.ird.observe.client.configuration.ClientConfigOption.TEMPORARY_DIRECTORY;
import static fr.ird.observe.client.configuration.ClientConfigOption.VALIDATION_REPORT_DIRECTORY;
import static io.ultreia.java4all.i18n.I18n.t;
@@ -402,10 +401,7 @@ public abstract class ObserveRunner extends ApplicationRunner {
// 2 - tmp directory
- resourceManager.createDirectory(config, TMP_DIRECTORY);
-
- // suppression du contenu du répertoire temporaire
- FileUtils.cleanDirectory(config.getTmpDirectory());
+ resourceManager.createDirectory(config, TEMPORARY_DIRECTORY);
// 3 - backup directory
=====================================
client-core/src/main/java/fr/ird/observe/client/ObserveSwingApplicationContext.java
=====================================
@@ -36,6 +36,7 @@ import fr.ird.observe.dto.decoration.DecoratorService;
import fr.ird.observe.dto.referential.ReferentialLocale;
import fr.ird.observe.services.ObserveDataSourceConfigurationMainFactory;
import fr.ird.observe.services.ObserveServiceMainFactory;
+import fr.ird.observe.services.service.CleanTemporaryFilesTask;
import fr.ird.observe.spi.DtoModelHelper;
import fr.ird.observe.validation.ValidatorDto;
import fr.ird.observe.validation.ValidatorsManager;
@@ -53,6 +54,7 @@ import java.util.Collection;
import java.util.LinkedList;
import java.util.List;
import java.util.Objects;
+import java.util.Timer;
import java.util.concurrent.ScheduledThreadPoolExecutor;
import java.util.concurrent.TimeUnit;
@@ -65,6 +67,7 @@ import static fr.ird.observe.client.ObserveSwingApplicationContext.Entries.DATA_
import static fr.ird.observe.client.ObserveSwingApplicationContext.Entries.DATA_SOURCES_MANAGER;
import static fr.ird.observe.client.ObserveSwingApplicationContext.Entries.DATA_SOURCE_CONFIGURATION_FACTORY;
import static fr.ird.observe.client.ObserveSwingApplicationContext.Entries.DECORATOR_SERVICE;
+import static fr.ird.observe.client.ObserveSwingApplicationContext.Entries.DELETE_TEMPORARY_FILES_TASK;
import static fr.ird.observe.client.ObserveSwingApplicationContext.Entries.FLOATING_OBJECT_REFERENCES_MANAGER;
import static fr.ird.observe.client.ObserveSwingApplicationContext.Entries.H2_SERVER;
import static fr.ird.observe.client.ObserveSwingApplicationContext.Entries.H2_SERVER_MODE;
@@ -130,7 +133,7 @@ public class ObserveSwingApplicationContext extends DefaultApplicationContext im
BACKUP_MANAGER.set(new BackupsManager(config.getBackupDirectory().toPath(), config.getBackupsFile().toPath()));
LOCAL_DATABASE_BACKUP_TIMER.set(new ScheduledThreadPoolExecutor(1));
OBSERVE_SWING_SESSION_HELPER.set(new ObserveSwingSessionHelper(config.getSwingSessionFile()));
-
+ DELETE_TEMPORARY_FILES_TASK.set(CleanTemporaryFilesTask.create(config));
lock = new Object();
}
@@ -174,6 +177,10 @@ public class ObserveSwingApplicationContext extends DefaultApplicationContext im
return DATA_SOURCES_MANAGER.get();
}
+ public Timer getCleanTemporaryFilesTask() {
+ return DELETE_TEMPORARY_FILES_TASK.get();
+ }
+
public DecoratorService getDecoratorService() {
return DECORATOR_SERVICE.get();
}
@@ -319,7 +326,6 @@ public class ObserveSwingApplicationContext extends DefaultApplicationContext im
toClose.add(OBSERVE_SWING_SESSION_HELPER);
toClose.add(BACKUP_MANAGER);
toClose.add(DATA_SOURCES_MANAGER);
-
for (Entries closeable : toClose) {
try {
log.info("Closing " + closeable.objectName);
@@ -329,7 +335,7 @@ public class ObserveSwingApplicationContext extends DefaultApplicationContext im
}
}
ObserveServiceMainFactory.get().close();
-
+ closeDeleteTemporaryFilesTimer();
// fermeture du context principal
clear();
@@ -347,6 +353,13 @@ public class ObserveSwingApplicationContext extends DefaultApplicationContext im
super.finalize();
}
+ void closeDeleteTemporaryFilesTimer() {
+ try {
+ getCleanTemporaryFilesTask().cancel();
+ } catch (Exception e) {
+ log.error("Could not terminates delete temporary files timer...", e);
+ }
+ }
enum Entries {
CONFIG("Config", ClientConfig.class),
@@ -359,6 +372,7 @@ public class ObserveSwingApplicationContext extends DefaultApplicationContext im
DATA_SOURCES_MANAGER("Data sources manager", ObserveDataSourcesManager.class),
FLOATING_OBJECT_REFERENCES_MANAGER("Floating object referenfences manager", FloatingObjectPresetsManager.class),
OBSERVE_SWING_SESSION_HELPER("Swing session Helper", ObserveSwingSessionHelper.class),
+ DELETE_TEMPORARY_FILES_TASK(" Delete temporary files task", Timer.class),
VALIDATION_CONTEXT("Validation context", ClientValidationContext.class),
MAIN_UI("Main UI", ObserveMainUI.class),
ACTIONS("Command line Actions", ObserveCLAction.class),
=====================================
client-core/src/main/java/fr/ird/observe/client/db/ObserveDataSourcesManager.java
=====================================
@@ -171,7 +171,7 @@ public class ObserveDataSourcesManager implements Closeable {
ClientConfig config = applicationContext.getConfig();
ObserveDataSourceConfigurationMainFactory configurationMainFactory = applicationContext.getObserveDataSourceConfigurationMainFactory();
- File tmpDirectory = config.getTmpDirectory();
+ File tmpDirectory = config.getTemporaryDirectory();
File dbDirectory = new File(tmpDirectory, ClientConfig.DB_NAME + UUID.randomUUID().toString());
=====================================
client-core/src/main/java/fr/ird/observe/client/db/ObserveSwingDataSource.java
=====================================
@@ -477,7 +477,7 @@ public class ObserveSwingDataSource extends AbstractSerializableBean implements
Locale locale = config.getLocale();
- File tmpDirectory = config.getTmpDirectory();
+ File tmpDirectory = config.getTemporaryDirectory();
ReferentialLocale referentialLocale = ReferentialLocale.valueOf(locale);
=====================================
client-core/src/main/java/fr/ird/observe/client/ui/actions/main/menu/config/ShowConfigAction.java
=====================================
@@ -291,7 +291,7 @@ public class ShowConfigAction extends MenuActionSupport {
helper.addOption(ClientConfigOption.DB_DIRECTORY);
helper.addOption(ClientConfigOption.BACKUP_DIRECTORY);
helper.addOption(ClientConfigOption.IMPORT_DIRECTORY);
- helper.addOption(ClientConfigOption.TMP_DIRECTORY);
+ helper.addOption(ClientConfigOption.TEMPORARY_DIRECTORY);
helper.addOption(ClientConfigOption.VALIDATION_REPORT_DIRECTORY);
helper.addOption(ClientConfigOption.RESOURCES_DIRECTORY);
helper.addOption(ClientConfigOption.SWING_SESSION_FILE);
=====================================
observe-i18n/src/main/i18n/translations/observe_en_GB.properties
=====================================
@@ -1738,7 +1738,6 @@ observe.config.defaultLocalDbDirectory.description=Default directory where to st
observe.config.defaultMapDirectory.description=Default directory where to store map layers
observe.config.defaultReportDirectory.description=Default directory where to store report definition files
observe.config.defaultResourcesDirectory.description=Default user resources directory
-observe.config.defaultTmpDirectory.description=Default temporary directory used by application and clean at each launch.
observe.config.defaultValidationReportDirectory.description=Default validation report directory
observe.config.devMode=Dev mode
observe.config.floatingObjectPresets.description=Floating Objects references
@@ -1786,6 +1785,8 @@ observe.config.speciesList.seine.schoolEstimate=Species for school esitmates
observe.config.speciesList.seine.targetCatch=Species for target catches
observe.config.swingSessionFile.description=Swing session file.
observe.config.temperature.format=Default temperature format
+observe.config.temporaryDirectory.description=Default temporary directory used by application and clean at each launch.
+observe.config.temporaryFilesTimeout.description=Temporary files delete (in hours)
observe.config.ui.autoPopupNumberEditor=Flag sets to true when number editor show automaticly popup
observe.config.ui.changeSynchroSrc=Flag sets to true if you can change local source in admin tasks
observe.config.ui.dcp.error.color=Color to notify errors while validating floating object materials.
=====================================
observe-i18n/src/main/i18n/translations/observe_es_ES.properties
=====================================
@@ -1738,7 +1738,6 @@ observe.config.defaultLocalDbDirectory.description=Directorio de almacenamiento
observe.config.defaultMapDirectory.description=El directorio donde se ubican los mapas.
observe.config.defaultReportDirectory.description=Directorio por defecto de los informes de la aplicación
observe.config.defaultResourcesDirectory.description=Directorio de almacenamiento de los recursos de usuario como las traducciones o la consultas de informes
-observe.config.defaultTmpDirectory.description=Directorio temporal por defecto
observe.config.defaultValidationReportDirectory.description=Directorio por defecto de almacenamiento de los informes de validación
observe.config.devMode=Modo desarrollador
observe.config.floatingObjectPresets.description=Objetos flotantes de referencia
@@ -1786,6 +1785,8 @@ observe.config.speciesList.seine.schoolEstimate=Especies para las estimaciones
observe.config.speciesList.seine.targetCatch=Especies par las capturas objetivo
observe.config.swingSessionFile.description=Copia de seguridad del estado del UI.
observe.config.temperature.format=Unidad de temperatura
+observe.config.temporaryDirectory.description=Directorio temporal por defecto
+observe.config.temporaryFilesTimeout.description=Temporary files delete (in hours) \#TODO
observe.config.ui.autoPopupNumberEditor=Para mostrar automáticamente el editor numérico durante la edición de un número
observe.config.ui.changeSynchroSrc=Para autorizar la seleción de la base fuente durante las operaciones sobre la base
observe.config.ui.dcp.error.color=Color para notificar los errores sobre la composición de dcps
=====================================
observe-i18n/src/main/i18n/translations/observe_fr_FR.properties
=====================================
@@ -1738,7 +1738,6 @@ observe.config.defaultLocalDbDirectory.description=Le répertoire où est stock
observe.config.defaultMapDirectory.description=Le répertoire où sont stockées les cartes.
observe.config.defaultReportDirectory.description=Répertoire par défaut des rapports de l'application
observe.config.defaultResourcesDirectory.description=Le répertoire où sont stockées les ressources de l'utilisateur comme les traductions ou les requêtes de rapports.
-observe.config.defaultTmpDirectory.description=Le répertoire temporaire par défaut
observe.config.defaultValidationReportDirectory.description=Le répertoire par défaut où sont stockés les rapports de validation
observe.config.devMode=Mode développeur
observe.config.floatingObjectPresets.description=Objets flottants de référence
@@ -1786,6 +1785,8 @@ observe.config.speciesList.seine.schoolEstimate=Espèces pour les estimations
observe.config.speciesList.seine.targetCatch=Espèces pour les captures cible
observe.config.swingSessionFile.description=Fichier de sauvegarde des états des UI.
observe.config.temperature.format=Unité de température
+observe.config.temporaryDirectory.description=Le répertoire temporaire par défaut
+observe.config.temporaryFilesTimeout.description=Nettoyage des fichiers temporaires (en heures)
observe.config.ui.autoPopupNumberEditor=Pour afficher automatiquement l'éditeur numérique lors de l'édition d'un nombre
observe.config.ui.changeSynchroSrc=Pour autoriser la sélection de la base source dans les opérations sur base
observe.config.ui.dcp.error.color=Couleur pour notifier les erreurs sur la composition des dcps
=====================================
persistence/src/main/java/fr/ird/observe/persistence/AbstractObserveTopiaDao.java deleted
=====================================
@@ -1,77 +0,0 @@
-package fr.ird.observe.persistence;
-
-/*
- * #%L
- * ObServe :: Persistence
- * %%
- * Copyright (C) 2008 - 2020 IRD, Code Lutin, Ultreia.io
- * %%
- * 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.ird.observe.entities.ObserveEntity;
-import org.nuiton.topia.persistence.internal.AbstractTopiaDao;
-import org.nuiton.topia.persistence.support.TopiaSqlQuery;
-
-import java.sql.Connection;
-import java.sql.PreparedStatement;
-import java.sql.ResultSet;
-import java.sql.SQLException;
-import java.sql.Timestamp;
-import java.util.Date;
-import java.util.List;
-import java.util.Map;
-
-public abstract class AbstractObserveTopiaDao<E extends ObserveEntity> extends AbstractTopiaDao<E> {
-
- private final GetLastupdateDateSqlQuery getLastUpdateDateSqlQuery;
-
- protected AbstractObserveTopiaDao() {
- String schemaName = getTopiaEntityEnum().dbSchemaName();
- String tableName = getTopiaEntityEnum().dbTableName();
- getLastUpdateDateSqlQuery = new GetLastupdateDateSqlQuery(schemaName, tableName);
- }
-
- public Date getLastUpdateDate() {
- return topiaSqlSupport.findSingleResult(getLastUpdateDateSqlQuery);
- }
-
- public <O> List<O> findAllFromHql(String hql, Map<String, Object> hqlParameters) {
- return findAll(hql, hqlParameters);
- }
-
- private static class GetLastupdateDateSqlQuery extends TopiaSqlQuery<Timestamp> {
-
- protected final String sql;
-
- private GetLastupdateDateSqlQuery(String schemaName, String tableName) {
- this.sql = "SELECT max(" + ObserveEntity.PROPERTY_LAST_UPDATE_DATE + ") FROM " + schemaName + "." + tableName;
- }
-
- @Override
- public PreparedStatement prepareQuery(Connection connection) throws SQLException {
- return connection.prepareStatement(sql);
- }
-
- @Override
- public Timestamp prepareResult(ResultSet set) throws SQLException {
- return set.getTimestamp(1);
- }
-
- }
-
-
-}
=====================================
persistence/src/main/java/fr/ird/observe/persistence/ObserveTopiaConfiguration.java deleted
=====================================
@@ -1,84 +0,0 @@
-package fr.ird.observe.persistence;
-
-/*
- * #%L
- * ObServe :: Persistence
- * %%
- * Copyright (C) 2008 - 2020 IRD, Code Lutin, Ultreia.io
- * %%
- * 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 org.nuiton.topia.persistence.BeanTopiaConfiguration;
-import org.nuiton.topia.persistence.HibernateAvailableSettings;
-import org.nuiton.topia.persistence.jdbc.JdbcConfiguration;
-
-import java.io.IOException;
-import java.io.InputStream;
-import java.util.Map;
-import java.util.Properties;
-import java.util.TreeMap;
-
-/**
- * Created on 23/08/15.
- *
- * @author Tony Chemit - dev(a)tchemit.fr
- */
-public class ObserveTopiaConfiguration extends BeanTopiaConfiguration {
-
- private static final long serialVersionUID = 1L;
-
- private final boolean h2Configuration;
- protected final boolean showSql;
- private static final Map<String, String> HIBERNATE_GLOBAL_PROPERTIES;
-
- static {
-
- Properties p = new Properties();
- try (InputStream stream = ObserveTopiaPersistenceContext.class.getResourceAsStream("/hibernate.properties")) {
- try {
- p.load(stream);
- } catch (IOException e) {
- throw new IllegalStateException(e);
- }
- } catch (IOException e) {
- throw new IllegalStateException(e);
- }
- HIBERNATE_GLOBAL_PROPERTIES = new TreeMap<>();
- for (String s : p.stringPropertyNames()) {
- HIBERNATE_GLOBAL_PROPERTIES.put(s, p.getProperty(s));
- }
-
- }
-
- public ObserveTopiaConfiguration(JdbcConfiguration jdbcConfiguration, boolean h2Configuration, boolean showSql) {
- super(jdbcConfiguration);
- this.h2Configuration = h2Configuration;
- this.showSql = showSql;
- if (showSql) {
- hibernateExtraConfiguration.put(HibernateAvailableSettings.SHOW_SQL, Boolean.TRUE.toString());
- }
- hibernateExtraConfiguration.putAll(HIBERNATE_GLOBAL_PROPERTIES);
- }
-
- public boolean isH2Configuration() {
- return h2Configuration;
- }
-
- public boolean isShowSql() {
- return showSql;
- }
-}
=====================================
persistence/src/main/java/fr/ird/observe/persistence/ObserveTopiaConfigurationFactory.java deleted
=====================================
@@ -1,143 +0,0 @@
-package fr.ird.observe.persistence;
-
-/*
- * #%L
- * ObServe :: Persistence
- * %%
- * Copyright (C) 2008 - 2020 IRD, Code Lutin, Ultreia.io
- * %%
- * 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 org.apache.logging.log4j.Logger;
-import org.apache.logging.log4j.LogManager;
-import org.nuiton.topia.persistence.jdbc.JdbcConfiguration;
-import org.nuiton.topia.persistence.jdbc.JdbcConfigurationBuilder;
-import org.nuiton.topia.service.migration.TopiaMigrationService;
-import org.nuiton.topia.service.script.TopiaSqlScriptGeneratorServiceImpl;
-
-import java.io.File;
-
-/**
- * Created on 23/08/15.
- *
- * @author Tony Chemit - dev(a)tchemit.fr
- */
-public class ObserveTopiaConfigurationFactory {
-
- /** l'url d'acces a la base locale */
- private static final String H2_LOCAL_URL =
- "jdbc:h2:file:%s;" +
- // on peut aussi utiliser file, socket
- "FILE_LOCK=file;" +
- //1 or 2 is needed to restore avec crash
- // 0: logging is disabled (faster),
- // 1: logging of the data is enabled, but logging of the index
- // changes is disabled (default), 2: logging of both data and index
- // changes are enabled
- "LOG=0;" +
- // on peut aussi utiliser hsqldb, mysql ou postgresql
- "MODE=postgresql;" +
- //"MODE=hsqldb;" +
- // Sets the default lock timeout (in milliseconds) in this
- // database that is used for the new sessions.
- "DEFAULT_LOCK_TIMEOUT=100;" +
- // -1: the database is never closed until the close delay is set to
- // some other rev or SHUTDOWN is called., 0: no delay (default; the
- // database is closed if the last connection to it is closed)., n:
- // the database is left open for n second after the last connection
- // is closed.
- "DB_CLOSE_DELAY=0;" +
- // 0: no locking (should only be used for testing),
- // 1: table level locking (default),
- // 2: table level locking with garbage collection (if the
- // application does not close all connections).
- // LOCK_MODE 3 (READ_COMMITTED). Table level locking, but only when
- // writing (no read locks).
- "LOCK_MODE=3;" +
- // Levels: 0=off, 1=error, 2=info, 3=debug.
- "TRACE_LEVEL_FILE=0;" +
- // on system.out: 0=off, 1=error, 2=info, 3=debug.
- "TRACE_LEVEL_SYSTEM_OUT=0;" +
- // maximumn cache to improve performance...
- "CACHE_SIZE=65536;" +
- // avoid timeout on reading tables (see http://stackoverflow.com/questions/4162557/timeout-error-trying-to-lock-tab…)
- "MVCC=true";
-
- private static final JdbcConfigurationBuilder JDBC_CONFIGURATION_BUILDER = new JdbcConfigurationBuilder();
- private static final Logger log = LogManager.getLogger(ObserveTopiaConfigurationFactory.class);
-
- public static ObserveTopiaConfiguration forPostgresqlDatabase(String jdbcUrl,
- String username,
- String password,
- boolean initSchema,
- boolean traceSql) {
-
- JdbcConfiguration jdbcConfiguration = JDBC_CONFIGURATION_BUILDER.forPostgresqlDatabase(jdbcUrl, username, password);
-
- ObserveTopiaConfiguration topiaConfiguration = createTopiaConfiguration(jdbcConfiguration,
- initSchema,
- false,
- traceSql);
-
- log.debug("PG topia configuration: " + topiaConfiguration);
- return topiaConfiguration;
-
- }
-
- public static ObserveTopiaConfiguration forH2Database(File dbDirectory,
- String dbName,
- String username,
- String password,
- boolean initSchema,
- boolean traceSql) {
-
- String dbPath = new File(dbDirectory, dbName).getPath();
- String jdbcUrl = String.format(H2_LOCAL_URL, dbPath);
-
- JdbcConfiguration jdbcConfiguration = JDBC_CONFIGURATION_BUILDER.forH2Database(jdbcUrl, username, password);
-
- ObserveTopiaConfiguration topiaConfiguration = createTopiaConfiguration(jdbcConfiguration,
- initSchema,
- true,
- traceSql);
-
- log.debug("H2 topia configuration: " + topiaConfiguration);
- return topiaConfiguration;
-
- }
-
- private static ObserveTopiaConfiguration createTopiaConfiguration(JdbcConfiguration jdbcConfiguration,
- boolean initSchema,
- boolean h2Configuration,
- boolean traceSql) {
-
- ObserveTopiaConfiguration topiaConfiguration = new ObserveTopiaConfiguration(jdbcConfiguration, h2Configuration, traceSql);
- topiaConfiguration.setTopiaIdFactoryClass(ObserveTopiaIdFactory.class);
- topiaConfiguration.setInitSchema(initSchema);
- topiaConfiguration.setValidateSchema(false);
- topiaConfiguration.setUseHikariForJdbcConnectionPooling(true);
-
- log.debug("jdbcUrl: " + topiaConfiguration.getJdbcConnectionUrl());
-
- topiaConfiguration.addDeclaredService(ObserveTopiaApplicationContext.MIGRATION_SERVICE_NAME, TopiaMigrationService.class);
- topiaConfiguration.addDeclaredService(ObserveTopiaApplicationContext.SQL_SCRIPT_GENERATOR_BATCH_SERVICE_NAME, TopiaSqlScriptGeneratorServiceImpl.class);
-
- return topiaConfiguration;
-
- }
-
-}
=====================================
persistence/src/main/java/fr/ird/observe/persistence/ObserveTopiaIdFactory.java deleted
=====================================
@@ -1,90 +0,0 @@
-package fr.ird.observe.persistence;
-
-/*
- * #%L
- * ObServe :: Persistence
- * %%
- * Copyright (C) 2008 - 2020 IRD, Code Lutin, Ultreia.io
- * %%
- * 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 org.apache.commons.lang3.StringUtils;
-import org.apache.logging.log4j.LogManager;
-import org.apache.logging.log4j.Logger;
-import org.nuiton.topia.persistence.TopiaEntity;
-import org.nuiton.topia.persistence.internal.LegacyTopiaIdFactory;
-
-/**
- * Created on 21/08/15.
- *
- * @author Tony Chemit - dev(a)tchemit.fr
- */
-public class ObserveTopiaIdFactory extends LegacyTopiaIdFactory {
-
- private static final Logger log = LogManager.getLogger(ObserveTopiaIdFactory.class);
-
- private static final long serialVersionUID = 1L;
-
- public <E extends TopiaEntity> String newTopiaId(Class<E> entityType) {
-
- double random = Math.random();
- while (Double.toString(random).contains("E-")) {
- random = Math.random();
- }
- return newTopiaId(entityType, random + "");
- }
-
- public <E extends TopiaEntity> boolean isTopiaId(Class<E> entityClass, String str) {
- boolean isTopiaId = false;
- if (str != null && !str.endsWith(getSeparator())) {
- String[] split = str.split(getSeparator());
- if (split.length == 3) {
- String className = split[0];
- isTopiaId = entityClass.getName().equals(className);
- for (int index = 1; index < split.length; index++) {
- isTopiaId &= StringUtils.isNumeric(split[index]);
- }
- }
- }
- return isTopiaId;
- }
-
- @Override
- public boolean isTopiaId(String str) {
- boolean isTopiaId = false;
- if (str != null && !str.endsWith(getSeparator())) {
- String[] split = str.split(getSeparator());
- if (split.length == 3) {
- String className = split[0];
- try {
- Class.forName(className);
- isTopiaId = true;
- for (int index = 1; index < split.length; index++) {
- isTopiaId &= StringUtils.isNumeric(split[index]);
- }
- } catch (ClassNotFoundException eee) {
- // nothing to do, just return false
- if (log.isDebugEnabled()) {
- log.debug(eee);
- }
- }
- }
- }
- return isTopiaId;
- }
-
-}
=====================================
pom.xml
=====================================
@@ -26,7 +26,7 @@
<parent>
<groupId>io.ultreia.maven</groupId>
<artifactId>pom</artifactId>
- <version>2020.15</version>
+ <version>2020.17</version>
</parent>
<groupId>fr.ird.observe</groupId>
@@ -155,7 +155,7 @@
<maven.build.timestamp.format>dd/MM/yyyy HH:mm z</maven.build.timestamp.format>
<buildDate>${maven.build.timestamp}</buildDate>
- <observeToolkitVersion>3.7.27</observeToolkitVersion>
+ <observeToolkitVersion>3.7.28</observeToolkitVersion>
<!--<lib.version.java4all.http>1.0.13</lib.version.java4all.http>-->
<lib.version.nuiton.validation>3.1</lib.version.nuiton.validation>
<!--<lib.version.java4all.config>1.0.3</lib.version.java4all.config>-->
@@ -165,7 +165,7 @@
<lib.version.java4all.eugene>3.0-alpha-26</lib.version.java4all.eugene>
<!-- <lib.version.java4all.jaxx>3.0-alpha-56</lib.version.java4all.jaxx>-->
<!--<lib.version.java4all.i18n>4.0-beta-8-SNAPSHOT</lib.version.java4all.i18n>-->
- <lib.version.java4all.topia>1.1.16</lib.version.java4all.topia>
+ <lib.version.java4all.topia>1.1.17</lib.version.java4all.topia>
<lib.version.nuiton.utils>3.0</lib.version.nuiton.utils>
<!--<lib.version.nuiton.topia>3.6-SNAPSHOT</lib.version.nuiton.topia>-->
<!--<lib.version.java4all.eugene>3.0-alpha-21</lib.version.java4all.eugene>-->
=====================================
server-configuration/pom.xml
=====================================
@@ -112,6 +112,12 @@
<groupId>junit</groupId>
<artifactId>junit</artifactId>
</dependency>
+ <dependency>
+ <groupId>fr.ird.observe</groupId>
+ <artifactId>services</artifactId>
+ <version>7.5.1-SNAPSHOT</version>
+ <scope>compile</scope>
+ </dependency>
</dependencies>
=====================================
server-configuration/src/main/config/Server.ini
=====================================
@@ -117,3 +117,9 @@ key = observeweb.httpTimeout
type = int
defaultValue = 30000
+[option temporaryFilesTimeout]
+description = observe.config.temporaryFilesTimeout.description
+key = observeweb.temporaryFilesTimeout
+type = int
+defaultValue = 120
+
=====================================
server-configuration/src/main/i18n/getters/config.getter
=====================================
@@ -1,4 +1,5 @@
ObserveWebApplicationConfig.description
+observe.config.temporaryFilesTimeout.description
observe.model.version
observeweb.adminApiKey.description
observeweb.apiUrl.description
=====================================
server-configuration/src/main/java/fr/ird/observe/server/configuration/ServerConfig.java
=====================================
@@ -25,6 +25,7 @@ package fr.ird.observe.server.configuration;
import com.google.common.io.CharSource;
import com.google.common.io.Resources;
import fr.ird.observe.dto.ObserveUtil;
+import fr.ird.observe.services.service.CleanTemporaryFilesTaskConfiguration;
import io.ultreia.java4all.config.ApplicationConfig;
import io.ultreia.java4all.config.ArgumentsParserException;
import org.apache.logging.log4j.LogManager;
@@ -44,7 +45,7 @@ import java.nio.file.Paths;
*
* @author Tony Chemit - dev(a)tchemit.fr
*/
-public class ServerConfig extends GeneratedServerConfig {
+public class ServerConfig extends GeneratedServerConfig implements CleanTemporaryFilesTaskConfiguration {
private static final String DEFAULT_OBSERVE_WEB_CONFIGURATION_FILENAME = "observe-server.conf";
/** Logger. */
=====================================
server-core/src/main/java/fr/ird/observe/server/ObserveWebApplicationContext.java
=====================================
@@ -42,20 +42,26 @@ import fr.ird.observe.services.ObserveServiceFactory;
import fr.ird.observe.services.ObserveServiceInitializer;
import fr.ird.observe.services.ObserveServiceMainFactory;
import fr.ird.observe.services.configuration.ObserveDataSourceConfiguration;
+import fr.ird.observe.services.service.CleanTemporaryFilesTask;
import fr.ird.observe.services.service.ObserveService;
import fr.ird.observe.services.service.actions.consolidate.dcp.FloatingObjectModification;
+import org.apache.logging.log4j.LogManager;
+import org.apache.logging.log4j.Logger;
import org.debux.webmotion.server.call.HttpContext;
import org.nuiton.version.Version;
import javax.servlet.ServletContext;
import java.io.Closeable;
import java.io.IOException;
+import java.util.Timer;
/**
* @author Tony Chemit - dev(a)tchemit.fr
*/
public class ObserveWebApplicationContext implements Closeable {
+ private static final Logger log = LogManager.getLogger(ObserveWebApplicationContext.class);
+
public static final String APPLICATION_CONTEXT_PARAMETER = ObserveWebApplicationContext.class.getName();
public static final String MISSING_APPLICATION_CONTEXT =
@@ -74,6 +80,8 @@ public class ObserveWebApplicationContext implements Closeable {
protected ObserveWebSecurityApplicationContext securityApplicationContext;
+ private Timer deleteTemporaryFilesTimer;
+
public static ObserveWebApplicationContext getApplicationContext(HttpContext context) {
ServletContext servletContext = context.getServletContext();
@@ -125,6 +133,10 @@ public class ObserveWebApplicationContext implements Closeable {
}
};
+ if (deleteTemporaryFilesTimer != null) {
+ closeDeleteTemporaryFilesTimer();
+ }
+ deleteTemporaryFilesTimer = CleanTemporaryFilesTask.create(getApplicationConfiguration());
}
@@ -147,6 +159,8 @@ public class ObserveWebApplicationContext implements Closeable {
@Override
public void close() throws IOException {
+ closeDeleteTemporaryFilesTimer();
+
// Supprimer le cache des sessions
securityApplicationContext.close();
@@ -154,6 +168,13 @@ public class ObserveWebApplicationContext implements Closeable {
mainServiceFactory.close();
}
+ void closeDeleteTemporaryFilesTimer() {
+ try {
+ deleteTemporaryFilesTimer.cancel();
+ } catch (Exception e) {
+ log.error("Could not terminates delete temporary files timer...", e);
+ }
+ }
public ObserveDtoGsonSupplier getGsonSupplier() {
return gsonSupplier;
=====================================
services-local/src/main/java/fr/ird/observe/services/local/ObserveSecurityHelper.java
=====================================
@@ -27,6 +27,7 @@ import com.google.common.collect.Sets;
import fr.ird.observe.dto.ObserveDbRole;
import fr.ird.observe.dto.db.ObserveDbUserDto;
import fr.ird.observe.persistence.Entities;
+import fr.ird.observe.persistence.ObserveTopiaConfiguration;
import org.apache.commons.lang3.tuple.Pair;
import org.apache.logging.log4j.Logger;
import org.apache.logging.log4j.LogManager;
@@ -86,20 +87,21 @@ public class ObserveSecurityHelper {
OBSERVE_LONGLINE_SCHEMA_NAME);
private static final Logger log = LogManager.getLogger(ObserveSecurityHelper.class);
private final JdbcPostgresHelper jdbcHelper;
+ private final Path temporaryDirectory;
- public ObserveSecurityHelper(JdbcConfiguration jdbcConfiguration) {
+ public ObserveSecurityHelper(ObserveTopiaConfiguration jdbcConfiguration) {
this.jdbcHelper = new JdbcPostgresHelper(jdbcConfiguration);
+ this.temporaryDirectory = jdbcConfiguration.getTemporaryDirectory();
}
public void applySecurity(Set<ObserveDbUserDto> users) {
if (users == null) {
throw new NullPointerException("users can not be null");
}
-
Path scriptPath;
try {
- scriptPath = Files.createTempFile("topia-sql-script-", ".sql");
+ scriptPath = Files.createTempFile(temporaryDirectory, "topia-sql-script-", ".sql");
} catch (IOException e) {
throw new IllegalStateException("Can't create temporary path", e);
}
=====================================
services-local/src/main/java/fr/ird/observe/services/local/ObserveTopiaApplicationContextFactory.java
=====================================
@@ -149,6 +149,7 @@ public class ObserveTopiaApplicationContextFactory {
configuration.getJdbcUrl(),
configuration.getUsername(),
String.valueOf(configuration.getPassword()),
+ configuration.getTemporaryDirectory(),
initSchema,
configuration.isTraceSql()
);
@@ -174,6 +175,7 @@ public class ObserveTopiaApplicationContextFactory {
configuration.getDbName(),
configuration.getUsername(),
String.valueOf(configuration.getPassword()),
+ configuration.getTemporaryDirectory(),
initSchema,
configuration.isTraceSql()
);
=====================================
services-local/src/main/java/fr/ird/observe/services/local/service/DataSourceServiceLocal.java
=====================================
@@ -70,6 +70,7 @@ import org.nuiton.version.Versions;
import java.io.File;
import java.io.IOException;
import java.nio.file.Files;
+import java.nio.file.Path;
import java.util.LinkedHashSet;
import java.util.Optional;
import java.util.Set;
@@ -110,6 +111,7 @@ public class DataSourceServiceLocal extends ObserveServiceLocal implements DataS
Preconditions.checkState(dataSourceConfiguration instanceof ObserveDataSourceConfigurationTopiaSupport);
ObserveDataSourceConfigurationTopiaSupport dataSourceConfigurationTopiaSupport = (ObserveDataSourceConfigurationTopiaSupport) dataSourceConfiguration;
+ Path temporaryDirectory = serviceContext.getTemporaryDirectoryRoot().toPath();
ObserveDataSourceInformation dataSourceInformation;
if (dataSourceConfigurationTopiaSupport.isH2Database()) {
@@ -143,7 +145,7 @@ public class DataSourceServiceLocal extends ObserveServiceLocal implements DataS
h2DataSourceConfiguration.getDbName(),
h2DataSourceConfiguration.getUsername(),
new String(h2DataSourceConfiguration.getPassword()),
- false,
+ temporaryDirectory, false,
false);
@@ -167,7 +169,7 @@ public class DataSourceServiceLocal extends ObserveServiceLocal implements DataS
ObserveTopiaConfiguration topiaConfiguration = ObserveTopiaConfigurationFactory.forPostgresqlDatabase(pgDataSourceConfiguration.getJdbcUrl(),
pgDataSourceConfiguration.getUsername(),
new String(pgDataSourceConfiguration.getPassword()),
- false,
+ temporaryDirectory, false,
false);
try {
@@ -190,6 +192,7 @@ public class DataSourceServiceLocal extends ObserveServiceLocal implements DataS
@Override
public ObserveDataSourceInformation checkCanConnect(ObserveDataSourceConfiguration dataSourceConfiguration) throws DatabaseNotFoundException, DatabaseConnexionNotAuthorizedException {
+ Path temporaryDirectory = getTemporaryDirectory(dataSourceConfiguration);
Preconditions.checkState(dataSourceConfiguration instanceof ObserveDataSourceConfigurationTopiaSupport);
ObserveDataSourceConfigurationTopiaSupport dataSourceConfigurationTopiaSupport = (ObserveDataSourceConfigurationTopiaSupport) dataSourceConfiguration;
@@ -226,6 +229,7 @@ public class DataSourceServiceLocal extends ObserveServiceLocal implements DataS
h2DataSourceConfiguration.getDbName(),
h2DataSourceConfiguration.getUsername(),
new String(h2DataSourceConfiguration.getPassword()),
+ temporaryDirectory,
false,
false);
@@ -250,6 +254,7 @@ public class DataSourceServiceLocal extends ObserveServiceLocal implements DataS
ObserveTopiaConfiguration topiaConfiguration = ObserveTopiaConfigurationFactory.forPostgresqlDatabase(pgDataSourceConfiguration.getJdbcUrl(),
pgDataSourceConfiguration.getUsername(),
new String(pgDataSourceConfiguration.getPassword()),
+ temporaryDirectory,
false,
false);
@@ -269,13 +274,22 @@ public class DataSourceServiceLocal extends ObserveServiceLocal implements DataS
}
+ Path getTemporaryDirectory(ObserveDataSourceConfiguration dataSourceConfiguration) {
+ Path temporaryDirectory = dataSourceConfiguration.getTemporaryDirectory();
+ if (temporaryDirectory == null) {
+ temporaryDirectory = serviceContext.getTemporaryDirectoryRoot().toPath();
+ dataSourceConfiguration.setTemporaryDirectory(temporaryDirectory);
+ }
+ return temporaryDirectory;
+ }
+
@Override
public ObserveDataSourceConnectionTopia create(ObserveDataSourceConfiguration dataSourceConfiguration, DataSourceCreateConfigurationDto dataSourceCreateConfiguration)
throws IncompatibleDataSourceCreateConfigurationException, DataSourceCreateWithNoReferentialImportException,
BabModelVersionException, DatabaseConnexionNotAuthorizedException, DatabaseNotFoundException {
dataSourceCreateConfiguration.validateConfiguration();
-
+ Path temporaryDirectory = getTemporaryDirectory(dataSourceConfiguration);
boolean initSchema = !dataSourceCreateConfiguration.isImportDatabase();
ObserveTopiaApplicationContext topiaApplicationContext = ObserveTopiaApplicationContextFactory.createTopiaApplicationContext((ObserveDataSourceConfigurationTopiaSupport) dataSourceConfiguration, initSchema);
@@ -294,10 +308,9 @@ public class DataSourceServiceLocal extends ObserveServiceLocal implements DataS
} else { // base postgres
// on realise les import dans un base H2 temporaire
- // FIXME il faut obtenir le repertoit temporaire d'observe plutot que celui du système
File tmpDir;
try {
- tmpDir = Files.createTempDirectory("obstuna").toFile();
+ tmpDir = Files.createTempDirectory(temporaryDirectory, "obstuna").toFile();
} catch (IOException e) {
throw new IllegalStateException("could not create temporary directory ", e);
}
@@ -322,8 +335,6 @@ public class DataSourceServiceLocal extends ObserveServiceLocal implements DataS
if (!databaseFile.delete()) {
throw new IllegalStateException("could not delete " + databaseFile);
}
-
-
}
} else {
@@ -429,7 +440,7 @@ public class DataSourceServiceLocal extends ObserveServiceLocal implements DataS
dataSourceService.close();
}
}
- log.info(String.format("Import data%s", request.isAddReferential() ? " and referential." : "."));
+ log.info("Import data" + (request.isAddReferential() ? " and referential." : "."));
topiaApplicationContext.executeSqlStatements(dataDump);
}
@@ -460,7 +471,8 @@ public class DataSourceServiceLocal extends ObserveServiceLocal implements DataS
@Override
public ObserveDataSourceConnectionTopia open(ObserveDataSourceConfiguration dataSourceConfiguration) throws DatabaseNotFoundException, DatabaseConnexionNotAuthorizedException, BabModelVersionException {
-
+ Path temporaryDirectory = getTemporaryDirectory(dataSourceConfiguration);
+ log.debug("Will use temporary directory: " + temporaryDirectory);
ObserveDataSourceInformation dataSourceInformation = checkCanConnect(dataSourceConfiguration);
Version dbVersion = dataSourceInformation.getVersion();
@@ -562,6 +574,9 @@ public class DataSourceServiceLocal extends ObserveServiceLocal implements DataS
@Override
public void applySecurity(ObserveDataSourceConfiguration dataSourceConfiguration, ImmutableSet<ObserveDbUserDto> users) {
+ Path temporaryDirectory = getTemporaryDirectory(dataSourceConfiguration);
+ log.debug("Will use temporary directory: " + temporaryDirectory);
+
// pas de securité pour les bases autres que postgresql
if (dataSourceConfiguration instanceof ObserveDataSourceConfigurationTopiaPG) {
@@ -580,6 +595,9 @@ public class DataSourceServiceLocal extends ObserveServiceLocal implements DataS
@Override
public void migrateData(ObserveDataSourceConfiguration dataSourceConfiguration) {
+ Path temporaryDirectory = getTemporaryDirectory(dataSourceConfiguration);
+ log.debug("Will use temporary directory: " + temporaryDirectory);
+
ObserveTopiaApplicationContext topiaApplicationContext = ObserveTopiaApplicationContextFactory.getOrCreateTopiaApplicationContext((ObserveDataSourceConfigurationTopiaSupport) dataSourceConfiguration);
topiaApplicationContext.getMigrationService().runSchemaMigration();
}
=====================================
services-local/src/test/java/fr/ird/observe/services/local/LocalTestClassResource.java
=====================================
@@ -105,6 +105,7 @@ public class LocalTestClassResource extends TestClassResourceSupport {
if (log.isInfoEnabled()) {
log.info("Create shared database: " + dbVersion.toString() + "/" + dbName + " to " + sharedDatabaseFile);
}
+ sharedDatabaseConfiguration.setTemporaryDirectory(getTemporaryDirectoryRoot());
try (DataSourceService dataSourceService = newService(sharedDatabaseConfiguration, DataSourceService.class)) {
DataSourceCreateConfigurationDto createConfiguration = new DataSourceCreateConfigurationDto();
@@ -139,12 +140,14 @@ public class LocalTestClassResource extends TestClassResourceSupport {
}
dataSourceConfiguration.setModelVersion(ObserveTestConfiguration.getModelVersion());
+ dataSourceConfiguration.setTemporaryDirectory(getTemporaryDirectoryRoot());
return dataSourceConfiguration;
}
public <S extends ObserveService> S newService(ObserveDataSourceConfiguration dataSourceConfiguration, Class<S> serviceType) {
+ dataSourceConfiguration.setTemporaryDirectory(getTemporaryDirectoryRoot());
ObserveServiceInitializer observeServiceInitializer = ObserveServiceInitializer.create(
Locale.FRANCE,
ReferentialLocale.FR,
=====================================
services/src/main/java/fr/ird/observe/services/service/CleanTemporaryFilesTask.java
=====================================
@@ -0,0 +1,119 @@
+package fr.ird.observe.services.service;
+
+/*-
+ * #%L
+ * ObServe :: Services API
+ * %%
+ * Copyright (C) 2008 - 2020 IRD, Code Lutin, Ultreia.io
+ * %%
+ * 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 org.apache.logging.log4j.LogManager;
+import org.apache.logging.log4j.Logger;
+
+import java.io.IOException;
+import java.nio.file.DirectoryStream;
+import java.nio.file.Files;
+import java.nio.file.Path;
+import java.util.Calendar;
+import java.util.Date;
+import java.util.Objects;
+import java.util.Timer;
+import java.util.TimerTask;
+import java.util.concurrent.TimeUnit;
+
+/**
+ * To clean temporaries files.
+ *
+ * @author Tony Chemit - dev(a)tchemit.fr
+ * @since 8.0
+ */
+
+public class CleanTemporaryFilesTask extends TimerTask {
+
+ private static final Logger log = LogManager.getLogger(CleanTemporaryFilesTask.class);
+
+ private final CleanTemporaryFilesTaskConfiguration configuration;
+
+ public static Timer create(CleanTemporaryFilesTaskConfiguration configuration) {
+ Timer result = new Timer("Delete temporary files daemon", true);
+ result.scheduleAtFixedRate(new CleanTemporaryFilesTask(configuration), new Date(), TimeUnit.HOURS.toMillis(1));
+ return result;
+ }
+
+ public CleanTemporaryFilesTask(CleanTemporaryFilesTaskConfiguration configuration) {
+ this.configuration = configuration;
+ }
+
+ @Override
+ public void run() {
+
+ Path temporaryDirectory = configuration.getTemporaryDirectory().toPath();
+ Calendar calendar = Calendar.getInstance();
+ calendar.setTime(new Date());
+ calendar.add(Calendar.HOUR_OF_DAY, -configuration.getTemporaryFilesTimeout());
+ Date deleteBefore = calendar.getTime();
+ long deleteBeforeTime = deleteBefore.getTime();
+
+ log.info(String.format("Delete temporary files in directory %s before %s", temporaryDirectory, deleteBefore));
+ delete(temporaryDirectory, deleteBeforeTime);
+ }
+
+ private boolean delete(Path path, long deleteBeforeTime) {
+ try {
+ Files.walk(path).forEach(p -> {
+ if (Objects.equals(path, p)) {
+ return;
+ }
+ if (Files.isDirectory(p)) {
+ boolean deleted = delete(p, deleteBeforeTime);
+ if (deleted) {
+ delete0(p, deleteBeforeTime);
+ }
+ }
+ if (Files.isRegularFile(p)) {
+ delete0(p, deleteBeforeTime);
+ }
+ });
+ if (Files.isRegularFile(path)) {
+ return Files.notExists(path);
+ }
+ if (Files.isDirectory(path)) {
+ return isDirEmpty(path);
+ }
+ return false;
+ } catch (IOException e) {
+ throw new RuntimeException(String.format("Could not walk through temporary directory: %s", path), e);
+ }
+ }
+
+ private static boolean isDirEmpty(final Path directory) throws IOException {
+ try(DirectoryStream<Path> dirStream = Files.newDirectoryStream(directory)) {
+ return !dirStream.iterator().hasNext();
+ }
+ }
+ private void delete0(Path p, long deleteBeforeTime) {
+ try {
+ if (Files.getLastModifiedTime(p).toMillis() < deleteBeforeTime) {
+ log.info("Delete temporary file: " + p);
+ Files.delete(p);
+ }
+ } catch (IOException e) {
+ log.error("Something wrong while process file: " + p, e);
+ }
+ }
+}
=====================================
services/src/main/java/fr/ird/observe/services/service/CleanTemporaryFilesTaskConfiguration.java
=====================================
@@ -0,0 +1,40 @@
+package fr.ird.observe.services.service;
+
+/*-
+ * #%L
+ * ObServe :: Services API
+ * %%
+ * Copyright (C) 2008 - 2020 IRD, Code Lutin, Ultreia.io
+ * %%
+ * 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 java.io.File;
+
+/**
+ * @author Tony Chemit - dev(a)tchemit.fr
+ * @since 7.5.1
+ */
+public interface CleanTemporaryFilesTaskConfiguration {
+
+ File getTemporaryDirectory();
+
+ void setTemporaryDirectory(File temporaryDirectory);
+
+ int getTemporaryFilesTimeout();
+
+ void setTemporaryFilesTimeout(int temporaryFilesTimeout);
+}
View it on GitLab: https://gitlab.com/ultreiaio/ird-observe/-/commit/ae6dc3197bb87eab35ec106cb…
--
View it on GitLab: https://gitlab.com/ultreiaio/ird-observe/-/commit/ae6dc3197bb87eab35ec106cb…
You're receiving this email because of your account on gitlab.com.
1
0
[Git][ultreiaio/ird-observe][develop] Accumulation de fichiers - Closes #1462
by Tony CHEMIT 13 Apr '20
by Tony CHEMIT 13 Apr '20
13 Apr '20
Tony CHEMIT pushed to branch develop at ultreiaio / ird-observe
Commits:
1364f2fe by tchemit at 2020-04-13T21:21:43+02:00
Accumulation de fichiers - Closes #1462
- - - - -
26 changed files:
- client-configuration/src/main/config/Client.ini
- client-configuration/src/main/i18n/getters/config.getter
- client-configuration/src/main/java/fr/ird/observe/client/configuration/ClientConfig.java
- client-core/src/main/java/fr/ird/observe/client/ClientUIContext.java
- client-core/src/main/java/fr/ird/observe/client/ObserveSwingApplicationContext.java
- client-core/src/main/java/fr/ird/observe/client/datasource/api/ObserveDataSourcesManager.java
- client-core/src/main/java/fr/ird/observe/client/datasource/api/ObserveSwingDataSource.java
- observe-i18n/src/main/i18n/translations/observe_en_GB.properties
- observe-i18n/src/main/i18n/translations/observe_es_ES.properties
- observe-i18n/src/main/i18n/translations/observe_fr_FR.properties
- − persistence/src/main/java/fr/ird/observe/entities/AbstractObserveTopiaDao.java
- − persistence/src/main/java/fr/ird/observe/entities/ObserveTopiaConfiguration.java
- − persistence/src/main/java/fr/ird/observe/entities/ObserveTopiaConfigurationFactory.java
- persistence/src/test/java/fr/ird/observe/persistence/ObserveTopiaApplicationContextTest.java → persistence/src/test/java/fr/ird/observe/entities/ObserveTopiaApplicationContextTest.java
- pom.xml
- server-configuration/pom.xml
- server-configuration/src/main/config/Server.ini
- server-configuration/src/main/i18n/getters/config.getter
- server-configuration/src/main/java/fr/ird/observe/server/configuration/ServerConfig.java
- server-core/src/main/java/fr/ird/observe/server/ObserveWebApplicationContext.java
- services-local/src/main/java/fr/ird/observe/services/local/ObserveSecurityHelper.java
- services-local/src/main/java/fr/ird/observe/services/local/ObserveTopiaApplicationContextFactory.java
- services-local/src/main/java/fr/ird/observe/services/local/service/DataSourceServiceLocal.java
- services-local/src/test/java/fr/ird/observe/services/local/LocalTestClassResource.java
- + services/src/main/java/fr/ird/observe/services/service/CleanTemporaryFilesTask.java
- persistence/src/main/java/fr/ird/observe/entities/ObserveTopiaIdFactory.java → services/src/main/java/fr/ird/observe/services/service/CleanTemporaryFilesTaskConfiguration.java
Changes:
=====================================
client-configuration/src/main/config/Client.ini
=====================================
@@ -146,8 +146,16 @@ defaultValue = ${dcp.presets.directory}/ps/logbook
transient = true
final = true
+[option temporaryDirectory]
+description = observe.config.temporaryDirectory.description
+key = temporary.directory
+type = file
+defaultValue = ${data.directory}/tmp
+transient = true
+final = true
+
[option tmpDirectory]
-description = observe.config.defaultTmpDirectory.description
+description = observe.config.temporaryDirectory.description
key = tmp.directory
type = file
defaultValue = ${data.directory}/tmp
@@ -717,6 +725,12 @@ key = ui.seineBycatchObservedSystem
type = fr.ird.observe.validation.SeineBycatchObservedSystemConfig
defaultValue = {\"fr.ird.referential.common.Species#1239832684290#0.04680507324710936\": [\"fr.ird.referential.ps.observation.ObservedSystem#0#1.0\",\"fr.ird.referential.ps.observation.ObservedSystem#0#1.1\"]}
+[option temporaryFilesTimeout]
+description = observe.config.temporaryFilesTimeout.description
+key = observeweb.temporaryFilesTimeout
+type = int
+defaultValue = 120
+
[action help]
description = observe.action.commandline.help
action = "fr.ird.observe.client.ObserveCLAction#help"
=====================================
client-configuration/src/main/i18n/getters/config.getter
=====================================
@@ -33,7 +33,6 @@ observe.config.defaultLocalDbDirectory.description
observe.config.defaultMapDirectory.description
observe.config.defaultReportDirectory.description
observe.config.defaultResourcesDirectory.description
-observe.config.defaultTmpDirectory.description
observe.config.defaultValidationReportDirectory.description
observe.config.h2.can.editReferential.description
observe.config.h2.can.migrate.description
@@ -91,6 +90,8 @@ observe.config.speciesList.seine.observation.schoolEstimate
observe.config.speciesList.seine.observation.targetCatch
observe.config.swingSessionFile.description
observe.config.temperature.format
+observe.config.temporaryDirectory.description
+observe.config.temporaryFilesTimeout.description
observe.config.ui.autoPopupNumberEditor
observe.config.ui.blockStateColor
observe.config.ui.busyStateColor
=====================================
client-configuration/src/main/java/fr/ird/observe/client/configuration/ClientConfig.java
=====================================
@@ -35,6 +35,7 @@ import fr.ird.observe.dto.referential.ReferentialLocale;
import fr.ird.observe.gson.ObserveDtoGsonSupplier;
import fr.ird.observe.navigation.model.edit.ObserveEditModel;
import fr.ird.observe.navigation.model.select.ObserveSelectModel;
+import fr.ird.observe.services.service.CleanTemporaryFilesTaskConfiguration;
import io.ultreia.java4all.application.context.spi.ApplicationComponentInstantiateStrategy;
import io.ultreia.java4all.application.context.spi.GenerateApplicationComponent;
import io.ultreia.java4all.application.template.TemplateGeneratorConfig;
@@ -92,12 +93,13 @@ import static io.ultreia.java4all.i18n.I18n.t;
hints = {
TemplateGeneratorConfig.class,
ObServeSwingSessionConfig.class,
- ReferentialLocaleConfig.class},
+ ReferentialLocaleConfig.class,
+ CleanTemporaryFilesTaskConfiguration.class},
instantiateStrategy = ApplicationComponentInstantiateStrategy.SUPPLIER,
instantiateSupplier = ClientConfigFinder.class
)
@GenerateTemplate(template = "about.ftl")
-public class ClientConfig extends GeneratedClientConfig implements TemplateGeneratorConfig, ObServeSwingSessionConfig, ReferentialLocaleConfig, NavigationTreeConfig {
+public class ClientConfig extends GeneratedClientConfig implements TemplateGeneratorConfig, ObServeSwingSessionConfig, ReferentialLocaleConfig, NavigationTreeConfig, CleanTemporaryFilesTaskConfiguration {
public static final String DB_NAME = "obstuna";
public static final List<ClientConfigOption> MAP_LAYERS = ImmutableList.of(
@@ -266,7 +268,7 @@ public class ClientConfig extends GeneratedClientConfig implements TemplateGener
resourceManager.createDirectory(this, ClientConfigOption.TMP_DIRECTORY);
// suppression du contenu du répertoire temporaire
- FileUtils.cleanDirectory(this.getTmpDirectory());
+ FileUtils.cleanDirectory(this.getTemporaryDirectory());
// 3 - backup directory
=====================================
client-core/src/main/java/fr/ird/observe/client/ClientUIContext.java
=====================================
@@ -34,6 +34,7 @@ import fr.ird.observe.dto.IdDto;
import fr.ird.observe.dto.decoration.DecoratorService;
import fr.ird.observe.dto.decoration.DecoratorServiceApplicationComponent;
import fr.ird.observe.dto.decoration.ObserveI18nDecoratorHelper;
+import fr.ird.observe.services.service.CleanTemporaryFilesTask;
import io.ultreia.java4all.application.context.ApplicationContext;
import io.ultreia.java4all.application.context.spi.GenerateApplicationComponent;
import io.ultreia.java4all.i18n.I18n;
@@ -57,9 +58,11 @@ import java.awt.event.ComponentEvent;
import java.awt.event.WindowAdapter;
import java.awt.event.WindowEvent;
import java.beans.PropertyChangeListener;
+import java.io.Closeable;
import java.util.List;
import java.util.Locale;
import java.util.Objects;
+import java.util.Timer;
import static io.ultreia.java4all.i18n.I18n.t;
import static javax.swing.JOptionPane.CLOSED_OPTION;
@@ -71,7 +74,7 @@ import static javax.swing.JOptionPane.VALUE_PROPERTY;
ObserveSwingSessionHelper.class,
ActionExecutor.class
})
-public class ClientUIContext {
+public class ClientUIContext implements Closeable {
private static final Logger log = LogManager.getLogger(ClientUIContext.class);
@@ -81,7 +84,9 @@ public class ClientUIContext {
private final ActionExecutor actionExecutor;
private ObserveMainUI mainUI;
private ObserveUICallbackManager uiCallbackManager;
+ private Timer deleteTemporaryFilesTimer;
private final BusyModel busyModel;
+
public ClientUIContext(DecoratorService decoratorService, ClientConfig clientConfig, ObserveSwingSessionHelper observeSwingSessionHelper, ActionExecutor actionExecutor) {
this.decoratorService = decoratorService;
this.clientConfig = clientConfig;
@@ -90,6 +95,13 @@ public class ClientUIContext {
this.busyModel = new BusyModel();
}
+ public void initDeleteTemporaryFilesTimer() {
+ if (deleteTemporaryFilesTimer != null) {
+ closeDeleteTemporaryFilesTimer();
+ }
+ deleteTemporaryFilesTimer = CleanTemporaryFilesTask.create(getClientConfig());
+ }
+
public static void displayInfo(String text) {
JFrame ui = ClientUIContextApplicationComponent.value().getMainUI();
if (ui == null) {
@@ -365,7 +377,9 @@ public class ClientUIContext {
return observeSwingSessionHelper;
}
+ @Override
public void close() {
+ closeDeleteTemporaryFilesTimer();
mainUI = null;
}
@@ -464,4 +478,16 @@ public class ClientUIContext {
public BusyModel getBusyModel() {
return busyModel;
}
+
+
+ void closeDeleteTemporaryFilesTimer() {
+ if (deleteTemporaryFilesTimer != null) {
+ try {
+ deleteTemporaryFilesTimer.cancel();
+ } catch (Exception e) {
+ log.error("Could not terminates delete temporary files timer...", e);
+ }
+ }
+ }
+
}
=====================================
client-core/src/main/java/fr/ird/observe/client/ObserveSwingApplicationContext.java
=====================================
@@ -22,6 +22,7 @@
package fr.ird.observe.client;
import fr.ird.observe.client.configuration.ClientConfig;
+import fr.ird.observe.client.configuration.ClientConfigApplicationComponent;
import fr.ird.observe.services.ObserveServiceMainFactory;
import fr.ird.observe.services.ObserveServiceMainFactoryApplicationComponent;
import fr.ird.observe.spi.DtoModelHelper;
@@ -53,9 +54,12 @@ public class ObserveSwingApplicationContext extends ApplicationContext {
//FIXME Je ne comprends pas pourquoi cela ne fonctionne plus.
// config.get().setOption("user.home", SystemUtils.USER_HOME);
- log.debug("Init model helper: " + DtoModelHelper.class);
+ log.debug(String.format("Init model helper: %s", DtoModelHelper.class));
ObserveServiceMainFactory serviceMainFactory = ObserveServiceMainFactoryApplicationComponent.value();
- log.info("Initialize services factory: " + serviceMainFactory);
+ log.info(String.format("Initialize services factory: %s", serviceMainFactory));
+ ClientUIContext clientUIContext = ClientUIContextApplicationComponent.value();
+ log.info("Initialize delete temporary files task.");
+ clientUIContext.initDeleteTemporaryFilesTimer();
}
// We put here the i18n keys from the client-runner module, otherwise we need yet another module before observe-i18n
=====================================
client-core/src/main/java/fr/ird/observe/client/datasource/api/ObserveDataSourcesManager.java
=====================================
@@ -126,7 +126,7 @@ public class ObserveDataSourcesManager implements Closeable {
public ObserveSwingDataSource newTemporaryH2DataSource(String label) {
- File tmpDirectory = config.getTmpDirectory();
+ File tmpDirectory = config.getTemporaryDirectory();
File dbDirectory = new File(tmpDirectory, ClientConfig.DB_NAME + UUID.randomUUID().toString());
=====================================
client-core/src/main/java/fr/ird/observe/client/datasource/api/ObserveSwingDataSource.java
=====================================
@@ -482,7 +482,7 @@ public class ObserveSwingDataSource extends ObserveServicesProviderSupport {
Locale locale = config.getLocale();
- File tmpDirectory = config.getTmpDirectory();
+ File tmpDirectory = config.getTemporaryDirectory();
ReferentialLocale referentialLocale = ReferentialLocale.valueOf(locale);
=====================================
observe-i18n/src/main/i18n/translations/observe_en_GB.properties
=====================================
@@ -482,7 +482,6 @@ observe.config.defaultLocalDbDirectory.description=Default directory where to st
observe.config.defaultMapDirectory.description=Default directory where to store map layers
observe.config.defaultReportDirectory.description=Default directory where to store report definition files
observe.config.defaultResourcesDirectory.description=Default user resources directory
-observe.config.defaultTmpDirectory.description=Default temporary directory used by application and clean at each launch.
observe.config.defaultValidationReportDirectory.description=Default validation report directory
observe.config.devMode=Dev mode
observe.config.floatingObjectPresets.description=Floating Objects references
@@ -542,6 +541,8 @@ observe.config.speciesList.seine.observation.schoolEstimate=Species for school e
observe.config.speciesList.seine.observation.targetCatch=Species for target catches
observe.config.swingSessionFile.description=Swing session file.
observe.config.temperature.format=Default temperature format
+observe.config.temporaryDirectory.description=Default temporary directory used by application and clean at each launch.
+observe.config.temporaryFilesTimeout.description=Temporary files delete (in hours)
observe.config.ui.autoPopupNumberEditor=Flag sets to true when number editor show automaticly popup
observe.config.ui.blockStateColor=Color of block state
observe.config.ui.busyStateColor=Color of busy state
@@ -3519,7 +3520,7 @@ observeweb.devMode.description=Dev mode
observeweb.host.description=Application host
observeweb.httpTimeout.description=Http timeout in milli seconds
observeweb.log4jConfigurationFile.description=Path to log configuration file
-observeweb.sessionExpirationDelay.description=Session expiration deplay (in minutes)
+observeweb.sessionExpirationDelay.description=Session expiration delay (in minutes)
observeweb.sessionMaximumSize.description=Session maximum size
observeweb.temporaryDirectory.description=Path to temporary directory
observeweb.usersConfigurationFile.description=Path to users configuration file
=====================================
observe-i18n/src/main/i18n/translations/observe_es_ES.properties
=====================================
@@ -482,7 +482,6 @@ observe.config.defaultLocalDbDirectory.description=Directorio de almacenamiento
observe.config.defaultMapDirectory.description=El directorio donde se ubican los mapas.
observe.config.defaultReportDirectory.description=Directorio por defecto de los informes de la aplicación
observe.config.defaultResourcesDirectory.description=Directorio de almacenamiento de los recursos de usuario como las traducciones o la consultas de informes
-observe.config.defaultTmpDirectory.description=Directorio temporal por defecto
observe.config.defaultValidationReportDirectory.description=Directorio por defecto de almacenamiento de los informes de validación
observe.config.devMode=Modo desarrollador
observe.config.floatingObjectPresets.description=Objetos flotantes de referencia
@@ -542,6 +541,8 @@ observe.config.speciesList.seine.observation.schoolEstimate=Especies para las es
observe.config.speciesList.seine.observation.targetCatch=Especies par las capturas objetivo
observe.config.swingSessionFile.description=Copia de seguridad del estado del UI.
observe.config.temperature.format=Unidad de temperatura
+observe.config.temporaryDirectory.description=Directorio temporal por defecto
+observe.config.temporaryFilesTimeout.description=Temporary files delete (in hours) \#TODO
observe.config.ui.autoPopupNumberEditor=Para mostrar automáticamente el editor numérico durante la edición de un número
observe.config.ui.blockStateColor=Color of block state \#TODO
observe.config.ui.busyStateColor=Color of busy state \#TODO
=====================================
observe-i18n/src/main/i18n/translations/observe_fr_FR.properties
=====================================
@@ -482,7 +482,6 @@ observe.config.defaultLocalDbDirectory.description=Le répertoire où est stock
observe.config.defaultMapDirectory.description=Le répertoire où sont stockées les cartes.
observe.config.defaultReportDirectory.description=Répertoire par défaut des rapports de l'application
observe.config.defaultResourcesDirectory.description=Le répertoire où sont stockées les ressources de l'utilisateur comme les traductions ou les requêtes de rapports.
-observe.config.defaultTmpDirectory.description=Le répertoire temporaire par défaut
observe.config.defaultValidationReportDirectory.description=Le répertoire par défaut où sont stockés les rapports de validation
observe.config.devMode=Mode développeur
observe.config.floatingObjectPresets.description=Objets flottants de référence
@@ -542,6 +541,8 @@ observe.config.speciesList.seine.observation.schoolEstimate=Espèces pour les es
observe.config.speciesList.seine.observation.targetCatch=Espèces pour les captures cible
observe.config.swingSessionFile.description=Fichier de sauvegarde des états des UI.
observe.config.temperature.format=Unité de température
+observe.config.temporaryDirectory.description=Le répertoire temporaire par défaut
+observe.config.temporaryFilesTimeout.description=Nettoyage des fichiers temporaires (en heures)
observe.config.ui.autoPopupNumberEditor=Pour afficher automatiquement l'éditeur numérique lors de l'édition d'un nombre
observe.config.ui.blockStateColor=Couleur lorsque l'on bloque une partie de l'application
observe.config.ui.busyStateColor=Couleur lorsque l'application est occupée
=====================================
persistence/src/main/java/fr/ird/observe/entities/AbstractObserveTopiaDao.java deleted
=====================================
@@ -1,76 +0,0 @@
-package fr.ird.observe.entities;
-
-/*
- * #%L
- * ObServe :: Persistence
- * %%
- * Copyright (C) 2008 - 2020 IRD, Code Lutin, Ultreia.io
- * %%
- * 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 org.nuiton.topia.persistence.internal.AbstractTopiaDao;
-import org.nuiton.topia.persistence.support.TopiaSqlQuery;
-
-import java.sql.Connection;
-import java.sql.PreparedStatement;
-import java.sql.ResultSet;
-import java.sql.SQLException;
-import java.sql.Timestamp;
-import java.util.Date;
-import java.util.List;
-import java.util.Map;
-
-public abstract class AbstractObserveTopiaDao<E extends Entity> extends AbstractTopiaDao<E> {
-
- private final GetLastUpdateDateSqlQuery getLastUpdateDateSqlQuery;
-
- protected AbstractObserveTopiaDao() {
- String schemaName = getTopiaEntityEnum().dbSchemaName();
- String tableName = getTopiaEntityEnum().dbTableName();
- getLastUpdateDateSqlQuery = new GetLastUpdateDateSqlQuery(schemaName, tableName);
- }
-
- public Date getLastUpdateDate() {
- return topiaSqlSupport.findSingleResult(getLastUpdateDateSqlQuery);
- }
-
- public <O> List<O> findAllFromHql(String hql, Map<String, Object> hqlParameters) {
- return findAll(hql, hqlParameters);
- }
-
- private static class GetLastUpdateDateSqlQuery extends TopiaSqlQuery<Timestamp> {
-
- protected final String sql;
-
- private GetLastUpdateDateSqlQuery(String schemaName, String tableName) {
- this.sql = "SELECT max(" + Entity.PROPERTY_LAST_UPDATE_DATE + ") FROM " + schemaName + "." + tableName;
- }
-
- @Override
- public PreparedStatement prepareQuery(Connection connection) throws SQLException {
- return connection.prepareStatement(sql);
- }
-
- @Override
- public Timestamp prepareResult(ResultSet set) throws SQLException {
- return set.getTimestamp(1);
- }
-
- }
-
-
-}
=====================================
persistence/src/main/java/fr/ird/observe/entities/ObserveTopiaConfiguration.java deleted
=====================================
@@ -1,84 +0,0 @@
-package fr.ird.observe.entities;
-
-/*
- * #%L
- * ObServe :: Persistence
- * %%
- * Copyright (C) 2008 - 2020 IRD, Code Lutin, Ultreia.io
- * %%
- * 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 org.nuiton.topia.persistence.BeanTopiaConfiguration;
-import org.nuiton.topia.persistence.HibernateAvailableSettings;
-import org.nuiton.topia.persistence.jdbc.JdbcConfiguration;
-
-import java.io.IOException;
-import java.io.InputStream;
-import java.util.Map;
-import java.util.Properties;
-import java.util.TreeMap;
-
-/**
- * Created on 23/08/15.
- *
- * @author Tony Chemit - dev(a)tchemit.fr
- */
-public class ObserveTopiaConfiguration extends BeanTopiaConfiguration {
-
- private static final long serialVersionUID = 1L;
-
- private final boolean h2Configuration;
- protected final boolean showSql;
- private static final Map<String, String> HIBERNATE_GLOBAL_PROPERTIES;
-
- static {
-
- Properties p = new Properties();
- try (InputStream stream = ObserveTopiaPersistenceContext.class.getResourceAsStream("/hibernate.properties")) {
- try {
- p.load(stream);
- } catch (IOException e) {
- throw new IllegalStateException(e);
- }
- } catch (IOException e) {
- throw new IllegalStateException(e);
- }
- HIBERNATE_GLOBAL_PROPERTIES = new TreeMap<>();
- for (String s : p.stringPropertyNames()) {
- HIBERNATE_GLOBAL_PROPERTIES.put(s, p.getProperty(s));
- }
-
- }
-
- public ObserveTopiaConfiguration(JdbcConfiguration jdbcConfiguration, boolean h2Configuration, boolean showSql) {
- super(jdbcConfiguration);
- this.h2Configuration = h2Configuration;
- this.showSql = showSql;
- if (showSql) {
- hibernateExtraConfiguration.put(HibernateAvailableSettings.SHOW_SQL, Boolean.TRUE.toString());
- }
- hibernateExtraConfiguration.putAll(HIBERNATE_GLOBAL_PROPERTIES);
- }
-
- public boolean isH2Configuration() {
- return h2Configuration;
- }
-
- public boolean isShowSql() {
- return showSql;
- }
-}
=====================================
persistence/src/main/java/fr/ird/observe/entities/ObserveTopiaConfigurationFactory.java deleted
=====================================
@@ -1,143 +0,0 @@
-package fr.ird.observe.entities;
-
-/*
- * #%L
- * ObServe :: Persistence
- * %%
- * Copyright (C) 2008 - 2020 IRD, Code Lutin, Ultreia.io
- * %%
- * 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 org.apache.logging.log4j.Logger;
-import org.apache.logging.log4j.LogManager;
-import org.nuiton.topia.persistence.jdbc.JdbcConfiguration;
-import org.nuiton.topia.persistence.jdbc.JdbcConfigurationBuilder;
-import org.nuiton.topia.service.migration.TopiaMigrationService;
-import org.nuiton.topia.service.script.TopiaSqlScriptGeneratorServiceImpl;
-
-import java.io.File;
-
-/**
- * Created on 23/08/15.
- *
- * @author Tony Chemit - dev(a)tchemit.fr
- */
-public class ObserveTopiaConfigurationFactory {
-
- /** l'url d'acces a la base locale */
- private static final String H2_LOCAL_URL =
- "jdbc:h2:file:%s;" +
- // on peut aussi utiliser file, socket
- "FILE_LOCK=file;" +
- //1 or 2 is needed to restore avec crash
- // 0: logging is disabled (faster),
- // 1: logging of the data is enabled, but logging of the index
- // changes is disabled (default), 2: logging of both data and index
- // changes are enabled
- "LOG=0;" +
- // on peut aussi utiliser hsqldb, mysql ou postgresql
- "MODE=postgresql;" +
- //"MODE=hsqldb;" +
- // Sets the default lock timeout (in milliseconds) in this
- // database that is used for the new sessions.
- "DEFAULT_LOCK_TIMEOUT=100;" +
- // -1: the database is never closed until the close delay is set to
- // some other rev or SHUTDOWN is called., 0: no delay (default; the
- // database is closed if the last connection to it is closed)., n:
- // the database is left open for n second after the last connection
- // is closed.
- "DB_CLOSE_DELAY=0;" +
- // 0: no locking (should only be used for testing),
- // 1: table level locking (default),
- // 2: table level locking with garbage collection (if the
- // application does not close all connections).
- // LOCK_MODE 3 (READ_COMMITTED). Table level locking, but only when
- // writing (no read locks).
- "LOCK_MODE=3;" +
- // Levels: 0=off, 1=error, 2=info, 3=debug.
- "TRACE_LEVEL_FILE=0;" +
- // on system.out: 0=off, 1=error, 2=info, 3=debug.
- "TRACE_LEVEL_SYSTEM_OUT=0;" +
- // maximumn cache to improve performance...
- "CACHE_SIZE=65536;" +
- // avoid timeout on reading tables (see http://stackoverflow.com/questions/4162557/timeout-error-trying-to-lock-tab…)
- "MVCC=true";
-
- private static final JdbcConfigurationBuilder JDBC_CONFIGURATION_BUILDER = new JdbcConfigurationBuilder();
- private static final Logger log = LogManager.getLogger(ObserveTopiaConfigurationFactory.class);
-
- public static ObserveTopiaConfiguration forPostgresqlDatabase(String jdbcUrl,
- String username,
- String password,
- boolean initSchema,
- boolean traceSql) {
-
- JdbcConfiguration jdbcConfiguration = JDBC_CONFIGURATION_BUILDER.forPostgresqlDatabase(jdbcUrl, username, password);
-
- ObserveTopiaConfiguration topiaConfiguration = createTopiaConfiguration(jdbcConfiguration,
- initSchema,
- false,
- traceSql);
-
- log.debug("PG topia configuration: " + topiaConfiguration);
- return topiaConfiguration;
-
- }
-
- public static ObserveTopiaConfiguration forH2Database(File dbDirectory,
- String dbName,
- String username,
- String password,
- boolean initSchema,
- boolean traceSql) {
-
- String dbPath = new File(dbDirectory, dbName).getPath();
- String jdbcUrl = String.format(H2_LOCAL_URL, dbPath);
-
- JdbcConfiguration jdbcConfiguration = JDBC_CONFIGURATION_BUILDER.forH2Database(jdbcUrl, username, password);
-
- ObserveTopiaConfiguration topiaConfiguration = createTopiaConfiguration(jdbcConfiguration,
- initSchema,
- true,
- traceSql);
-
- log.debug("H2 topia configuration: " + topiaConfiguration);
- return topiaConfiguration;
-
- }
-
- private static ObserveTopiaConfiguration createTopiaConfiguration(JdbcConfiguration jdbcConfiguration,
- boolean initSchema,
- boolean h2Configuration,
- boolean traceSql) {
-
- ObserveTopiaConfiguration topiaConfiguration = new ObserveTopiaConfiguration(jdbcConfiguration, h2Configuration, traceSql);
- topiaConfiguration.setTopiaIdFactoryClass(ObserveTopiaIdFactory.class);
- topiaConfiguration.setInitSchema(initSchema);
- topiaConfiguration.setValidateSchema(false);
- topiaConfiguration.setUseHikariForJdbcConnectionPooling(true);
-
- log.debug("jdbcUrl: " + topiaConfiguration.getJdbcConnectionUrl());
-
- topiaConfiguration.addDeclaredService(ObserveTopiaApplicationContext.MIGRATION_SERVICE_NAME, TopiaMigrationService.class);
- topiaConfiguration.addDeclaredService(ObserveTopiaApplicationContext.SQL_SCRIPT_GENERATOR_BATCH_SERVICE_NAME, TopiaSqlScriptGeneratorServiceImpl.class);
-
- return topiaConfiguration;
-
- }
-
-}
=====================================
persistence/src/test/java/fr/ird/observe/persistence/ObserveTopiaApplicationContextTest.java → persistence/src/test/java/fr/ird/observe/entities/ObserveTopiaApplicationContextTest.java
=====================================
@@ -1,4 +1,4 @@
-package fr.ird.observe.persistence;
+package fr.ird.observe.entities;
/*-
* #%L
@@ -22,9 +22,6 @@ package fr.ird.observe.persistence;
* #L%
*/
-import fr.ird.observe.entities.ObserveTopiaApplicationContext;
-import fr.ird.observe.entities.ObserveTopiaConfiguration;
-import fr.ird.observe.entities.ObserveTopiaConfigurationFactory;
import fr.ird.observe.test.TestHelper;
import fr.ird.observe.test.TestSupportWithConfig;
import org.junit.Assert;
@@ -46,7 +43,7 @@ public class ObserveTopiaApplicationContextTest extends TestSupportWithConfig {
File testBasedir = TestHelper.getTestBasedir(getClass());
- ObserveTopiaConfiguration observeTopiaConfiguration = ObserveTopiaConfigurationFactory.forH2Database(testBasedir, "testReplicateModel", "sa", "sa", true, false);
+ ObserveTopiaConfiguration observeTopiaConfiguration = ObserveTopiaConfigurationFactory.forH2Database(testBasedir, "testReplicateModel", "sa", "sa", testBasedir.toPath().resolve("temporary"), true, false);
try (ObserveTopiaApplicationContext applicationContext = new ObserveTopiaApplicationContext(observeTopiaConfiguration)) {
TopiaSqlTables tripLonglineTables = applicationContext.getTripLonglineTables();
Assert.assertNotNull(tripLonglineTables);
=====================================
pom.xml
=====================================
@@ -24,7 +24,7 @@
<parent>
<groupId>io.ultreia.maven</groupId>
<artifactId>pom</artifactId>
- <version>2020.15</version>
+ <version>2020.17</version>
</parent>
<groupId>fr.ird.observe</groupId>
@@ -162,7 +162,7 @@
<maven.build.timestamp.format>dd/MM/yyyy HH:mm z</maven.build.timestamp.format>
<buildDate>${maven.build.timestamp}</buildDate>
- <lib.version.toolkit>4.27</lib.version.toolkit>
+ <lib.version.toolkit>4.28</lib.version.toolkit>
<lib.version.nuiton.validation>3.1</lib.version.nuiton.validation>
<!--can't use 1.4.197 (date has changed + blob also)-->
<lib.version.h2>1.4.196</lib.version.h2>
@@ -176,7 +176,7 @@
<!--<lib.version.java4all.i18n>4.0-beta-3-SNAPSHOT</lib.version.java4all.i18n>-->
<!--<lib.version.java4all.config>1.0.8-SNAPSHOT</lib.version.java4all.config>-->
<!--<lib.version.nuiton.topia>3.4.2-SNAPSHOT</lib.version.nuiton.topia>-->
- <!--<lib.version.java4all.topia>1.14</lib.version.java4all.topia>-->
+<!-- <lib.version.java4all.topia>1.19-SNAPSHOT</lib.version.java4all.topia>-->
<!--<lib.version.java4all.http>1.0.17-SNAPSHOT</lib.version.java4all.http>-->
<!-- license header configuration -->
=====================================
server-configuration/pom.xml
=====================================
@@ -48,7 +48,11 @@
<version>${project.version}</version>
<scope>provided</scope>
</dependency>
-
+ <dependency>
+ <groupId>${project.groupId}</groupId>
+ <artifactId>services</artifactId>
+ <version>${project.version}</version>
+ </dependency>
<dependency>
<groupId>io.ultreia.java4all</groupId>
<artifactId>application-context</artifactId>
=====================================
server-configuration/src/main/config/Server.ini
=====================================
@@ -103,3 +103,9 @@ key = observeweb.httpTimeout
type = int
defaultValue = 30000
+[option temporaryFilesTimeout]
+description = observe.config.temporaryFilesTimeout.description
+key = observeweb.temporaryFilesTimeout
+type = int
+defaultValue = 120
+
=====================================
server-configuration/src/main/i18n/getters/config.getter
=====================================
@@ -1,4 +1,5 @@
ObserveWebApplicationConfig.description
+observe.config.temporaryFilesTimeout.description
observe.model.version
observeweb.adminApiKey.description
observeweb.baseDirectory.description
=====================================
server-configuration/src/main/java/fr/ird/observe/server/configuration/ServerConfig.java
=====================================
@@ -24,6 +24,7 @@ package fr.ird.observe.server.configuration;
import fr.ird.observe.dto.ObserveUtil;
import fr.ird.observe.dto.decoration.ReferentialLocaleConfig;
+import fr.ird.observe.services.service.CleanTemporaryFilesTaskConfiguration;
import io.ultreia.java4all.application.context.spi.GenerateApplicationComponent;
import io.ultreia.java4all.application.template.TemplateGeneratorConfig;
import io.ultreia.java4all.config.ApplicationConfig;
@@ -46,8 +47,8 @@ import java.nio.file.Paths;
* @author Tony Chemit - dev(a)tchemit.fr
*/
@GenerateApplicationComponent(name = "ObServe Web configuration",
- hints = {TemplateGeneratorConfig.class, ReferentialLocaleConfig.class})
-public class ServerConfig extends GeneratedServerConfig {
+ hints = {TemplateGeneratorConfig.class, ReferentialLocaleConfig.class, CleanTemporaryFilesTaskConfiguration.class})
+public class ServerConfig extends GeneratedServerConfig implements CleanTemporaryFilesTaskConfiguration {
private static Logger log = LogManager.getLogger(ServerConfig.class);
=====================================
server-core/src/main/java/fr/ird/observe/server/ObserveWebApplicationContext.java
=====================================
@@ -43,6 +43,7 @@ import fr.ird.observe.server.configuration.user.ObserveWebUsersHelperApplication
import fr.ird.observe.server.configuration.user.impl.ObserveWebUsersImmutable;
import fr.ird.observe.server.security.ObserveWebSecurityApplicationContext;
import fr.ird.observe.server.security.ObserveWebSecurityApplicationContextApplicationComponent;
+import fr.ird.observe.services.service.CleanTemporaryFilesTask;
import fr.ird.observe.services.ObserveServiceFactory;
import fr.ird.observe.services.ObserveServiceInitializer;
import fr.ird.observe.services.ObserveServiceMainFactoryApplicationComponent;
@@ -51,11 +52,14 @@ import fr.ird.observe.services.service.ObserveService;
import fr.ird.observe.services.service.actions.consolidate.dcp.FloatingObjectModification;
import io.ultreia.java4all.application.context.ApplicationComponent;
import io.ultreia.java4all.application.context.ApplicationContext;
+import org.apache.logging.log4j.LogManager;
+import org.apache.logging.log4j.Logger;
import org.debux.webmotion.server.call.HttpContext;
import org.nuiton.version.Version;
import javax.servlet.ServletContext;
import java.util.Map;
+import java.util.Timer;
/**
* @author Tony Chemit - dev(a)tchemit.fr
@@ -67,6 +71,8 @@ public class ObserveWebApplicationContext extends ApplicationContext {
private static final String MISSING_APPLICATION_CONTEXT =
String.format("%s not found. You probably forgot to register %s in your web.xml", ObserveWebApplicationContext.class.getSimpleName(), ObserveWebApplicationListener.class.getName());
+ private static final Logger log = LogManager.getLogger(ObserveWebApplicationContext.class);
+
private ObserveDtoGsonSupplier gsonSupplier;
private ServerConfig applicationConfiguration;
private ObserveServiceFactory mainServiceFactory;
@@ -75,6 +81,7 @@ public class ObserveWebApplicationContext extends ApplicationContext {
private ObserveWebSecurityApplicationContext securityApplicationContext;
private static ServerConfig applicationConfiguration1;
+ private Timer deleteTemporaryFilesTimer;
static ObserveWebApplicationContext getApplicationContext(HttpContext context) {
@@ -153,18 +160,26 @@ public class ObserveWebApplicationContext extends ApplicationContext {
}
};
}
+ if (deleteTemporaryFilesTimer != null) {
+ closeDeleteTemporaryFilesTimer();
+ }
+ deleteTemporaryFilesTimer = CleanTemporaryFilesTask.create(getApplicationConfiguration());
+ }
+
+ @Override
+ public void close() {
+
+ closeDeleteTemporaryFilesTimer();
+ super.close();
}
-// @Override
-// public void close() {
-//
-// // Supprimer le cache des sessions
-// securityApplicationContext.close();
-//
-// // Fermer l'usine de services
-// mainServiceFactory.close();
-//
-// }
+ void closeDeleteTemporaryFilesTimer() {
+ try {
+ deleteTemporaryFilesTimer.cancel();
+ } catch (Exception e) {
+ log.error("Could not terminates delete temporary files timer...", e);
+ }
+ }
public ObserveDtoGsonSupplier getGsonSupplier() {
return gsonSupplier;
=====================================
services-local/src/main/java/fr/ird/observe/services/local/ObserveSecurityHelper.java
=====================================
@@ -27,13 +27,13 @@ import fr.ird.observe.dto.ObserveDbRole;
import fr.ird.observe.dto.db.ObserveDbUserDto;
import fr.ird.observe.entities.Entities;
import fr.ird.observe.entities.ObserveTopiaApplicationContext;
+import fr.ird.observe.entities.ObserveTopiaConfiguration;
import org.apache.commons.lang3.tuple.Pair;
import org.apache.logging.log4j.LogManager;
import org.apache.logging.log4j.Logger;
import org.nuiton.topia.migration.mappings.TMSVersionHibernateDao;
import org.nuiton.topia.persistence.TopiaEntityEnum;
import org.nuiton.topia.persistence.TopiaException;
-import org.nuiton.topia.persistence.jdbc.JdbcConfiguration;
import org.nuiton.topia.persistence.jdbc.JdbcPostgresHelper;
import org.nuiton.topia.persistence.script.SqlScriptConsumer;
import org.nuiton.topia.persistence.script.SqlScriptWriter;
@@ -81,10 +81,12 @@ public class ObserveSecurityHelper {
private static final String SCHEMA_PUBLIC = "public";
private static final Logger log = LogManager.getLogger(ObserveSecurityHelper.class);
private final JdbcPostgresHelper jdbcHelper;
+ private final Path temporaryDirectory;
- public ObserveSecurityHelper(JdbcConfiguration jdbcConfiguration) {
+ public ObserveSecurityHelper(ObserveTopiaConfiguration jdbcConfiguration) {
this.jdbcHelper = new JdbcPostgresHelper(jdbcConfiguration);
+ this.temporaryDirectory = jdbcConfiguration.getTemporaryDirectory();
}
public void applySecurity(Set<ObserveDbUserDto> users) {
@@ -93,7 +95,7 @@ public class ObserveSecurityHelper {
}
Path scriptPath;
try {
- scriptPath = Files.createTempFile("topia-sql-script-", ".sql");
+ scriptPath = Files.createTempFile(temporaryDirectory, "topia-sql-script-", ".sql");
} catch (IOException e) {
throw new IllegalStateException("Can't create temporary path", e);
}
=====================================
services-local/src/main/java/fr/ird/observe/services/local/ObserveTopiaApplicationContextFactory.java
=====================================
@@ -150,6 +150,7 @@ public class ObserveTopiaApplicationContextFactory {
configuration.getJdbcUrl(),
configuration.getUsername(),
String.valueOf(configuration.getPassword()),
+ configuration.getTemporaryDirectory(),
initSchema,
configuration.isTraceSql()
);
@@ -175,6 +176,7 @@ public class ObserveTopiaApplicationContextFactory {
configuration.getDbName(),
configuration.getUsername(),
String.valueOf(configuration.getPassword()),
+ configuration.getTemporaryDirectory(),
initSchema,
configuration.isTraceSql()
);
=====================================
services-local/src/main/java/fr/ird/observe/services/local/service/DataSourceServiceLocal.java
=====================================
@@ -69,6 +69,7 @@ import org.nuiton.version.Versions;
import java.io.File;
import java.io.IOException;
import java.nio.file.Files;
+import java.nio.file.Path;
import java.util.LinkedHashSet;
import java.util.Optional;
import java.util.Set;
@@ -108,6 +109,7 @@ public class DataSourceServiceLocal extends ObserveServiceLocal implements DataS
public ObserveDataSourceInformation checkCanConnectOrBeEmpty(ObserveDataSourceConfiguration dataSourceConfiguration) throws DatabaseNotFoundException, DatabaseConnexionNotAuthorizedException {
ObserveDataSourceConfigurationTopiaSupport dataSourceConfigurationTopiaSupport = (ObserveDataSourceConfigurationTopiaSupport) dataSourceConfiguration;
+ Path temporaryDirectory = serviceContext.getTemporaryDirectoryRoot().toPath();
ObserveDataSourceInformation dataSourceInformation;
if (dataSourceConfigurationTopiaSupport.isH2Database()) {
@@ -141,7 +143,7 @@ public class DataSourceServiceLocal extends ObserveServiceLocal implements DataS
h2DataSourceConfiguration.getDbName(),
h2DataSourceConfiguration.getUsername(),
new String(h2DataSourceConfiguration.getPassword()),
- false,
+ temporaryDirectory, false,
false);
@@ -165,7 +167,7 @@ public class DataSourceServiceLocal extends ObserveServiceLocal implements DataS
ObserveTopiaConfiguration topiaConfiguration = ObserveTopiaConfigurationFactory.forPostgresqlDatabase(pgDataSourceConfiguration.getJdbcUrl(),
pgDataSourceConfiguration.getUsername(),
new String(pgDataSourceConfiguration.getPassword()),
- false,
+ temporaryDirectory, false,
false);
try {
@@ -188,6 +190,7 @@ public class DataSourceServiceLocal extends ObserveServiceLocal implements DataS
@Override
public ObserveDataSourceInformation checkCanConnect(ObserveDataSourceConfiguration dataSourceConfiguration) throws DatabaseNotFoundException, DatabaseConnexionNotAuthorizedException {
+ Path temporaryDirectory = getTemporaryDirectory(dataSourceConfiguration);
ObserveDataSourceConfigurationTopiaSupport dataSourceConfigurationTopiaSupport = (ObserveDataSourceConfigurationTopiaSupport) dataSourceConfiguration;
ObserveDataSourceInformation dataSourceInformation;
@@ -223,6 +226,7 @@ public class DataSourceServiceLocal extends ObserveServiceLocal implements DataS
h2DataSourceConfiguration.getDbName(),
h2DataSourceConfiguration.getUsername(),
new String(h2DataSourceConfiguration.getPassword()),
+ temporaryDirectory,
false,
false);
@@ -247,6 +251,7 @@ public class DataSourceServiceLocal extends ObserveServiceLocal implements DataS
ObserveTopiaConfiguration topiaConfiguration = ObserveTopiaConfigurationFactory.forPostgresqlDatabase(pgDataSourceConfiguration.getJdbcUrl(),
pgDataSourceConfiguration.getUsername(),
new String(pgDataSourceConfiguration.getPassword()),
+ temporaryDirectory,
false,
false);
@@ -266,13 +271,22 @@ public class DataSourceServiceLocal extends ObserveServiceLocal implements DataS
}
+ Path getTemporaryDirectory(ObserveDataSourceConfiguration dataSourceConfiguration) {
+ Path temporaryDirectory = dataSourceConfiguration.getTemporaryDirectory();
+ if (temporaryDirectory == null) {
+ temporaryDirectory = serviceContext.getTemporaryDirectoryRoot().toPath();
+ dataSourceConfiguration.setTemporaryDirectory(temporaryDirectory);
+ }
+ return temporaryDirectory;
+ }
+
@Override
public ObserveDataSourceConnectionTopia create(ObserveDataSourceConfiguration dataSourceConfiguration, DataSourceCreateConfigurationDto dataSourceCreateConfiguration)
throws IncompatibleDataSourceCreateConfigurationException, DataSourceCreateWithNoReferentialImportException,
BabModelVersionException, DatabaseConnexionNotAuthorizedException, DatabaseNotFoundException {
dataSourceCreateConfiguration.validateConfiguration();
-
+ Path temporaryDirectory = getTemporaryDirectory(dataSourceConfiguration);
boolean initSchema = !dataSourceCreateConfiguration.isImportDatabase();
ObserveTopiaApplicationContext topiaApplicationContext = ObserveTopiaApplicationContextFactory.createTopiaApplicationContext((ObserveDataSourceConfigurationTopiaSupport) dataSourceConfiguration, initSchema);
@@ -291,10 +305,9 @@ public class DataSourceServiceLocal extends ObserveServiceLocal implements DataS
} else { // base postgres
// on realise les import dans un base H2 temporaire
- // FIXME il faut obtenir le repertoit temporaire d'observe plutot que celui du système
File tmpDir;
try {
- tmpDir = Files.createTempDirectory("obstuna").toFile();
+ tmpDir = Files.createTempDirectory(temporaryDirectory, "obstuna").toFile();
} catch (IOException e) {
throw new IllegalStateException("could not create temporary directory ", e);
}
@@ -455,7 +468,8 @@ public class DataSourceServiceLocal extends ObserveServiceLocal implements DataS
@Override
public ObserveDataSourceConnectionTopia open(ObserveDataSourceConfiguration dataSourceConfiguration) throws DatabaseNotFoundException, DatabaseConnexionNotAuthorizedException, BabModelVersionException {
-
+ Path temporaryDirectory = getTemporaryDirectory(dataSourceConfiguration);
+ log.debug("Will use temporary directory: " + temporaryDirectory);
ObserveDataSourceInformation dataSourceInformation = checkCanConnect(dataSourceConfiguration);
Version dbVersion = dataSourceInformation.getVersion();
@@ -557,6 +571,9 @@ public class DataSourceServiceLocal extends ObserveServiceLocal implements DataS
@Override
public void applySecurity(ObserveDataSourceConfiguration dataSourceConfiguration, ImmutableSet<ObserveDbUserDto> users) {
+ Path temporaryDirectory = getTemporaryDirectory(dataSourceConfiguration);
+ log.debug("Will use temporary directory: " + temporaryDirectory);
+
// pas de securité pour les bases autres que postgresql
if (dataSourceConfiguration instanceof ObserveDataSourceConfigurationTopiaPG) {
@@ -575,6 +592,9 @@ public class DataSourceServiceLocal extends ObserveServiceLocal implements DataS
@Override
public void migrateData(ObserveDataSourceConfiguration dataSourceConfiguration) {
+ Path temporaryDirectory = getTemporaryDirectory(dataSourceConfiguration);
+ log.debug("Will use temporary directory: " + temporaryDirectory);
+
ObserveTopiaApplicationContext topiaApplicationContext = ObserveTopiaApplicationContextFactory.getOrCreateTopiaApplicationContext((ObserveDataSourceConfigurationTopiaSupport) dataSourceConfiguration);
topiaApplicationContext.getMigrationService().runSchemaMigration();
}
=====================================
services-local/src/test/java/fr/ird/observe/services/local/LocalTestClassResource.java
=====================================
@@ -90,7 +90,6 @@ public class LocalTestClassResource extends TestClassResourceSupport {
public ObserveDataSourceConfigurationTopiaH2 createDataSourceConfiguration(Version dbVersion, String dbName, File targetPath, String login, char[] password) throws DataSourceCreateWithNoReferentialImportException, IOException, IncompatibleDataSourceCreateConfigurationException, DatabaseNotFoundException, DatabaseConnexionNotAuthorizedException, BabModelVersionException {
ObserveDataSourceConfigurationTopiaH2 sharedDatabaseConfiguration = dataSourcesForTestManager.createSharedDataSourceConfigurationH2(dbVersion, dbName, login, password);
-
File sharedDatabaseFile = sharedDatabaseConfiguration.getDatabaseFile();
ObserveDataSourceConfigurationTopiaH2 dataSourceConfiguration;
@@ -101,6 +100,7 @@ public class LocalTestClassResource extends TestClassResourceSupport {
if (log.isInfoEnabled()) {
log.info("Create shared database: " + dbVersion.toString() + "/" + dbName + " to " + sharedDatabaseFile);
}
+ sharedDatabaseConfiguration.setTemporaryDirectory(getTemporaryDirectoryRoot());
try (DataSourceService dataSourceService = newService(sharedDatabaseConfiguration, DataSourceService.class)) {
DataSourceCreateConfigurationDto createConfiguration = new DataSourceCreateConfigurationDto();
@@ -135,12 +135,14 @@ public class LocalTestClassResource extends TestClassResourceSupport {
}
dataSourceConfiguration.setModelVersion(ObserveTestConfiguration.getModelVersion());
+ dataSourceConfiguration.setTemporaryDirectory(getTemporaryDirectoryRoot());
return dataSourceConfiguration;
}
public <S extends ObserveService> S newService(ObserveDataSourceConfiguration dataSourceConfiguration, Class<S> serviceType) {
+ dataSourceConfiguration.setTemporaryDirectory(getTemporaryDirectoryRoot());
ObserveServiceInitializer observeServiceInitializer = ObserveServiceInitializer.create(
Locale.FRANCE,
ReferentialLocale.FR,
=====================================
services/src/main/java/fr/ird/observe/services/service/CleanTemporaryFilesTask.java
=====================================
@@ -0,0 +1,120 @@
+package fr.ird.observe.services.service;
+
+/*-
+ * #%L
+ * ObServe :: Services API
+ * %%
+ * Copyright (C) 2008 - 2020 IRD, Code Lutin, Ultreia.io
+ * %%
+ * 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 io.ultreia.java4all.util.Dates;
+import org.apache.logging.log4j.LogManager;
+import org.apache.logging.log4j.Logger;
+
+import java.io.IOException;
+import java.nio.file.DirectoryStream;
+import java.nio.file.Files;
+import java.nio.file.Path;
+import java.util.Calendar;
+import java.util.Date;
+import java.util.Objects;
+import java.util.Timer;
+import java.util.TimerTask;
+import java.util.concurrent.TimeUnit;
+
+/**
+ * To clean temporaries files.
+ *
+ * @author Tony Chemit - dev(a)tchemit.fr
+ * @since 8.0
+ */
+
+public class CleanTemporaryFilesTask extends TimerTask {
+
+ private static final Logger log = LogManager.getLogger(CleanTemporaryFilesTask.class);
+
+ private final CleanTemporaryFilesTaskConfiguration configuration;
+
+ public static Timer create(CleanTemporaryFilesTaskConfiguration configuration) {
+ Timer result = new Timer("Delete temporary files daemon", true);
+ result.scheduleAtFixedRate(new CleanTemporaryFilesTask(configuration), new Date(), TimeUnit.HOURS.toMillis(1));
+ return result;
+ }
+
+ public CleanTemporaryFilesTask(CleanTemporaryFilesTaskConfiguration configuration) {
+ this.configuration = configuration;
+ }
+
+ @Override
+ public void run() {
+
+ Path temporaryDirectory = configuration.getTemporaryDirectory().toPath();
+ Calendar calendar = Calendar.getInstance();
+ calendar.setTime(new Date());
+ calendar.add(Calendar.HOUR_OF_DAY, -configuration.getTemporaryFilesTimeout());
+ Date deleteBefore = calendar.getTime();
+ long deleteBeforeTime = deleteBefore.getTime();
+
+ log.info(String.format("Delete temporary files in directory %s before %s", temporaryDirectory, deleteBefore));
+ delete(temporaryDirectory, deleteBeforeTime);
+ }
+
+ private boolean delete(Path path, long deleteBeforeTime) {
+ try {
+ Files.walk(path).forEach(p -> {
+ if (Objects.equals(path, p)) {
+ return;
+ }
+ if (Files.isDirectory(p)) {
+ boolean deleted = delete(p, deleteBeforeTime);
+ if (deleted) {
+ delete0(p, deleteBeforeTime);
+ }
+ }
+ if (Files.isRegularFile(p)) {
+ delete0(p, deleteBeforeTime);
+ }
+ });
+ if (Files.isRegularFile(path)) {
+ return Files.notExists(path);
+ }
+ if (Files.isDirectory(path)) {
+ return isDirEmpty(path);
+ }
+ return false;
+ } catch (IOException e) {
+ throw new RuntimeException(String.format("Could not walk through temporary directory: %s", path), e);
+ }
+ }
+
+ private static boolean isDirEmpty(final Path directory) throws IOException {
+ try(DirectoryStream<Path> dirStream = Files.newDirectoryStream(directory)) {
+ return !dirStream.iterator().hasNext();
+ }
+ }
+ private void delete0(Path p, long deleteBeforeTime) {
+ try {
+ if (Files.getLastModifiedTime(p).toMillis() < deleteBeforeTime) {
+ log.info("Delete temporary file: " + p);
+ Files.delete(p);
+ }
+ } catch (IOException e) {
+ log.error("Something wrong while process file: " + p, e);
+ }
+ }
+}
=====================================
persistence/src/main/java/fr/ird/observe/entities/ObserveTopiaIdFactory.java → services/src/main/java/fr/ird/observe/services/service/CleanTemporaryFilesTaskConfiguration.java
=====================================
@@ -1,8 +1,8 @@
-package fr.ird.observe.entities;
+package fr.ird.observe.services.service;
-/*
+/*-
* #%L
- * ObServe :: Persistence
+ * ObServe :: Services API
* %%
* Copyright (C) 2008 - 2020 IRD, Code Lutin, Ultreia.io
* %%
@@ -22,17 +22,19 @@ package fr.ird.observe.entities;
* #L%
*/
+import java.io.File;
+
/**
- * Created on 21/08/15.
- *
* @author Tony Chemit - dev(a)tchemit.fr
+ * @since 8.0
*/
-public class ObserveTopiaIdFactory extends ObserveTopiaIdFactorySupport {
+public interface CleanTemporaryFilesTaskConfiguration {
+
+ File getTemporaryDirectory();
- private static final long serialVersionUID = 1L;
+ void setTemporaryDirectory(File temporaryDirectory);
- public ObserveTopiaIdFactory() {
- super("fr.ird.observe.entities.");
- }
+ int getTemporaryFilesTimeout();
+ void setTemporaryFilesTimeout(int temporaryFilesTimeout);
}
View it on GitLab: https://gitlab.com/ultreiaio/ird-observe/-/commit/1364f2fed1b5d6ed6bb325160…
--
View it on GitLab: https://gitlab.com/ultreiaio/ird-observe/-/commit/1364f2fed1b5d6ed6bb325160…
You're receiving this email because of your account on gitlab.com.
1
0
[Git][ultreiaio/ird-observe][develop] [V8] Problèmes d'affichage de formulaires - Closes #1420
by Tony CHEMIT 11 Apr '20
by Tony CHEMIT 11 Apr '20
11 Apr '20
Tony CHEMIT pushed to branch develop at ultreiaio / ird-observe
Commits:
f8948144 by tchemit at 2020-04-11T10:08:44+02:00
[V8] Problèmes d'affichage de formulaires - Closes #1420
- - - - -
15 changed files:
- client-core/src/main/java/fr/ird/observe/client/main/ObserveMainUI.jaxx
- client-datasource-editor-ll/src/main/i18n/getters/jaxx.getter
- client-datasource-editor-ll/src/main/java/fr/ird/observe/client/datasource/editor/content/data/ll/common/TripUI.jaxx
- client-datasource-editor-ll/src/main/java/fr/ird/observe/client/datasource/editor/content/data/ll/landing/LandingUI.jaxx
- client-datasource-editor-ll/src/main/java/fr/ird/observe/client/datasource/editor/content/data/ll/landing/LandingUI.jcss
- client-datasource-editor-ll/src/main/java/fr/ird/observe/client/datasource/editor/content/data/ll/logbook/ActivitySampleUI.jcss
- client-datasource-editor-ll/src/main/java/fr/ird/observe/client/datasource/editor/content/data/ll/logbook/SetGlobalCompositionUI.jaxx
- client-datasource-editor-ll/src/main/java/fr/ird/observe/client/datasource/editor/content/data/ll/logbook/SetUI.jaxx
- client-datasource-editor-ll/src/main/java/fr/ird/observe/client/datasource/editor/content/data/ll/logbook/TripSampleUI.jaxx
- client-datasource-editor-ll/src/main/java/fr/ird/observe/client/datasource/editor/content/data/ll/logbook/TripSampleUI.jcss
- client-datasource-editor-ll/src/main/java/fr/ird/observe/client/datasource/editor/content/data/ll/observation/ActivityUI.jaxx
- client-datasource-editor-ll/src/main/java/fr/ird/observe/client/datasource/editor/content/data/ll/observation/BranchlineUI.jaxx
- client-datasource-editor-ll/src/main/java/fr/ird/observe/client/datasource/editor/content/data/ll/observation/SetGlobalCompositionUI.jaxx
- client-datasource-editor-ll/src/main/java/fr/ird/observe/client/datasource/editor/content/data/ll/observation/SetUI.jaxx
- client-datasource-editor-ll/src/main/java/fr/ird/observe/client/datasource/editor/content/data/ll/observation/TdrUI.jaxx
Changes:
=====================================
client-core/src/main/java/fr/ird/observe/client/main/ObserveMainUI.jaxx
=====================================
@@ -18,7 +18,7 @@
#L%
-->
-<JFrame id='mainFrame' preferredSize="{new Dimension(1280,1024)}" onWindowClosing='CloseApplicationAction.run(this, CloseApplicationAction.class)'>
+<JFrame id='mainFrame' preferredSize="{new Dimension(1680, 1050)}" minimumSize="{new Dimension(1366, 768)}" onWindowClosing='CloseApplicationAction.run(this, CloseApplicationAction.class)'>
<import>
fr.ird.observe.client.util.JMenuWithAccelerator
=====================================
client-datasource-editor-ll/src/main/i18n/getters/jaxx.getter
=====================================
@@ -81,7 +81,6 @@ observe.data.ll.landing.TripLonglineLanding.action.goToSelected.tip
observe.data.ll.landing.TripLonglineLanding.action.reopen.tip
observe.data.ll.landing.TripLonglineLanding.action.reopenSelected
observe.data.ll.landing.TripLonglineLanding.action.reopenSelected.tip
-observe.data.ll.landing.TripLonglineLanding.comment
observe.data.ll.landing.TripLonglineLanding.list
observe.data.ll.landing.TripLonglineLanding.list.message.none
observe.data.ll.landing.TripLonglineLanding.titles
@@ -218,7 +217,6 @@ observe.data.ll.logbook.TripSampleList.action.goToSelected.tip
observe.data.ll.logbook.TripSampleList.action.reopen.tip
observe.data.ll.logbook.TripSampleList.action.reopenSelected
observe.data.ll.logbook.TripSampleList.action.reopenSelected.tip
-observe.data.ll.logbook.TripSampleList.comment
observe.data.ll.logbook.TripSampleList.list
observe.data.ll.logbook.TripSampleList.list.message.none
observe.data.ll.logbook.TripSampleList.titles
=====================================
client-datasource-editor-ll/src/main/java/fr/ird/observe/client/datasource/editor/content/data/ll/common/TripUI.jaxx
=====================================
@@ -237,6 +237,7 @@
</JPanel>
</tab>
<tab id='observationsTab' i18nProperty="">
+ <JScrollPane id="observationsTabScrollPane">
<Table fill="both">
<!-- observationMethod -->
@@ -286,9 +287,11 @@
</cell>
</row>
</Table>
+ </JScrollPane>
</tab>
<tab id='logbookTab' i18nProperty="">
+ <JScrollPane id="logbookTabScrollPane">
<Table fill="both">
<!-- logbookDataEntryOperator -->
@@ -318,6 +321,7 @@
</cell>
</row>
</Table>
+ </JScrollPane>
</tab>
<tab id="mapTab" i18nProperty="">
<TripMapUI id="tripMap"/>
=====================================
client-datasource-editor-ll/src/main/java/fr/ird/observe/client/datasource/editor/content/data/ll/landing/LandingUI.jaxx
=====================================
@@ -70,9 +70,8 @@
<JTabbedPane id='mainTabbedPane'>
<tab id='caracteristicsTab' i18nProperty="">
-
- <JPanel layout='{new BorderLayout()}'>
- <Table fill='both' constraints='BorderLayout.NORTH' insets="0">
+ <JScrollPane id="caracteristicsTabScrollPane">
+ <Table fill='both' insets="0">
<!-- dataSource -->
<row>
@@ -152,7 +151,7 @@
</cell>
</row>
</Table>
- </JPanel>
+ </JScrollPane>
</tab>
<tab id='landingPartTab' i18nProperty="">
=====================================
client-datasource-editor-ll/src/main/java/fr/ird/observe/client/datasource/editor/content/data/ll/landing/LandingUI.jcss
=====================================
@@ -44,10 +44,6 @@
_tab:{"landingPartTab"};
}
-#comment {
- title:"observe.data.ll.landing.TripLonglineLanding.comment";
-}
-
#open {
_toolTipText:{t("observe.data.ll.landing.TripLonglineLanding.action.reopen.tip")};
}
=====================================
client-datasource-editor-ll/src/main/java/fr/ird/observe/client/datasource/editor/content/data/ll/logbook/ActivitySampleUI.jcss
=====================================
@@ -29,10 +29,6 @@
visible:{!model.isReadingMode()};
}
-#comment {
- title:"observe.data.ll.logbook.TripSampleList.comment";
-}
-
#move {
enabled:{model.isUpdatingMode() && !model.isModified()};
}
=====================================
client-datasource-editor-ll/src/main/java/fr/ird/observe/client/datasource/editor/content/data/ll/logbook/SetGlobalCompositionUI.jaxx
=====================================
@@ -104,7 +104,7 @@
<!-- mitigationType -->
<JPanel layout='{new BorderLayout()}'>
- <Table fill='both' constraints='BorderLayout.NORTH'>
+ <Table fill='both' constraints='BorderLayout.CENTER'>
<row>
<cell weighty="1" weightx="1">
<FilterableDoubleList id='mitigationType' genericType='MitigationTypeReference'/>
=====================================
client-datasource-editor-ll/src/main/java/fr/ird/observe/client/datasource/editor/content/data/ll/logbook/SetUI.jaxx
=====================================
@@ -84,10 +84,11 @@
<Table insets="0" fill="both" constraints='BorderLayout.CENTER'>
<row>
- <cell anchor="north">
+ <cell anchor="north" weighty="1">
<JTabbedPane id='mainTabbedPane'>
<tab id='settingTab' i18nProperty="">
- <JPanel layout='{new BorderLayout()}'>
+ <JScrollPane id="settingTabScrollPane">
+ <JPanel layout='{new BorderLayout()}'>
<Table fill='both' constraints='BorderLayout.NORTH'>
<!-- homeId -->
@@ -151,11 +152,12 @@
</cell>
</row>
</Table>
- </JPanel>
-
+ </JPanel>
+ </JScrollPane>
</tab>
<tab id='settingCaracteristicsTab' i18nProperty="">
+ <JScrollPane id="settingCaracteristicsTabScrollPane">
<Table fill='both'>
<!-- setting vessel speed -->
@@ -310,10 +312,12 @@
</cell>
</row>
</Table>
+ </JScrollPane>
</tab>
<tab id='lightsticksTab' i18nProperty="">
- <JPanel layout='{new BorderLayout()}'>
+ <JScrollPane id="lightsticksTabScrollPane">
+ <JPanel layout='{new BorderLayout()}'>
<Table fill='both' constraints='BorderLayout.NORTH'>
<!-- lightsticksUsed -->
<row>
@@ -349,12 +353,13 @@
</cell>
</row>
</Table>
- </JPanel>
+ </JPanel>
+ </JScrollPane>
</tab>
<tab id='haulingTab' i18nProperty="">
-
- <JPanel layout='{new BorderLayout()}'>
+ <JScrollPane id="haulingTabScrollPane">
+ <JPanel layout='{new BorderLayout()}'>
<Table fill='both' constraints='BorderLayout.NORTH'>
<!-- hauling same direction as setting -->
@@ -405,14 +410,15 @@
</cell>
</row>
</Table>
- </JPanel>
+ </JPanel>
+ </JScrollPane>
</tab>
</JTabbedPane>
</cell>
</row>
<row>
- <cell fill="both" weighty="1" weightx="1">
+ <cell fill="both" weightx="1">
<BigTextEditor id="comment"/>
</cell>
</row>
=====================================
client-datasource-editor-ll/src/main/java/fr/ird/observe/client/datasource/editor/content/data/ll/logbook/TripSampleUI.jaxx
=====================================
@@ -70,9 +70,8 @@
<JTabbedPane id='mainTabbedPane'>
<tab id='caracteristicsTab' i18nProperty="">
-
- <JPanel layout='{new BorderLayout()}'>
- <Table fill='both' constraints='BorderLayout.NORTH' insets="0">
+ <JScrollPane id="caracteristicsTabScrollPane">
+ <Table fill='both' insets="0">
<!-- timeStamp -->
<row>
@@ -93,7 +92,7 @@
</cell>
</row>
</Table>
- </JPanel>
+ </JScrollPane>
</tab>
<tab id='samplePartTab' i18nProperty="">
=====================================
client-datasource-editor-ll/src/main/java/fr/ird/observe/client/datasource/editor/content/data/ll/logbook/TripSampleUI.jcss
=====================================
@@ -48,10 +48,6 @@
_tab:{"samplePartTab"};
}
-#comment {
- title:"observe.data.ll.logbook.TripSampleList.comment";
-}
-
#open {
_toolTipText:{t("observe.data.ll.logbook.TripSampleList.action.reopen.tip")};
}
=====================================
client-datasource-editor-ll/src/main/java/fr/ird/observe/client/datasource/editor/content/data/ll/observation/ActivityUI.jaxx
=====================================
@@ -72,7 +72,8 @@
<!-- formulaire -->
<JPanel id="body">
- <Table fill='both' constraints="BorderLayout.CENTER">
+ <JScrollPane id="bodyScrollPane" constraints="BorderLayout.CENTER">
+ <Table fill='both'>
<!-- date - time -->
<row>
@@ -135,6 +136,7 @@
</cell>
</row>
</Table>
+ </JScrollPane>
</JPanel>
<!-- surcharge des actions (pour appliquer la css specifique) -->
=====================================
client-datasource-editor-ll/src/main/java/fr/ird/observe/client/datasource/editor/content/data/ll/observation/BranchlineUI.jaxx
=====================================
@@ -69,12 +69,13 @@ public void edit(BranchlineDto branchline) { getHandler().edit(branchline); }
<Table insets="0" fill="both" constraints='BorderLayout.CENTER'>
<row>
- <cell anchor="north" weightx="1">
+ <cell anchor="north" weightx="1" weighty="1">
<JTabbedPane id='subTabbedPane'>
<tab id='generalTab' i18nProperty="">
- <JPanel layout='{new BorderLayout()}'>
- <Table fill="both" constraints='BorderLayout.CENTER'>
+ <JScrollPane id="generalTabScrollPane">
+
+ <Table fill="both">
<!-- topType -->
<row>
@@ -156,12 +157,13 @@ public void edit(BranchlineDto branchline) { getHandler().edit(branchline); }
</row>
</Table>
- </JPanel>
+ </JScrollPane>
</tab>
<tab id='hookAndBaitTab' i18nProperty="">
- <JPanel layout='{new BorderLayout()}'>
- <Table fill="both" constraints='BorderLayout.CENTER'>
+ <JScrollPane id="hookAndBaitTabScrollPane">
+ <JPanel layout='{new BorderLayout()}'>
+ <Table fill="both" constraints='BorderLayout.CENTER'>
<!-- HookType -->
<row>
@@ -224,13 +226,14 @@ public void edit(BranchlineDto branchline) { getHandler().edit(branchline); }
</row>
</Table>
- </JPanel>
+ </JPanel>
+ </JScrollPane>
</tab>
</JTabbedPane>
</cell>
</row>
<row>
- <cell weighty="1">
+ <cell>
<BigTextEditor id="comment"/>
</cell>
</row>
=====================================
client-datasource-editor-ll/src/main/java/fr/ird/observe/client/datasource/editor/content/data/ll/observation/SetGlobalCompositionUI.jaxx
=====================================
@@ -106,7 +106,7 @@
<!-- mitigationType -->
<JPanel layout='{new BorderLayout()}'>
- <Table fill='both' constraints='BorderLayout.NORTH'>
+ <Table fill='both' constraints='BorderLayout.CENTER'>
<row>
<cell weighty="1" weightx="1">
<FilterableDoubleList id='mitigationType' genericType='MitigationTypeReference'/>
=====================================
client-datasource-editor-ll/src/main/java/fr/ird/observe/client/datasource/editor/content/data/ll/observation/SetUI.jaxx
=====================================
@@ -83,10 +83,11 @@
<Table insets="0" fill="both" constraints='BorderLayout.CENTER'>
<row>
- <cell anchor="north">
+ <cell anchor="north" weighty="1" fill="both">
<JTabbedPane id='mainTabbedPane'>
<tab id='settingTab' i18nProperty="">
- <JPanel layout='{new BorderLayout()}'>
+ <JScrollPane id="settingTabScrollPane">
+ <JPanel layout='{new BorderLayout()}'>
<Table fill='both' constraints='BorderLayout.NORTH'>
<!-- homeId -->
@@ -141,13 +142,14 @@
</Table>
</cell>
</row>
-
</Table>
- </JPanel>
+ </JPanel>
+ </JScrollPane>
</tab>
<tab id='settingCaracteristicsTab' i18nProperty="">
+ <JScrollPane id="settingCaracteristicTabScrollPane">
<Table fill='both'>
<!-- setting shape -->
@@ -310,11 +312,12 @@
</cell>
</row>
</Table>
+ </JScrollPane>
</tab>
<tab id='haulingTab' i18nProperty="">
-
- <JPanel layout='{new BorderLayout()}'>
+ <JScrollPane id="haulingTabScrollPane">
+ <JPanel layout='{new BorderLayout()}'>
<Table fill='both' constraints='BorderLayout.NORTH'>
<!-- hauling same direction as setting -->
@@ -365,14 +368,15 @@
</cell>
</row>
</Table>
- </JPanel>
+ </JPanel>
+ </JScrollPane>
</tab>
</JTabbedPane>
</cell>
</row>
<row>
- <cell fill="both" weighty="1" weightx="1">
+ <cell fill="both" weightx="1">
<BigTextEditor id="comment"/>
</cell>
</row>
=====================================
client-datasource-editor-ll/src/main/java/fr/ird/observe/client/datasource/editor/content/data/ll/observation/TdrUI.jaxx
=====================================
@@ -354,7 +354,7 @@
<!-- species -->
<JPanel layout='{new BorderLayout()}'>
- <Table fill='both' constraints='BorderLayout.NORTH'>
+ <Table fill='both' constraints='BorderLayout.CENTER'>
<row>
<cell weighty="1" weightx="1">
<FilterableDoubleList id='species' genericType='SpeciesReference'/>
View it on GitLab: https://gitlab.com/ultreiaio/ird-observe/-/commit/f8948144066823a14eac38728…
--
View it on GitLab: https://gitlab.com/ultreiaio/ird-observe/-/commit/f8948144066823a14eac38728…
You're receiving this email because of your account on gitlab.com.
1
0
[Git][ultreiaio/ird-observe][develop] 2 commits: Compute GoUp and GoDown items lazily
by Tony CHEMIT 11 Apr '20
by Tony CHEMIT 11 Apr '20
11 Apr '20
Tony CHEMIT pushed to branch develop at ultreiaio / ird-observe
Commits:
e99f559c by tchemit at 2020-04-10T10:03:29+02:00
Compute GoUp and GoDown items lazily
- - - - -
2be69ee9 by tchemit at 2020-04-11T06:05:23+02:00
Introduce BusyModel (See #1386)
- - - - -
30 changed files:
- client-core/src/main/java/fr/ird/observe/client/ClientUIContext.java
- client-core/src/main/java/fr/ird/observe/client/datasource/h2/backup/LocalDatabaseBackupTaskSupport.java
- client-core/src/main/java/fr/ird/observe/client/main/MainUIModel.java
- client-core/src/main/java/fr/ird/observe/client/main/ObserveMainUI.jaxx
- client-core/src/main/java/fr/ird/observe/client/main/ObserveMainUI.jcss
- client-core/src/main/java/fr/ird/observe/client/main/ObserveMainUIHandler.java
- + client-core/src/main/java/fr/ird/observe/client/util/busy/BusyLayerUI.java
- + client-core/src/main/java/fr/ird/observe/client/util/busy/BusyModel.java
- + client-core/src/main/resources/icons/busy.gif
- client-datasource-actions/src/main/java/fr/ird/observe/client/datasource/actions/AdminUIHandler.java
- client-datasource-editor-api/src/main/java/fr/ird/observe/client/datasource/editor/DataSourceEditorBodyContent.java
- client-datasource-editor-api/src/main/java/fr/ird/observe/client/datasource/editor/DataSourceEditorHandler.java
- client-datasource-editor-api/src/main/java/fr/ird/observe/client/datasource/editor/DataSourceEditorLayerUI.java
- client-datasource-editor-api/src/main/java/fr/ird/observe/client/datasource/editor/content/actions/GoDown.java
- client-datasource-editor-api/src/main/java/fr/ird/observe/client/datasource/editor/content/actions/GoUp.java
- client-datasource-editor-api/src/main/java/fr/ird/observe/client/datasource/editor/content/data/list/actions/DeleteActionSupport.java
- client-datasource-editor-api/src/main/java/fr/ird/observe/client/datasource/editor/content/data/table/ContentTableUIHandler.java
- client-datasource-editor-api/src/main/java/fr/ird/observe/client/datasource/editor/menu/DataSourceEditorMenu.jaxx
- client-datasource-editor-api/src/main/java/fr/ird/observe/client/datasource/editor/menu/DataSourceEditorMenu.jcss
- client-datasource-editor-api/src/main/java/fr/ird/observe/client/datasource/editor/menu/DataSourceEditorMenuModel.java
- client-datasource-editor-api/src/main/java/fr/ird/observe/client/datasource/editor/menu/DataSourceEditorNavigationMenuModel.java
- client-datasource-editor-api/src/main/java/fr/ird/observe/client/datasource/editor/menu/actions/CloseStorageAction.java
- client-datasource-editor-api/src/main/java/fr/ird/observe/client/datasource/editor/menu/actions/ReloadStorageAction.java
- client-datasource-editor-api/src/main/java/fr/ird/observe/client/datasource/editor/tree/navigation/NavigationTreeModel.java
- client-datasource-editor-api/src/main/java/fr/ird/observe/client/datasource/editor/tree/navigation/actions/NavigationConfigUIToggleShowActionSupport.java
- client-datasource-editor-common/src/main/java/fr/ird/observe/client/datasource/editor/content/data/TripUIHelper.java
- client-datasource-editor-ll/src/main/java/fr/ird/observe/client/datasource/editor/content/data/ll/observation/SetDetailCompositionUIHandler.java
- client-datasource-editor-ps/src/main/java/fr/ird/observe/client/datasource/editor/content/data/ps/observation/actions/FloatingObjectUICopyFloatingObjectPartToLeft.java
- client-datasource-editor-ps/src/main/java/fr/ird/observe/client/datasource/editor/content/data/ps/observation/actions/FloatingObjectUICopyFloatingObjectPartToRight.java
- client-runner/src/main/java/fr/ird/observe/client/ObserveActionExecutor.java
The diff was not included because it is too large.
View it on GitLab: https://gitlab.com/ultreiaio/ird-observe/-/compare/ab651f885af30e83ce64b5bc…
--
View it on GitLab: https://gitlab.com/ultreiaio/ird-observe/-/compare/ab651f885af30e83ce64b5bc…
You're receiving this email because of your account on gitlab.com.
1
0
[Git][ultreiaio/ird-observe][develop] Vérifier la présence ou ajouter un champ PS trip.homeid - Closes #1383
by Tony CHEMIT 06 Apr '20
by Tony CHEMIT 06 Apr '20
06 Apr '20
Tony CHEMIT pushed to branch develop at ultreiaio / ird-observe
Commits:
ab651f88 by tchemit at 2020-04-06T17:09:56+02:00
Vérifier la présence ou ajouter un champ PS trip.homeid - Closes #1383
- - - - -
13 changed files:
- client-datasource-editor-ps/src/main/i18n/getters/jaxx.getter
- client-datasource-editor-ps/src/main/java/fr/ird/observe/client/datasource/editor/content/data/ps/common/TripUI.jaxx
- + persistence/src/main/java/fr/ird/observe/entities/migration/DataSourceMigrationForVersion_7_5_1.java
- persistence/src/main/resources/db/migration/8.0/102_create_ps_common_schema-common.sql
- persistence/src/main/resources/db/migration/8.0/110_add_home_id-common.sql
- + test/src/main/resources/db/7.5.1/dataForTestLongline.sql.gz
- + test/src/main/resources/db/7.5.1/dataForTestSeine.sql.gz
- + test/src/main/resources/db/7.5.1/empty_h2.sql.gz
- + test/src/main/resources/db/7.5.1/empty_pg.sql.gz
- + test/src/main/resources/db/7.5.1/referentiel.sql.gz
- test/src/main/resources/db/8.0/dataForTestLongline.sql.gz
- test/src/main/resources/db/8.0/dataForTestSeine.sql.gz
- test/src/main/resources/db/8.0/referentiel.sql.gz
Changes:
=====================================
client-datasource-editor-ps/src/main/i18n/getters/jaxx.getter
=====================================
@@ -1,5 +1,6 @@
observe.Id.comment
observe.Id.country
+observe.Id.homeId
observe.Id.ocean
observe.Id.sex
observe.Id.sizeMeasureType
=====================================
client-datasource-editor-ps/src/main/java/fr/ird/observe/client/datasource/editor/content/data/ps/common/TripUI.jaxx
=====================================
@@ -148,6 +148,15 @@
<BeanFilterableComboBox id='landingHarbour' genericType='HarbourReference' constructorParams='this'/>
</cell>
</row>
+ <!-- homeId -->
+ <row>
+ <cell anchor='west'>
+ <JLabel id='homeIdLabel'/>
+ </cell>
+ <cell anchor='east' weightx="1" fill="both">
+ <NormalTextEditor id='homeId'/>
+ </cell>
+ </row>
<!-- id ers -->
<row>
=====================================
persistence/src/main/java/fr/ird/observe/entities/migration/DataSourceMigrationForVersion_7_5_1.java
=====================================
@@ -0,0 +1,78 @@
+package fr.ird.observe.entities.migration;
+
+/*-
+ * #%L
+ * ObServe :: Persistence
+ * %%
+ * Copyright (C) 2008 - 2020 IRD, Code Lutin, Ultreia.io
+ * %%
+ * 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 com.google.auto.service.AutoService;
+import org.apache.commons.lang3.tuple.Pair;
+import org.nuiton.topia.persistence.support.TopiaSqlQuery;
+import org.nuiton.topia.service.migration.resources.MigrationVersionResource;
+import org.nuiton.topia.service.migration.resources.MigrationVersionResourceExecutor;
+import org.nuiton.version.Versions;
+
+import java.sql.Connection;
+import java.sql.PreparedStatement;
+import java.sql.ResultSet;
+import java.sql.SQLException;
+import java.util.Set;
+
+/**
+ * @author Tony Chemit - dev(a)tchemit.fr
+ * @since 7.5.1
+ */
+(a)AutoService(MigrationVersionResource.class)
+public class DataSourceMigrationForVersion_7_5_1 extends MigrationVersionResource {
+
+ public DataSourceMigrationForVersion_7_5_1() {
+ super(Versions.valueOf("7.5.1"));
+ }
+
+ @Override
+ public void generateSqlScript(MigrationVersionResourceExecutor executor) {
+ Set<Pair<String, String>> tripIdAndComment = executor.findMultipleResultAstSet(new TopiaSqlQuery<Pair<String, String>>() {
+ @SuppressWarnings("SqlDialectInspection")
+ @Override
+ public PreparedStatement prepareQuery(Connection connection) throws SQLException {
+ return connection.prepareStatement("SELECT topiaId, comment FROM observe_seine.trip WHERE comment LIKE '#%#%'");
+ }
+
+ @Override
+ public Pair<String, String> prepareResult(ResultSet set) throws SQLException {
+ return Pair.of(set.getString(1), set.getString(2));
+ }
+ });
+
+ executor.writeSql("ALTER TABLE observe_seine.trip ADD COLUMN homeId VARCHAR(255)");
+
+ for (Pair<String, String> pair : tripIdAndComment) {
+ String tripId = pair.getKey();
+ String comment = pair.getValue().trim();
+
+ int endIndex = comment.indexOf('#', 1);
+ String homeId = comment.substring(1, endIndex - 1);
+ String newComment = endIndex + 1 == comment.length() ? "NULL" : (String.format("'%s'", comment.substring(endIndex + 1).trim().replaceAll("'","''")));
+ executor.writeSql(String.format("UPDATE observe_seine.trip t SET comment = %s, homeId = '%s', topiaVersion = topiaVersion + 1, lastUpdateDate = CURRENT_TIMESTAMP WHERE t.topiaId = '%s';", newComment, homeId, tripId));
+ }
+ }
+
+}
+
=====================================
persistence/src/main/resources/db/migration/8.0/102_create_ps_common_schema-common.sql
=====================================
@@ -27,7 +27,7 @@ CREATE TABLE ps_common.transmittingbuoyoperation(topiaid VARCHAR(255) NOT NULL C
CREATE TABLE ps_common.transmittingbuoytype(topiaid VARCHAR(255) NOT NULL CONSTRAINT pk_ps_observation_transmittingbuoytype PRIMARY KEY, topiaversion BIGINT NOT NULL, topiacreatedate TIMESTAMP NOT NULL, code VARCHAR(255), needcomment BOOLEAN, uri VARCHAR(255), status INTEGER DEFAULT 1, label1 VARCHAR(255), label2 VARCHAR(255), label3 VARCHAR(255), label4 VARCHAR(255), label5 VARCHAR(255), label6 VARCHAR(255), label7 VARCHAR(255), label8 VARCHAR(255), lastupdatedate TIMESTAMP DEFAULT now() NOT NULL, technology VARCHAR(1024));
CREATE TABLE ps_common.vesselactivity(topiaid VARCHAR(255) NOT NULL CONSTRAINT pk_ps_observation_vesselactivity PRIMARY KEY, topiaversion BIGINT NOT NULL, topiacreatedate TIMESTAMP NOT NULL, code VARCHAR(255), uri VARCHAR(255), needcomment BOOLEAN, status INTEGER DEFAULT 1, label1 VARCHAR(255), label2 VARCHAR(255), label3 VARCHAR(255), label4 VARCHAR(255), label5 VARCHAR(255), label6 VARCHAR(255), label7 VARCHAR(255), label8 VARCHAR(255), lastupdatedate TIMESTAMP DEFAULT now() NOT NULL, allowfad BOOLEAN DEFAULT FALSE NOT NULL);
-CREATE TABLE ps_common.trip( topiaid varchar(255) not null constraint pk_trip primary key, topiaversion BIGINT not null, topiacreatedate TIMESTAMP NOT NULL, startdate DATE, enddate DATE, comment VARCHAR(1025), checklevel INTEGER, formsurl varchar(255), reportsurl varchar(255), historicaldata BOOLEAN, ersid varchar(255), ocean varchar(255), observer varchar(255), vessel varchar(255), program varchar(255), captain varchar(255), dataentryoperator varchar(255), departureharbour varchar(255), landingharbour varchar(255), lastupdatedate TIMESTAMP default now() not null, dataquality varchar(255));
+CREATE TABLE ps_common.trip( topiaid varchar(255) not null constraint pk_trip primary key, topiaversion BIGINT not null, topiacreatedate TIMESTAMP NOT NULL, startdate DATE, enddate DATE, comment VARCHAR(1025), checklevel INTEGER, formsurl varchar(255), reportsurl varchar(255), historicaldata BOOLEAN, homeId varchar(255), ersid varchar(255), ocean varchar(255), observer varchar(255), vessel varchar(255), program varchar(255), captain varchar(255), dataentryoperator varchar(255), departureharbour varchar(255), landingharbour varchar(255), lastupdatedate TIMESTAMP default now() not null, dataquality varchar(255));
CREATE TABLE ps_common.gearusefeatures( topiaid varchar(255) not null constraint pk_gearusefeatures primary key, topiaversion BIGINT not null, topiacreatedate DATE, trip varchar(255), gear varchar(255) not null, number INTEGER not null, comment VARCHAR(1025), usedintrip BOOLEAN, lastupdatedate TIMESTAMP default now() not null );
CREATE TABLE ps_common.gearusefeaturesmeasurement( topiaid varchar(255) not null constraint pk_gearusefeaturesmeasurement primary key, topiaversion BIGINT not null, topiacreatedate DATE, gearcaracteristic varchar(255) not null, gearusefeatures varchar(255), measurementvalue varchar(255) not null, lastupdatedate TIMESTAMP default now() not null );
@@ -35,7 +35,7 @@ INSERT INTO ps_common.speciesfate(topiaid, topiaversion, topiacreatedate, code,
INSERT INTO ps_common.transmittingbuoyoperation(topiaid, topiaversion, topiacreatedate, code, uri, status, label1, label2, label3, label4, label5, label6, label7, label8, needcomment, lastupdatedate) SELECT topiaid, topiaversion, topiacreatedate, code, uri, status, label1, label2, label3, label4, label5, label6, label7, label8, needcomment, lastupdatedate FROM observe_seine.transmittingbuoyoperation;
INSERT INTO ps_common.transmittingbuoytype(topiaid, topiaversion, topiacreatedate, code, needcomment, uri, status, label1, label2, label3, label4, label5, label6, label7, label8, lastupdatedate, technology) SELECT topiaid, topiaversion, topiacreatedate, code, needcomment, uri, status, label1, label2, label3, label4, label5, label6, label7, label8, lastupdatedate, technology FROM observe_seine.transmittingbuoytype;
INSERT INTO ps_common.vesselactivity(topiaid, topiaversion, topiacreatedate, code, uri, needcomment, status, label1, label2, label3, label4, label5, label6, label7, label8, lastupdatedate, allowfad) SELECT topiaid, topiaversion, topiacreatedate, code, uri, needcomment, status, label1, label2, label3, label4, label5, label6, label7, label8, lastupdatedate, allowfad FROM observe_seine.vesselactivity;
-INSERT INTO ps_common.trip( topiaid, topiaversion, topiacreatedate, startdate , enddate, comment , checklevel, formsurl , reportsurl , historicaldata , ersid , ocean , observer , vessel , program , captain , dataentryoperator , departureharbour , landingharbour , lastupdatedate , dataquality ) SELECT topiaid, topiaversion, topiacreatedate, startdate , enddate, comment , checklevel, formsurl , reportsurl , historicaldata , ersid , ocean , observer , vessel , program , captain , dataentryoperator , departureharbour , landingharbour , lastupdatedate , dataquality FROM observe_seine.trip;
+INSERT INTO ps_common.trip( topiaid, topiaversion, topiacreatedate, startdate , enddate, comment , checklevel, formsurl , reportsurl , historicaldata , homeId, ersid , ocean , observer , vessel , program , captain , dataentryoperator , departureharbour , landingharbour , lastupdatedate , dataquality ) SELECT topiaid, topiaversion, topiacreatedate, startdate , enddate, comment , checklevel, formsurl , reportsurl , historicaldata , homeId, ersid , ocean , observer , vessel , program , captain , dataentryoperator , departureharbour , landingharbour , lastupdatedate , dataquality FROM observe_seine.trip;
INSERT INTO ps_common.gearusefeatures( topiaid, topiaversion, topiacreatedate, trip, gear , number , comment , usedintrip , lastupdatedate ) SELECT topiaid, topiaversion, topiacreatedate, trip, gear , number , comment , usedintrip , lastupdatedate FROM observe_seine.gearusefeatures;
INSERT INTO ps_common.gearusefeaturesmeasurement( topiaid, topiaversion, topiacreatedate, gearcaracteristic , gearusefeatures , measurementvalue , lastupdatedate ) SELECT topiaid, topiaversion, topiacreatedate, gearcaracteristic , gearusefeatures , measurementvalue , lastupdatedate FROM observe_seine.gearusefeaturesmeasurement;
=====================================
persistence/src/main/resources/db/migration/8.0/110_add_home_id-common.sql
=====================================
@@ -106,7 +106,6 @@ ALTER TABLE ps_common.gearusefeaturesmeasurement ADD COLUMN homeId VARCHAR(255);
ALTER TABLE ps_common.speciesfate ADD COLUMN homeId VARCHAR(255);
ALTER TABLE ps_common.transmittingbuoyoperation ADD COLUMN homeId VARCHAR(255);
ALTER TABLE ps_common.transmittingbuoytype ADD COLUMN homeId VARCHAR(255);
-ALTER TABLE ps_common.trip ADD COLUMN homeId VARCHAR(255);
ALTER TABLE ps_common.vesselactivity ADD COLUMN homeId VARCHAR(255);
ALTER TABLE ps_observation.activity ADD COLUMN homeId VARCHAR(255);
ALTER TABLE ps_observation.detectionmode ADD COLUMN homeId VARCHAR(255);
=====================================
test/src/main/resources/db/7.5.1/dataForTestLongline.sql.gz
=====================================
Binary files /dev/null and b/test/src/main/resources/db/7.5.1/dataForTestLongline.sql.gz differ
=====================================
test/src/main/resources/db/7.5.1/dataForTestSeine.sql.gz
=====================================
Binary files /dev/null and b/test/src/main/resources/db/7.5.1/dataForTestSeine.sql.gz differ
=====================================
test/src/main/resources/db/7.5.1/empty_h2.sql.gz
=====================================
Binary files /dev/null and b/test/src/main/resources/db/7.5.1/empty_h2.sql.gz differ
=====================================
test/src/main/resources/db/7.5.1/empty_pg.sql.gz
=====================================
Binary files /dev/null and b/test/src/main/resources/db/7.5.1/empty_pg.sql.gz differ
=====================================
test/src/main/resources/db/7.5.1/referentiel.sql.gz
=====================================
Binary files /dev/null and b/test/src/main/resources/db/7.5.1/referentiel.sql.gz differ
=====================================
test/src/main/resources/db/8.0/dataForTestLongline.sql.gz
=====================================
Binary files a/test/src/main/resources/db/8.0/dataForTestLongline.sql.gz and b/test/src/main/resources/db/8.0/dataForTestLongline.sql.gz differ
=====================================
test/src/main/resources/db/8.0/dataForTestSeine.sql.gz
=====================================
Binary files a/test/src/main/resources/db/8.0/dataForTestSeine.sql.gz and b/test/src/main/resources/db/8.0/dataForTestSeine.sql.gz differ
=====================================
test/src/main/resources/db/8.0/referentiel.sql.gz
=====================================
Binary files a/test/src/main/resources/db/8.0/referentiel.sql.gz and b/test/src/main/resources/db/8.0/referentiel.sql.gz differ
View it on GitLab: https://gitlab.com/ultreiaio/ird-observe/-/commit/ab651f885af30e83ce64b5bc4…
--
View it on GitLab: https://gitlab.com/ultreiaio/ird-observe/-/commit/ab651f885af30e83ce64b5bc4…
You're receiving this email because of your account on gitlab.com.
1
0
[Git][ultreiaio/ird-observe][develop-7.x] Vérifier la présence ou ajouter un champ PS trip.homeid - Closes #1383
by Tony CHEMIT 06 Apr '20
by Tony CHEMIT 06 Apr '20
06 Apr '20
Tony CHEMIT pushed to branch develop-7.x at ultreiaio / ird-observe
Commits:
5b631f82 by tchemit at 2020-04-06T15:01:48+02:00
Vérifier la présence ou ajouter un champ PS trip.homeid - Closes #1383
- - - - -
12 changed files:
- client-core/src/main/java/fr/ird/observe/client/ui/content/data/seine/TripSeineUI.jaxx
- client-core/src/main/java/fr/ird/observe/client/ui/content/data/seine/TripSeineUI.jcss
- dto/src/main/models/Observe.model
- persistence/src/main/java/fr/ird/observe/binder/data/seine/TripSeineEntityDtoBinder.java
- + persistence/src/main/java/fr/ird/observe/persistence/migration/DataSourceMigrationForVersion_7_5_1.java
- persistence/src/main/models/Observe.model
- pom.xml
- + test/src/main/resources/db/7.5.1/dataForTestLongline.sql.gz
- + test/src/main/resources/db/7.5.1/dataForTestSeine.sql.gz
- + test/src/main/resources/db/7.5.1/empty_h2.sql.gz
- + test/src/main/resources/db/7.5.1/empty_pg.sql.gz
- + test/src/main/resources/db/7.5.1/referentiel.sql.gz
Changes:
=====================================
client-core/src/main/java/fr/ird/observe/client/ui/content/data/seine/TripSeineUI.jaxx
=====================================
@@ -157,6 +157,22 @@ protected boolean canEditOcean(java.util.LinkedHashSet<RouteStubDto> routes) {
</cell>
</row>
+ <!-- homeId -->
+ <row>
+
+ <cell anchor='west'>
+ <JLabel id='homeIdLabel'/>
+ </cell>
+ <cell anchor='east' weightx="1" fill="both">
+ <JPanel layout='{new BorderLayout()}'>
+ <JToolBar id='homeIdToolbar' constraints='BorderLayout.WEST'>
+ <JButton id='resetHomeId' styleClass='resetButton'/>
+ </JToolBar>
+ <JTextField id='homeId' constraints='BorderLayout.CENTER'/>
+ </JPanel>
+ </cell>
+ </row>
+
<!-- id ers -->
<row>
=====================================
client-core/src/main/java/fr/ird/observe/client/ui/content/data/seine/TripSeineUI.jcss
=====================================
@@ -77,6 +77,16 @@ NumberEditor {
selectedItem:{bean.getLandingHarbour()};
}
+#resetHomeId {
+ toolTipText:"observe.common.DataDto.action.reset.homeId.tip";
+ _resetPropertyName: {TripSeineDto.PROPERTY_HOME_ID};
+}
+
+#homeId {
+ text:{getStringValue(bean.getHomeId())};
+ _propertyName: {TripSeineDto.PROPERTY_HOME_ID};
+}
+
#resetErsId {
toolTipText:"observe.common.DataDto.action.reset.ersId.tip";
_resetPropertyName:{TripSeineDto.PROPERTY_ERS_ID};
=====================================
dto/src/main/models/Observe.model
=====================================
@@ -817,6 +817,7 @@ formsUrl + {*:1} String
reportsUrl + {*:1} String
historicalData + {*:1} boolean
ersId + {*:1} String
+homeId + {*:1} String
routeCount + {*:1} int
observer {*:0..1} fr.ird.observe.dto.referential.PersonReference | notNull
captain {*:0..1} fr.ird.observe.dto.referential.PersonReference | mayNotNull
=====================================
persistence/src/main/java/fr/ird/observe/binder/data/seine/TripSeineEntityDtoBinder.java
=====================================
@@ -50,6 +50,7 @@ public class TripSeineEntityDtoBinder extends DataEntityDtoBinderSupport<TripSei
entity.setFormsUrl(dto.getFormsUrl());
entity.setReportsUrl(dto.getReportsUrl());
entity.setErsId(dto.getErsId());
+ entity.setHomeId(dto.getHomeId());
entity.setOcean(toEntity(dto.getOcean()));
entity.setVessel(toEntity(dto.getVessel()));
@@ -74,6 +75,7 @@ public class TripSeineEntityDtoBinder extends DataEntityDtoBinderSupport<TripSei
dto.setFormsUrl(entity.getFormsUrl());
dto.setReportsUrl(entity.getReportsUrl());
dto.setErsId(entity.getErsId());
+ dto.setHomeId(entity.getHomeId());
dto.setOcean(toReferentialReference(referentialLocale, entity.getOcean()));
dto.setVessel(toReferentialReference(referentialLocale, entity.getVessel()));
dto.setProgram(toReferentialReference(referentialLocale, entity.getProgram()));
=====================================
persistence/src/main/java/fr/ird/observe/persistence/migration/DataSourceMigrationForVersion_7_5_1.java
=====================================
@@ -0,0 +1,78 @@
+package fr.ird.observe.persistence.migration;
+
+/*-
+ * #%L
+ * ObServe :: Persistence
+ * %%
+ * Copyright (C) 2008 - 2020 IRD, Code Lutin, Ultreia.io
+ * %%
+ * 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 com.google.auto.service.AutoService;
+import org.apache.commons.lang3.tuple.Pair;
+import org.nuiton.topia.persistence.support.TopiaSqlQuery;
+import org.nuiton.topia.service.migration.resources.MigrationVersionResource;
+import org.nuiton.topia.service.migration.resources.MigrationVersionResourceExecutor;
+import org.nuiton.version.Versions;
+
+import java.sql.Connection;
+import java.sql.PreparedStatement;
+import java.sql.ResultSet;
+import java.sql.SQLException;
+import java.util.Set;
+
+/**
+ * @author Tony Chemit - dev(a)tchemit.fr
+ * @since 7.5.1
+ */
+(a)AutoService(MigrationVersionResource.class)
+public class DataSourceMigrationForVersion_7_5_1 extends MigrationVersionResource {
+
+ public DataSourceMigrationForVersion_7_5_1() {
+ super(Versions.valueOf("7.5.1"));
+ }
+
+ @Override
+ public void generateSqlScript(MigrationVersionResourceExecutor executor) {
+ Set<Pair<String, String>> tripIdAndComment = executor.findMultipleResultAstSet(new TopiaSqlQuery<Pair<String, String>>() {
+ @SuppressWarnings("SqlDialectInspection")
+ @Override
+ public PreparedStatement prepareQuery(Connection connection) throws SQLException {
+ return connection.prepareStatement("SELECT topiaId, comment FROM observe_seine.trip WHERE comment LIKE '#%#%'");
+ }
+
+ @Override
+ public Pair<String, String> prepareResult(ResultSet set) throws SQLException {
+ return Pair.of(set.getString(1), set.getString(2));
+ }
+ });
+
+ executor.writeSql("ALTER TABLE observe_seine.trip ADD COLUMN homeId VARCHAR(255)");
+
+ for (Pair<String, String> pair : tripIdAndComment) {
+ String tripId = pair.getKey();
+ String comment = pair.getValue().trim();
+
+ int endIndex = comment.indexOf('#', 1);
+ String homeId = comment.substring(1, endIndex - 1);
+ String newComment = endIndex + 1 == comment.length() ? "NULL" : (String.format("'%s'", comment.substring(endIndex + 1).trim().replaceAll("'","''")));
+ executor.writeSql(String.format("UPDATE observe_seine.trip t SET comment = %s, homeId = '%s', topiaVersion = topiaVersion + 1, lastUpdateDate = CURRENT_TIMESTAMP WHERE t.topiaId = '%s';", newComment, homeId, tripId));
+ }
+ }
+
+}
+
=====================================
persistence/src/main/models/Observe.model
=====================================
@@ -851,6 +851,7 @@ vessel {*:1} referentiel.Vessel
seine.TripSeine > CommentableEntity >> Trip | entity dbName=Trip
startDate + {*:1} Date | hibernateAttributeType.java.util.Date=date
endDate + {*:1} Date | hibernateAttributeType.java.util.Date=date
+homeId + {*:1} String
checkLevel + {*:1} int
formsUrl + {*:1} String
reportsUrl + {*:1} String
=====================================
pom.xml
=====================================
@@ -26,7 +26,7 @@
<parent>
<groupId>io.ultreia.maven</groupId>
<artifactId>pom</artifactId>
- <version>2020.14</version>
+ <version>2020.15</version>
</parent>
<groupId>fr.ird.observe</groupId>
@@ -149,7 +149,7 @@
<devMode>true</devMode>
<!--persistence model version-->
- <observe.model.version>7.5</observe.model.version>
+ <observe.model.version>7.5.1</observe.model.version>
<!-- build timestamp configuration -->
<maven.build.timestamp.format>dd/MM/yyyy HH:mm z</maven.build.timestamp.format>
=====================================
test/src/main/resources/db/7.5.1/dataForTestLongline.sql.gz
=====================================
Binary files /dev/null and b/test/src/main/resources/db/7.5.1/dataForTestLongline.sql.gz differ
=====================================
test/src/main/resources/db/7.5.1/dataForTestSeine.sql.gz
=====================================
Binary files /dev/null and b/test/src/main/resources/db/7.5.1/dataForTestSeine.sql.gz differ
=====================================
test/src/main/resources/db/7.5.1/empty_h2.sql.gz
=====================================
Binary files /dev/null and b/test/src/main/resources/db/7.5.1/empty_h2.sql.gz differ
=====================================
test/src/main/resources/db/7.5.1/empty_pg.sql.gz
=====================================
Binary files /dev/null and b/test/src/main/resources/db/7.5.1/empty_pg.sql.gz differ
=====================================
test/src/main/resources/db/7.5.1/referentiel.sql.gz
=====================================
Binary files /dev/null and b/test/src/main/resources/db/7.5.1/referentiel.sql.gz differ
View it on GitLab: https://gitlab.com/ultreiaio/ird-observe/-/commit/5b631f82d7aca107b0b637f4c…
--
View it on GitLab: https://gitlab.com/ultreiaio/ird-observe/-/commit/5b631f82d7aca107b0b637f4c…
You're receiving this email because of your account on gitlab.com.
1
0
[Git][ultreiaio/ird-observe][develop] 3 commits: Mise à jour jaxx avec des améliorations sur les JTabbedPane
by Tony CHEMIT 06 Apr '20
by Tony CHEMIT 06 Apr '20
06 Apr '20
Tony CHEMIT pushed to branch develop at ultreiaio / ird-observe
Commits:
518406b4 by tchemit at 2020-04-06T13:52:08+02:00
Mise à jour jaxx avec des améliorations sur les JTabbedPane
- - - - -
512a6572 by tchemit at 2020-04-06T13:52:10+02:00
Lors d'un 'Rechargement de la source' ou d'un appel aux filtres d'affichage de l'arbre, afficher une barre de progression - Closes #1386
- - - - -
b6185ba5 by tchemit at 2020-04-06T13:52:10+02:00
Fix NPE when reload ui callback
- - - - -
27 changed files:
- client-configuration/src/main/config/Client.ini
- client-configuration/src/main/i18n/getters/config.getter
- client-configuration/src/main/java/fr/ird/observe/client/configuration/ClientConfig.java
- client-core/src/main/java/fr/ird/observe/client/main/ObserveMainUI.jaxx
- client-core/src/main/java/fr/ird/observe/client/main/ObserveMainUI.jcss
- client-core/src/main/java/fr/ird/observe/client/main/body/ClientConfigUI.java
- client-core/src/main/java/fr/ird/observe/client/main/callback/ReloadUiCallback.java
- client-core/src/main/resources/fr/ird/observe/client/ui/ObserveCommon.jcss
- client-core/src/main/resources/observe-ui.properties
- client-datasource-actions/src/main/java/fr/ird/observe/client/datasource/actions/AdminTabUI.jcss
- client-datasource-actions/src/main/java/fr/ird/observe/client/datasource/actions/AdminUI.jaxx
- client-datasource-actions/src/main/java/fr/ird/observe/client/datasource/actions/AdminUI.jcss
- client-datasource-editor-api/src/main/i18n/getters/java.getter
- client-datasource-editor-api/src/main/java/fr/ird/observe/client/datasource/editor/content/ContentUI.jaxx
- client-datasource-editor-api/src/main/java/fr/ird/observe/client/datasource/editor/content/ContentUI.jcss
- client-datasource-editor-api/src/main/java/fr/ird/observe/client/datasource/editor/content/data/table/ContentTableUI.jaxx
- client-datasource-editor-api/src/main/java/fr/ird/observe/client/datasource/editor/content/data/table/ContentTableUI.jcss
- client-datasource-editor-api/src/main/java/fr/ird/observe/client/datasource/editor/content/ref/ContentReferenceUI.jaxx
- client-datasource-editor-api/src/main/java/fr/ird/observe/client/datasource/editor/content/ref/ContentReferenceUI.jcss
- client-datasource-editor-api/src/main/java/fr/ird/observe/client/datasource/editor/tree/navigation/actions/NavigationConfigUIToggleShowActionSupport.java
- client-datasource-editor-api/src/main/java/fr/ird/observe/client/datasource/editor/wizard/StorageUI.jaxx
- client-datasource-editor-api/src/main/java/fr/ird/observe/client/datasource/editor/wizard/StorageUI.jcss
- client-datasource-editor-ll/src/main/java/fr/ird/observe/client/datasource/editor/content/data/ll/common/TripUIHandler.java
- observe-i18n/src/main/i18n/translations/observe_en_GB.properties
- observe-i18n/src/main/i18n/translations/observe_es_ES.properties
- observe-i18n/src/main/i18n/translations/observe_fr_FR.properties
- pom.xml
Changes:
=====================================
client-configuration/src/main/config/Client.ini
=====================================
@@ -627,6 +627,18 @@ key = ui.temperature.format
type = org.nuiton.jaxx.widgets.temperature.TemperatureFormat
defaultValue = "C"
+[option busyStateColor]
+description = observe.config.ui.busyStateColor
+key = ui.busyState.color
+type = java.awt.Color
+defaultValue = "java.awt.Color[r=50,g=50,b=50]"
+
+[option blockStateColor]
+description = observe.config.ui.blockStateColor
+key = ui.blockState.color
+type = java.awt.Color
+defaultValue = "java.awt.Color[r=50,g=50,b=50]"
+
[option focusBorderColor]
description = observe.config.ui.focusBorderColor
key = ui.focusBorder.color
=====================================
client-configuration/src/main/i18n/getters/config.getter
=====================================
@@ -92,6 +92,8 @@ observe.config.speciesList.seine.observation.targetCatch
observe.config.swingSessionFile.description
observe.config.temperature.format
observe.config.ui.autoPopupNumberEditor
+observe.config.ui.blockStateColor
+observe.config.ui.busyStateColor
observe.config.ui.changeSynchroSrc
observe.config.ui.dcp.error.color
observe.config.ui.dcp.not.editable.color
=====================================
client-configuration/src/main/java/fr/ird/observe/client/configuration/ClientConfig.java
=====================================
@@ -59,6 +59,7 @@ import org.nuiton.util.StringUtil;
import org.nuiton.version.Version;
import org.nuiton.version.Versions;
+import javax.swing.UIManager;
import java.io.File;
import java.io.IOException;
import java.nio.charset.StandardCharsets;
@@ -681,6 +682,8 @@ public class ClientConfig extends GeneratedClientConfig implements TemplateGener
loadUIConfigFile(ObserveClientResourceManager.Resource.ui_navigation_common, dir);
loadUIConfigFile(ObserveClientResourceManager.Resource.ui_navigation_ps, dir);
loadUIConfigFile(ObserveClientResourceManager.Resource.ui_navigation_ll, dir);
+ UIManager.getDefaults().put("BlockingLayerUI.busyColor", getBusyStateColor());
+ UIManager.getDefaults().put("BlockingLayerUI.blockColor", getBlockStateColor());
}
private void loadUIConfigFile(ObserveClientResourceManager.Resource resource, File resourceDirectory) {
=====================================
client-core/src/main/java/fr/ird/observe/client/main/ObserveMainUI.jaxx
=====================================
@@ -47,7 +47,7 @@
<ClientConfig id='config' initializer='getContextValue(ClientConfig.class)'/>
<MainUIBodyContentManager id="mainUIBodyContentManager" initializer='getContextValue(MainUIBodyContentManager.class)'/>
- <ObserveBlockingLayerUI id='busyBlockLayerUI'/>
+ <ObserveBlockingLayerUI id='busyBlockLayerUI' styleClass="busyBlockLayerUI"/>
<script><![CDATA[
=====================================
client-core/src/main/java/fr/ird/observe/client/main/ObserveMainUI.jcss
=====================================
@@ -72,10 +72,7 @@
}
#busyBlockLayerUI {
- useIcon: false;
- blockingColor: {UIManager.getColor("BlockingLayerUI.blockingColor")};
block: {model.isBusy()};
- acceptedComponentNames: {UIHelper.ACCEPTABLE_COMPONENTS};
}
#serverMode {
=====================================
client-core/src/main/java/fr/ird/observe/client/main/body/ClientConfigUI.java
=====================================
@@ -170,6 +170,8 @@ public class ClientConfigUI extends JXTitledPanel {
helper.addOption(ClientConfigOption.SHOW_MNEMONIC);
helper.addOption(ClientConfigOption.COORDINATE_FORMAT);
+ helper.addOption(ClientConfigOption.BUSY_STATE_COLOR);
+ helper.addOption(ClientConfigOption.BLOCK_STATE_COLOR);
helper.addOption(ClientConfigOption.FOCUS_BORDER_COLOR);
helper.addOption(ClientConfigOption.NO_FOCUS_BORDER_COLOR);
helper.addOption(ClientConfigOption.FLOATING_OBJECT_MATERIAL_ERROR_COLOR);
=====================================
client-core/src/main/java/fr/ird/observe/client/main/callback/ReloadUiCallback.java
=====================================
@@ -27,6 +27,7 @@ import fr.ird.observe.client.ClientUIContext;
import fr.ird.observe.client.configuration.ClientConfig;
import fr.ird.observe.client.configuration.WithClientConfig;
import fr.ird.observe.client.main.ObserveMainUI;
+import fr.ird.observe.client.main.body.ClientConfigUI;
import fr.ird.observe.client.main.body.NoBodyContentComponent;
import io.ultreia.java4all.application.context.ApplicationContext;
import org.nuiton.jaxx.runtime.swing.SwingUtil;
@@ -71,44 +72,24 @@ public class ReloadUiCallback implements ObserveUICallback, WithClientConfig {
// scan main ui
-// ObserveSwingDataSource mainStorage = getObserveDataSourcesManager().getMainDataSource();
-
//FIXME:BodyContent, cela doit être délégué au body content concerné
Class<? extends JComponent> bodyContent = NoBodyContentComponent.class;
if (ui != null) {
+ // Keep a reference on ui instance since it will be reset in close method
+ // FIXME Should use a closing state in application to improve this
+ ObserveMainUI ui = this.ui;
bodyContent = ui.getMainUIBodyContentManager().getCurrentBodyType();
+ if (ClientConfigUI.class.equals(bodyContent)) {
+ bodyContent = NoBodyContentComponent.class;
+ }
ui.dispose();
- ui.setVisible(false);
System.runFinalization();
}
-// focusBorder = null;
-// noFocusBorder = null;
ui = clientUIContext.initUI(rootContext, config);
- //FIXME:BodyContent : We must improve this, but for the moment, we could just open main ui empty...
-// if (bodyContent == null) {
-// if (mainStorage == null) {
-// bodyContent = NoBodyContent.NoBodyContentComponent.class;
-// } else {
-// throw new IllegalStateException("Can't have a loaded database, but not loaded in gui...");
-// }
-// }
-
ui.changeBodyContent(bodyContent);
- //FIXME:BodyContent this will be done in data source editor body content
-// if (oldMode == ObserveUIMode.DB) {
-//
-// // on met à jour le modèle de navigation
-// NavigationTreeModel treeModel = ui.getNavigationUI().getTree().getModel();
-// treeModel.load(config);
-// treeModel.populate(mainStorage);
-//
-// // selection du noeud d'ouverture
-// ui.getNavigationUI().getTree().selectInitialNode();
-// }
-
// show ui
clientUIContext.setMainUIVisible(ui, true);
}
=====================================
client-core/src/main/resources/fr/ird/observe/client/ui/ObserveCommon.jcss
=====================================
@@ -172,3 +172,14 @@ BlockingLayerUI {
acceptedComponentTypes: {javax.swing.JScrollBar.class};
}
+.busyBlockLayerUI {
+ useIcon: false;
+ blockingColor: {javax.swing.UIManager.getColor("BlockingLayerUI.busyColor")};
+ acceptedComponentNames: {fr.ird.observe.client.util.UIHelper.ACCEPTABLE_COMPONENTS};
+}
+
+.blockBlockLayerUI {
+ useIcon: false;
+ blockingColor: {javax.swing.UIManager.getColor("BlockingLayerUI.blockingColor")};
+ acceptedComponentNames: {fr.ird.observe.client.util.UIHelper.ACCEPTABLE_COMPONENTS};
+}
=====================================
client-core/src/main/resources/observe-ui.properties
=====================================
@@ -189,3 +189,4 @@ color.Table.lastRowColor=255,255,0
color.Table.emptyRowColor=255,255,0
color.Table.unvalidCellColor=255,0,0
color.BlockingLayerUI.blockingColor=50,50,50
+color.BlockingLayerUI.busyColor=50,50,50
=====================================
client-datasource-actions/src/main/java/fr/ird/observe/client/datasource/actions/AdminTabUI.jcss
=====================================
@@ -92,7 +92,3 @@
columnHeaderView:{UIHelper.newLabel(t("observe.common.step.description") ,"information", 10)};
}
-#busyBlockLayerUI{
- useIcon:false;
- blockingColor:{UIManager.getColor("BlockingLayerUI.blockingColor")};
-}
=====================================
client-datasource-actions/src/main/java/fr/ird/observe/client/datasource/actions/AdminUI.jaxx
=====================================
@@ -37,13 +37,13 @@
<AdminUIModel id='model' initializer='getContextValue(AdminUIModel.class)'/>
<!-- le bloqueur d'ui utilisé par l'assistant -->
- <ObserveBlockingLayerUI id='tabBusyBlockLayerUI'/>
+ <ObserveBlockingLayerUI id='tabBusyBlockLayerUI' styleClass="busyBlockLayerUI"/>
<!-- le bloqueur d'ui lorsqu'une action est en cours ou annulée -->
- <ObserveBlockingLayerUI id='busyBlockLayerUI'/>
+ <ObserveBlockingLayerUI id='busyBlockLayerUI' styleClass="busyBlockLayerUI"/>
<!-- le bloqueur de changement de configuration -->
- <ObserveBlockingLayerUI id='configBlockLayerUI'/>
+ <ObserveBlockingLayerUI id='configBlockLayerUI' styleClass="blockBlockLayerUI"/>
<script><![CDATA[
=====================================
client-datasource-actions/src/main/java/fr/ird/observe/client/datasource/actions/AdminUI.jcss
=====================================
@@ -24,24 +24,12 @@
layout:{new BorderLayout()};
}
-#tabBusyBlockLayerUI {
- useIcon:false;
- blockingColor:{UIManager.getColor("BlockingLayerUI.blockingColor")};
- acceptedComponentNames:{UIHelper.ACCEPTABLE_COMPONENTS};
-}
-
#busyBlockLayerUI{
- useIcon:false;
block:{WizardExtUtil.acceptStates(model.getModelState(), WizardState.CANCELED, WizardState.SUCCESSED, WizardState.FAILED)};
- blockingColor:{UIManager.getColor("BlockingLayerUI.blockingColor")};
- acceptedComponentNames:{UIHelper.ACCEPTABLE_COMPONENTS};
}
#configBlockLayerUI {
- useIcon:false;
- blockingColor:{UIManager.getColor("BlockingLayerUI.blockingColor")};
block:{model.isWasStarted() || WizardExtUtil.acceptStates(model.getModelState(), WizardState.CANCELED)};
- acceptedComponentNames:{UIHelper.ACCEPTABLE_COMPONENTS};
}
#tabs {
=====================================
client-datasource-editor-api/src/main/i18n/getters/java.getter
=====================================
@@ -239,6 +239,7 @@ observe.tree.action.configure.tip
observe.tree.action.expandAll.tip
observe.tree.action.selectAll.tip
observe.tree.action.unselectAll.tip
+observe.ui.tree.navigation.loaded
observe.ui.tree.referential.common
observe.ui.tree.referential.ll.common
observe.ui.tree.referential.ll.landing
=====================================
client-datasource-editor-api/src/main/java/fr/ird/observe/client/datasource/editor/content/ContentUI.jaxx
=====================================
@@ -59,7 +59,7 @@
<String id='contentTitle' javaBean='null'/>
- <ContentUIBlockingLayerUI id='blockLayerUI' constructorParams="this"/>
+ <ContentUIBlockingLayerUI id='blockLayerUI' constructorParams="this" styleClass="blockBlockLayerUI"/>
<script><![CDATA[
public abstract ContentUIHandler getHandler();
=====================================
client-datasource-editor-api/src/main/java/fr/ird/observe/client/datasource/editor/content/ContentUI.jcss
=====================================
@@ -21,8 +21,6 @@
*/
#blockLayerUI {
- useIcon:false;
- blockingColor:{UIManager.getColor("BlockingLayerUI.blockingColor")};
block:{body.isVisible() && !model.isEnabled()};
}
=====================================
client-datasource-editor-api/src/main/java/fr/ird/observe/client/datasource/editor/content/data/table/ContentTableUI.jaxx
=====================================
@@ -64,7 +64,7 @@
<ListSelectionModel id='selectionModel' initializer='getModel().getSelectionModel()' onValueChanged='getHandler().updateEditor(event)'/>
<!-- le bloqueur de l'editeur d'une entrée du tableau -->
- <ContentTableEditorLayerUI id='editorBlockLayerUI' constructorParams="this"/>
+ <ContentTableEditorLayerUI id='editorBlockLayerUI' constructorParams="this" styleClass="blockBlockLayerUI"/>
<DataDto id='bean' initializer='getModel().getBean()'/>
<DataDto id='tableEditBean' initializer='getModel().getTableEditBean()'/>
=====================================
client-datasource-editor-api/src/main/java/fr/ird/observe/client/datasource/editor/content/data/table/ContentTableUI.jcss
=====================================
@@ -42,8 +42,6 @@
}
#editorBlockLayerUI {
- useIcon:false;
- blockingColor:{UIManager.getColor("BlockingLayerUI.blockingColor")};
block:{!tableModel.isEditable()};
}
=====================================
client-datasource-editor-api/src/main/java/fr/ird/observe/client/datasource/editor/content/ref/ContentReferenceUI.jaxx
=====================================
@@ -60,7 +60,7 @@
<java.lang.String id='pluralTypeI18nKey' initializer='t(ObserveI18nDecoratorHelper.getTypeI18nKey(bean.getClass()))'/>
<java.lang.String id='typeI18nKey' initializer='t(ObserveI18nDecoratorHelper.getTypeI18nKey(bean.getClass()))'/>
- <ObserveBlockingLayerUI id='editKeyTableLayerUI'/>
+ <ObserveBlockingLayerUI id='editKeyTableLayerUI' styleClass="blockBlockLayerUI"/>
<CardLayout2Ext id='viewLayout' constructorParams='this, "body"'/>
=====================================
client-datasource-editor-api/src/main/java/fr/ird/observe/client/datasource/editor/content/ref/ContentReferenceUI.jcss
=====================================
@@ -27,8 +27,6 @@
}
#editKeyTableLayerUI {
- useIcon:false;
- blockingColor:{UIManager.getColor("BlockingLayerUI.blockingColor")};
block:{model.isUpdatingMode()};
}
=====================================
client-datasource-editor-api/src/main/java/fr/ird/observe/client/datasource/editor/tree/navigation/actions/NavigationConfigUIToggleShowActionSupport.java
=====================================
@@ -22,6 +22,8 @@ package fr.ird.observe.client.datasource.editor.tree.navigation.actions;
* #L%
*/
+import fr.ird.observe.client.ClientUIContext;
+import fr.ird.observe.client.WithClientUIContext;
import fr.ird.observe.client.configuration.NavigationTreeConfig;
import fr.ird.observe.client.datasource.api.WithObserveDataSourcesManager;
import fr.ird.observe.client.datasource.editor.tree.navigation.NavigationTree;
@@ -29,19 +31,23 @@ import fr.ird.observe.client.datasource.editor.tree.navigation.NavigationTreeMod
import fr.ird.observe.client.datasource.editor.tree.navigation.NavigationUI;
import fr.ird.observe.client.datasource.editor.tree.navigation.nodes.NavigationTreeNodeSupport;
import fr.ird.observe.services.ObserveServicesProvider;
+import io.ultreia.java4all.lang.Strings;
import org.apache.logging.log4j.LogManager;
import org.apache.logging.log4j.Logger;
import javax.swing.Icon;
import javax.swing.KeyStroke;
+import javax.swing.SwingUtilities;
import java.awt.event.ActionEvent;
+import static io.ultreia.java4all.i18n.I18n.t;
+
/**
* Created by tchemit on 03/10/2018.
*
* @author Tony Chemit - dev(a)tchemit.fr
*/
-public abstract class NavigationConfigUIToggleShowActionSupport extends NavigationConfigUIActionSupport implements WithObserveDataSourcesManager {
+public abstract class NavigationConfigUIToggleShowActionSupport extends NavigationConfigUIActionSupport implements WithObserveDataSourcesManager, WithClientUIContext {
private static final Logger log = LogManager.getLogger(NavigationConfigUIToggleShowActionSupport.class);
@@ -51,7 +57,17 @@ public abstract class NavigationConfigUIToggleShowActionSupport extends Navigati
@Override
protected void doActionPerformed(ActionEvent e, NavigationUI ui) {
- tryToUpdateNavigationTree(ui);
+ ClientUIContext clientUIContext = getClientUIContext();
+ clientUIContext.setBusy(true);
+ SwingUtilities.invokeLater(()->{
+ try {
+ long t0 = System.nanoTime();
+ tryToUpdateNavigationTree(ui);
+ clientUIContext.setUiStatus(t("observe.ui.tree.navigation.loaded", Strings.convertTime(System.nanoTime()-t0)));
+ } finally {
+ clientUIContext.setBusy(false);
+ }
+ });
}
private void tryToUpdateNavigationTree(NavigationUI ui) {
=====================================
client-datasource-editor-api/src/main/java/fr/ird/observe/client/datasource/editor/wizard/StorageUI.jaxx
=====================================
@@ -41,7 +41,7 @@
<StorageUIModel id='model' javaBean='getContextValue(StorageUIModel.class)'/>
- <ObserveBlockingLayerUI id='busyBlockLayerUI'/>
+ <ObserveBlockingLayerUI id='busyBlockLayerUI' styleClass="busyBlockLayerUI"/>
<JPanel visible="false">
<ChooseDbModeUI id='CHOOSE_DB_MODE' constructorParams='this'/>
=====================================
client-datasource-editor-api/src/main/java/fr/ird/observe/client/datasource/editor/wizard/StorageUI.jcss
=====================================
@@ -32,11 +32,6 @@ StorageTabUI {
layout:{new BorderLayout()};
}
-#busyBlockLayerUI {
- useIcon:false;
- blockingColor:{UIManager.getColor("BlockingLayerUI.blockingColor")};
-}
-
#tabs {
border:{BorderFactory.createEmptyBorder(6,6,6,6)};
}
=====================================
client-datasource-editor-ll/src/main/java/fr/ird/observe/client/datasource/editor/content/data/ll/common/TripUIHandler.java
=====================================
@@ -82,8 +82,6 @@ class TripUIHandler extends ContentOpenableUIHandler<TripDto, TripReference, Tri
@Override
public void afterInit(TripUI ui) {
- //FIXME in jaxx (tabInfo is modified before registred in JTabbedPane...)
- ui.getMainTabbedPane().setTitleAt(1, ui.getSpeciesTab().getTitle());
super.afterInit(ui);
tripUIHelper = new TripUIHelper<TripUI>(ui, prefix) {
=====================================
observe-i18n/src/main/i18n/translations/observe_en_GB.properties
=====================================
@@ -543,6 +543,8 @@ observe.config.speciesList.seine.observation.targetCatch=Species for target catc
observe.config.swingSessionFile.description=Swing session file.
observe.config.temperature.format=Default temperature format
observe.config.ui.autoPopupNumberEditor=Flag sets to true when number editor show automaticly popup
+observe.config.ui.blockStateColor=Color of block state
+observe.config.ui.busyStateColor=Color of busy state
observe.config.ui.changeSynchroSrc=Flag sets to true if you can change local source in admin tasks
observe.config.ui.dcp.error.color=Color to notify errors while validating floating object materials.
observe.config.ui.dcp.not.editable.color=Color to notify not editable floating object material nodes.
@@ -2962,6 +2964,7 @@ observe.ui.tree.data.ps.routes=Routes
observe.ui.tree.data.ps.schoolEstimate=School estimates
observe.ui.tree.data.ps.set.unsaved=New set
observe.ui.tree.data.ps.trip.unsaved=New trip
+observe.ui.tree.navigation.loaded=Navigation tree reloaded (in %s)
observe.ui.tree.referential.common=Common Referential
observe.ui.tree.referential.ll.common=Longline Referential - Common
observe.ui.tree.referential.ll.landing=Longline Referential - Landing
=====================================
observe-i18n/src/main/i18n/translations/observe_es_ES.properties
=====================================
@@ -543,6 +543,8 @@ observe.config.speciesList.seine.observation.targetCatch=Especies par las captur
observe.config.swingSessionFile.description=Copia de seguridad del estado del UI.
observe.config.temperature.format=Unidad de temperatura
observe.config.ui.autoPopupNumberEditor=Para mostrar automáticamente el editor numérico durante la edición de un número
+observe.config.ui.blockStateColor=Color of block state \#TODO
+observe.config.ui.busyStateColor=Color of busy state \#TODO
observe.config.ui.changeSynchroSrc=Para autorizar la seleción de la base fuente durante las operaciones sobre la base
observe.config.ui.dcp.error.color=Color para notificar los errores sobre la composición de dcps
observe.config.ui.dcp.not.editable.color=Color to notify not editable floating object material nodes \#TODO
@@ -2962,6 +2964,7 @@ observe.ui.tree.data.ps.routes=Rutas
observe.ui.tree.data.ps.schoolEstimate=Estimaciones banco
observe.ui.tree.data.ps.set.unsaved=Nuevo lance
observe.ui.tree.data.ps.trip.unsaved=Nueva marea
+observe.ui.tree.navigation.loaded=Navigation tree reloaded (in %s) \#TODO
observe.ui.tree.referential.common=Referencial commun
observe.ui.tree.referential.ll.common=Referencial Palangre - Common \#TODO
observe.ui.tree.referential.ll.landing=Referencial Palangre - Landing \#TODO
=====================================
observe-i18n/src/main/i18n/translations/observe_fr_FR.properties
=====================================
@@ -543,6 +543,8 @@ observe.config.speciesList.seine.observation.targetCatch=Espèces pour les captu
observe.config.swingSessionFile.description=Fichier de sauvegarde des états des UI.
observe.config.temperature.format=Unité de température
observe.config.ui.autoPopupNumberEditor=Pour afficher automatiquement l'éditeur numérique lors de l'édition d'un nombre
+observe.config.ui.blockStateColor=Couleur lorsque l'on bloque une partie de l'application
+observe.config.ui.busyStateColor=Couleur lorsque l'application est occupée
observe.config.ui.changeSynchroSrc=Pour autoriser la sélection de la base source dans les opérations sur base
observe.config.ui.dcp.error.color=Couleur pour notifier les erreurs sur la composition des dcps
observe.config.ui.dcp.not.editable.color=Couleur pour notifier les nœuds non éditables dans l'arbre des matériaux de dcp.
@@ -2962,6 +2964,7 @@ observe.ui.tree.data.ps.routes=Routes
observe.ui.tree.data.ps.schoolEstimate=Estimation banc
observe.ui.tree.data.ps.set.unsaved=Nouvelle calée
observe.ui.tree.data.ps.trip.unsaved=Nouvelle marée
+observe.ui.tree.navigation.loaded=Arbre de navigation rechargé (en %s)
observe.ui.tree.referential.common=Référentiel commun
observe.ui.tree.referential.ll.common=Référentiel Palangre - Commun
observe.ui.tree.referential.ll.landing=Référentiel Palangre - Débarquement
=====================================
pom.xml
=====================================
@@ -24,7 +24,7 @@
<parent>
<groupId>io.ultreia.maven</groupId>
<artifactId>pom</artifactId>
- <version>2020.14</version>
+ <version>2020.15</version>
</parent>
<groupId>fr.ird.observe</groupId>
@@ -170,7 +170,7 @@
<!-- <lib.version.java4all.topia>1.17</lib.version.java4all.topia>-->
<!--<lib.version.java4all.eugene>3.0<-alpha-22</lib.version.java4all.eugene>-->
- <!-- <lib.version.java4all.jaxx>3.0-alpha-64-SNAPSHOT</lib.version.java4all.jaxx>-->
+<!-- <lib.version.java4all.jaxx>3.0-alpha-66-SNAPSHOT</lib.version.java4all.jaxx>-->
<!--<lib.version.java4all.application-context>1.0.3-SNAPSHOT</lib.version.java4all.application-context>-->
<!--<lib.version.java4all.application-template>1.0.2-SNAPSHOT</lib.version.java4all.application-template>-->
<!--<lib.version.java4all.i18n>4.0-beta-3-SNAPSHOT</lib.version.java4all.i18n>-->
View it on GitLab: https://gitlab.com/ultreiaio/ird-observe/-/compare/4ad63b3274dea5ea4034d12d…
--
View it on GitLab: https://gitlab.com/ultreiaio/ird-observe/-/compare/4ad63b3274dea5ea4034d12d…
You're receiving this email because of your account on gitlab.com.
1
0
06 Apr '20
Tony CHEMIT pushed to branch develop at ultreiaio / ird-observe
Commits:
4ad63b32 by tchemit at 2020-04-06T13:00:35+02:00
Fix NPE when reload ui callback
- - - - -
1 changed file:
- client-core/src/main/java/fr/ird/observe/client/main/callback/ReloadUiCallback.java
Changes:
=====================================
client-core/src/main/java/fr/ird/observe/client/main/callback/ReloadUiCallback.java
=====================================
@@ -27,6 +27,7 @@ import fr.ird.observe.client.ClientUIContext;
import fr.ird.observe.client.configuration.ClientConfig;
import fr.ird.observe.client.configuration.WithClientConfig;
import fr.ird.observe.client.main.ObserveMainUI;
+import fr.ird.observe.client.main.body.ClientConfigUI;
import fr.ird.observe.client.main.body.NoBodyContentComponent;
import io.ultreia.java4all.application.context.ApplicationContext;
import org.nuiton.jaxx.runtime.swing.SwingUtil;
@@ -71,44 +72,24 @@ public class ReloadUiCallback implements ObserveUICallback, WithClientConfig {
// scan main ui
-// ObserveSwingDataSource mainStorage = getObserveDataSourcesManager().getMainDataSource();
-
//FIXME:BodyContent, cela doit être délégué au body content concerné
Class<? extends JComponent> bodyContent = NoBodyContentComponent.class;
if (ui != null) {
+ // Keep a reference on ui instance since it will be reset in close method
+ // FIXME Should use a closing state in application to improve this
+ ObserveMainUI ui = this.ui;
bodyContent = ui.getMainUIBodyContentManager().getCurrentBodyType();
+ if (ClientConfigUI.class.equals(bodyContent)) {
+ bodyContent = NoBodyContentComponent.class;
+ }
ui.dispose();
- ui.setVisible(false);
System.runFinalization();
}
-// focusBorder = null;
-// noFocusBorder = null;
ui = clientUIContext.initUI(rootContext, config);
- //FIXME:BodyContent : We must improve this, but for the moment, we could just open main ui empty...
-// if (bodyContent == null) {
-// if (mainStorage == null) {
-// bodyContent = NoBodyContent.NoBodyContentComponent.class;
-// } else {
-// throw new IllegalStateException("Can't have a loaded database, but not loaded in gui...");
-// }
-// }
-
ui.changeBodyContent(bodyContent);
- //FIXME:BodyContent this will be done in data source editor body content
-// if (oldMode == ObserveUIMode.DB) {
-//
-// // on met à jour le modèle de navigation
-// NavigationTreeModel treeModel = ui.getNavigationUI().getTree().getModel();
-// treeModel.load(config);
-// treeModel.populate(mainStorage);
-//
-// // selection du noeud d'ouverture
-// ui.getNavigationUI().getTree().selectInitialNode();
-// }
-
// show ui
clientUIContext.setMainUIVisible(ui, true);
}
View it on GitLab: https://gitlab.com/ultreiaio/ird-observe/-/commit/4ad63b3274dea5ea4034d12dd…
--
View it on GitLab: https://gitlab.com/ultreiaio/ird-observe/-/commit/4ad63b3274dea5ea4034d12dd…
You're receiving this email because of your account on gitlab.com.
1
0
[Git][ultreiaio/ird-observe][develop] 3 commits: improve log loading and some levels
by Tony CHEMIT 06 Apr '20
by Tony CHEMIT 06 Apr '20
06 Apr '20
Tony CHEMIT pushed to branch develop at ultreiaio / ird-observe
Commits:
31e88a84 by tchemit at 2020-04-05T18:20:30+02:00
improve log loading and some levels
- - - - -
e9165033 by tchemit at 2020-04-05T19:03:31+02:00
Mise à jour jaxx avec des améliorations sur les JTabbedPane
- - - - -
dee693f3 by tchemit at 2020-04-06T12:22:28+02:00
Lors d'un 'Rechargement de la source' ou d'un appel aux filtres d'affichage de l'arbre, afficher une barre de progression - Closes #1386
- - - - -
28 changed files:
- client-configuration/src/main/config/Client.ini
- client-configuration/src/main/i18n/getters/config.getter
- client-configuration/src/main/java/fr/ird/observe/client/configuration/ClientConfig.java
- client-configuration/src/main/resources/log4j2.xml
- client-configuration/src/main/resources/observe-log4j2.xml
- client-core/src/main/java/fr/ird/observe/client/main/ObserveMainUI.jaxx
- client-core/src/main/java/fr/ird/observe/client/main/ObserveMainUI.jcss
- client-core/src/main/java/fr/ird/observe/client/main/body/ClientConfigUI.java
- client-core/src/main/resources/fr/ird/observe/client/ui/ObserveCommon.jcss
- client-core/src/main/resources/observe-ui.properties
- client-datasource-actions/src/main/java/fr/ird/observe/client/datasource/actions/AdminTabUI.jcss
- client-datasource-actions/src/main/java/fr/ird/observe/client/datasource/actions/AdminUI.jaxx
- client-datasource-actions/src/main/java/fr/ird/observe/client/datasource/actions/AdminUI.jcss
- client-datasource-editor-api/src/main/i18n/getters/java.getter
- client-datasource-editor-api/src/main/java/fr/ird/observe/client/datasource/editor/content/ContentUI.jaxx
- client-datasource-editor-api/src/main/java/fr/ird/observe/client/datasource/editor/content/ContentUI.jcss
- client-datasource-editor-api/src/main/java/fr/ird/observe/client/datasource/editor/content/data/table/ContentTableUI.jaxx
- client-datasource-editor-api/src/main/java/fr/ird/observe/client/datasource/editor/content/data/table/ContentTableUI.jcss
- client-datasource-editor-api/src/main/java/fr/ird/observe/client/datasource/editor/content/ref/ContentReferenceUI.jaxx
- client-datasource-editor-api/src/main/java/fr/ird/observe/client/datasource/editor/content/ref/ContentReferenceUI.jcss
- client-datasource-editor-api/src/main/java/fr/ird/observe/client/datasource/editor/tree/navigation/actions/NavigationConfigUIToggleShowActionSupport.java
- client-datasource-editor-api/src/main/java/fr/ird/observe/client/datasource/editor/wizard/StorageUI.jaxx
- client-datasource-editor-api/src/main/java/fr/ird/observe/client/datasource/editor/wizard/StorageUI.jcss
- client-datasource-editor-ll/src/main/java/fr/ird/observe/client/datasource/editor/content/data/ll/common/TripUIHandler.java
- observe-i18n/src/main/i18n/translations/observe_en_GB.properties
- observe-i18n/src/main/i18n/translations/observe_es_ES.properties
- observe-i18n/src/main/i18n/translations/observe_fr_FR.properties
- pom.xml
Changes:
=====================================
client-configuration/src/main/config/Client.ini
=====================================
@@ -627,6 +627,18 @@ key = ui.temperature.format
type = org.nuiton.jaxx.widgets.temperature.TemperatureFormat
defaultValue = "C"
+[option busyStateColor]
+description = observe.config.ui.busyStateColor
+key = ui.busyState.color
+type = java.awt.Color
+defaultValue = "java.awt.Color[r=50,g=50,b=50]"
+
+[option blockStateColor]
+description = observe.config.ui.blockStateColor
+key = ui.blockState.color
+type = java.awt.Color
+defaultValue = "java.awt.Color[r=50,g=50,b=50]"
+
[option focusBorderColor]
description = observe.config.ui.focusBorderColor
key = ui.focusBorder.color
=====================================
client-configuration/src/main/i18n/getters/config.getter
=====================================
@@ -92,6 +92,8 @@ observe.config.speciesList.seine.observation.targetCatch
observe.config.swingSessionFile.description
observe.config.temperature.format
observe.config.ui.autoPopupNumberEditor
+observe.config.ui.blockStateColor
+observe.config.ui.busyStateColor
observe.config.ui.changeSynchroSrc
observe.config.ui.dcp.error.color
observe.config.ui.dcp.not.editable.color
=====================================
client-configuration/src/main/java/fr/ird/observe/client/configuration/ClientConfig.java
=====================================
@@ -59,6 +59,7 @@ import org.nuiton.util.StringUtil;
import org.nuiton.version.Version;
import org.nuiton.version.Versions;
+import javax.swing.UIManager;
import java.io.File;
import java.io.IOException;
import java.nio.charset.StandardCharsets;
@@ -215,7 +216,11 @@ public class ClientConfig extends GeneratedClientConfig implements TemplateGener
File logFile = getLogConfigurationFile();
- log.info("Chargement du fichier de de log4j depuis " + logFile);
+ if (isVersionSnapshot() || logFile.exists()) {
+ Files.deleteIfExists(logFile.toPath());
+ }
+
+ log.info(String.format("Loading user log file at %s", logFile));
ObserveUtil.loadLogConfiguration(ObserveClientResourceManager.Resource.LOG_CONFIGURATION_FILE.getUrl(), logFile.toPath(), this);
@@ -677,6 +682,8 @@ public class ClientConfig extends GeneratedClientConfig implements TemplateGener
loadUIConfigFile(ObserveClientResourceManager.Resource.ui_navigation_common, dir);
loadUIConfigFile(ObserveClientResourceManager.Resource.ui_navigation_ps, dir);
loadUIConfigFile(ObserveClientResourceManager.Resource.ui_navigation_ll, dir);
+ UIManager.getDefaults().put("BlockingLayerUI.busyColor", getBusyStateColor());
+ UIManager.getDefaults().put("BlockingLayerUI.blockColor", getBlockStateColor());
}
private void loadUIConfigFile(ObserveClientResourceManager.Resource resource, File resourceDirectory) {
=====================================
client-configuration/src/main/resources/log4j2.xml
=====================================
@@ -51,10 +51,6 @@
<AppenderRef ref="console"/>
<AppenderRef ref="File"/>
</Logger>
- <Logger name="org.nuiton.jaxx.validator.swing.SwingValidator" level="error" additivity="false">
- <AppenderRef ref="console"/>
- <AppenderRef ref="File"/>
- </Logger>
<Logger name="fr.ird.observe.client.validators" level="warn" additivity="false">
<AppenderRef ref="console"/>
<AppenderRef ref="File"/>
=====================================
client-configuration/src/main/resources/observe-log4j2.xml
=====================================
@@ -63,10 +63,6 @@
<AppenderRef ref="console"/>
<AppenderRef ref="File"/>
</Logger>
-<!-- <Logger name="org.nuiton.jaxx.runtime.swing.action.JAXXObjectActionSupport" level="info" additivity="false">-->
-<!-- <AppenderRef ref="console"/>-->
-<!-- <AppenderRef ref="File"/>-->
-<!-- </Logger>-->
<Logger name="org.hibernate" level="warn" additivity="false">
<AppenderRef ref="console"/>
<AppenderRef ref="File"/>
=====================================
client-core/src/main/java/fr/ird/observe/client/main/ObserveMainUI.jaxx
=====================================
@@ -47,7 +47,7 @@
<ClientConfig id='config' initializer='getContextValue(ClientConfig.class)'/>
<MainUIBodyContentManager id="mainUIBodyContentManager" initializer='getContextValue(MainUIBodyContentManager.class)'/>
- <ObserveBlockingLayerUI id='busyBlockLayerUI'/>
+ <ObserveBlockingLayerUI id='busyBlockLayerUI' styleClass="busyBlockLayerUI"/>
<script><![CDATA[
=====================================
client-core/src/main/java/fr/ird/observe/client/main/ObserveMainUI.jcss
=====================================
@@ -72,10 +72,7 @@
}
#busyBlockLayerUI {
- useIcon: false;
- blockingColor: {UIManager.getColor("BlockingLayerUI.blockingColor")};
block: {model.isBusy()};
- acceptedComponentNames: {UIHelper.ACCEPTABLE_COMPONENTS};
}
#serverMode {
=====================================
client-core/src/main/java/fr/ird/observe/client/main/body/ClientConfigUI.java
=====================================
@@ -170,6 +170,8 @@ public class ClientConfigUI extends JXTitledPanel {
helper.addOption(ClientConfigOption.SHOW_MNEMONIC);
helper.addOption(ClientConfigOption.COORDINATE_FORMAT);
+ helper.addOption(ClientConfigOption.BUSY_STATE_COLOR);
+ helper.addOption(ClientConfigOption.BLOCK_STATE_COLOR);
helper.addOption(ClientConfigOption.FOCUS_BORDER_COLOR);
helper.addOption(ClientConfigOption.NO_FOCUS_BORDER_COLOR);
helper.addOption(ClientConfigOption.FLOATING_OBJECT_MATERIAL_ERROR_COLOR);
=====================================
client-core/src/main/resources/fr/ird/observe/client/ui/ObserveCommon.jcss
=====================================
@@ -172,3 +172,14 @@ BlockingLayerUI {
acceptedComponentTypes: {javax.swing.JScrollBar.class};
}
+.busyBlockLayerUI {
+ useIcon: false;
+ blockingColor: {javax.swing.UIManager.getColor("BlockingLayerUI.busyColor")};
+ acceptedComponentNames: {fr.ird.observe.client.util.UIHelper.ACCEPTABLE_COMPONENTS};
+}
+
+.blockBlockLayerUI {
+ useIcon: false;
+ blockingColor: {javax.swing.UIManager.getColor("BlockingLayerUI.blockingColor")};
+ acceptedComponentNames: {fr.ird.observe.client.util.UIHelper.ACCEPTABLE_COMPONENTS};
+}
=====================================
client-core/src/main/resources/observe-ui.properties
=====================================
@@ -189,3 +189,4 @@ color.Table.lastRowColor=255,255,0
color.Table.emptyRowColor=255,255,0
color.Table.unvalidCellColor=255,0,0
color.BlockingLayerUI.blockingColor=50,50,50
+color.BlockingLayerUI.busyColor=50,50,50
=====================================
client-datasource-actions/src/main/java/fr/ird/observe/client/datasource/actions/AdminTabUI.jcss
=====================================
@@ -92,7 +92,3 @@
columnHeaderView:{UIHelper.newLabel(t("observe.common.step.description") ,"information", 10)};
}
-#busyBlockLayerUI{
- useIcon:false;
- blockingColor:{UIManager.getColor("BlockingLayerUI.blockingColor")};
-}
=====================================
client-datasource-actions/src/main/java/fr/ird/observe/client/datasource/actions/AdminUI.jaxx
=====================================
@@ -37,13 +37,13 @@
<AdminUIModel id='model' initializer='getContextValue(AdminUIModel.class)'/>
<!-- le bloqueur d'ui utilisé par l'assistant -->
- <ObserveBlockingLayerUI id='tabBusyBlockLayerUI'/>
+ <ObserveBlockingLayerUI id='tabBusyBlockLayerUI' styleClass="busyBlockLayerUI"/>
<!-- le bloqueur d'ui lorsqu'une action est en cours ou annulée -->
- <ObserveBlockingLayerUI id='busyBlockLayerUI'/>
+ <ObserveBlockingLayerUI id='busyBlockLayerUI' styleClass="busyBlockLayerUI"/>
<!-- le bloqueur de changement de configuration -->
- <ObserveBlockingLayerUI id='configBlockLayerUI'/>
+ <ObserveBlockingLayerUI id='configBlockLayerUI' styleClass="blockBlockLayerUI"/>
<script><![CDATA[
=====================================
client-datasource-actions/src/main/java/fr/ird/observe/client/datasource/actions/AdminUI.jcss
=====================================
@@ -24,24 +24,12 @@
layout:{new BorderLayout()};
}
-#tabBusyBlockLayerUI {
- useIcon:false;
- blockingColor:{UIManager.getColor("BlockingLayerUI.blockingColor")};
- acceptedComponentNames:{UIHelper.ACCEPTABLE_COMPONENTS};
-}
-
#busyBlockLayerUI{
- useIcon:false;
block:{WizardExtUtil.acceptStates(model.getModelState(), WizardState.CANCELED, WizardState.SUCCESSED, WizardState.FAILED)};
- blockingColor:{UIManager.getColor("BlockingLayerUI.blockingColor")};
- acceptedComponentNames:{UIHelper.ACCEPTABLE_COMPONENTS};
}
#configBlockLayerUI {
- useIcon:false;
- blockingColor:{UIManager.getColor("BlockingLayerUI.blockingColor")};
block:{model.isWasStarted() || WizardExtUtil.acceptStates(model.getModelState(), WizardState.CANCELED)};
- acceptedComponentNames:{UIHelper.ACCEPTABLE_COMPONENTS};
}
#tabs {
=====================================
client-datasource-editor-api/src/main/i18n/getters/java.getter
=====================================
@@ -239,6 +239,7 @@ observe.tree.action.configure.tip
observe.tree.action.expandAll.tip
observe.tree.action.selectAll.tip
observe.tree.action.unselectAll.tip
+observe.ui.tree.navigation.loaded
observe.ui.tree.referential.common
observe.ui.tree.referential.ll.common
observe.ui.tree.referential.ll.landing
=====================================
client-datasource-editor-api/src/main/java/fr/ird/observe/client/datasource/editor/content/ContentUI.jaxx
=====================================
@@ -59,7 +59,7 @@
<String id='contentTitle' javaBean='null'/>
- <ContentUIBlockingLayerUI id='blockLayerUI' constructorParams="this"/>
+ <ContentUIBlockingLayerUI id='blockLayerUI' constructorParams="this" styleClass="blockBlockLayerUI"/>
<script><![CDATA[
public abstract ContentUIHandler getHandler();
=====================================
client-datasource-editor-api/src/main/java/fr/ird/observe/client/datasource/editor/content/ContentUI.jcss
=====================================
@@ -21,8 +21,6 @@
*/
#blockLayerUI {
- useIcon:false;
- blockingColor:{UIManager.getColor("BlockingLayerUI.blockingColor")};
block:{body.isVisible() && !model.isEnabled()};
}
=====================================
client-datasource-editor-api/src/main/java/fr/ird/observe/client/datasource/editor/content/data/table/ContentTableUI.jaxx
=====================================
@@ -64,7 +64,7 @@
<ListSelectionModel id='selectionModel' initializer='getModel().getSelectionModel()' onValueChanged='getHandler().updateEditor(event)'/>
<!-- le bloqueur de l'editeur d'une entrée du tableau -->
- <ContentTableEditorLayerUI id='editorBlockLayerUI' constructorParams="this"/>
+ <ContentTableEditorLayerUI id='editorBlockLayerUI' constructorParams="this" styleClass="blockBlockLayerUI"/>
<DataDto id='bean' initializer='getModel().getBean()'/>
<DataDto id='tableEditBean' initializer='getModel().getTableEditBean()'/>
=====================================
client-datasource-editor-api/src/main/java/fr/ird/observe/client/datasource/editor/content/data/table/ContentTableUI.jcss
=====================================
@@ -42,8 +42,6 @@
}
#editorBlockLayerUI {
- useIcon:false;
- blockingColor:{UIManager.getColor("BlockingLayerUI.blockingColor")};
block:{!tableModel.isEditable()};
}
=====================================
client-datasource-editor-api/src/main/java/fr/ird/observe/client/datasource/editor/content/ref/ContentReferenceUI.jaxx
=====================================
@@ -60,7 +60,7 @@
<java.lang.String id='pluralTypeI18nKey' initializer='t(ObserveI18nDecoratorHelper.getTypeI18nKey(bean.getClass()))'/>
<java.lang.String id='typeI18nKey' initializer='t(ObserveI18nDecoratorHelper.getTypeI18nKey(bean.getClass()))'/>
- <ObserveBlockingLayerUI id='editKeyTableLayerUI'/>
+ <ObserveBlockingLayerUI id='editKeyTableLayerUI' styleClass="blockBlockLayerUI"/>
<CardLayout2Ext id='viewLayout' constructorParams='this, "body"'/>
=====================================
client-datasource-editor-api/src/main/java/fr/ird/observe/client/datasource/editor/content/ref/ContentReferenceUI.jcss
=====================================
@@ -27,8 +27,6 @@
}
#editKeyTableLayerUI {
- useIcon:false;
- blockingColor:{UIManager.getColor("BlockingLayerUI.blockingColor")};
block:{model.isUpdatingMode()};
}
=====================================
client-datasource-editor-api/src/main/java/fr/ird/observe/client/datasource/editor/tree/navigation/actions/NavigationConfigUIToggleShowActionSupport.java
=====================================
@@ -22,6 +22,8 @@ package fr.ird.observe.client.datasource.editor.tree.navigation.actions;
* #L%
*/
+import fr.ird.observe.client.ClientUIContext;
+import fr.ird.observe.client.WithClientUIContext;
import fr.ird.observe.client.configuration.NavigationTreeConfig;
import fr.ird.observe.client.datasource.api.WithObserveDataSourcesManager;
import fr.ird.observe.client.datasource.editor.tree.navigation.NavigationTree;
@@ -29,19 +31,23 @@ import fr.ird.observe.client.datasource.editor.tree.navigation.NavigationTreeMod
import fr.ird.observe.client.datasource.editor.tree.navigation.NavigationUI;
import fr.ird.observe.client.datasource.editor.tree.navigation.nodes.NavigationTreeNodeSupport;
import fr.ird.observe.services.ObserveServicesProvider;
+import io.ultreia.java4all.lang.Strings;
import org.apache.logging.log4j.LogManager;
import org.apache.logging.log4j.Logger;
import javax.swing.Icon;
import javax.swing.KeyStroke;
+import javax.swing.SwingUtilities;
import java.awt.event.ActionEvent;
+import static io.ultreia.java4all.i18n.I18n.t;
+
/**
* Created by tchemit on 03/10/2018.
*
* @author Tony Chemit - dev(a)tchemit.fr
*/
-public abstract class NavigationConfigUIToggleShowActionSupport extends NavigationConfigUIActionSupport implements WithObserveDataSourcesManager {
+public abstract class NavigationConfigUIToggleShowActionSupport extends NavigationConfigUIActionSupport implements WithObserveDataSourcesManager, WithClientUIContext {
private static final Logger log = LogManager.getLogger(NavigationConfigUIToggleShowActionSupport.class);
@@ -51,7 +57,17 @@ public abstract class NavigationConfigUIToggleShowActionSupport extends Navigati
@Override
protected void doActionPerformed(ActionEvent e, NavigationUI ui) {
- tryToUpdateNavigationTree(ui);
+ ClientUIContext clientUIContext = getClientUIContext();
+ clientUIContext.setBusy(true);
+ SwingUtilities.invokeLater(()->{
+ try {
+ long t0 = System.nanoTime();
+ tryToUpdateNavigationTree(ui);
+ clientUIContext.setUiStatus(t("observe.ui.tree.navigation.loaded", Strings.convertTime(System.nanoTime()-t0)));
+ } finally {
+ clientUIContext.setBusy(false);
+ }
+ });
}
private void tryToUpdateNavigationTree(NavigationUI ui) {
=====================================
client-datasource-editor-api/src/main/java/fr/ird/observe/client/datasource/editor/wizard/StorageUI.jaxx
=====================================
@@ -41,7 +41,7 @@
<StorageUIModel id='model' javaBean='getContextValue(StorageUIModel.class)'/>
- <ObserveBlockingLayerUI id='busyBlockLayerUI'/>
+ <ObserveBlockingLayerUI id='busyBlockLayerUI' styleClass="busyBlockLayerUI"/>
<JPanel visible="false">
<ChooseDbModeUI id='CHOOSE_DB_MODE' constructorParams='this'/>
=====================================
client-datasource-editor-api/src/main/java/fr/ird/observe/client/datasource/editor/wizard/StorageUI.jcss
=====================================
@@ -32,11 +32,6 @@ StorageTabUI {
layout:{new BorderLayout()};
}
-#busyBlockLayerUI {
- useIcon:false;
- blockingColor:{UIManager.getColor("BlockingLayerUI.blockingColor")};
-}
-
#tabs {
border:{BorderFactory.createEmptyBorder(6,6,6,6)};
}
=====================================
client-datasource-editor-ll/src/main/java/fr/ird/observe/client/datasource/editor/content/data/ll/common/TripUIHandler.java
=====================================
@@ -82,8 +82,6 @@ class TripUIHandler extends ContentOpenableUIHandler<TripDto, TripReference, Tri
@Override
public void afterInit(TripUI ui) {
- //FIXME in jaxx (tabInfo is modified before registred in JTabbedPane...)
- ui.getMainTabbedPane().setTitleAt(1, ui.getSpeciesTab().getTitle());
super.afterInit(ui);
tripUIHelper = new TripUIHelper<TripUI>(ui, prefix) {
=====================================
observe-i18n/src/main/i18n/translations/observe_en_GB.properties
=====================================
@@ -543,6 +543,8 @@ observe.config.speciesList.seine.observation.targetCatch=Species for target catc
observe.config.swingSessionFile.description=Swing session file.
observe.config.temperature.format=Default temperature format
observe.config.ui.autoPopupNumberEditor=Flag sets to true when number editor show automaticly popup
+observe.config.ui.blockStateColor=Color of block state
+observe.config.ui.busyStateColor=Color of busy state
observe.config.ui.changeSynchroSrc=Flag sets to true if you can change local source in admin tasks
observe.config.ui.dcp.error.color=Color to notify errors while validating floating object materials.
observe.config.ui.dcp.not.editable.color=Color to notify not editable floating object material nodes.
@@ -2962,6 +2964,7 @@ observe.ui.tree.data.ps.routes=Routes
observe.ui.tree.data.ps.schoolEstimate=School estimates
observe.ui.tree.data.ps.set.unsaved=New set
observe.ui.tree.data.ps.trip.unsaved=New trip
+observe.ui.tree.navigation.loaded=Navigation tree reloaded (in %s)
observe.ui.tree.referential.common=Common Referential
observe.ui.tree.referential.ll.common=Longline Referential - Common
observe.ui.tree.referential.ll.landing=Longline Referential - Landing
=====================================
observe-i18n/src/main/i18n/translations/observe_es_ES.properties
=====================================
@@ -543,6 +543,8 @@ observe.config.speciesList.seine.observation.targetCatch=Especies par las captur
observe.config.swingSessionFile.description=Copia de seguridad del estado del UI.
observe.config.temperature.format=Unidad de temperatura
observe.config.ui.autoPopupNumberEditor=Para mostrar automáticamente el editor numérico durante la edición de un número
+observe.config.ui.blockStateColor=Color of block state \#TODO
+observe.config.ui.busyStateColor=Color of busy state \#TODO
observe.config.ui.changeSynchroSrc=Para autorizar la seleción de la base fuente durante las operaciones sobre la base
observe.config.ui.dcp.error.color=Color para notificar los errores sobre la composición de dcps
observe.config.ui.dcp.not.editable.color=Color to notify not editable floating object material nodes \#TODO
@@ -2962,6 +2964,7 @@ observe.ui.tree.data.ps.routes=Rutas
observe.ui.tree.data.ps.schoolEstimate=Estimaciones banco
observe.ui.tree.data.ps.set.unsaved=Nuevo lance
observe.ui.tree.data.ps.trip.unsaved=Nueva marea
+observe.ui.tree.navigation.loaded=Navigation tree reloaded (in %s) \#TODO
observe.ui.tree.referential.common=Referencial commun
observe.ui.tree.referential.ll.common=Referencial Palangre - Common \#TODO
observe.ui.tree.referential.ll.landing=Referencial Palangre - Landing \#TODO
=====================================
observe-i18n/src/main/i18n/translations/observe_fr_FR.properties
=====================================
@@ -543,6 +543,8 @@ observe.config.speciesList.seine.observation.targetCatch=Espèces pour les captu
observe.config.swingSessionFile.description=Fichier de sauvegarde des états des UI.
observe.config.temperature.format=Unité de température
observe.config.ui.autoPopupNumberEditor=Pour afficher automatiquement l'éditeur numérique lors de l'édition d'un nombre
+observe.config.ui.blockStateColor=Couleur lorsque l'on bloque une partie de l'application
+observe.config.ui.busyStateColor=Couleur lorsque l'application est occupée
observe.config.ui.changeSynchroSrc=Pour autoriser la sélection de la base source dans les opérations sur base
observe.config.ui.dcp.error.color=Couleur pour notifier les erreurs sur la composition des dcps
observe.config.ui.dcp.not.editable.color=Couleur pour notifier les nœuds non éditables dans l'arbre des matériaux de dcp.
@@ -2962,6 +2964,7 @@ observe.ui.tree.data.ps.routes=Routes
observe.ui.tree.data.ps.schoolEstimate=Estimation banc
observe.ui.tree.data.ps.set.unsaved=Nouvelle calée
observe.ui.tree.data.ps.trip.unsaved=Nouvelle marée
+observe.ui.tree.navigation.loaded=Arbre de navigation rechargé (en %s)
observe.ui.tree.referential.common=Référentiel commun
observe.ui.tree.referential.ll.common=Référentiel Palangre - Commun
observe.ui.tree.referential.ll.landing=Référentiel Palangre - Débarquement
=====================================
pom.xml
=====================================
@@ -24,7 +24,7 @@
<parent>
<groupId>io.ultreia.maven</groupId>
<artifactId>pom</artifactId>
- <version>2020.14</version>
+ <version>2020.15</version>
</parent>
<groupId>fr.ird.observe</groupId>
@@ -170,7 +170,7 @@
<!-- <lib.version.java4all.topia>1.17</lib.version.java4all.topia>-->
<!--<lib.version.java4all.eugene>3.0<-alpha-22</lib.version.java4all.eugene>-->
- <!-- <lib.version.java4all.jaxx>3.0-alpha-64-SNAPSHOT</lib.version.java4all.jaxx>-->
+ <lib.version.java4all.jaxx>3.0-alpha-66-SNAPSHOT</lib.version.java4all.jaxx>
<!--<lib.version.java4all.application-context>1.0.3-SNAPSHOT</lib.version.java4all.application-context>-->
<!--<lib.version.java4all.application-template>1.0.2-SNAPSHOT</lib.version.java4all.application-template>-->
<!--<lib.version.java4all.i18n>4.0-beta-3-SNAPSHOT</lib.version.java4all.i18n>-->
View it on GitLab: https://gitlab.com/ultreiaio/ird-observe/-/compare/4e952eea0d6d57a46d024b84…
--
View it on GitLab: https://gitlab.com/ultreiaio/ird-observe/-/compare/4e952eea0d6d57a46d024b84…
You're receiving this email because of your account on gitlab.com.
1
0