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
- 7199 discussions
[Git][ultreiaio/ird-observe][develop] Titre de l'appli - Closes #2395
by Tony CHEMIT (@tchemit) 23 Aug '22
by Tony CHEMIT (@tchemit) 23 Aug '22
23 Aug '22
Tony CHEMIT pushed to branch develop at ultreiaio / ird-observe
Commits:
ea69fc49 by Tony Chemit at 2022-08-23T22:34:24+02:00
Titre de l'appli - Closes #2395
- - - - -
1 changed file:
- client/core/src/main/java/fr/ird/observe/client/main/ObserveMainUIHandler.java
Changes:
=====================================
client/core/src/main/java/fr/ird/observe/client/main/ObserveMainUIHandler.java
=====================================
@@ -90,7 +90,7 @@ public class ObserveMainUIHandler implements UIHandler<ObserveMainUI>, WithClien
ClientConfig config = getClientConfig();
- String title = t("observe.ui.title.welcome.admin") + (" v " + config.getVersion());
+ String title = t("observe.ui.title.welcome.admin") + (" " + config.getVersion());
ui.setTitle(title);
ErrorDialogUI.init(ui);
View it on GitLab: https://gitlab.com/ultreiaio/ird-observe/-/commit/ea69fc49deca7f7cd07908349…
--
View it on GitLab: https://gitlab.com/ultreiaio/ird-observe/-/commit/ea69fc49deca7f7cd07908349…
You're receiving this email because of your account on gitlab.com.
1
0
[Git][ultreiaio/ird-observe][develop] Update changelog for v.9.0.7 [skip CI]
by Tony CHEMIT (@tchemit) 22 Aug '22
by Tony CHEMIT (@tchemit) 22 Aug '22
22 Aug '22
Tony CHEMIT pushed to branch develop at ultreiaio / ird-observe
Commits:
27158535 by Tony Chemit at 2022-08-23T00:18:52+02:00
Update changelog for v.9.0.7 [skip CI]
- - - - -
1 changed file:
- CHANGELOG.md
Changes:
=====================================
CHANGELOG.md
=====================================
@@ -1,12 +1,11 @@
# ObServe changelog
* Author [Tony Chemit](mailto:dev@tchemit.fr)
- * Last generated at 2022-07-13 14:08.
+ * Last generated at 2022-08-23 00:18.
## Version [9.0.7](https://gitlab.com/ultreiaio/ird-observe/-/milestones/232)
-**Closed at 2022-07-13.**
-
+**Closed at 2022-08-23.**
### Download
* [Client (observe-9.0.7-client.zip)](https://repo1.maven.org/maven2/fr/ird/observe/ob…)
@@ -14,12 +13,20 @@
* [Serveur (observe-9.0.7-server.zip)](https://repo1.maven.org/maven2/fr/ird/observe/ob…)
### Issues
+ * [[Type::Anomalie 2324]](https://gitlab.com/ultreiaio/ird-observe/-/issues/2324) **Ouverture de base impossible selon configuration précédente de l'arbre** (Thanks to Tony CHEMIT) (Reported by Pascal Cauquil)
* [[Type::Anomalie 2411]](https://gitlab.com/ultreiaio/ird-observe/-/issues/2411) **HResponseErrorException / InvalidAuthenticationTokenException en 9.0.6 en quittant l'application** (Thanks to Tony CHEMIT) (Reported by Pascal Cauquil)
* [[Type::Anomalie 2412]](https://gitlab.com/ultreiaio/ird-observe/-/issues/2412) **Certains services sont encore en GET alors qu'ils devraient être en POST** (Thanks to Tony CHEMIT) (Reported by Tony CHEMIT)
* [[Type::Anomalie 2419]](https://gitlab.com/ultreiaio/ird-observe/-/issues/2419) **Erreur de migration de l'espèce AVDTH 8 de CAPT_ELEM vers ps_logbook.catch** (Thanks to Tony CHEMIT) (Reported by Pascal Cauquil)
* [[Type::Anomalie 2420]](https://gitlab.com/ultreiaio/ird-observe/-/issues/2420) **Statut de la doc de mapping des espèces AVDTH/ObServe** (Thanks to Tony CHEMIT) (Reported by Pascal Cauquil)
+ * [[Type::Anomalie 2423]](https://gitlab.com/ultreiaio/ird-observe/-/issues/2423) **Erreur calcul des données sur V9** (Thanks to Tony CHEMIT) (Reported by Philippe Sabarros)
+ * [[Type::Evolution 1751]](https://gitlab.com/ultreiaio/ird-observe/-/issues/1751) **Mettre un sablier lors de l'ouverture si le nœud a beaucoup de données à charger.** (Thanks to Tony CHEMIT) (Reported by Tony CHEMIT)
* [[Type::Evolution 2104]](https://gitlab.com/ultreiaio/ird-observe/-/issues/2104) **On pourrait avoir un service de génération de topiaid** (Thanks to Tony CHEMIT) (Reported by Pascal Cauquil)
+ * [[Type::Evolution 2232]](https://gitlab.com/ultreiaio/ird-observe/-/issues/2232) **Dans l'UI des profils de connexion, trimmer les espaces** (Thanks to Tony CHEMIT) (Reported by Pascal Cauquil)
+ * [[Type::Evolution 2259]](https://gitlab.com/ultreiaio/ird-observe/-/issues/2259) **Dans l'assistant rapport, ajouter un export CSV** (Thanks to Tony CHEMIT) (Reported by Pascal Cauquil)
+ * [[Type::Evolution 2343]](https://gitlab.com/ultreiaio/ird-observe/-/issues/2343) **Sur les données LL port et associées, rajouter 2 nouveaux champs data entry operators** (Thanks to Tony CHEMIT) (Reported by Pascal Cauquil)
+ * [[Type::Evolution 2345]](https://gitlab.com/ultreiaio/ird-observe/-/issues/2345) **Ajouter un champ position sur le formulaire Landing LL** (Thanks to Tony CHEMIT) (Reported by Pascal Cauquil)
* [[Type::Evolution 2378]](https://gitlab.com/ultreiaio/ird-observe/-/issues/2378) **Convertisseur de longueur m/km/nm/ftm** (Thanks to Tony CHEMIT) (Reported by Pascal Cauquil)
+ * [[Type::Evolution 2409]](https://gitlab.com/ultreiaio/ird-observe/-/issues/2409) **Aucune barre de progression** (Thanks to Tony CHEMIT) (Reported by Pascal Cauquil)
* [[Type::Evolution 2410]](https://gitlab.com/ultreiaio/ird-observe/-/issues/2410) **Ordonancement par défaut des 3 combos section, basket, avançon sur les observations** (Thanks to Tony CHEMIT) (Reported by Pascal Cauquil)
* [[Type::Evolution 2417]](https://gitlab.com/ultreiaio/ird-observe/-/issues/2417) **Improve statistics API** (Thanks to ) (Reported by Tony CHEMIT)
* [[Type::Evolution 2418]](https://gitlab.com/ultreiaio/ird-observe/-/issues/2418) **Contournements des soucis mémoire de l'importeru AVDTH** (Thanks to Tony CHEMIT) (Reported by Pascal Cauquil)
View it on GitLab: https://gitlab.com/ultreiaio/ird-observe/-/commit/271585357aa1926867de53bff…
--
View it on GitLab: https://gitlab.com/ultreiaio/ird-observe/-/commit/271585357aa1926867de53bff…
You're receiving this email because of your account on gitlab.com.
1
0
22 Aug '22
Tony CHEMIT pushed to branch develop at ultreiaio / ird-observe
Commits:
bc8730be by Tony Chemit at 2022-08-22T23:20:37+02:00
update pom
- - - - -
62581c1b by Tony Chemit at 2022-08-22T23:20:37+02:00
downgrade m-site-p (still some velocity incompatibility)
- - - - -
5b66ab55 by Tony Chemit at 2022-08-22T23:20:37+02:00
Persistence - generate application context schema names, instead of computing them.
- - - - -
177b65d0 by Tony Chemit at 2022-08-22T23:20:37+02:00
Persistence - remove HibernateTopiaMigrationService
- - - - -
1696b931 by Tony Chemit at 2022-08-22T23:20:37+02:00
Persistence - clean TopiaApplicationText
- - - - -
11 changed files:
- core/persistence/java/src/main/resources/META-INF/persistence/Observe/TopiaEntitySqlModel.json
- pom.xml
- toolkit/persistence/src/main/java/org/nuiton/topia/persistence/BeanTopiaConfiguration.java
- − toolkit/persistence/src/main/java/org/nuiton/topia/persistence/HibernateTopiaMigrationService.java
- toolkit/persistence/src/main/java/org/nuiton/topia/persistence/TopiaApplicationContext.java
- toolkit/persistence/src/main/java/org/nuiton/topia/persistence/TopiaConfiguration.java
- toolkit/persistence/src/main/java/org/nuiton/topia/persistence/internal/AbstractTopiaApplicationContext.java
- toolkit/persistence/src/main/java/org/nuiton/topia/service/sql/model/TopiaEntitySqlModel.java
- toolkit/plugin/src/main/java/fr/ird/observe/toolkit/maven/plugin/tck/GenerateTckArchive.java
- toolkit/plugin/src/main/java/fr/ird/observe/toolkit/maven/plugin/tck/MigrateTckDatabases.java
- toolkit/templates/src/main/java/org/nuiton/topia/templates/sql/EntitySqlDescriptorGenerator.java
Changes:
=====================================
core/persistence/java/src/main/resources/META-INF/persistence/Observe/TopiaEntitySqlModel.json
=====================================
@@ -1,4 +1,16 @@
{
+ "schemaNames": [
+ "common",
+ "ll_common",
+ "ll_landing",
+ "ll_logbook",
+ "ll_observation",
+ "ps_common",
+ "ps_landing",
+ "ps_localmarket",
+ "ps_logbook",
+ "ps_observation"
+ ],
"replicationOrderForStandalone": [
"fr.ird.observe.entities.LastUpdateDate",
"fr.ird.observe.entities.referential.common.Country",
=====================================
pom.xml
=====================================
@@ -23,7 +23,7 @@
<parent>
<groupId>io.ultreia.maven</groupId>
<artifactId>pom</artifactId>
- <version>2022.80</version>
+ <version>2022.82</version>
</parent>
<groupId>fr.ird.observe</groupId>
<artifactId>ird-observe</artifactId>
@@ -96,6 +96,7 @@
<persistence.model.version>9.0</persistence.model.version>
<!--persistence previous model version used for tck migration-->
<persistence.previous.model.version>8.0</persistence.previous.model.version>
+ <plugin.version.site>4.0.0-M1</plugin.version.site>
<tck.filename>tck-v${persistence.model.version}.zip</tck.filename>
<tck.updated.filename>updated-${tck.filename}</tck.updated.filename>
<tck.remote.path>/var/www/html/private/ird-observe/tck</tck.remote.path>
=====================================
toolkit/persistence/src/main/java/org/nuiton/topia/persistence/BeanTopiaConfiguration.java
=====================================
@@ -238,11 +238,6 @@ public class BeanTopiaConfiguration extends BeanJdbcConfiguration implements Top
throw new TopiaMisconfigurationException("you must provide JDBC connection driver", this);
}
Map<String, String> hibernateExtraConfiguration = getHibernateExtraConfiguration();
- if (hibernateExtraConfiguration.containsKey(AvailableSettings.HBM2DDL_AUTO)) {
- throw new TopiaMisconfigurationException("you must not use " + AvailableSettings.HBM2DDL_AUTO
- + " configuration directive, if you want Hibernate to update the schema, use " +
- HibernateTopiaMigrationService.class.getName(), this);
- }
for (Map.Entry<String, String> entry : hibernateExtraConfiguration.entrySet()) {
String key = entry.getKey();
boolean entryIsOk = (key.startsWith("hibernate.") || key.startsWith("javax.persistence."))
=====================================
toolkit/persistence/src/main/java/org/nuiton/topia/persistence/HibernateTopiaMigrationService.java deleted
=====================================
@@ -1,56 +0,0 @@
-package org.nuiton.topia.persistence;
-
-/*
- * #%L
- * ObServe Toolkit :: Persistence
- * %%
- * Copyright (C) 2008 - 2022 IRD, 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.util.Map;
-
-public class HibernateTopiaMigrationService implements TopiaMigrationService {
-
- protected TopiaApplicationContext topiaApplicationContext;
-
- @Override
- public void initTopiaService(TopiaApplicationContext<?> topiaApplicationContext, Map<String, String> serviceConfiguration) {
- this.topiaApplicationContext = topiaApplicationContext;
- }
-
- @Override
- public String getSchemaVersion() {
- throw new UnsupportedOperationException();
- }
-
- @Override
- public void initOnCreateSchema() {
- // do nothing
- }
-
- @Override
- public void runSchemaMigration() {
- topiaApplicationContext.updateSchema();
- }
-
- @Override
- public void close() {
-
- }
-}
=====================================
toolkit/persistence/src/main/java/org/nuiton/topia/persistence/TopiaApplicationContext.java
=====================================
@@ -25,13 +25,14 @@ package org.nuiton.topia.persistence;
import fr.ird.observe.entities.data.RootOpenableEntity;
import fr.ird.observe.spi.referential.MissingReferentialRequest;
import fr.ird.observe.spi.referential.MissingReferentialResult;
+import fr.ird.observe.spi.referential.ReferentialIds;
import fr.ird.observe.spi.service.ServiceContext;
import io.ultreia.java4all.util.sql.SqlScript;
-import io.ultreia.java4all.util.sql.SqlScriptConsumer;
import org.nuiton.topia.persistence.internal.AbstractTopiaApplicationContext;
import org.nuiton.topia.persistence.jdbc.JdbcHelper;
import org.nuiton.topia.persistence.jdbc.JdbcHelperH2;
import org.nuiton.topia.persistence.jdbc.JdbcHelperPostgres;
+import org.nuiton.topia.persistence.security.SecurityScriptHelper;
import org.nuiton.topia.persistence.support.TopiaServiceSupport;
import org.nuiton.topia.service.sql.TopiaEntitySqlModelResource;
import org.nuiton.topia.service.sql.TopiaSqlService;
@@ -100,14 +101,20 @@ public interface TopiaApplicationContext<K extends TopiaPersistenceContext> exte
return getConfiguration().getTopiaIdFactory();
}
+ TopiaIdFactoryForBulkSupport newIdFactoryForBulk(long timestamp);
+
+ ReferentialIds getReferentialIds(Class<? extends TopiaEntity> dataType, String... ids);
+
+ default SecurityScriptHelper newSecurityScriptHelper() {
+ return new SecurityScriptHelper(this);
+ }
+
TopiaSqlService getSqlService();
TopiaEntitySqlBlobIdsIterator newBlobIdsIterator(Path blobIdsPath);
void executeSqlStatements(SqlScript content);
- void executeSqlStatements(SqlScriptConsumer content);
-
TopiaMigrationService getMigrationService();
default void migrate() {
@@ -140,16 +147,10 @@ public interface TopiaApplicationContext<K extends TopiaPersistenceContext> exte
* @return all schema names used by persistent entities.
* @since 3.0.1
*/
- Set<String> getSchemaNames();
+ List<String> getSchemaNames();
void createSchema();
- void showCreateSchema();
-
- void updateSchema();
-
- void dropSchema();
-
/**
* @return true is the application context is opened (ie not yet {@link #isClosed()})
*/
=====================================
toolkit/persistence/src/main/java/org/nuiton/topia/persistence/TopiaConfiguration.java
=====================================
@@ -75,7 +75,7 @@ public interface TopiaConfiguration extends JdbcConfiguration {
* as keys of the map.
* <p>
* You <strong>MUST NOT</strong> pass {@link HibernateAvailableSettings#HBM2DDL_AUTO} since
- * ToPIA will use validate. If you want use it, have a look at {@link HibernateTopiaMigrationService}
+ * ToPIA will use validate.
*
* @return a map containing hibernate configuration directives that ToPIA will use when it
* will instantiate Hibernate.
=====================================
toolkit/persistence/src/main/java/org/nuiton/topia/persistence/internal/AbstractTopiaApplicationContext.java
=====================================
@@ -34,24 +34,17 @@ import fr.ird.observe.spi.referential.synchro.SynchronizeTaskType;
import fr.ird.observe.spi.service.ServiceContext;
import io.ultreia.java4all.util.TimeLog;
import io.ultreia.java4all.util.sql.SqlScript;
-import io.ultreia.java4all.util.sql.SqlScriptConsumer;
import io.ultreia.java4all.util.sql.SqlScriptReader;
import org.apache.logging.log4j.LogManager;
import org.apache.logging.log4j.Logger;
-import org.hibernate.HibernateException;
import org.hibernate.SessionFactory;
import org.hibernate.boot.Metadata;
import org.hibernate.cfg.AvailableSettings;
import org.hibernate.cfg.Configuration;
-import org.hibernate.tool.hbm2ddl.SchemaExport;
-import org.hibernate.tool.hbm2ddl.SchemaUpdate;
-import org.hibernate.tool.schema.TargetType;
import org.nuiton.topia.persistence.TopiaApplicationContext;
import org.nuiton.topia.persistence.TopiaConfiguration;
import org.nuiton.topia.persistence.TopiaDao;
-import org.nuiton.topia.persistence.TopiaEntity;
import org.nuiton.topia.persistence.TopiaException;
-import org.nuiton.topia.persistence.TopiaIdFactoryForBulkSupport;
import org.nuiton.topia.persistence.TopiaMigrationService;
import org.nuiton.topia.persistence.TopiaPersistenceContext;
import org.nuiton.topia.persistence.TopiaService;
@@ -59,7 +52,6 @@ import org.nuiton.topia.persistence.internal.support.TopiaServiceSupportImpl;
import org.nuiton.topia.persistence.jdbc.JdbcHelper;
import org.nuiton.topia.persistence.jdbc.JdbcHelperH2;
import org.nuiton.topia.persistence.jdbc.JdbcHelperPostgres;
-import org.nuiton.topia.persistence.security.SecurityScriptHelper;
import org.nuiton.topia.persistence.support.TopiaServiceSupport;
import org.nuiton.topia.persistence.util.TopiaUtil;
import org.nuiton.topia.service.sql.TopiaSqlService;
@@ -69,7 +61,6 @@ import java.io.File;
import java.nio.file.Path;
import java.util.Arrays;
import java.util.Collections;
-import java.util.EnumSet;
import java.util.List;
import java.util.Map;
import java.util.Objects;
@@ -136,17 +127,11 @@ public abstract class AbstractTopiaApplicationContext<K extends TopiaPersistence
protected abstract Map<String, Supplier<TopiaDao<?>>> createDaoMapping();
- public abstract TopiaIdFactoryForBulkSupport newIdFactoryForBulk(long timestamp);
-
@Override
public final String getAuthenticationToken() {
return authenticationToken;
}
- public String getPackageName() {
- return getClass().getPackageName();
- }
-
protected void init() {
configuration.check();
@@ -218,12 +203,6 @@ public abstract class AbstractTopiaApplicationContext<K extends TopiaPersistence
}
}
- public abstract ReferentialIds getReferentialIds(Class<? extends TopiaEntity> dataType, String... ids);
-
- public final SecurityScriptHelper newSecurityScriptHelper() {
- return new SecurityScriptHelper(this);
- }
-
@Override
public final TopiaSqlService getSqlService() {
return getServices(TopiaSqlService.class).get(SQL_SERVICE_NAME);
@@ -296,42 +275,6 @@ public abstract class AbstractTopiaApplicationContext<K extends TopiaPersistence
}
}
- @Override
- public final void showCreateSchema() {
- try {
- new SchemaExport().execute(EnumSet.of(TargetType.DATABASE, TargetType.STDOUT), SchemaExport.Action.CREATE, getHibernateProvider().getMetaData());
- } catch (HibernateException eee) {
- throw new TopiaException(String.format("Could not show create schema for reason: %s", eee.getMessage()), eee);
- }
-
- }
-
- @Override
- public final void updateSchema() {
- try {
- EnumSet<TargetType> targetTypes = EnumSet.of(TargetType.DATABASE);
- if (log.isDebugEnabled()) {
- targetTypes.add(TargetType.STDOUT);
- }
- new SchemaUpdate().execute(targetTypes, getHibernateProvider().getMetaData());
- } catch (HibernateException eee) {
- throw new TopiaException(String.format("Could not update schema for reason: %s", eee.getMessage()), eee);
- }
- }
-
- @Override
- public final void dropSchema() {
- try {
- EnumSet<TargetType> targetTypes = EnumSet.of(TargetType.DATABASE);
- if (log.isDebugEnabled()) {
- targetTypes.add(TargetType.STDOUT);
- }
- new SchemaExport().execute(targetTypes, SchemaExport.Action.DROP, getHibernateProvider().getMetaData());
- } catch (HibernateException eee) {
- throw new TopiaException(String.format("Could not drop schema for reason: %s", eee.getMessage()), eee);
- }
- }
-
@Override
public void close() {
@@ -379,7 +322,7 @@ public abstract class AbstractTopiaApplicationContext<K extends TopiaPersistence
}
@Override
- public final Set<String> getSchemaNames() {
+ public final List<String> getSchemaNames() {
return getSqlService().getModel().getSchemaNames();
}
@@ -454,19 +397,7 @@ public abstract class AbstractTopiaApplicationContext<K extends TopiaPersistence
SqlScriptReader scriptLocation = content.getLocation();
try (K persistenceContext = newPersistenceContext()) {
persistenceContext.executeSqlScript(scriptLocation);
- persistenceContext.commit();
- }
- } catch (RuntimeException e) {
- throw e;
- } catch (Exception e) {
- throw new TopiaException(e);
- }
- }
-
- public final void executeSqlStatements(SqlScriptConsumer content) {
- try {
- try (K persistenceContext = newPersistenceContext()) {
- persistenceContext.executeSqlScript(content);
+ //FIXME-2022-08-22 this is a heart-break to force a commit, review this
persistenceContext.commit();
}
} catch (RuntimeException e) {
@@ -511,8 +442,7 @@ public abstract class AbstractTopiaApplicationContext<K extends TopiaPersistence
return null;
}
OneSideSqlRequest sqlRequest = OneSideSqlRequest.builder().addTasks(SynchronizeTaskType.ADD, missingIds).build();
- OneSideSqlResult sqlResult = newOneSideSqlResultBuilder(context, context.now())
- .build(sqlRequest);
+ OneSideSqlResult sqlResult = newOneSideSqlResultBuilder(context, context.now()).build(sqlRequest);
Path scriptPath = temporaryDirectoryRoot.resolve(String.format("%s-%d.sql", getClass().getSimpleName(), System.nanoTime()));
log.info(String.format("Generate script at: %s", scriptPath));
=====================================
toolkit/persistence/src/main/java/org/nuiton/topia/service/sql/model/TopiaEntitySqlModel.java
=====================================
@@ -30,8 +30,6 @@ import java.util.LinkedList;
import java.util.List;
import java.util.Map;
import java.util.Objects;
-import java.util.Set;
-import java.util.TreeSet;
/**
* Describes the sql metadata model.
@@ -43,6 +41,10 @@ import java.util.TreeSet;
*/
public class TopiaEntitySqlModel {
+ /**
+ * All schema names used.
+ */
+ private final List<String> schemaNames;
/**
* Replication order for all entities not managed by any entry point..
*/
@@ -52,7 +54,8 @@ public class TopiaEntitySqlModel {
*/
private final Map<String, TopiaEntitySqlDescriptor> descriptors;
- public TopiaEntitySqlModel(List<String> replicationOrderForStandalone, Map<String, TopiaEntitySqlDescriptor> descriptors) {
+ public TopiaEntitySqlModel(List<String> schemaNames, List<String> replicationOrderForStandalone, Map<String, TopiaEntitySqlDescriptor> descriptors) {
+ this.schemaNames = Collections.unmodifiableList(Objects.requireNonNull(schemaNames));
this.replicationOrderForStandalone = Objects.requireNonNull(replicationOrderForStandalone);
this.descriptors = Objects.requireNonNull(descriptors);
}
@@ -81,13 +84,8 @@ public class TopiaEntitySqlModel {
return replicationOrderForStandalone;
}
- public Set<String> getSchemaNames() {
- Set<String> result = new TreeSet<>();
- for (TopiaEntitySqlDescriptor entitySqlDescriptor : getDescriptors().values()) {
- String schema = entitySqlDescriptor.getTable().getSchemaName();
- result.add(schema);
- }
- return Collections.unmodifiableSet(result);
+ public List<String> getSchemaNames() {
+ return schemaNames;
}
protected Map<String, TopiaEntitySqlDescriptor> getDescriptors() {
=====================================
toolkit/plugin/src/main/java/fr/ird/observe/toolkit/maven/plugin/tck/GenerateTckArchive.java
=====================================
@@ -30,7 +30,6 @@ import fr.ird.observe.toolkit.maven.plugin.PersistenceRunner;
import io.ultreia.java4all.util.Version;
import io.ultreia.java4all.util.Zips;
import io.ultreia.java4all.util.sql.SqlScript;
-import io.ultreia.java4all.util.sql.SqlScriptConsumer;
import io.ultreia.java4all.util.sql.SqlScriptWriter;
import org.nuiton.topia.persistence.TopiaApplicationContext;
import org.nuiton.topia.persistence.jdbc.JdbcHelperH2;
@@ -123,14 +122,14 @@ public class GenerateTckArchive extends PersistenceRunner {
log.info(String.format("Load referential database for version %s", previousModelVersion));
- applicationContext.executeSqlStatements(SqlScriptConsumer.of(SqlScript.of(sources.resolve(previousModelVersion.getVersion()).resolve(DatabaseName.referential.name() + ".sql.gz"))));
+ applicationContext.executeSqlStatements(SqlScript.of(sources.resolve(previousModelVersion.getVersion()).resolve(DatabaseName.referential.name() + ".sql.gz")));
log.info(String.format("Migrate from version %s to %s", previousModelVersion, modelVersion));
applicationContext.migrate();
log.info(String.format("Load data script for version %s", modelVersion));
Path dataPath = exploded.resolve(modelVersion.getVersion()).resolve(DatabaseName.data.name() + ".sql");
- applicationContext.executeSqlStatements(SqlScriptConsumer.builder(dataPath).build());
+ applicationContext.executeSqlStatements(SqlScript.of(dataPath));
log.info(String.format("Do backup to %s", backupFile));
backupSane(applicationContext, backupFile, false);
=====================================
toolkit/plugin/src/main/java/fr/ird/observe/toolkit/maven/plugin/tck/MigrateTckDatabases.java
=====================================
@@ -27,7 +27,6 @@ import fr.ird.observe.test.DatabaseName;
import fr.ird.observe.toolkit.maven.plugin.PersistenceRunner;
import io.ultreia.java4all.util.Version;
import io.ultreia.java4all.util.sql.SqlScript;
-import io.ultreia.java4all.util.sql.SqlScriptConsumer;
import org.nuiton.topia.persistence.TopiaApplicationContext;
import java.nio.file.Path;
@@ -81,7 +80,7 @@ public class MigrateTckDatabases extends PersistenceRunner {
try (TopiaApplicationContext<?> applicationContext = createTopiaApplicationContext(configuration)) {
log.info(String.format("[%S] migrate from version %s to %s", tckDbName, previousModelVersion, modelVersion));
- applicationContext.executeSqlStatements(SqlScriptConsumer.of(SqlScript.of(dbPath.resolve(sqlFilename))));
+ applicationContext.executeSqlStatements(SqlScript.of(dbPath.resolve(sqlFilename)));
applicationContext.migrate();
log.info(String.format("[%S] backup to %s", tckDbName, backupFile));
@@ -97,7 +96,7 @@ public class MigrateTckDatabases extends PersistenceRunner {
log.info(String.format("[%S] Check - loading new database with version %s", tckDbName, modelVersion));
- applicationContext.executeSqlStatements(SqlScriptConsumer.of(SqlScript.of(backupFile)));
+ applicationContext.executeSqlStatements(SqlScript.of(backupFile));
Path checkBackupFile = getTemporaryPath().resolve("check-backup-" + backupFile.toFile().getName().replace(".sql.gz", "-check.sql"));
applicationContext.backup(checkBackupFile.toFile(), false);
log.info(String.format("[%S] Check - backup to %s", tckDbName, checkBackupFile));
=====================================
toolkit/templates/src/main/java/org/nuiton/topia/templates/sql/EntitySqlDescriptorGenerator.java
=====================================
@@ -394,7 +394,12 @@ public class EntitySqlDescriptorGenerator extends TopiaMetadataModelGeneratorSup
modelCopyPlan = new TopiaEntitySqlCopyPlanModel(entryPointCopyPlans, standaloneCopyPlan);
modelReplicatePlan = new TopiaEntitySqlReplicatePlanModel(replicatePlans);
modelDeletePlan = new TopiaEntitySqlDeletePlanModel(typeDeletePlans);
- sqlModel = new TopiaEntitySqlModel(replicationOrderWithStandalone, descriptors);
+ Set<String> schemaNames = new TreeSet<>();
+ for (TopiaEntitySqlDescriptor entitySqlDescriptor : descriptors.values()) {
+ String schema = entitySqlDescriptor.getTable().getSchemaName();
+ schemaNames.add(schema);
+ }
+ sqlModel = new TopiaEntitySqlModel(List.copyOf(schemaNames), replicationOrderWithStandalone, descriptors);
LinkedHashMap<Class<? extends ReferentialDto>, List<String>> referentialBusinessProperties = new LinkedHashMap<>();
for (String entityName : replicationOrderWithStandalone) {
if (!entityName.contains(".referential.")) {
View it on GitLab: https://gitlab.com/ultreiaio/ird-observe/-/compare/685feca0c407582cdfb97e2d…
--
View it on GitLab: https://gitlab.com/ultreiaio/ird-observe/-/compare/685feca0c407582cdfb97e2d…
You're receiving this email because of your account on gitlab.com.
1
0
[Git][ultreiaio/ird-observe][develop] 53 commits: Sur les données LL port et associées, rajouter 2 nouveaux champs data entry...
by Tony CHEMIT (@tchemit) 22 Aug '22
by Tony CHEMIT (@tchemit) 22 Aug '22
22 Aug '22
Tony CHEMIT pushed to branch develop at ultreiaio / ird-observe
Commits:
0361a0a3 by Tony Chemit at 2022-08-22T18:35:46+02:00
Sur les données LL port et associées, rajouter 2 nouveaux champs data entry operators - Closes ultreiaio/ird-observe#2343
- - - - -
ee9bc2f0 by Tony Chemit at 2022-08-22T18:35:46+02:00
Ajouter un champ position sur le formulaire Landing LL - See ultreiaio/ird-observe#2345
- - - - -
b3e5a3aa by Tony Chemit at 2022-08-22T18:35:46+02:00
update pom
update site plugin
- - - - -
e82a7de1 by Tony Chemit at 2022-08-22T18:35:46+02:00
Fix validation context reset (for not standalone content ui)
- - - - -
e1f1eccc by Tony Chemit at 2022-08-22T18:35:46+02:00
Erreur calcul des données sur V9 - Closes #2423
- - - - -
91a6d1fa by Tony Chemit at 2022-08-22T18:35:46+02:00
Erreur lors du rechargement de la source si token expiré - Closes #2415
- - - - -
0b1eeba8 by Tony Chemit at 2022-08-22T18:35:46+02:00
Group all api modules in one Maven module - See ultreiaio/topia-extension#145
- - - - -
52772eeb by Tony Chemit at 2022-08-22T18:35:46+02:00
Update changelog for v.7.6.14 [skip CI]
- - - - -
e18b3a9b by Tony Chemit at 2022-08-22T18:35:46+02:00
use cache of simplifiedObjectTypeSpecializedRules
- - - - -
3c4e2ada by Tony Chemit at 2022-08-22T18:35:46+02:00
Il faudrait mettre à jour le script qui crée les colonnes postgis pour chaque champ lat/lon - Closes #2422
- - - - -
114a4e4e by Tony Chemit at 2022-08-22T18:35:46+02:00
Introduce sql package (from topia project) - See ultreiaio/java-util#31
- - - - -
0b95b008 by Tony Chemit at 2022-08-22T18:35:46+02:00
Introduce json package (from http project) - See ultreiaio/java-util#30
- - - - -
14cc8b0c by Tony Chemit at 2022-08-22T18:35:46+02:00
Introduce sql package (from topia project) - See ultreiaio/java-util#31
Introduce json package (from http project) - See ultreiaio/java-util#30
- - - - -
0203a260 by Tony Chemit at 2022-08-22T18:35:46+02:00
tidy pom
- - - - -
3b30059a by Tony Chemit at 2022-08-22T18:35:46+02:00
Improve avdth API (move it from api-dto to api-services)
- - - - -
52700fb3 by Tony Chemit at 2022-08-22T18:35:46+02:00
update pom
- - - - -
17c4bf47 by Tony Chemit at 2022-08-22T18:35:46+02:00
import topia into toolkit
- - - - -
e2e28393 by Tony Chemit at 2022-08-22T18:35:46+02:00
TimeLog - Fix timeLog init
- - - - -
9c6b0e01 by Tony Chemit at 2022-08-22T18:35:46+02:00
Persistence - Improve Migration service code and logs
- - - - -
b2c2c57d by Tony Chemit at 2022-08-22T18:35:46+02:00
TimeLog - use TimeLog.reset
- - - - -
96b0b7fb by Tony Chemit at 2022-08-22T18:35:46+02:00
Persistence - Add SqlQuery and SqlFunction in sql package - See ultreiaio/java-util#33
- - - - -
f98284aa by Tony Chemit at 2022-08-22T18:35:46+02:00
Persistence - Improve JdbcHelper (remove a very strange DriverManager.registerDriver code...)
- - - - -
42bb7902 by Tony Chemit at 2022-08-22T18:35:46+02:00
Replace MutableInt by AtomicInteger
- - - - -
ac7f588b by Tony Chemit at 2022-08-22T18:35:46+02:00
Json - Remove guava json adapters from this project (remove then guava dependency :)) - Closes ultreiaio/java-util#35
- - - - -
d2797ffe by Tony Chemit at 2022-08-22T18:35:46+02:00
update pom
- - - - -
4dc68147 by Tony Chemit at 2022-08-22T18:35:46+02:00
Server - low log level
- - - - -
58bd4640 by Tony Chemit at 2022-08-22T18:35:46+02:00
TimeLog - fix some usages (not on correct class)
- - - - -
f5064861 by Tony Chemit at 2022-08-22T18:35:46+02:00
Service Local - use TimeLog at correct place
- - - - -
2cb35e78 by Tony Chemit at 2022-08-22T18:35:46+02:00
Service Client - Improve TimeLog and code flow
Improve generated service client to have TimeLog at nice place - See ultreiaio/http#54
Replace url by uri in HResponseNotAvailableException to avoid nasty IOException - See ultreiaio/http#55
- - - - -
3fa2b1c3 by Tony Chemit at 2022-08-22T18:35:46+02:00
Dans l'assistant rapport, ajouter un export CSV - Closes #2259
- - - - -
6ce76e92 by Tony Chemit at 2022-08-22T18:35:46+02:00
Client - Aucune barre de progression Closes #2409
- - - - -
b4c49f2c by Tony Chemit at 2022-08-22T18:35:46+02:00
Persistence - clean code
- - - - -
5cfc1e3d by Tony Chemit at 2022-08-22T18:35:46+02:00
Persistence - use JsonAware instead of ObserveDto
- - - - -
bfda48c5 by Tony Chemit at 2022-08-22T18:35:46+02:00
Persistence - schema are now always sorted
- - - - -
461ffa4f by Tony Chemit at 2022-08-22T18:35:46+02:00
Persistence - improve JdbcHelper, introduce JdbcSecurityHelper to add support for h2 users management, improve Security script API
- - - - -
aede1e93 by Tony Chemit at 2022-08-22T18:35:46+02:00
Persistence - merge some toolkit code to topia
Persistence - add replicate and delete plan for referential (to be able to remove the nasty topia dao delete method and replace it by generated sql code)
Tck - add more tck data to be able to perform all the delete tests
- - - - -
f10d92cf by Tony Chemit at 2022-08-22T18:35:46+02:00
Persistence - sort blob by id when copy them to h2 database
- - - - -
fe237b27 by Tony Chemit at 2022-08-22T18:35:46+02:00
Test - Add more tests for ReferentialService
- - - - -
726a08a5 by Tony Chemit at 2022-08-22T18:35:46+02:00
Persistence - Add referential new scripts instead of runtime sql generation + improve referential context code
- - - - -
7010f384 by Tony Chemit at 2022-08-22T18:35:46+02:00
Persistence - Fix vicious code that could delete all data (if used inside other code...)
- - - - -
1453098e by Tony Chemit at 2022-08-22T18:35:46+02:00
Service - fix ReferentialService.delete permission (was ALL but WRITE_REFERENTIAL is enough)
- - - - -
8bcb9bc7 by Tony Chemit at 2022-08-22T18:35:46+02:00
Persistence - Improve avdth code
- - - - -
d3f579b8 by Tony Chemit at 2022-08-22T18:35:46+02:00
Persistence - Review TopiaIdFactory
- - - - -
adc2f354 by Tony Chemit at 2022-08-22T18:35:46+02:00
Persistence - Review TopiaApplicationContext
- - - - -
75628829 by Tony Chemit at 2022-08-22T18:35:46+02:00
Persistence - Review EntityDeserializerContext
- - - - -
67244cba by Tony Chemit at 2022-08-22T18:35:46+02:00
Persistence - Remove usage of TopiaEntityEnum and remove naturalIds on referential and continue to refactor persistence API
- - - - -
28dc3317 by Tony Chemit at 2022-08-22T18:35:46+02:00
Persistence - Remove usage of ToolkitEntitySqlModelResource, everything goes to TopiaEntitySqlModelResource now.
- - - - -
2e038e5e by Tony Chemit at 2022-08-22T18:35:46+02:00
Persistence - Remove TopiaConfigurationExtension and use JdbcConfiguration from java-util library - See ultreiaio/java-util#37
- - - - -
1063e053 by Tony Chemit at 2022-08-22T18:35:46+02:00
update pom
- - - - -
f2884876 by Tony Chemit at 2022-08-22T18:35:46+02:00
downgrade m-site-p (still some velocity incompatibility)
- - - - -
67219119 by Tony Chemit at 2022-08-22T18:35:46+02:00
Persistence - generate application context schema names, instead of computing them.
- - - - -
5335baca by Tony Chemit at 2022-08-22T18:35:46+02:00
Persistence - remove HibernateTopiaMigrationService
- - - - -
685feca0 by Tony Chemit at 2022-08-22T18:35:46+02:00
Persistence - clean TopiaApplicationText
- - - - -
30 changed files:
- CHANGELOG.md
- client/configuration/pom.xml
- 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/pom.xml
- client/core/src/main/java/fr/ird/observe/client/ClientUIContext.java
- client/core/src/main/java/fr/ird/observe/client/ClientUIContextApi.java
- client/core/src/main/java/fr/ird/observe/client/WithClientUIContextApi.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
- client/core/src/main/java/fr/ird/observe/client/datasource/h2/backup/BackupsManager.java
- client/core/src/main/java/fr/ird/observe/client/datasource/validation/ClientValidationContext.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/ObserveMainUIHandler.java
- client/core/src/main/java/fr/ird/observe/client/main/body/ClientConfigUI.java
- client/core/src/main/java/fr/ird/observe/client/main/focus/MainUIFocusModel.java
- client/core/src/main/resources/observe-ui.properties
- client/datasource/actions/pom.xml
- client/datasource/actions/src/main/i18n/getters/java.getter
- client/datasource/actions/src/main/i18n/getters/jaxx.getter
- client/datasource/actions/src/main/java/fr/ird/observe/client/datasource/actions/ObserveKeyStrokesActions.java
- + client/datasource/actions/src/main/java/fr/ird/observe/client/datasource/actions/report/CsvExportUI.jaxx
- + client/datasource/actions/src/main/java/fr/ird/observe/client/datasource/actions/report/CsvExportUI.jcss
- + client/datasource/actions/src/main/java/fr/ird/observe/client/datasource/actions/report/CsvExportUIHandler.java
- client/datasource/actions/src/main/java/fr/ird/observe/client/datasource/actions/report/ReportModel.java
- client/datasource/actions/src/main/java/fr/ird/observe/client/datasource/actions/report/ReportUI.jaxx
- client/datasource/actions/src/main/java/fr/ird/observe/client/datasource/actions/report/ReportUI.jcss
- client/datasource/actions/src/main/java/fr/ird/observe/client/datasource/actions/report/ReportUIHandler.java
The diff was not included because it is too large.
View it on GitLab: https://gitlab.com/ultreiaio/ird-observe/-/compare/21e522c09b90a82869f4ba3a…
--
View it on GitLab: https://gitlab.com/ultreiaio/ird-observe/-/compare/21e522c09b90a82869f4ba3a…
You're receiving this email because of your account on gitlab.com.
1
0
[Git][ultreiaio/ird-observe][develop] 10 commits: Persistence - clean code
by Tony CHEMIT (@tchemit) 16 Aug '22
by Tony CHEMIT (@tchemit) 16 Aug '22
16 Aug '22
Tony CHEMIT pushed to branch develop at ultreiaio / ird-observe
Commits:
5a8b4451 by Tony Chemit at 2022-08-10T08:14:49+02:00
Persistence - clean code
- - - - -
961020c6 by Tony Chemit at 2022-08-11T10:24:48+02:00
Persistence - use JsonAware instead of ObserveDto
- - - - -
abf00060 by Tony Chemit at 2022-08-11T14:24:16+02:00
Persistence - schema are now always sorted
- - - - -
9adf1d42 by Tony Chemit at 2022-08-11T14:29:19+02:00
Persistence - improve JdbcHelper, introduce JdbcSecurityHelper to add support for h2 users management, improve Security script API
- - - - -
f34d1fda by Tony Chemit at 2022-08-15T06:56:31+02:00
Persistence - merge some toolkit code to topia
Persistence - add replicate and delete plan for referential (to be able to remove the nasty topia dao delete method and replace it by generated sql code)
Tck - add more tck data to be able to perform all the delete tests
- - - - -
556c7525 by Tony Chemit at 2022-08-15T06:56:31+02:00
Persistence - sort blob by id when copy them to h2 database
- - - - -
52ea98e9 by Tony Chemit at 2022-08-15T07:32:08+02:00
Test - Add more tests for ReferentialService
- - - - -
64e8928b by Tony Chemit at 2022-08-16T14:50:20+02:00
Persistence - Add referential new scripts instead of runtime sql generation + improve referential context code
- - - - -
f3a34885 by Tony Chemit at 2022-08-16T14:50:20+02:00
Persistence - Fix vicious code that could delete all data (if used inside other code...)
- - - - -
21e522c0 by Tony Chemit at 2022-08-16T14:50:20+02:00
Service - fix ReferentialService.delete permission (was ALL but WRITE_REFERENTIAL is enough)
- - - - -
9 changed files:
- core/persistence/java/src/main/java/fr/ird/observe/entities/LastUpdateDateTopiaDao.java
- core/persistence/java/src/main/java/fr/ird/observe/entities/ObserveSecurityHelperModel.java → core/persistence/java/src/main/java/fr/ird/observe/entities/ObserveSecurityScriptConfiguration.java
- core/persistence/java/src/main/java/fr/ird/observe/entities/ObserveTopiaPersistenceContext.java
- core/persistence/java/src/main/java/fr/ird/observe/entities/data/ll/logbook/SetSpi.java
- core/persistence/java/src/main/java/fr/ird/observe/entities/data/ll/observation/SetSpi.java
- core/persistence/java/src/main/java/fr/ird/observe/spi/report/ObserveDefaultReportRequestExecutor.java
- core/persistence/java/src/main/java/fr/ird/observe/spi/validation/EntityInterceptors.java
- core/persistence/java/src/main/resources/META-INF/persistence/Observe/ToolkitEntitySqlScriptModel.json
- core/persistence/java/src/main/resources/META-INF/persistence/Observe/TopiaEntitySqlDeletePlanModel.json
The diff was not included because it is too large.
View it on GitLab: https://gitlab.com/ultreiaio/ird-observe/-/compare/7d0c19308e21d631e84c16c2…
--
View it on GitLab: https://gitlab.com/ultreiaio/ird-observe/-/compare/7d0c19308e21d631e84c16c2…
You're receiving this email because of your account on gitlab.com.
1
0
[Git][ultreiaio/ird-observe][develop] Client - Aucune barre de progression Closes #2409
by Tony CHEMIT (@tchemit) 03 Aug '22
by Tony CHEMIT (@tchemit) 03 Aug '22
03 Aug '22
Tony CHEMIT pushed to branch develop at ultreiaio / ird-observe
Commits:
7d0c1930 by Tony Chemit at 2022-08-03T18:31:38+02:00
Client - Aucune barre de progression Closes #2409
- - - - -
27 changed files:
- client/core/src/main/java/fr/ird/observe/client/ClientUIContext.java
- client/core/src/main/java/fr/ird/observe/client/ClientUIContextApi.java
- client/core/src/main/java/fr/ird/observe/client/WithClientUIContextApi.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/ObserveMainUIHandler.java
- client/core/src/main/java/fr/ird/observe/client/main/focus/MainUIFocusModel.java
- client/datasource/editor/api/src/main/java/fr/ird/observe/client/datasource/editor/api/DataSourceEditorBodyContent.java
- client/datasource/editor/api/src/main/java/fr/ird/observe/client/datasource/editor/api/DataSourceEditorModel.java
- client/datasource/editor/api/src/main/java/fr/ird/observe/client/datasource/editor/api/avdth/ImportDialogHandler.java
- client/datasource/editor/api/src/main/java/fr/ird/observe/client/datasource/editor/api/avdth/ImportDialogModel.java
- client/datasource/editor/api/src/main/java/fr/ird/observe/client/datasource/editor/api/content/actions/mode/ChangeModeExecutor.java
- client/datasource/editor/api/src/main/java/fr/ird/observe/client/datasource/editor/api/content/data/edit/actions/DeleteEdit.java
- client/datasource/editor/api/src/main/java/fr/ird/observe/client/datasource/editor/api/content/data/edit/actions/SaveContentEditUIAdapter.java
- client/datasource/editor/api/src/main/java/fr/ird/observe/client/datasource/editor/api/content/data/open/actions/SaveContentOpenableUIAdapter.java
- client/datasource/editor/api/src/main/java/fr/ird/observe/client/datasource/editor/api/content/data/ropen/actions/SaveContentRootOpenableUIAdapter.java
- client/datasource/editor/api/src/main/java/fr/ird/observe/client/datasource/editor/api/menu/DataSourceEditorMenu.jaxx
- client/datasource/editor/api/src/main/java/fr/ird/observe/client/datasource/editor/api/menu/DataSourceEditorMenuModel.java
- client/datasource/editor/api/src/main/java/fr/ird/observe/client/datasource/editor/api/navigation/NavigationTree.java
- toolkit/api/src/main/i18n/getters/java.getter
- toolkit/api/src/main/i18n/translations/toolkit_en_GB.properties
- toolkit/api/src/main/i18n/translations/toolkit_es_ES.properties
- toolkit/api/src/main/i18n/translations/toolkit_fr_FR.properties
- toolkit/api/src/main/java/fr/ird/observe/navigation/tree/navigation/NavigationTreeSelectionModel.java
- toolkit/api/src/main/java/fr/ird/observe/navigation/tree/navigation/NavigationTreeSupport.java
- client/core/src/main/java/fr/ird/observe/client/util/busy/BusyLayerUI.java → toolkit/api/src/main/java/fr/ird/observe/spi/ui/BusyLayerUI.java
- client/core/src/main/java/fr/ird/observe/client/util/busy/BusyModel.java → toolkit/api/src/main/java/fr/ird/observe/spi/ui/BusyModel.java
Changes:
=====================================
client/core/src/main/java/fr/ird/observe/client/ClientUIContext.java
=====================================
@@ -33,7 +33,7 @@ import fr.ird.observe.client.main.body.NoBodyContentComponent;
import fr.ird.observe.client.main.callback.ObserveUICallbackManager;
import fr.ird.observe.client.main.focus.MainUIFocusModel;
import fr.ird.observe.client.util.action.ObserveExecutorService;
-import fr.ird.observe.client.util.busy.BusyModel;
+import fr.ird.observe.spi.ui.BusyModel;
import fr.ird.observe.client.util.session.ObserveSwingSessionHelper;
import fr.ird.observe.dto.data.ps.dcp.FloatingObjectPresetsManager;
import fr.ird.observe.navigation.id.IdProjectManager;
=====================================
client/core/src/main/java/fr/ird/observe/client/ClientUIContextApi.java
=====================================
@@ -32,7 +32,7 @@ import fr.ird.observe.client.main.ObserveMainUI;
import fr.ird.observe.client.main.callback.ObserveUICallbackManager;
import fr.ird.observe.client.main.focus.MainUIFocusModel;
import fr.ird.observe.client.util.UIHelper;
-import fr.ird.observe.client.util.busy.BusyModel;
+import fr.ird.observe.spi.ui.BusyModel;
import fr.ird.observe.client.util.session.ObserveSwingSessionHelper;
import fr.ird.observe.dto.ObserveUtil;
import fr.ird.observe.dto.data.ps.dcp.FloatingObjectPresetsManager;
=====================================
client/core/src/main/java/fr/ird/observe/client/WithClientUIContextApi.java
=====================================
@@ -31,7 +31,7 @@ import fr.ird.observe.client.main.MainUIModel;
import fr.ird.observe.client.main.ObserveMainUI;
import fr.ird.observe.client.main.callback.ObserveUICallbackManager;
import fr.ird.observe.client.main.focus.MainUIFocusModel;
-import fr.ird.observe.client.util.busy.BusyModel;
+import fr.ird.observe.spi.ui.BusyModel;
import fr.ird.observe.client.util.session.ObserveSwingSessionHelper;
import fr.ird.observe.dto.data.ps.dcp.FloatingObjectPresetsManager;
import fr.ird.observe.navigation.id.IdProjectManager;
=====================================
client/core/src/main/java/fr/ird/observe/client/main/MainUIModel.java
=====================================
@@ -24,7 +24,7 @@ package fr.ird.observe.client.main;
import fr.ird.observe.client.configuration.ClientConfig;
import fr.ird.observe.client.main.focus.MainUIFocusModel;
-import fr.ird.observe.client.util.busy.BusyModel;
+import fr.ird.observe.spi.ui.BusyModel;
import io.ultreia.java4all.bean.AbstractJavaBean;
import io.ultreia.java4all.bean.spi.GenerateJavaBeanDefinition;
=====================================
client/core/src/main/java/fr/ird/observe/client/main/ObserveMainUI.jaxx
=====================================
@@ -22,7 +22,7 @@
<import>
fr.ird.observe.client.util.JMenuWithAccelerator
- fr.ird.observe.client.util.busy.BusyModel
+ fr.ird.observe.spi.ui.BusyModel
fr.ird.observe.client.configuration.ClientConfig
fr.ird.observe.client.main.MainUIModel
fr.ird.observe.client.main.body.MainUIBodyContentManager
=====================================
client/core/src/main/java/fr/ird/observe/client/main/ObserveMainUIHandler.java
=====================================
@@ -27,8 +27,8 @@ import fr.ird.observe.client.configuration.ClientConfig;
import fr.ird.observe.client.main.body.MainUIBodyContentManager;
import fr.ird.observe.client.util.ObserveKeyStrokesSupport;
import fr.ird.observe.client.util.UIHelper;
-import fr.ird.observe.client.util.busy.BusyLayerUI;
-import fr.ird.observe.client.util.busy.BusyModel;
+import fr.ird.observe.spi.ui.BusyLayerUI;
+import fr.ird.observe.spi.ui.BusyModel;
import org.apache.logging.log4j.LogManager;
import org.apache.logging.log4j.Logger;
import org.nuiton.jaxx.runtime.spi.UIHandler;
@@ -102,7 +102,7 @@ public class ObserveMainUIHandler implements UIHandler<ObserveMainUI>, WithClien
ui.getStatus().init();
- // installation layer de blocage en mode busy
+ // init blocking layer associated with the busy model
BusyLayerUI.create(ui, busyModel);
ui.getMenu().setEnabled(!busyModel.isBusy());
=====================================
client/core/src/main/java/fr/ird/observe/client/main/focus/MainUIFocusModel.java
=====================================
@@ -22,7 +22,7 @@ package fr.ird.observe.client.main.focus;
* #L%
*/
-import fr.ird.observe.client.util.busy.BusyModel;
+import fr.ird.observe.spi.ui.BusyModel;
import org.apache.logging.log4j.LogManager;
import org.apache.logging.log4j.Logger;
=====================================
client/datasource/editor/api/src/main/java/fr/ird/observe/client/datasource/editor/api/DataSourceEditorBodyContent.java
=====================================
@@ -44,7 +44,7 @@ import fr.ird.observe.client.main.ObserveMainUI;
import fr.ird.observe.client.main.body.MainUIBodyContent;
import fr.ird.observe.client.main.focus.MainUIFocusModel;
import fr.ird.observe.client.util.UIHelper;
-import fr.ird.observe.client.util.busy.BusyModel;
+import fr.ird.observe.spi.ui.BusyModel;
import fr.ird.observe.dto.ProgressionModel;
import fr.ird.observe.dto.ProtectedIdsCommon;
import fr.ird.observe.dto.db.BabModelVersionException;
=====================================
client/datasource/editor/api/src/main/java/fr/ird/observe/client/datasource/editor/api/DataSourceEditorModel.java
=====================================
@@ -78,4 +78,13 @@ public class DataSourceEditorModel extends AbstractJavaBean {
return messageTableModel;
}
+ /**
+ * apply extra actions from previous opened content (go back to correct tab if any, ...)
+ *
+ * @param previousUi previous ui with ui states to apply
+ */
+ public void resetFromPreviousUi(ContentUI previousUi) {
+ ContentUI newUi = getTypedContent();
+ newUi.resetFromPreviousUi(previousUi);
+ }
}
=====================================
client/datasource/editor/api/src/main/java/fr/ird/observe/client/datasource/editor/api/avdth/ImportDialogHandler.java
=====================================
@@ -25,7 +25,7 @@ package fr.ird.observe.client.datasource.editor.api.avdth;
import fr.ird.observe.client.WithClientUIContextApi;
import fr.ird.observe.client.util.ObserveBlockingLayerUI;
import fr.ird.observe.client.util.UIHelper;
-import fr.ird.observe.client.util.busy.BusyLayerUI;
+import fr.ird.observe.spi.ui.BusyLayerUI;
import fr.ird.observe.client.util.init.UIInitHelper;
import fr.ird.observe.dto.referential.common.OceanReference;
import fr.ird.observe.dto.referential.ps.common.ProgramReference;
=====================================
client/datasource/editor/api/src/main/java/fr/ird/observe/client/datasource/editor/api/avdth/ImportDialogModel.java
=====================================
@@ -27,7 +27,7 @@ import fr.ird.observe.client.configuration.ClientConfig;
import fr.ird.observe.client.datasource.api.ObserveSwingDataSource;
import fr.ird.observe.client.datasource.validation.ContentMessageTableModel;
import fr.ird.observe.client.main.focus.FocusDispatcher;
-import fr.ird.observe.client.util.busy.BusyModel;
+import fr.ird.observe.spi.ui.BusyModel;
import fr.ird.observe.dto.ProgressionModel;
import fr.ird.observe.services.service.data.ps.AvdthDataImportConfiguration;
import fr.ird.observe.services.service.data.ps.AvdthDataImportResult;
=====================================
client/datasource/editor/api/src/main/java/fr/ird/observe/client/datasource/editor/api/content/actions/mode/ChangeModeExecutor.java
=====================================
@@ -94,15 +94,10 @@ public class ChangeModeExecutor<U extends ContentUI> {
node.nodeChangedDeep();
log.info(String.format("Will reselect node: %s", node));
- tree.reSelectSafeNode(node);
- // apply extra actions from previous opened content (go back to correct tab if any, ...)
- U newUi = dataSourceEditor.getModel().getTypedContent();
- newUi.resetFromPreviousUi(ui);
+ tree.reSelectSafeNodeThen(node, () -> dataSourceEditor.getModel().resetFromPreviousUi(ui));
}
protected void afterOpen(U ui, DataSourceEditor dataSourceEditor, NavigationNode previousOpenedNode, String id) {
-
- // on repaint le parent (le program devient alors ouvert)
NavigationTree tree = dataSourceEditor.getNavigationUI().getTree();
if (previousOpenedNode != null) {
@@ -117,14 +112,12 @@ public class ChangeModeExecutor<U extends ContentUI> {
selectedNode.nodeChangedDeep();
afterOpenReselectNode(ui, dataSourceEditor, tree, selectedNode, id);
SwingUtilities.invokeLater(tree::invalidateCellSizeCache);
+// SwingUtilities.invokeLater(tree::repaint);
}
protected void afterOpenReselectNode(U ui, DataSourceEditor dataSourceEditor, NavigationTree tree, NavigationNode selectedNode, String id) {
log.info(String.format("Will reselect node: %s", selectedNode));
- tree.reSelectSafeNode(selectedNode);
- // apply extra actions from previous opened content (go back to correct tab if any, ...)
- U newUi = dataSourceEditor.getModel().getTypedContent();
- newUi.resetFromPreviousUi(ui);
+ tree.reSelectSafeNodeThen(selectedNode, () -> dataSourceEditor.getModel().resetFromPreviousUi(ui));
}
}
=====================================
client/datasource/editor/api/src/main/java/fr/ird/observe/client/datasource/editor/api/content/data/edit/actions/DeleteEdit.java
=====================================
@@ -29,7 +29,7 @@ import fr.ird.observe.client.datasource.editor.api.content.ContentUIHandler;
import fr.ird.observe.client.datasource.editor.api.content.data.edit.ContentEditUI;
import fr.ird.observe.client.datasource.editor.api.navigation.NavigationTree;
import fr.ird.observe.client.datasource.editor.api.navigation.tree.NavigationNode;
-import fr.ird.observe.client.util.busy.BusyModel;
+import fr.ird.observe.spi.ui.BusyModel;
import fr.ird.observe.dto.IdDto;
import fr.ird.observe.dto.data.EditableDto;
import fr.ird.observe.spi.decoration.DecoratorService;
=====================================
client/datasource/editor/api/src/main/java/fr/ird/observe/client/datasource/editor/api/content/data/edit/actions/SaveContentEditUIAdapter.java
=====================================
@@ -48,14 +48,12 @@ public class SaveContentEditUIAdapter<D extends EditableDto, U extends ContentEd
node.updateReference(savedBean.getId());
//FIXME A startEdit should do the math?
- dataSourceEditor.getNavigationUI().getTree().reSelectSafeNode(node);
+ dataSourceEditor.getNavigationUI().getTree().reSelectSafeNodeThen(node, () -> {
+ dataSourceEditor.getModel().resetFromPreviousUi(ui);
+ if (notPersisted) {
+ dataSourceEditor.getNavigationUI().getTree().expandPath(dataSourceEditor.getNavigationUI().getTree().getSelectionPath());
+ }
+ });
- // apply extra actions from previous opened content (go back to correct tab if any, ...)
- U newUi = dataSourceEditor.getModel().getTypedContent();
- newUi.resetFromPreviousUi(ui);
-
- if (notPersisted) {
- dataSourceEditor.getNavigationUI().getTree().expandPath(dataSourceEditor.getNavigationUI().getTree().getSelectionPath());
- }
}
}
=====================================
client/datasource/editor/api/src/main/java/fr/ird/observe/client/datasource/editor/api/content/data/open/actions/SaveContentOpenableUIAdapter.java
=====================================
@@ -76,21 +76,19 @@ public class SaveContentOpenableUIAdapter<D extends OpenableDto, U extends Conte
protected void afterNodeUpdated(DataSourceEditor dataSourceEditor, U ui, NavigationTree tree, ContentOpenableUINavigationNode node, boolean notPersisted, D bean) {
//FIXME A startEdit should do the math?
- tree.reSelectSafeNode(node);
-
- U newUi = dataSourceEditor.getModel().getTypedContent();
-
- if (notPersisted && predicate.test(bean)) {
- // reload ui and do click
- SwingUtilities.invokeLater(() -> Objects.requireNonNull(buttonGetter).apply(newUi).doClick());
- return;
- } else {
- // apply extra actions from previous opened content (go back to correct tab if any, ...)
- newUi.resetFromPreviousUi(ui);
- }
-
- if (notPersisted) {
- tree.expandPath(tree.getSelectionPath());
- }
+ tree.reSelectSafeNodeThen(node, () -> {
+ if (notPersisted && predicate.test(bean)) {
+ // reload ui and do click
+ U newUi = dataSourceEditor.getModel().getTypedContent();
+ SwingUtilities.invokeLater(() -> Objects.requireNonNull(buttonGetter).apply(newUi).doClick());
+ return;
+ } else {
+ dataSourceEditor.getModel().resetFromPreviousUi(ui);
+ }
+
+ if (notPersisted) {
+ tree.expandPath(tree.getSelectionPath());
+ }
+ });
}
}
=====================================
client/datasource/editor/api/src/main/java/fr/ird/observe/client/datasource/editor/api/content/data/ropen/actions/SaveContentRootOpenableUIAdapter.java
=====================================
@@ -58,21 +58,17 @@ public class SaveContentRootOpenableUIAdapter<D extends RootOpenableDto, U exten
updateReference(node, bean.getId());
NavigationTree tree = dataSourceEditor.getNavigationUI().getTree();
- tree.reSelectSafeNode(node);
-
- U newUi = dataSourceEditor.getModel().getTypedContent();
-
- // apply extra actions from previous opened content (go back to correct tab if any, ...)
- newUi.resetFromPreviousUi(ui);
-
- if (notPersisted) {
- tree.expandPath(tree.getSelectionPath());
- }
- NavigationUIHandler.updateStatistics(dataSourceEditor.getNavigationUI(), 0, 1);
+ tree.reSelectSafeNodeThen(node, () -> {
+ dataSourceEditor.getModel().resetFromPreviousUi(ui);
+ if (notPersisted) {
+ tree.expandPath(tree.getSelectionPath());
+ }
+ NavigationUIHandler.updateStatistics(dataSourceEditor.getNavigationUI(), 0, 1);
+ });
}
- public void updateReference(ContentRootOpenableUINavigationNode node , String id) {
+ public void updateReference(ContentRootOpenableUINavigationNode node, String id) {
boolean notPersisted = node.getInitializer().isNotPersisted();
NavigationNode parent = node.getParent();
int oldPosition = parent.getIndex(node);
=====================================
client/datasource/editor/api/src/main/java/fr/ird/observe/client/datasource/editor/api/menu/DataSourceEditorMenu.jaxx
=====================================
@@ -18,20 +18,7 @@
#L%
-->
<JMenu id='menuStorage'>
-
- <!-- <import>-->
- <!-- fr.ird.observe.client.main.MainUIModel-->
- <!-- fr.ird.observe.client.util.busy.BusyModel-->
- <!-- fr.ird.observe.client.util.UIHelper-->
- <!-- java.util.Locale-->
- <!-- java.awt.Dimension-->
- <!-- javax.swing.BoxLayout-->
- <!-- javax.swing.JComponent-->
- <!-- </import>-->
-
<DataSourceEditorMenuModel id="uiModel" initializer="getContextValue(DataSourceEditorMenuModel.class)"/>
- <!-- <BusyModel id='busyModel' initializer='uiModel.getBusyModel()'/>-->
- <!-- <MainUIModel id="mainUiModel" initializer="uiModel.getMainUIModel()"/>-->
<JMenuItem id='changeStorage'/>
<JMenuItem id='reloadStorage' styleClass="optional"/>
<JMenuItem id='closeStorage' styleClass="optional"/>
=====================================
client/datasource/editor/api/src/main/java/fr/ird/observe/client/datasource/editor/api/menu/DataSourceEditorMenuModel.java
=====================================
@@ -30,7 +30,7 @@ import fr.ird.observe.client.main.MainUIModel;
import fr.ird.observe.client.main.body.MainUIBodyContentManager;
import fr.ird.observe.client.main.body.NoBodyContentComponent;
import fr.ird.observe.client.util.UIHelper;
-import fr.ird.observe.client.util.busy.BusyModel;
+import fr.ird.observe.spi.ui.BusyModel;
import io.ultreia.java4all.bean.AbstractJavaBean;
import io.ultreia.java4all.bean.spi.GenerateJavaBeanDefinition;
import org.apache.logging.log4j.LogManager;
=====================================
client/datasource/editor/api/src/main/java/fr/ird/observe/client/datasource/editor/api/navigation/NavigationTree.java
=====================================
@@ -93,7 +93,7 @@ public class NavigationTree extends JXTree implements WithClientUIContextApi {
@Override
public void updateUI() {
- setSelectionModel(new NavigationTreeSelectionModel());
+ setSelectionModel(new NavigationTreeSelectionModel(getBusyModel()));
super.updateUI();
}
@@ -142,25 +142,39 @@ public class NavigationTree extends JXTree implements WithClientUIContextApi {
log.info(String.format("try to select safe node [%s]", node));
TreePath path = new TreePath(getModel().getPathToRoot(node));
getSelectionModel().setSkipCheckPreviousContent(true);
+ getSelectionModel().setSkipBusyModel(true);
try {
setSelectionPath(path);
} finally {
getSelectionModel().setSkipCheckPreviousContent(false);
+ getSelectionModel().setSkipBusyModel(false);
}
SwingUtilities.invokeLater(() -> scrollPathToVisible(path));
}
- public void reSelectSafeNode(TreeNode node) {
+ public void reSelectSafeNodeThen(TreeNode node, Runnable then) {
log.info(String.format("try to reselect safe node [%s]", node));
TreePath path = new TreePath(getModel().getPathToRoot(node));
- getSelectionModel().clearSelection();
- getSelectionModel().setSkipCheckPreviousContent(true);
+ getSelectionModel().setSkipBusyModel(true);
try {
- setSelectionPath(path);
+ getSelectionModel().clearSelection();
+ getSelectionModel().setSkipCheckPreviousContent(true);
+ try {
+ setSelectionPath(path);
+ } finally {
+ getSelectionModel().setSkipCheckPreviousContent(false);
+ }
} finally {
- getSelectionModel().setSkipCheckPreviousContent(false);
+ getSelectionModel().setSkipBusyModel(false);
}
SwingUtilities.invokeLater(() -> scrollPathToVisible(path));
+ if (then != null) {
+ then.run();
+ }
+ }
+
+ public void reSelectSafeNode(TreeNode node) {
+ reSelectSafeNodeThen(node, null);
}
public boolean isRowSelected(int requiredRow) {
=====================================
toolkit/api/src/main/i18n/getters/java.getter
=====================================
@@ -76,6 +76,10 @@ observe.services.topia.error.h2.database.locked
observe.services.topia.error.h2.database.notFound
observe.services.topia.error.id.not.found
observe.services.topia.error.incompatible.data.source.create.configuration
+observe.ui.busy.end.block
+observe.ui.busy.end.task
+observe.ui.busy.start.block
+observe.ui.busy.start.task
observe.ui.datasource.storage.error.rest.adminApiKey.invalid
observe.ui.datasource.storage.error.rest.adminApiKey.required
observe.ui.datasource.storage.error.rest.apiAccess.invalid
@@ -87,3 +91,4 @@ observe.ui.datasource.storage.error.rest.password.required
observe.ui.datasource.storage.error.rest.user.required
observe.ui.datasource.storage.error.rest.user.unknown
observe.ui.message.warning.will.be.delete
+observe.ui.tree.loading.node
=====================================
toolkit/api/src/main/i18n/translations/toolkit_en_GB.properties
=====================================
@@ -144,6 +144,10 @@ observe.services.topia.error.h2.database.locked=The H2 database is locked
observe.services.topia.error.h2.database.notFound=The H2 database was not found.
observe.services.topia.error.id.not.found=Data [%s] not found.
observe.services.topia.error.incompatible.data.source.create.configuration=Can not create database, import of data and referential in same time..
+observe.ui.busy.end.block=End main task [%10s] « %s »
+observe.ui.busy.end.task=End task (%d) [%10s] « %s »
+observe.ui.busy.start.block=Start main task « %s »
+observe.ui.busy.start.task=Start task (%d) « %s »
observe.ui.datasource.storage.error.rest.adminApiKey.invalid=Admin key not valid
observe.ui.datasource.storage.error.rest.adminApiKey.required=Admin key not found
observe.ui.datasource.storage.error.rest.apiAccess.invalid=Unauthorized api access (required\: %s, yours is\: %s)
@@ -155,3 +159,4 @@ observe.ui.datasource.storage.error.rest.password.required=Password is mandatory
observe.ui.datasource.storage.error.rest.user.required=User login is mandatory
observe.ui.datasource.storage.error.rest.user.unknown=User "%s" is not defined on server
observe.ui.message.warning.will.be.delete=%1$s\n\nBe ware, export will replace existing data.
+observe.ui.tree.loading.node=Loading selected node
=====================================
toolkit/api/src/main/i18n/translations/toolkit_es_ES.properties
=====================================
@@ -144,6 +144,10 @@ observe.services.topia.error.h2.database.locked=La base de datos H2 ya está sie
observe.services.topia.error.h2.database.notFound=No se pudó encontrar La base de datos H2.
observe.services.topia.error.id.not.found=Data [%s] not found.
observe.services.topia.error.incompatible.data.source.create.configuration=Can not create database, import of data and referential in same time..
+observe.ui.busy.end.block=End main task [%10s] « %s »
+observe.ui.busy.end.task=End task (%d) [%10s] « %s »
+observe.ui.busy.start.block=Start main task « %s »
+observe.ui.busy.start.task=Start task (%d) « %s »
observe.ui.datasource.storage.error.rest.adminApiKey.invalid=Admin key not valid \#TODO
observe.ui.datasource.storage.error.rest.adminApiKey.required=Admin key not found \#TODO
observe.ui.datasource.storage.error.rest.apiAccess.invalid=Unauthorized api access (required\: %s, yours is\: %s) \#TODO
@@ -155,3 +159,4 @@ observe.ui.datasource.storage.error.rest.password.required=Le contraseña es obl
observe.ui.datasource.storage.error.rest.user.required=El usuario es obligatorio
observe.ui.datasource.storage.error.rest.user.unknown=El usuario "%s" no es conocido del servidor
observe.ui.message.warning.will.be.delete=%1$s\n\nAtención, la exportación reemplazará la marea existente.
+observe.ui.tree.loading.node=Loading selected node
=====================================
toolkit/api/src/main/i18n/translations/toolkit_fr_FR.properties
=====================================
@@ -144,6 +144,10 @@ observe.services.topia.error.h2.database.locked=La base H2 est déjà utilisé p
observe.services.topia.error.h2.database.notFound=La base H2 n'a pas été trouvée.
observe.services.topia.error.id.not.found=Donnée [%s] non trouvée.
observe.services.topia.error.incompatible.data.source.create.configuration=Impossible de créer la base (import données et référentiel demandé en meme temps)
+observe.ui.busy.end.block=Action terminée [%10s] « %s »
+observe.ui.busy.end.task=Tâche terminée (%d) [%10s] « %s »
+observe.ui.busy.start.block=Action en cours « %s »
+observe.ui.busy.start.task=Tâche en cours (%d) « %s »
observe.ui.datasource.storage.error.rest.adminApiKey.invalid=Pas de clef admin trouvée
observe.ui.datasource.storage.error.rest.adminApiKey.required=Clef admin non valide
observe.ui.datasource.storage.error.rest.apiAccess.invalid=Accès non autorisé à cette API (Accès requis\: %s, le votre\: %s)
@@ -155,3 +159,4 @@ observe.ui.datasource.storage.error.rest.password.required=Le mot de passe est o
observe.ui.datasource.storage.error.rest.user.required=L'utilisateur est obligatoire
observe.ui.datasource.storage.error.rest.user.unknown=L'utilisateur "%s" est inconnu sur le serveur
observe.ui.message.warning.will.be.delete=%1$s\n\nAttention, l'export remplacera la marée existante.
+observe.ui.tree.loading.node=Chargement du nœud sélectionné
=====================================
toolkit/api/src/main/java/fr/ird/observe/navigation/tree/navigation/NavigationTreeSelectionModel.java
=====================================
@@ -25,9 +25,12 @@ package fr.ird.observe.navigation.tree.navigation;
import fr.ird.observe.navigation.tree.navigation.event.NavigationTreeSelectionEvent;
import fr.ird.observe.navigation.tree.navigation.event.NavigationTreeSelectionListener;
import fr.ird.observe.navigation.tree.navigation.event.NavigationTreeSelectionVetoException;
+import fr.ird.observe.spi.ui.BusyModel;
+import io.ultreia.java4all.i18n.I18n;
import org.apache.logging.log4j.LogManager;
import org.apache.logging.log4j.Logger;
+import javax.swing.SwingUtilities;
import javax.swing.event.TreeExpansionEvent;
import javax.swing.tree.DefaultTreeSelectionModel;
import javax.swing.tree.ExpandVetoException;
@@ -46,9 +49,12 @@ public class NavigationTreeSelectionModel extends DefaultTreeSelectionModel {
private static final Logger log = LogManager.getLogger(NavigationTreeSelectionModel.class);
+ private final BusyModel busyModel;
private boolean skipCheckPreviousContent;
+ private boolean skipBusyModel;
- public NavigationTreeSelectionModel() {
+ public NavigationTreeSelectionModel(BusyModel busyModel) {
+ this.busyModel = busyModel;
setSelectionMode(TreeSelectionModel.SINGLE_TREE_SELECTION);
}
@@ -84,29 +90,35 @@ public class NavigationTreeSelectionModel extends DefaultTreeSelectionModel {
return;
}
TreePath path = pPaths[0];
- boolean[] newness = new boolean[pPaths.length];
- Arrays.fill(newness, true);
- NavigationTreeSelectionEvent event = new NavigationTreeSelectionEvent(this, pPaths, newness, getLeadSelectionPath(), path, skipCheckPreviousContent);
boolean canChange = !Objects.equals(path, getSelectionPath());
if (canChange) {
+ boolean[] newness = new boolean[pPaths.length];
+ Arrays.fill(newness, true);
+ NavigationTreeSelectionEvent event = new NavigationTreeSelectionEvent(this, pPaths, newness, getLeadSelectionPath(), path, skipCheckPreviousContent);
try {
fireVetoValueChanged(event);
} catch (NavigationTreeSelectionVetoException e) {
canChange = false;
}
}
-
-// boolean canChange = skipCheckPreviousContent || (!Objects.equals(path, getSelectionPath()) && contentUIManager.closeSelectedContentUI());
if (!canChange) {
// cancel the change of node
log.warn(String.format("Do not change selection path: %s against: %s", path, getSelectionPath()));
return;
}
-// FIXME Move this in a listener
-// if (skipCheckPreviousContent) {
-// contentUIManager.closeSafeSelectedContentUI();
-// }
- super.setSelectionPaths(pPaths);
+ // can now safely select new path
+ if (busyModel == null || skipBusyModel) {
+ super.setSelectionPaths(pPaths);
+ } else {
+ busyModel.addTask(I18n.t("observe.ui.tree.loading.node"));
+ SwingUtilities.invokeLater(() -> {
+ try {
+ super.setSelectionPaths(pPaths);
+ } finally {
+ busyModel.popTask();
+ }
+ });
+ }
}
@Override
@@ -135,4 +147,12 @@ public class NavigationTreeSelectionModel extends DefaultTreeSelectionModel {
public void setSkipCheckPreviousContent(boolean skipCheckPreviousContent) {
this.skipCheckPreviousContent = skipCheckPreviousContent;
}
+
+ public boolean isSkipBusyModel() {
+ return skipBusyModel;
+ }
+
+ public void setSkipBusyModel(boolean skipBusyModel) {
+ this.skipBusyModel = skipBusyModel;
+ }
}
=====================================
toolkit/api/src/main/java/fr/ird/observe/navigation/tree/navigation/NavigationTreeSupport.java
=====================================
@@ -54,7 +54,7 @@ public class NavigationTreeSupport<R extends NavigationTreeNode, M extends Navig
@Override
public void updateUI() {
- setSelectionModel(new NavigationTreeSelectionModel());
+ setSelectionModel(new NavigationTreeSelectionModel(null));
super.updateUI();
}
=====================================
client/core/src/main/java/fr/ird/observe/client/util/busy/BusyLayerUI.java → toolkit/api/src/main/java/fr/ird/observe/spi/ui/BusyLayerUI.java
=====================================
@@ -1,8 +1,8 @@
-package fr.ird.observe.client.util.busy;
+package fr.ird.observe.spi.ui;
/*-
* #%L
- * ObServe Client :: Core
+ * ObServe Toolkit :: API
* %%
* Copyright (C) 2008 - 2022 IRD, Ultreia.io
* %%
@@ -22,10 +22,6 @@ package fr.ird.observe.client.util.busy;
* #L%
*/
-import org.apache.logging.log4j.LogManager;
-import org.apache.logging.log4j.Logger;
-import io.ultreia.java4all.util.TimeLog;
-
import javax.swing.JComponent;
import javax.swing.JLayer;
import javax.swing.RootPaneContainer;
@@ -40,6 +36,7 @@ import java.awt.Cursor;
import java.awt.Graphics;
import java.awt.Graphics2D;
import java.awt.event.InputEvent;
+import java.beans.PropertyChangeEvent;
import java.beans.PropertyChangeListener;
import java.io.Closeable;
import java.util.Objects;
@@ -48,18 +45,13 @@ import java.util.Objects;
* @author Tony Chemit - dev(a)tchemit.fr
* @since 8.0.0
*/
-public class BusyLayerUI<U extends Component> extends LayerUI<U> implements Closeable {
-
- private static final Logger log = LogManager.getLogger(BusyLayerUI.class);
- private static final TimeLog timeLog = new TimeLog(BusyLayerUI.class, 0, 1000);
+public class BusyLayerUI<U extends Component> extends LayerUI<U> implements Closeable, PropertyChangeListener {
private final RootPaneContainer rootPanecontainer;
private final Container container;
private final BusyModel model;
private final Color busyColor;
- private final PropertyChangeListener listener;
private transient Color color;
- private long blockingTime;
public static void create(RootPaneContainer container, BusyModel busyModel) {
Container contentPane = container.getRootPane().getContentPane();
@@ -81,8 +73,7 @@ public class BusyLayerUI<U extends Component> extends LayerUI<U> implements Clos
this.container = Objects.requireNonNull(rootPanecontainer.getRootPane());
this.model = Objects.requireNonNull(model);
this.busyColor = UIManager.getColor("BlockingLayerUI.busyColor");
- this.listener = evt -> onBusyStateChanged((boolean) evt.getOldValue(), (boolean) evt.getNewValue());
- this.model.addPropertyChangeListener(BusyModel.BUSY_PROPERTY_NAME, listener);
+ this.model.addPropertyChangeListener(BusyModel.BUSY_PROPERTY_NAME, this);
}
@Override
@@ -125,32 +116,32 @@ public class BusyLayerUI<U extends Component> extends LayerUI<U> implements Clos
@Override
public void close() {
- this.model.removePropertyChangeListener(BusyModel.BUSY_PROPERTY_NAME, listener);
+ model.removePropertyChangeListener(BusyModel.BUSY_PROPERTY_NAME, this);
}
public Container getContainer() {
return container;
}
- public void onBusyStateChanged(boolean wasBusy, boolean isBusy) {
- if (wasBusy == isBusy) {
- return;
- }
-
- color = isBusy ? busyColor : null;
- if (isBusy) {
- blockingTime = TimeLog.getTime();
- log.debug("Blocking ui at " + blockingTime);
- container.setCursor(Cursor.getPredefinedCursor(Cursor.WAIT_CURSOR));
- } else {
- timeLog.log(blockingTime, "unblock");
- container.setCursor(Cursor.getDefaultCursor());
- }
- rootPanecontainer.getRootPane().repaint();
- }
-
public boolean isBusy() {
return color != null;
}
+ @Override
+ public void propertyChange(PropertyChangeEvent evt) {
+ if (BusyModel.BUSY_PROPERTY_NAME.equals(evt.getPropertyName())) {
+ boolean wasBusy = (boolean) evt.getOldValue();
+ boolean isBusy = (boolean) evt.getNewValue();
+ if (wasBusy == isBusy) {
+ return;
+ }
+ color = isBusy ? busyColor : null;
+ if (isBusy) {
+ container.setCursor(Cursor.getPredefinedCursor(Cursor.WAIT_CURSOR));
+ } else {
+ container.setCursor(Cursor.getDefaultCursor());
+ }
+ rootPanecontainer.getRootPane().repaint();
+ }
+ }
}
=====================================
client/core/src/main/java/fr/ird/observe/client/util/busy/BusyModel.java → toolkit/api/src/main/java/fr/ird/observe/spi/ui/BusyModel.java
=====================================
@@ -1,8 +1,8 @@
-package fr.ird.observe.client.util.busy;
+package fr.ird.observe.spi.ui;
/*-
* #%L
- * ObServe Client :: Core
+ * ObServe Toolkit :: API
* %%
* Copyright (C) 2008 - 2022 IRD, Ultreia.io
* %%
@@ -24,6 +24,9 @@ package fr.ird.observe.client.util.busy;
import io.ultreia.java4all.bean.AbstractJavaBean;
import io.ultreia.java4all.bean.spi.GenerateJavaBeanDefinition;
+import io.ultreia.java4all.i18n.I18n;
+import io.ultreia.java4all.lang.Strings;
+import io.ultreia.java4all.util.TimeLog;
import org.apache.logging.log4j.LogManager;
import org.apache.logging.log4j.Logger;
@@ -36,36 +39,76 @@ import java.util.Deque;
*/
@GenerateJavaBeanDefinition
public class BusyModel extends AbstractJavaBean {
-
+ private static final TimeLog timeLog = new TimeLog(BusyModel.class, 500, 1000);
private static final Logger log = LogManager.getLogger(BusyModel.class);
+ static class BusyTask {
+ private final String taskName;
+ private final int rank;
+ private final long startTime;
+
+ BusyTask(String taskName, int rank) {
+ this.taskName = taskName;
+ this.rank = rank;
+ this.startTime = TimeLog.getTime();
+ }
+
+ public int getRank() {
+ return rank;
+ }
+
+ public String getTaskName() {
+ return taskName;
+ }
+
+ public long getStartTime() {
+ return startTime;
+ }
+
+ }
+
public static final String BUSY_PROPERTY_NAME = "busy";
- private final Deque<String> tasks;
+ private final Deque<BusyTask> tasks;
public BusyModel() {
tasks = new ArrayDeque<>();
}
- public synchronized void addTask(String task) {
- log.debug("Add task: " + task);
+ public synchronized void addTask(String taskName) {
boolean oldValue = isBusy();
+ BusyTask task = new BusyTask(taskName, tasks.size() + 1);
+ log.info(I18n.t("observe.ui.busy.start.task", task.getRank(), taskName));
tasks.add(task);
- fireBusyStateChanged(oldValue);
+ fireBusyStateChanged(oldValue, task, null);
}
public synchronized void popTask() {
boolean oldValue = isBusy();
- String task = tasks.removeLast();
- log.debug("Remove task: " + task);
- fireBusyStateChanged(oldValue);
+ BusyTask task = tasks.removeLast();
+ String taskName = task.getTaskName();
+ long startTime = task.getStartTime();
+ String delay = Strings.convertTime(TimeLog.getTime() - startTime);
+ log.info(I18n.t("observe.ui.busy.end.task", task.getRank(), delay, taskName));
+ timeLog.log(startTime, "task done", taskName);
+ fireBusyStateChanged(oldValue, task, delay);
}
public boolean isBusy() {
return !tasks.isEmpty();
}
- void fireBusyStateChanged(boolean oldValue) {
+ void fireBusyStateChanged(boolean oldValue, BusyTask task, String delay) {
boolean busy = isBusy();
- firePropertyChange(BUSY_PROPERTY_NAME, oldValue, busy);
+ if (oldValue != busy) {
+ String taskName = task.getTaskName();
+ if (busy) {
+ log.info(I18n.t("observe.ui.busy.start.block", taskName));
+ } else {
+ long startTime = task.getStartTime();
+ log.info(I18n.t("observe.ui.busy.end.block", delay, taskName));
+ timeLog.log(startTime, "unblock", taskName);
+ }
+ firePropertyChange(BUSY_PROPERTY_NAME, oldValue, busy);
+ }
}
}
View it on GitLab: https://gitlab.com/ultreiaio/ird-observe/-/commit/7d0c19308e21d631e84c16c2a…
--
View it on GitLab: https://gitlab.com/ultreiaio/ird-observe/-/commit/7d0c19308e21d631e84c16c2a…
You're receiving this email because of your account on gitlab.com.
1
0
[Git][ultreiaio/ird-observe][develop] Client - Aucune barre de progression Closes #2409
by Tony CHEMIT (@tchemit) 03 Aug '22
by Tony CHEMIT (@tchemit) 03 Aug '22
03 Aug '22
Tony CHEMIT pushed to branch develop at ultreiaio / ird-observe
Commits:
dacba01b by Tony Chemit at 2022-08-03T11:30:28+02:00
Client - Aucune barre de progression Closes #2409
- - - - -
22 changed files:
- client/core/src/main/java/fr/ird/observe/client/ClientUIContext.java
- client/core/src/main/java/fr/ird/observe/client/ClientUIContextApi.java
- client/core/src/main/java/fr/ird/observe/client/WithClientUIContextApi.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/ObserveMainUIHandler.java
- client/core/src/main/java/fr/ird/observe/client/main/focus/MainUIFocusModel.java
- client/datasource/editor/api/src/main/java/fr/ird/observe/client/datasource/editor/api/DataSourceEditorBodyContent.java
- client/datasource/editor/api/src/main/java/fr/ird/observe/client/datasource/editor/api/avdth/ImportDialogHandler.java
- client/datasource/editor/api/src/main/java/fr/ird/observe/client/datasource/editor/api/avdth/ImportDialogModel.java
- client/datasource/editor/api/src/main/java/fr/ird/observe/client/datasource/editor/api/content/data/edit/actions/DeleteEdit.java
- client/datasource/editor/api/src/main/java/fr/ird/observe/client/datasource/editor/api/menu/DataSourceEditorMenu.jaxx
- client/datasource/editor/api/src/main/java/fr/ird/observe/client/datasource/editor/api/menu/DataSourceEditorMenuModel.java
- client/datasource/editor/api/src/main/java/fr/ird/observe/client/datasource/editor/api/navigation/NavigationTree.java
- toolkit/api/src/main/i18n/getters/java.getter
- toolkit/api/src/main/i18n/translations/toolkit_en_GB.properties
- toolkit/api/src/main/i18n/translations/toolkit_es_ES.properties
- toolkit/api/src/main/i18n/translations/toolkit_fr_FR.properties
- toolkit/api/src/main/java/fr/ird/observe/navigation/tree/navigation/NavigationTreeSelectionModel.java
- toolkit/api/src/main/java/fr/ird/observe/navigation/tree/navigation/NavigationTreeSupport.java
- client/core/src/main/java/fr/ird/observe/client/util/busy/BusyLayerUI.java → toolkit/api/src/main/java/fr/ird/observe/spi/ui/BusyLayerUI.java
- client/core/src/main/java/fr/ird/observe/client/util/busy/BusyModel.java → toolkit/api/src/main/java/fr/ird/observe/spi/ui/BusyModel.java
Changes:
=====================================
client/core/src/main/java/fr/ird/observe/client/ClientUIContext.java
=====================================
@@ -33,7 +33,7 @@ import fr.ird.observe.client.main.body.NoBodyContentComponent;
import fr.ird.observe.client.main.callback.ObserveUICallbackManager;
import fr.ird.observe.client.main.focus.MainUIFocusModel;
import fr.ird.observe.client.util.action.ObserveExecutorService;
-import fr.ird.observe.client.util.busy.BusyModel;
+import fr.ird.observe.spi.ui.BusyModel;
import fr.ird.observe.client.util.session.ObserveSwingSessionHelper;
import fr.ird.observe.dto.data.ps.dcp.FloatingObjectPresetsManager;
import fr.ird.observe.navigation.id.IdProjectManager;
=====================================
client/core/src/main/java/fr/ird/observe/client/ClientUIContextApi.java
=====================================
@@ -32,7 +32,7 @@ import fr.ird.observe.client.main.ObserveMainUI;
import fr.ird.observe.client.main.callback.ObserveUICallbackManager;
import fr.ird.observe.client.main.focus.MainUIFocusModel;
import fr.ird.observe.client.util.UIHelper;
-import fr.ird.observe.client.util.busy.BusyModel;
+import fr.ird.observe.spi.ui.BusyModel;
import fr.ird.observe.client.util.session.ObserveSwingSessionHelper;
import fr.ird.observe.dto.ObserveUtil;
import fr.ird.observe.dto.data.ps.dcp.FloatingObjectPresetsManager;
=====================================
client/core/src/main/java/fr/ird/observe/client/WithClientUIContextApi.java
=====================================
@@ -31,7 +31,7 @@ import fr.ird.observe.client.main.MainUIModel;
import fr.ird.observe.client.main.ObserveMainUI;
import fr.ird.observe.client.main.callback.ObserveUICallbackManager;
import fr.ird.observe.client.main.focus.MainUIFocusModel;
-import fr.ird.observe.client.util.busy.BusyModel;
+import fr.ird.observe.spi.ui.BusyModel;
import fr.ird.observe.client.util.session.ObserveSwingSessionHelper;
import fr.ird.observe.dto.data.ps.dcp.FloatingObjectPresetsManager;
import fr.ird.observe.navigation.id.IdProjectManager;
=====================================
client/core/src/main/java/fr/ird/observe/client/main/MainUIModel.java
=====================================
@@ -24,7 +24,7 @@ package fr.ird.observe.client.main;
import fr.ird.observe.client.configuration.ClientConfig;
import fr.ird.observe.client.main.focus.MainUIFocusModel;
-import fr.ird.observe.client.util.busy.BusyModel;
+import fr.ird.observe.spi.ui.BusyModel;
import io.ultreia.java4all.bean.AbstractJavaBean;
import io.ultreia.java4all.bean.spi.GenerateJavaBeanDefinition;
=====================================
client/core/src/main/java/fr/ird/observe/client/main/ObserveMainUI.jaxx
=====================================
@@ -22,7 +22,7 @@
<import>
fr.ird.observe.client.util.JMenuWithAccelerator
- fr.ird.observe.client.util.busy.BusyModel
+ fr.ird.observe.spi.ui.BusyModel
fr.ird.observe.client.configuration.ClientConfig
fr.ird.observe.client.main.MainUIModel
fr.ird.observe.client.main.body.MainUIBodyContentManager
=====================================
client/core/src/main/java/fr/ird/observe/client/main/ObserveMainUIHandler.java
=====================================
@@ -27,8 +27,8 @@ import fr.ird.observe.client.configuration.ClientConfig;
import fr.ird.observe.client.main.body.MainUIBodyContentManager;
import fr.ird.observe.client.util.ObserveKeyStrokesSupport;
import fr.ird.observe.client.util.UIHelper;
-import fr.ird.observe.client.util.busy.BusyLayerUI;
-import fr.ird.observe.client.util.busy.BusyModel;
+import fr.ird.observe.spi.ui.BusyLayerUI;
+import fr.ird.observe.spi.ui.BusyModel;
import org.apache.logging.log4j.LogManager;
import org.apache.logging.log4j.Logger;
import org.nuiton.jaxx.runtime.spi.UIHandler;
=====================================
client/core/src/main/java/fr/ird/observe/client/main/focus/MainUIFocusModel.java
=====================================
@@ -22,7 +22,7 @@ package fr.ird.observe.client.main.focus;
* #L%
*/
-import fr.ird.observe.client.util.busy.BusyModel;
+import fr.ird.observe.spi.ui.BusyModel;
import org.apache.logging.log4j.LogManager;
import org.apache.logging.log4j.Logger;
=====================================
client/datasource/editor/api/src/main/java/fr/ird/observe/client/datasource/editor/api/DataSourceEditorBodyContent.java
=====================================
@@ -44,7 +44,7 @@ import fr.ird.observe.client.main.ObserveMainUI;
import fr.ird.observe.client.main.body.MainUIBodyContent;
import fr.ird.observe.client.main.focus.MainUIFocusModel;
import fr.ird.observe.client.util.UIHelper;
-import fr.ird.observe.client.util.busy.BusyModel;
+import fr.ird.observe.spi.ui.BusyModel;
import fr.ird.observe.dto.ProgressionModel;
import fr.ird.observe.dto.ProtectedIdsCommon;
import fr.ird.observe.dto.db.BabModelVersionException;
=====================================
client/datasource/editor/api/src/main/java/fr/ird/observe/client/datasource/editor/api/avdth/ImportDialogHandler.java
=====================================
@@ -25,7 +25,7 @@ package fr.ird.observe.client.datasource.editor.api.avdth;
import fr.ird.observe.client.WithClientUIContextApi;
import fr.ird.observe.client.util.ObserveBlockingLayerUI;
import fr.ird.observe.client.util.UIHelper;
-import fr.ird.observe.client.util.busy.BusyLayerUI;
+import fr.ird.observe.spi.ui.BusyLayerUI;
import fr.ird.observe.client.util.init.UIInitHelper;
import fr.ird.observe.dto.referential.common.OceanReference;
import fr.ird.observe.dto.referential.ps.common.ProgramReference;
=====================================
client/datasource/editor/api/src/main/java/fr/ird/observe/client/datasource/editor/api/avdth/ImportDialogModel.java
=====================================
@@ -27,7 +27,7 @@ import fr.ird.observe.client.configuration.ClientConfig;
import fr.ird.observe.client.datasource.api.ObserveSwingDataSource;
import fr.ird.observe.client.datasource.validation.ContentMessageTableModel;
import fr.ird.observe.client.main.focus.FocusDispatcher;
-import fr.ird.observe.client.util.busy.BusyModel;
+import fr.ird.observe.spi.ui.BusyModel;
import fr.ird.observe.dto.ProgressionModel;
import fr.ird.observe.services.service.data.ps.AvdthDataImportConfiguration;
import fr.ird.observe.services.service.data.ps.AvdthDataImportResult;
=====================================
client/datasource/editor/api/src/main/java/fr/ird/observe/client/datasource/editor/api/content/data/edit/actions/DeleteEdit.java
=====================================
@@ -29,7 +29,7 @@ import fr.ird.observe.client.datasource.editor.api.content.ContentUIHandler;
import fr.ird.observe.client.datasource.editor.api.content.data.edit.ContentEditUI;
import fr.ird.observe.client.datasource.editor.api.navigation.NavigationTree;
import fr.ird.observe.client.datasource.editor.api.navigation.tree.NavigationNode;
-import fr.ird.observe.client.util.busy.BusyModel;
+import fr.ird.observe.spi.ui.BusyModel;
import fr.ird.observe.dto.IdDto;
import fr.ird.observe.dto.data.EditableDto;
import fr.ird.observe.spi.decoration.DecoratorService;
=====================================
client/datasource/editor/api/src/main/java/fr/ird/observe/client/datasource/editor/api/menu/DataSourceEditorMenu.jaxx
=====================================
@@ -18,20 +18,7 @@
#L%
-->
<JMenu id='menuStorage'>
-
- <!-- <import>-->
- <!-- fr.ird.observe.client.main.MainUIModel-->
- <!-- fr.ird.observe.client.util.busy.BusyModel-->
- <!-- fr.ird.observe.client.util.UIHelper-->
- <!-- java.util.Locale-->
- <!-- java.awt.Dimension-->
- <!-- javax.swing.BoxLayout-->
- <!-- javax.swing.JComponent-->
- <!-- </import>-->
-
<DataSourceEditorMenuModel id="uiModel" initializer="getContextValue(DataSourceEditorMenuModel.class)"/>
- <!-- <BusyModel id='busyModel' initializer='uiModel.getBusyModel()'/>-->
- <!-- <MainUIModel id="mainUiModel" initializer="uiModel.getMainUIModel()"/>-->
<JMenuItem id='changeStorage'/>
<JMenuItem id='reloadStorage' styleClass="optional"/>
<JMenuItem id='closeStorage' styleClass="optional"/>
=====================================
client/datasource/editor/api/src/main/java/fr/ird/observe/client/datasource/editor/api/menu/DataSourceEditorMenuModel.java
=====================================
@@ -30,7 +30,7 @@ import fr.ird.observe.client.main.MainUIModel;
import fr.ird.observe.client.main.body.MainUIBodyContentManager;
import fr.ird.observe.client.main.body.NoBodyContentComponent;
import fr.ird.observe.client.util.UIHelper;
-import fr.ird.observe.client.util.busy.BusyModel;
+import fr.ird.observe.spi.ui.BusyModel;
import io.ultreia.java4all.bean.AbstractJavaBean;
import io.ultreia.java4all.bean.spi.GenerateJavaBeanDefinition;
import org.apache.logging.log4j.LogManager;
=====================================
client/datasource/editor/api/src/main/java/fr/ird/observe/client/datasource/editor/api/navigation/NavigationTree.java
=====================================
@@ -93,7 +93,7 @@ public class NavigationTree extends JXTree implements WithClientUIContextApi {
@Override
public void updateUI() {
- setSelectionModel(new NavigationTreeSelectionModel());
+ setSelectionModel(new NavigationTreeSelectionModel(getBusyModel()));
super.updateUI();
}
=====================================
toolkit/api/src/main/i18n/getters/java.getter
=====================================
@@ -87,3 +87,4 @@ observe.ui.datasource.storage.error.rest.password.required
observe.ui.datasource.storage.error.rest.user.required
observe.ui.datasource.storage.error.rest.user.unknown
observe.ui.message.warning.will.be.delete
+observe.ui.tree.loading.node
=====================================
toolkit/api/src/main/i18n/translations/toolkit_en_GB.properties
=====================================
@@ -155,3 +155,4 @@ observe.ui.datasource.storage.error.rest.password.required=Password is mandatory
observe.ui.datasource.storage.error.rest.user.required=User login is mandatory
observe.ui.datasource.storage.error.rest.user.unknown=User "%s" is not defined on server
observe.ui.message.warning.will.be.delete=%1$s\n\nBe ware, export will replace existing data.
+observe.ui.tree.loading.node=Loading selected node
=====================================
toolkit/api/src/main/i18n/translations/toolkit_es_ES.properties
=====================================
@@ -155,3 +155,4 @@ observe.ui.datasource.storage.error.rest.password.required=Le contraseña es obl
observe.ui.datasource.storage.error.rest.user.required=El usuario es obligatorio
observe.ui.datasource.storage.error.rest.user.unknown=El usuario "%s" no es conocido del servidor
observe.ui.message.warning.will.be.delete=%1$s\n\nAtención, la exportación reemplazará la marea existente.
+observe.ui.tree.loading.node=Loading selected node
=====================================
toolkit/api/src/main/i18n/translations/toolkit_fr_FR.properties
=====================================
@@ -155,3 +155,4 @@ observe.ui.datasource.storage.error.rest.password.required=Le mot de passe est o
observe.ui.datasource.storage.error.rest.user.required=L'utilisateur est obligatoire
observe.ui.datasource.storage.error.rest.user.unknown=L'utilisateur "%s" est inconnu sur le serveur
observe.ui.message.warning.will.be.delete=%1$s\n\nAttention, l'export remplacera la marée existante.
+observe.ui.tree.loading.node=Chargement du nœud sélectionné
=====================================
toolkit/api/src/main/java/fr/ird/observe/navigation/tree/navigation/NavigationTreeSelectionModel.java
=====================================
@@ -25,9 +25,12 @@ package fr.ird.observe.navigation.tree.navigation;
import fr.ird.observe.navigation.tree.navigation.event.NavigationTreeSelectionEvent;
import fr.ird.observe.navigation.tree.navigation.event.NavigationTreeSelectionListener;
import fr.ird.observe.navigation.tree.navigation.event.NavigationTreeSelectionVetoException;
+import fr.ird.observe.spi.ui.BusyModel;
+import io.ultreia.java4all.i18n.I18n;
import org.apache.logging.log4j.LogManager;
import org.apache.logging.log4j.Logger;
+import javax.swing.SwingUtilities;
import javax.swing.event.TreeExpansionEvent;
import javax.swing.tree.DefaultTreeSelectionModel;
import javax.swing.tree.ExpandVetoException;
@@ -47,8 +50,10 @@ public class NavigationTreeSelectionModel extends DefaultTreeSelectionModel {
private static final Logger log = LogManager.getLogger(NavigationTreeSelectionModel.class);
private boolean skipCheckPreviousContent;
+ private final BusyModel busyModel;
- public NavigationTreeSelectionModel() {
+ public NavigationTreeSelectionModel(BusyModel busyModel) {
+ this.busyModel = busyModel;
setSelectionMode(TreeSelectionModel.SINGLE_TREE_SELECTION);
}
@@ -84,29 +89,35 @@ public class NavigationTreeSelectionModel extends DefaultTreeSelectionModel {
return;
}
TreePath path = pPaths[0];
- boolean[] newness = new boolean[pPaths.length];
- Arrays.fill(newness, true);
- NavigationTreeSelectionEvent event = new NavigationTreeSelectionEvent(this, pPaths, newness, getLeadSelectionPath(), path, skipCheckPreviousContent);
boolean canChange = !Objects.equals(path, getSelectionPath());
if (canChange) {
+ boolean[] newness = new boolean[pPaths.length];
+ Arrays.fill(newness, true);
+ NavigationTreeSelectionEvent event = new NavigationTreeSelectionEvent(this, pPaths, newness, getLeadSelectionPath(), path, skipCheckPreviousContent);
try {
fireVetoValueChanged(event);
} catch (NavigationTreeSelectionVetoException e) {
canChange = false;
}
}
-
-// boolean canChange = skipCheckPreviousContent || (!Objects.equals(path, getSelectionPath()) && contentUIManager.closeSelectedContentUI());
if (!canChange) {
// cancel the change of node
log.warn(String.format("Do not change selection path: %s against: %s", path, getSelectionPath()));
return;
}
-// FIXME Move this in a listener
-// if (skipCheckPreviousContent) {
-// contentUIManager.closeSafeSelectedContentUI();
-// }
- super.setSelectionPaths(pPaths);
+ // can now safely select new path
+ if (busyModel == null) {
+ super.setSelectionPaths(pPaths);
+ } else {
+ busyModel.addTask(I18n.t("observe.ui.tree.loading.node"));
+ SwingUtilities.invokeLater(() -> {
+ try {
+ super.setSelectionPaths(pPaths);
+ } finally {
+ busyModel.popTask();
+ }
+ });
+ }
}
@Override
=====================================
toolkit/api/src/main/java/fr/ird/observe/navigation/tree/navigation/NavigationTreeSupport.java
=====================================
@@ -54,7 +54,7 @@ public class NavigationTreeSupport<R extends NavigationTreeNode, M extends Navig
@Override
public void updateUI() {
- setSelectionModel(new NavigationTreeSelectionModel());
+ setSelectionModel(new NavigationTreeSelectionModel(null));
super.updateUI();
}
=====================================
client/core/src/main/java/fr/ird/observe/client/util/busy/BusyLayerUI.java → toolkit/api/src/main/java/fr/ird/observe/spi/ui/BusyLayerUI.java
=====================================
@@ -1,8 +1,8 @@
-package fr.ird.observe.client.util.busy;
+package fr.ird.observe.spi.ui;
/*-
* #%L
- * ObServe Client :: Core
+ * ObServe Toolkit :: API
* %%
* Copyright (C) 2008 - 2022 IRD, Ultreia.io
* %%
=====================================
client/core/src/main/java/fr/ird/observe/client/util/busy/BusyModel.java → toolkit/api/src/main/java/fr/ird/observe/spi/ui/BusyModel.java
=====================================
@@ -1,8 +1,8 @@
-package fr.ird.observe.client.util.busy;
+package fr.ird.observe.spi.ui;
/*-
* #%L
- * ObServe Client :: Core
+ * ObServe Toolkit :: API
* %%
* Copyright (C) 2008 - 2022 IRD, Ultreia.io
* %%
View it on GitLab: https://gitlab.com/ultreiaio/ird-observe/-/commit/dacba01b05b44e8d408c9a0aa…
--
View it on GitLab: https://gitlab.com/ultreiaio/ird-observe/-/commit/dacba01b05b44e8d408c9a0aa…
You're receiving this email because of your account on gitlab.com.
1
0
[Git][ultreiaio/ird-observe][develop] Client - Aucune barre de progression Closes #2409
by Tony CHEMIT (@tchemit) 03 Aug '22
by Tony CHEMIT (@tchemit) 03 Aug '22
03 Aug '22
Tony CHEMIT pushed to branch develop at ultreiaio / ird-observe
Commits:
cede2ae6 by Tony Chemit at 2022-08-03T11:23:52+02:00
Client - Aucune barre de progression Closes #2409
- - - - -
22 changed files:
- client/core/src/main/java/fr/ird/observe/client/ClientUIContext.java
- client/core/src/main/java/fr/ird/observe/client/ClientUIContextApi.java
- client/core/src/main/java/fr/ird/observe/client/WithClientUIContextApi.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/ObserveMainUIHandler.java
- client/core/src/main/java/fr/ird/observe/client/main/focus/MainUIFocusModel.java
- client/datasource/editor/api/src/main/java/fr/ird/observe/client/datasource/editor/api/DataSourceEditorBodyContent.java
- client/datasource/editor/api/src/main/java/fr/ird/observe/client/datasource/editor/api/avdth/ImportDialogHandler.java
- client/datasource/editor/api/src/main/java/fr/ird/observe/client/datasource/editor/api/avdth/ImportDialogModel.java
- client/datasource/editor/api/src/main/java/fr/ird/observe/client/datasource/editor/api/content/data/edit/actions/DeleteEdit.java
- client/datasource/editor/api/src/main/java/fr/ird/observe/client/datasource/editor/api/menu/DataSourceEditorMenu.jaxx
- client/datasource/editor/api/src/main/java/fr/ird/observe/client/datasource/editor/api/menu/DataSourceEditorMenuModel.java
- client/datasource/editor/api/src/main/java/fr/ird/observe/client/datasource/editor/api/navigation/NavigationTree.java
- toolkit/api/src/main/i18n/getters/java.getter
- toolkit/api/src/main/i18n/translations/toolkit_en_GB.properties
- toolkit/api/src/main/i18n/translations/toolkit_es_ES.properties
- toolkit/api/src/main/i18n/translations/toolkit_fr_FR.properties
- toolkit/api/src/main/java/fr/ird/observe/navigation/tree/navigation/NavigationTreeSelectionModel.java
- toolkit/api/src/main/java/fr/ird/observe/navigation/tree/navigation/NavigationTreeSupport.java
- client/core/src/main/java/fr/ird/observe/client/util/busy/BusyLayerUI.java → toolkit/api/src/main/java/fr/ird/observe/spi/ui/BusyLayerUI.java
- client/core/src/main/java/fr/ird/observe/client/util/busy/BusyModel.java → toolkit/api/src/main/java/fr/ird/observe/spi/ui/BusyModel.java
Changes:
=====================================
client/core/src/main/java/fr/ird/observe/client/ClientUIContext.java
=====================================
@@ -33,7 +33,7 @@ import fr.ird.observe.client.main.body.NoBodyContentComponent;
import fr.ird.observe.client.main.callback.ObserveUICallbackManager;
import fr.ird.observe.client.main.focus.MainUIFocusModel;
import fr.ird.observe.client.util.action.ObserveExecutorService;
-import fr.ird.observe.client.util.busy.BusyModel;
+import fr.ird.observe.spi.ui.BusyModel;
import fr.ird.observe.client.util.session.ObserveSwingSessionHelper;
import fr.ird.observe.dto.data.ps.dcp.FloatingObjectPresetsManager;
import fr.ird.observe.navigation.id.IdProjectManager;
=====================================
client/core/src/main/java/fr/ird/observe/client/ClientUIContextApi.java
=====================================
@@ -32,7 +32,7 @@ import fr.ird.observe.client.main.ObserveMainUI;
import fr.ird.observe.client.main.callback.ObserveUICallbackManager;
import fr.ird.observe.client.main.focus.MainUIFocusModel;
import fr.ird.observe.client.util.UIHelper;
-import fr.ird.observe.client.util.busy.BusyModel;
+import fr.ird.observe.spi.ui.BusyModel;
import fr.ird.observe.client.util.session.ObserveSwingSessionHelper;
import fr.ird.observe.dto.ObserveUtil;
import fr.ird.observe.dto.data.ps.dcp.FloatingObjectPresetsManager;
=====================================
client/core/src/main/java/fr/ird/observe/client/WithClientUIContextApi.java
=====================================
@@ -31,7 +31,7 @@ import fr.ird.observe.client.main.MainUIModel;
import fr.ird.observe.client.main.ObserveMainUI;
import fr.ird.observe.client.main.callback.ObserveUICallbackManager;
import fr.ird.observe.client.main.focus.MainUIFocusModel;
-import fr.ird.observe.client.util.busy.BusyModel;
+import fr.ird.observe.spi.ui.BusyModel;
import fr.ird.observe.client.util.session.ObserveSwingSessionHelper;
import fr.ird.observe.dto.data.ps.dcp.FloatingObjectPresetsManager;
import fr.ird.observe.navigation.id.IdProjectManager;
=====================================
client/core/src/main/java/fr/ird/observe/client/main/MainUIModel.java
=====================================
@@ -24,7 +24,7 @@ package fr.ird.observe.client.main;
import fr.ird.observe.client.configuration.ClientConfig;
import fr.ird.observe.client.main.focus.MainUIFocusModel;
-import fr.ird.observe.client.util.busy.BusyModel;
+import fr.ird.observe.spi.ui.BusyModel;
import io.ultreia.java4all.bean.AbstractJavaBean;
import io.ultreia.java4all.bean.spi.GenerateJavaBeanDefinition;
=====================================
client/core/src/main/java/fr/ird/observe/client/main/ObserveMainUI.jaxx
=====================================
@@ -22,7 +22,7 @@
<import>
fr.ird.observe.client.util.JMenuWithAccelerator
- fr.ird.observe.client.util.busy.BusyModel
+ fr.ird.observe.spi.ui.BusyModel
fr.ird.observe.client.configuration.ClientConfig
fr.ird.observe.client.main.MainUIModel
fr.ird.observe.client.main.body.MainUIBodyContentManager
=====================================
client/core/src/main/java/fr/ird/observe/client/main/ObserveMainUIHandler.java
=====================================
@@ -27,8 +27,8 @@ import fr.ird.observe.client.configuration.ClientConfig;
import fr.ird.observe.client.main.body.MainUIBodyContentManager;
import fr.ird.observe.client.util.ObserveKeyStrokesSupport;
import fr.ird.observe.client.util.UIHelper;
-import fr.ird.observe.client.util.busy.BusyLayerUI;
-import fr.ird.observe.client.util.busy.BusyModel;
+import fr.ird.observe.spi.ui.BusyLayerUI;
+import fr.ird.observe.spi.ui.BusyModel;
import org.apache.logging.log4j.LogManager;
import org.apache.logging.log4j.Logger;
import org.nuiton.jaxx.runtime.spi.UIHandler;
=====================================
client/core/src/main/java/fr/ird/observe/client/main/focus/MainUIFocusModel.java
=====================================
@@ -22,7 +22,7 @@ package fr.ird.observe.client.main.focus;
* #L%
*/
-import fr.ird.observe.client.util.busy.BusyModel;
+import fr.ird.observe.spi.ui.BusyModel;
import org.apache.logging.log4j.LogManager;
import org.apache.logging.log4j.Logger;
=====================================
client/datasource/editor/api/src/main/java/fr/ird/observe/client/datasource/editor/api/DataSourceEditorBodyContent.java
=====================================
@@ -44,7 +44,7 @@ import fr.ird.observe.client.main.ObserveMainUI;
import fr.ird.observe.client.main.body.MainUIBodyContent;
import fr.ird.observe.client.main.focus.MainUIFocusModel;
import fr.ird.observe.client.util.UIHelper;
-import fr.ird.observe.client.util.busy.BusyModel;
+import fr.ird.observe.spi.ui.BusyModel;
import fr.ird.observe.dto.ProgressionModel;
import fr.ird.observe.dto.ProtectedIdsCommon;
import fr.ird.observe.dto.db.BabModelVersionException;
=====================================
client/datasource/editor/api/src/main/java/fr/ird/observe/client/datasource/editor/api/avdth/ImportDialogHandler.java
=====================================
@@ -25,7 +25,7 @@ package fr.ird.observe.client.datasource.editor.api.avdth;
import fr.ird.observe.client.WithClientUIContextApi;
import fr.ird.observe.client.util.ObserveBlockingLayerUI;
import fr.ird.observe.client.util.UIHelper;
-import fr.ird.observe.client.util.busy.BusyLayerUI;
+import fr.ird.observe.spi.ui.BusyLayerUI;
import fr.ird.observe.client.util.init.UIInitHelper;
import fr.ird.observe.dto.referential.common.OceanReference;
import fr.ird.observe.dto.referential.ps.common.ProgramReference;
=====================================
client/datasource/editor/api/src/main/java/fr/ird/observe/client/datasource/editor/api/avdth/ImportDialogModel.java
=====================================
@@ -27,7 +27,7 @@ import fr.ird.observe.client.configuration.ClientConfig;
import fr.ird.observe.client.datasource.api.ObserveSwingDataSource;
import fr.ird.observe.client.datasource.validation.ContentMessageTableModel;
import fr.ird.observe.client.main.focus.FocusDispatcher;
-import fr.ird.observe.client.util.busy.BusyModel;
+import fr.ird.observe.spi.ui.BusyModel;
import fr.ird.observe.dto.ProgressionModel;
import fr.ird.observe.services.service.data.ps.AvdthDataImportConfiguration;
import fr.ird.observe.services.service.data.ps.AvdthDataImportResult;
=====================================
client/datasource/editor/api/src/main/java/fr/ird/observe/client/datasource/editor/api/content/data/edit/actions/DeleteEdit.java
=====================================
@@ -29,7 +29,7 @@ import fr.ird.observe.client.datasource.editor.api.content.ContentUIHandler;
import fr.ird.observe.client.datasource.editor.api.content.data.edit.ContentEditUI;
import fr.ird.observe.client.datasource.editor.api.navigation.NavigationTree;
import fr.ird.observe.client.datasource.editor.api.navigation.tree.NavigationNode;
-import fr.ird.observe.client.util.busy.BusyModel;
+import fr.ird.observe.spi.ui.BusyModel;
import fr.ird.observe.dto.IdDto;
import fr.ird.observe.dto.data.EditableDto;
import fr.ird.observe.spi.decoration.DecoratorService;
=====================================
client/datasource/editor/api/src/main/java/fr/ird/observe/client/datasource/editor/api/menu/DataSourceEditorMenu.jaxx
=====================================
@@ -18,20 +18,7 @@
#L%
-->
<JMenu id='menuStorage'>
-
- <!-- <import>-->
- <!-- fr.ird.observe.client.main.MainUIModel-->
- <!-- fr.ird.observe.client.util.busy.BusyModel-->
- <!-- fr.ird.observe.client.util.UIHelper-->
- <!-- java.util.Locale-->
- <!-- java.awt.Dimension-->
- <!-- javax.swing.BoxLayout-->
- <!-- javax.swing.JComponent-->
- <!-- </import>-->
-
<DataSourceEditorMenuModel id="uiModel" initializer="getContextValue(DataSourceEditorMenuModel.class)"/>
- <!-- <BusyModel id='busyModel' initializer='uiModel.getBusyModel()'/>-->
- <!-- <MainUIModel id="mainUiModel" initializer="uiModel.getMainUIModel()"/>-->
<JMenuItem id='changeStorage'/>
<JMenuItem id='reloadStorage' styleClass="optional"/>
<JMenuItem id='closeStorage' styleClass="optional"/>
=====================================
client/datasource/editor/api/src/main/java/fr/ird/observe/client/datasource/editor/api/menu/DataSourceEditorMenuModel.java
=====================================
@@ -30,7 +30,7 @@ import fr.ird.observe.client.main.MainUIModel;
import fr.ird.observe.client.main.body.MainUIBodyContentManager;
import fr.ird.observe.client.main.body.NoBodyContentComponent;
import fr.ird.observe.client.util.UIHelper;
-import fr.ird.observe.client.util.busy.BusyModel;
+import fr.ird.observe.spi.ui.BusyModel;
import io.ultreia.java4all.bean.AbstractJavaBean;
import io.ultreia.java4all.bean.spi.GenerateJavaBeanDefinition;
import org.apache.logging.log4j.LogManager;
=====================================
client/datasource/editor/api/src/main/java/fr/ird/observe/client/datasource/editor/api/navigation/NavigationTree.java
=====================================
@@ -93,7 +93,7 @@ public class NavigationTree extends JXTree implements WithClientUIContextApi {
@Override
public void updateUI() {
- setSelectionModel(new NavigationTreeSelectionModel());
+ setSelectionModel(new NavigationTreeSelectionModel(getBusyModel()));
super.updateUI();
}
=====================================
toolkit/api/src/main/i18n/getters/java.getter
=====================================
@@ -87,3 +87,4 @@ observe.ui.datasource.storage.error.rest.password.required
observe.ui.datasource.storage.error.rest.user.required
observe.ui.datasource.storage.error.rest.user.unknown
observe.ui.message.warning.will.be.delete
+observe.ui.tree.loading.node
=====================================
toolkit/api/src/main/i18n/translations/toolkit_en_GB.properties
=====================================
@@ -155,3 +155,4 @@ observe.ui.datasource.storage.error.rest.password.required=Password is mandatory
observe.ui.datasource.storage.error.rest.user.required=User login is mandatory
observe.ui.datasource.storage.error.rest.user.unknown=User "%s" is not defined on server
observe.ui.message.warning.will.be.delete=%1$s\n\nBe ware, export will replace existing data.
+observe.ui.tree.loading.node=Loading selected node
=====================================
toolkit/api/src/main/i18n/translations/toolkit_es_ES.properties
=====================================
@@ -155,3 +155,4 @@ observe.ui.datasource.storage.error.rest.password.required=Le contraseña es obl
observe.ui.datasource.storage.error.rest.user.required=El usuario es obligatorio
observe.ui.datasource.storage.error.rest.user.unknown=El usuario "%s" no es conocido del servidor
observe.ui.message.warning.will.be.delete=%1$s\n\nAtención, la exportación reemplazará la marea existente.
+observe.ui.tree.loading.node=Loading selected node
=====================================
toolkit/api/src/main/i18n/translations/toolkit_fr_FR.properties
=====================================
@@ -155,3 +155,4 @@ observe.ui.datasource.storage.error.rest.password.required=Le mot de passe est o
observe.ui.datasource.storage.error.rest.user.required=L'utilisateur est obligatoire
observe.ui.datasource.storage.error.rest.user.unknown=L'utilisateur "%s" est inconnu sur le serveur
observe.ui.message.warning.will.be.delete=%1$s\n\nAttention, l'export remplacera la marée existante.
+observe.ui.tree.loading.node=Chargement du nœud sélectionné
=====================================
toolkit/api/src/main/java/fr/ird/observe/navigation/tree/navigation/NavigationTreeSelectionModel.java
=====================================
@@ -25,9 +25,12 @@ package fr.ird.observe.navigation.tree.navigation;
import fr.ird.observe.navigation.tree.navigation.event.NavigationTreeSelectionEvent;
import fr.ird.observe.navigation.tree.navigation.event.NavigationTreeSelectionListener;
import fr.ird.observe.navigation.tree.navigation.event.NavigationTreeSelectionVetoException;
+import fr.ird.observe.spi.ui.BusyModel;
+import io.ultreia.java4all.i18n.I18n;
import org.apache.logging.log4j.LogManager;
import org.apache.logging.log4j.Logger;
+import javax.swing.SwingUtilities;
import javax.swing.event.TreeExpansionEvent;
import javax.swing.tree.DefaultTreeSelectionModel;
import javax.swing.tree.ExpandVetoException;
@@ -47,8 +50,10 @@ public class NavigationTreeSelectionModel extends DefaultTreeSelectionModel {
private static final Logger log = LogManager.getLogger(NavigationTreeSelectionModel.class);
private boolean skipCheckPreviousContent;
+ private final BusyModel busyModel;
- public NavigationTreeSelectionModel() {
+ public NavigationTreeSelectionModel(BusyModel busyModel) {
+ this.busyModel = busyModel;
setSelectionMode(TreeSelectionModel.SINGLE_TREE_SELECTION);
}
@@ -84,29 +89,35 @@ public class NavigationTreeSelectionModel extends DefaultTreeSelectionModel {
return;
}
TreePath path = pPaths[0];
- boolean[] newness = new boolean[pPaths.length];
- Arrays.fill(newness, true);
- NavigationTreeSelectionEvent event = new NavigationTreeSelectionEvent(this, pPaths, newness, getLeadSelectionPath(), path, skipCheckPreviousContent);
boolean canChange = !Objects.equals(path, getSelectionPath());
if (canChange) {
+ boolean[] newness = new boolean[pPaths.length];
+ Arrays.fill(newness, true);
+ NavigationTreeSelectionEvent event = new NavigationTreeSelectionEvent(this, pPaths, newness, getLeadSelectionPath(), path, skipCheckPreviousContent);
try {
fireVetoValueChanged(event);
} catch (NavigationTreeSelectionVetoException e) {
canChange = false;
}
}
-
-// boolean canChange = skipCheckPreviousContent || (!Objects.equals(path, getSelectionPath()) && contentUIManager.closeSelectedContentUI());
if (!canChange) {
// cancel the change of node
log.warn(String.format("Do not change selection path: %s against: %s", path, getSelectionPath()));
return;
}
-// FIXME Move this in a listener
-// if (skipCheckPreviousContent) {
-// contentUIManager.closeSafeSelectedContentUI();
-// }
- super.setSelectionPaths(pPaths);
+ // can now safely select new path
+ if (busyModel == null) {
+ super.setSelectionPaths(pPaths);
+ } else {
+ busyModel.addTask(I18n.t("observe.ui.tree.loading.node"));
+ SwingUtilities.invokeLater(() -> {
+ try {
+ setSelectionPaths(pPaths);
+ } finally {
+ busyModel.popTask();
+ }
+ });
+ }
}
@Override
=====================================
toolkit/api/src/main/java/fr/ird/observe/navigation/tree/navigation/NavigationTreeSupport.java
=====================================
@@ -54,7 +54,7 @@ public class NavigationTreeSupport<R extends NavigationTreeNode, M extends Navig
@Override
public void updateUI() {
- setSelectionModel(new NavigationTreeSelectionModel());
+ setSelectionModel(new NavigationTreeSelectionModel(null));
super.updateUI();
}
=====================================
client/core/src/main/java/fr/ird/observe/client/util/busy/BusyLayerUI.java → toolkit/api/src/main/java/fr/ird/observe/spi/ui/BusyLayerUI.java
=====================================
@@ -1,8 +1,8 @@
-package fr.ird.observe.client.util.busy;
+package fr.ird.observe.spi.ui;
/*-
* #%L
- * ObServe Client :: Core
+ * ObServe Toolkit :: API
* %%
* Copyright (C) 2008 - 2022 IRD, Ultreia.io
* %%
=====================================
client/core/src/main/java/fr/ird/observe/client/util/busy/BusyModel.java → toolkit/api/src/main/java/fr/ird/observe/spi/ui/BusyModel.java
=====================================
@@ -1,8 +1,8 @@
-package fr.ird.observe.client.util.busy;
+package fr.ird.observe.spi.ui;
/*-
* #%L
- * ObServe Client :: Core
+ * ObServe Toolkit :: API
* %%
* Copyright (C) 2008 - 2022 IRD, Ultreia.io
* %%
View it on GitLab: https://gitlab.com/ultreiaio/ird-observe/-/commit/cede2ae6468add47a13e0b1ee…
--
View it on GitLab: https://gitlab.com/ultreiaio/ird-observe/-/commit/cede2ae6468add47a13e0b1ee…
You're receiving this email because of your account on gitlab.com.
1
0
[Git][ultreiaio/ird-observe][develop] Dans l'assistant rapport, ajouter un export CSV - Closes #2259
by Tony CHEMIT (@tchemit) 03 Aug '22
by Tony CHEMIT (@tchemit) 03 Aug '22
03 Aug '22
Tony CHEMIT pushed to branch develop at ultreiaio / ird-observe
Commits:
512468e8 by Tony Chemit at 2022-08-03T09:49:49+02:00
Dans l'assistant rapport, ajouter un export CSV - Closes #2259
- - - - -
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/core/src/main/java/fr/ird/observe/client/main/body/ClientConfigUI.java
- client/core/src/main/resources/observe-ui.properties
- client/datasource/actions/src/main/i18n/getters/java.getter
- client/datasource/actions/src/main/i18n/getters/jaxx.getter
- client/datasource/actions/src/main/java/fr/ird/observe/client/datasource/actions/ObserveKeyStrokesActions.java
- + client/datasource/actions/src/main/java/fr/ird/observe/client/datasource/actions/report/CsvExportUI.jaxx
- + client/datasource/actions/src/main/java/fr/ird/observe/client/datasource/actions/report/CsvExportUI.jcss
- + client/datasource/actions/src/main/java/fr/ird/observe/client/datasource/actions/report/CsvExportUIHandler.java
- client/datasource/actions/src/main/java/fr/ird/observe/client/datasource/actions/report/ReportModel.java
- client/datasource/actions/src/main/java/fr/ird/observe/client/datasource/actions/report/ReportUI.jaxx
- client/datasource/actions/src/main/java/fr/ird/observe/client/datasource/actions/report/ReportUI.jcss
- client/datasource/actions/src/main/java/fr/ird/observe/client/datasource/actions/report/ReportUIHandler.java
- client/datasource/actions/src/main/java/fr/ird/observe/client/datasource/actions/report/ResultTableModel.java
- + client/datasource/actions/src/main/java/fr/ird/observe/client/datasource/actions/report/actions/ChooseExportCsvDirectory.java
- client/datasource/actions/src/main/java/fr/ird/observe/client/datasource/actions/report/actions/CopyResultToClipboard.java → client/datasource/actions/src/main/java/fr/ird/observe/client/datasource/actions/report/actions/ExportToClipboard.java
- + client/datasource/actions/src/main/java/fr/ird/observe/client/datasource/actions/report/actions/ExportToCsv.java
- client/datasource/actions/src/main/java/fr/ird/observe/client/datasource/actions/report/actions/ToggleConfigure.java
- + client/datasource/actions/src/main/java/fr/ird/observe/client/datasource/actions/report/actions/ToggleExport.java
- + client/datasource/actions/src/main/resources/icons/action-export-csv.png
- + client/datasource/actions/src/main/resources/icons/action-format-csv.png
- client/runner/src/main/i18n/translations/client-runner_en_GB.properties
- client/runner/src/main/i18n/translations/client-runner_es_ES.properties
- client/runner/src/main/i18n/translations/client-runner_fr_FR.properties
- toolkit/api/src/main/java/fr/ird/observe/dto/ObserveUtil.java
- toolkit/api/src/main/java/fr/ird/observe/dto/report/DataMatrix.java
Changes:
=====================================
client/configuration/src/main/config/Client.ini
=====================================
@@ -409,6 +409,14 @@ defaultValue = ${instance.data.directory}/tmp
final = true
transient = true
+[option exportDirectory]
+description = observe.config.exportDirectory.description
+key = instance.export.directory
+type = file
+defaultValue = ${instance.data.directory}/export
+final = true
+transient = true
+
[option navigationEditModelFile]
description = observe.config.ui.tree.edit.nodes
key = instance.ui.file.tree.edit.nodes
=====================================
client/configuration/src/main/i18n/getters/config.getter
=====================================
@@ -38,6 +38,7 @@ observe.config.defaultReportDirectory.description
observe.config.defaultReportFile.description
observe.config.defaultResourcesDirectory.description
observe.config.defaultValidationReportDirectory.description
+observe.config.exportDirectory.description
observe.config.feedBackDirectory.description
observe.config.h2.can.editReferential.description
observe.config.h2.can.migrate.description
=====================================
client/configuration/src/main/java/fr/ird/observe/client/configuration/ClientConfig.java
=====================================
@@ -430,6 +430,9 @@ public class ClientConfig extends GeneratedClientConfig implements TripMapConfig
log.info(message);
ClientResources.ObserveSwingPreferences.copyResource(preferencesFile);
}
+
+ // 11 - export directory
+ createDirectory(ClientConfigOption.EXPORT_DIRECTORY);
}
public void detectLocalDataBase() {
=====================================
client/core/src/main/java/fr/ird/observe/client/main/body/ClientConfigUI.java
=====================================
@@ -415,6 +415,7 @@ public class ClientConfigUI extends JXTitledPanel implements WithClientUIContext
helper.addOption(ClientConfigOption.DATA_DIRECTORY);
helper.addOption(ClientConfigOption.DB_DIRECTORY);
helper.addOption(ClientConfigOption.BACKUP_DIRECTORY);
+ helper.addOption(ClientConfigOption.EXPORT_DIRECTORY);
helper.addOption(ClientConfigOption.LOG_DIRECTORY);
helper.addOption(ClientConfigOption.IMPORT_DIRECTORY);
helper.addOption(ClientConfigOption.TEMPORARY_DIRECTORY);
=====================================
client/core/src/main/resources/observe-ui.properties
=====================================
@@ -229,6 +229,7 @@ icon.action.wizard-pause=action-wizard-pause-16.png
icon.action.wizard-refresh=action-wizard-refresh-16.png
icon.action.wizard-config=action-wizard-config-16.png
icon.action.wizard-message=action-wizard-message-16.png
+icon.action.export-csv=action-export-csv.png
# couleurs au format (r,g,b)
icon.Table.removeIcon=action-delete.png
color.Table.lastRowColor=255,255,0
=====================================
client/datasource/actions/src/main/i18n/getters/java.getter
=====================================
@@ -9,6 +9,7 @@ observe.ui.action.admin.close
observe.ui.action.apply
observe.ui.action.cancel
observe.ui.action.choose.db.dump.directory
+observe.ui.action.choose.export.csv.directory
observe.ui.action.choose.reportFile
observe.ui.action.choose.reportFile.description
observe.ui.action.close
@@ -19,6 +20,7 @@ observe.ui.action.configuration.tip
observe.ui.action.continue
observe.ui.action.copy.to.clipBoard
observe.ui.action.do.backup.tip
+observe.ui.action.export.tip
observe.ui.action.goto.next.stage
observe.ui.action.goto.next.stage.tip
observe.ui.action.goto.previous.stage
@@ -69,6 +71,9 @@ observe.ui.datasource.editor.actions.pairing.tip
observe.ui.datasource.editor.actions.pairing.title
observe.ui.datasource.editor.actions.report
observe.ui.datasource.editor.actions.report.description
+observe.ui.datasource.editor.actions.report.exportToCsv
+observe.ui.datasource.editor.actions.report.exportToCsv.done
+observe.ui.datasource.editor.actions.report.exportToCsv.tip
observe.ui.datasource.editor.actions.report.no.report.found
observe.ui.datasource.editor.actions.report.report.count.found
observe.ui.datasource.editor.actions.report.title
@@ -175,6 +180,7 @@ observe.ui.menu.actions
observe.ui.message.no.report.selected
observe.ui.message.select.report
observe.ui.title.choose.db.dump.directory
+observe.ui.title.choose.export.csv.directory
observe.ui.title.choose.reportFile
observe.ui.title.storage.info
observe.ui.tree.action.collapseAll.tip
=====================================
client/datasource/actions/src/main/i18n/getters/jaxx.getter
=====================================
@@ -11,6 +11,7 @@ observe.info.selected.validators
observe.info.validation.credentials
observe.ui.action.show.properties
observe.ui.action.show.properties.tip
+observe.ui.choice.cancel.tip
observe.ui.datasource.editor.actions.operation.configuration
observe.ui.datasource.editor.actions.operations
observe.ui.datasource.editor.actions.report.auto.copy.to.clipboard
=====================================
client/datasource/actions/src/main/java/fr/ird/observe/client/datasource/actions/ObserveKeyStrokesActions.java
=====================================
@@ -39,6 +39,9 @@ public class ObserveKeyStrokesActions extends ObserveKeyStrokesEditorApi {
public static final KeyStroke KEY_STROKE_DATA_SYNCHRO_COPY_RIGHT = KeyStroke.getKeyStroke("pressed F9");
public static final KeyStroke KEY_STROKE_DATA_SYNCHRO_DELETE_RIGHT = KeyStroke.getKeyStroke("pressed F10");
+ public static final KeyStroke KEY_STROKE_EXPORT_POPUP = KeyStroke.getKeyStroke("pressed F10");
+ public static final KeyStroke KEY_STROKE_EXPORT_CLIPBOARD = KeyStroke.getKeyStroke("pressed F2");
+ public static final KeyStroke KEY_STROKE_EXPORT_CSV = KeyStroke.getKeyStroke("pressed F3");
public static final KeyStroke KEY_STROKE_EXIT = KeyStroke.getKeyStroke("alt pressed F");
}
=====================================
client/datasource/actions/src/main/java/fr/ird/observe/client/datasource/actions/report/CsvExportUI.jaxx
=====================================
@@ -0,0 +1,60 @@
+<!--
+ #%L
+ ObServe Client :: DataSource :: Actions
+ %%
+ Copyright (C) 2008 - 2022 IRD, 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%
+ -->
+<Table id="reportConfig">
+ <import>
+ java.io.File
+ javax.swing.Box
+ javax.swing.BoxLayout
+ java.awt.Dimension
+
+ static fr.ird.observe.client.util.UIHelper.getStringValue
+ </import>
+ <ReportModel id='stepModel' initializer='getContextValue(ReportModel.class)'/>
+ <row>
+ <cell anchor="west">
+ <JLabel id="directoryLabel"/>
+ </cell>
+ <cell weightx='1' fill="horizontal">
+ <JTextField id='directoryText' onKeyReleased='getHandler().changeDirectory(new File(((JTextField)event.getSource()).getText()))'/>
+ </cell>
+ <cell anchor="east">
+ <JButton id="chooseExportCsvDirectory"/>
+ </cell>
+ </row>
+ <row>
+ <cell anchor="west">
+ <JLabel id="fileLabel"/>
+ </cell>
+ <cell weightx='1' fill="horizontal" columns="2">
+ <JTextField id='filenameText' onKeyReleased='getHandler().changeFilename(((JTextField)event.getSource()).getText())'/>
+ </cell>
+ </row>
+ <row>
+ <cell columns="3" anchor="west" fill="both">
+ <JPanel id='actions' layout="{new BoxLayout(actions, BoxLayout.Y_AXIS)}">
+ <JPanel id="cancelMessagePanel" layout="{new GridLayout(0, 1)}">
+ <JSeparator constructorParams="JSeparator.HORIZONTAL"/>
+ <JLabel id="cancelMessage" styleClass="information italic"/>
+ <Component initializer="Box.createRigidArea(new Dimension(10, 5))"/>
+ </JPanel>
+ </JPanel>
+ </cell>
+ </row>
+</Table>
=====================================
client/datasource/actions/src/main/java/fr/ird/observe/client/datasource/actions/report/CsvExportUI.jcss
=====================================
@@ -0,0 +1,41 @@
+/*-
+ * #%L
+ * ObServe Client :: DataSource :: Actions
+ * %%
+ * Copyright (C) 2008 - 2022 IRD, 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%
+ */
+
+#directoryLabel {
+ text:"observe.Common.directory";
+}
+
+#directoryText {
+ text:{stepModel.getExportCsvFile().getParent()};
+}
+
+#fileLabel {
+ text:"observe.Common.file";
+}
+
+#filenameText {
+ text:{stepModel.getExportCsvFileName()};
+}
+
+#cancelMessage {
+ text:"observe.ui.choice.cancel.tip";
+}
=====================================
client/datasource/actions/src/main/java/fr/ird/observe/client/datasource/actions/report/CsvExportUIHandler.java
=====================================
@@ -0,0 +1,51 @@
+package fr.ird.observe.client.datasource.actions.report;
+
+/*-
+ * #%L
+ * ObServe Client :: DataSource :: Actions
+ * %%
+ * Copyright (C) 2008 - 2022 IRD, 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.dto.ObserveUtil;
+import org.nuiton.jaxx.runtime.spi.UIHandler;
+
+import java.io.File;
+
+/**
+ * Created on 02/08/2022.
+ *
+ * @author Tony Chemit - dev(a)tchemit.fr
+ * @since 9.0.7
+ */
+public class CsvExportUIHandler implements UIHandler<CsvExportUI> {
+ private CsvExportUI ui;
+
+ @Override
+ public void beforeInit(CsvExportUI ui) {
+ this.ui = ui;
+ }
+
+ public void changeDirectory(File f) {
+ ui.getStepModel().setExportCsvFile(new File(f, ObserveUtil.addCsvExtension(ui.getStepModel().getExportCsvFileName())));
+ }
+
+ public void changeFilename(String filename) {
+ ui.getStepModel().setExportCsvFile(new File(ui.getDirectoryText().getText(), ObserveUtil.addCsvExtension(filename)));
+ }
+}
=====================================
client/datasource/actions/src/main/java/fr/ird/observe/client/datasource/actions/report/ReportModel.java
=====================================
@@ -27,6 +27,7 @@ import fr.ird.observe.client.datasource.actions.AdminStep;
import fr.ird.observe.client.datasource.actions.AdminUIModel;
import fr.ird.observe.client.datasource.actions.config.SelectDataModel;
import fr.ird.observe.client.datasource.editor.api.wizard.connexion.DataSourceSelectorModel;
+import fr.ird.observe.dto.ObserveUtil;
import fr.ird.observe.dto.report.Report;
import fr.ird.observe.dto.report.ReportBuilder;
import fr.ird.observe.navigation.tree.selection.SelectionTreeConfig;
@@ -41,6 +42,7 @@ import java.io.IOException;
import java.net.URL;
import java.nio.file.Files;
import java.util.Collections;
+import java.util.Date;
import java.util.List;
import java.util.Map;
import java.util.Objects;
@@ -57,6 +59,8 @@ import java.util.stream.Collectors;
@GenerateJavaBeanDefinition
public class ReportModel extends AdminActionModel {
+ public static final String EXPORT_CSV_FILE_PROPERTY_NAME = "exportCsvFile";
+ public static final String EXPORT_CSV_FILE_NAME_PROPERTY_NAME = "exportCsvFileName";
public static final String SELECTED_REPORT_PROPERTY_NAME = "selectedReport";
public static final String REPORTS_PROPERTY_NAME = "reports";
@@ -115,6 +119,10 @@ public class ReportModel extends AdminActionModel {
* Pour copier les entêtes de colonnes
*/
protected boolean copyColumnHeaders = true;
+ /**
+ * Where to do optional csv export.
+ */
+ protected File exportCsvFile = new File("");
private List<Report> allReports;
private SelectDataModel selectDataModel;
@@ -125,6 +133,22 @@ public class ReportModel extends AdminActionModel {
addPropertyChangeListener(REPORT_FILE_PROPERTY_NAME, evt -> updateReports());
}
+ public File getExportCsvFile() {
+ return exportCsvFile;
+ }
+
+ public void setExportCsvFile(File exportCsvFile) {
+ File oldValue = getExportCsvFile();
+ String oldBackupFileName = getExportCsvFileName();
+ this.exportCsvFile = exportCsvFile;
+ firePropertyChange(EXPORT_CSV_FILE_PROPERTY_NAME, oldValue, exportCsvFile);
+ firePropertyChange(EXPORT_CSV_FILE_NAME_PROPERTY_NAME, oldBackupFileName, getExportCsvFileName());
+ }
+
+ public String getExportCsvFileName() {
+ return ObserveUtil.removeCsvExtension(exportCsvFile.getName());
+ }
+
@Override
public void start(AdminUIModel uiModel) {
@@ -341,4 +365,7 @@ public class ReportModel extends AdminActionModel {
log.info(String.format("Detects %d report(s).", reports.size()));
}
+ public File newExportCsvFile() {
+ return new File(getClientConfig().getExportDirectory(), String.format("export-%1$s--%2$tF--%2$tk-%2$tM-%2$tS.csv", Objects.requireNonNull(getSelectedReport()).getId().replaceAll("\\.", "_"), new Date()));
+ }
}
=====================================
client/datasource/actions/src/main/java/fr/ird/observe/client/datasource/actions/report/ReportUI.jaxx
=====================================
@@ -50,31 +50,22 @@ public void destroy() {
]]>
</script>
<JPanel id='PENDING_content' layout='{new BorderLayout()}'>
-<!-- <JPanel id='northPanel' constraints='BorderLayout.NORTH' layout='{new GridLayout(1, 2)}'>-->
- <JXTitledPanel id="configurationPane" contentContainer="{configurationPanel}" constraints='BorderLayout.NORTH'>
- <JPanel id="configurationPanel" layout='{new BorderLayout()}'>
- <JPanel id='requestSelectorPane' constraints='BorderLayout.NORTH' layout='{new BorderLayout()}'>
- <JToolBar id='toolbar' constraints='BorderLayout.WEST'>
- <JButton id="resetSelectedReport" onActionPerformed="getHandler().updateSelectedReport(null)"/>
- </JToolBar>
- <JComboBox id='reportSelector' constraints='BorderLayout.CENTER' onItemStateChanged='getHandler().updateSelectedReportFromEvent(event)'/>
- </JPanel>
- <JScrollPane id='reportVariableSelectorPane' constraints='BorderLayout.CENTER'>
- <JPanel id='reportVariableSelectorPanel' layout="{new GridLayout(0,1)}"/>
- </JScrollPane>
- <JScrollPane id='reportDescriptionPane' constraints='BorderLayout.SOUTH'>
- <JTextArea id='reportDescription'/>
- </JScrollPane>
+ <JXTitledPanel id="configurationPane" contentContainer="{configurationPanel}" constraints='BorderLayout.NORTH'>
+ <JPanel id="configurationPanel" layout='{new BorderLayout()}'>
+ <JPanel id='requestSelectorPane' constraints='BorderLayout.NORTH' layout='{new BorderLayout()}'>
+ <JToolBar id='toolbar' constraints='BorderLayout.WEST'>
+ <JButton id="resetSelectedReport" onActionPerformed="getHandler().updateSelectedReport(null)" styleClass="enabledIfReportSelected"/>
+ </JToolBar>
+ <JComboBox id='reportSelector' constraints='BorderLayout.CENTER' onItemStateChanged='getHandler().updateSelectedReportFromEvent(event)'/>
</JPanel>
- </JXTitledPanel>
-<!-- <JPanel id="copyPane" layout='{new BorderLayout()}'>-->
-<!-- <JPanel id='copyOptions' constraints='BorderLayout.NORTH' beanScope="stepModel" layout="{new GridLayout(0,1)}">-->
-<!-- <BeanCheckBox id='autoCopyToClipboard'/>-->
-<!-- <BeanCheckBox id='copyRowHeaders'/>-->
-<!-- <BeanCheckBox id='copyColumnHeaders'/>-->
-<!-- </JPanel>-->
-<!-- </JPanel>-->
-<!-- </JPanel>-->
+ <JScrollPane id='reportVariableSelectorPane' constraints='BorderLayout.CENTER'>
+ <JPanel id='reportVariableSelectorPanel' layout="{new GridLayout(0,1)}"/>
+ </JScrollPane>
+ <JScrollPane id='reportDescriptionPane' constraints='BorderLayout.SOUTH'>
+ <JTextArea id='reportDescription'/>
+ </JScrollPane>
+ </JPanel>
+ </JXTitledPanel>
<JXTitledPanel id="resultPanel" constraints='BorderLayout.CENTER' contentContainer="{resultPane}" rightDecoration='{titleRightToolBar}'>
<JScrollPane id='resultPane'>
<JXTable id='resultTable'/>
@@ -84,8 +75,12 @@ public void destroy() {
<BeanCheckBox id='copyRowHeaders'/>
<BeanCheckBox id='copyColumnHeaders'/>
</JPopupMenu>
+ <JPopupMenu id='exportPopup'>
+ <JMenuItem id='exportToClipboard' styleClass="enabledIfReportSelected"/>
+ <JMenuItem id='exportToCsv' styleClass="enabledIfReportSelected"/>
+ </JPopupMenu>
<JToolBar id='titleRightToolBar'>
- <JButton id="copyResultToClipboard"/>
+ <JToggleButton id='toggleExport'/>
<JToggleButton id='toggleConfigure'/>
</JToolBar>
</JXTitledPanel>
=====================================
client/datasource/actions/src/main/java/fr/ird/observe/client/datasource/actions/report/ReportUI.jcss
=====================================
@@ -30,6 +30,10 @@ BeanCheckBox {
bean:{stepModel};
}
+.enabledIfReportSelected {
+ enabled:{stepModel.getSelectedReport() != null};
+}
+
#reportVariableSelectorPanel {
border:{new TitledBorder(t("observe.ui.datasource.editor.actions.report.variables") + " ")};
}
@@ -76,7 +80,6 @@ BeanCheckBox {
#resetSelectedReport {
actionIcon:"combobox-reset";
toolTipText:"observe.ui.datasource.editor.actions.synchro.report.reset.tip";
- enabled:{stepModel.getSelectedReport() != null};
mnemonic:R;
}
@@ -94,7 +97,3 @@ BeanCheckBox {
text:"observe.ui.datasource.editor.actions.report.copy.column.headers";
toolTipText:"observe.ui.datasource.editor.actions.report.copy.column.headers.tip";
}
-
-#copyResultToClipboard {
- enabled:{stepModel.isValid()};
-}
=====================================
client/datasource/actions/src/main/java/fr/ird/observe/client/datasource/actions/report/ReportUIHandler.java
=====================================
@@ -24,7 +24,7 @@ package fr.ird.observe.client.datasource.actions.report;
import fr.ird.observe.client.datasource.actions.AdminTabUIHandler;
import fr.ird.observe.client.datasource.actions.AdminUIModel;
import fr.ird.observe.client.datasource.actions.config.ConfigUI;
-import fr.ird.observe.client.datasource.actions.report.actions.CopyResultToClipboard;
+import fr.ird.observe.client.datasource.actions.report.actions.ExportToClipboard;
import fr.ird.observe.client.datasource.api.ObserveSwingDataSource;
import fr.ird.observe.client.util.ObserveSwingTechnicalException;
import fr.ird.observe.client.util.UIHelper;
@@ -319,7 +319,7 @@ public class ReportUIHandler extends AdminTabUIHandler<ReportUI> implements UIHa
// mise a jour du clipboard automatique si requis
if (stepModel.isAutoCopyToClipboard()) {
- CopyResultToClipboard.copyReportToClipBoard(report, stepModel);
+ ExportToClipboard.copyReportToClipBoard(report, stepModel);
}
} catch (Exception e) {
stepModel.getResultModel().clear();
=====================================
client/datasource/actions/src/main/java/fr/ird/observe/client/datasource/actions/report/ResultTableModel.java
=====================================
@@ -220,6 +220,14 @@ public class ResultTableModel extends AbstractTableModel {
}
public String getClipboardContent(boolean copyRowHeaders, boolean copyColumnHeaders) {
+ return getDataContent(copyRowHeaders, copyColumnHeaders, true,'\t');
+ }
+
+ public String getCsvContent() {
+ return getDataContent(true, true, true, ';');
+ }
+
+ public String getDataContent(boolean copyRowHeaders, boolean copyColumnHeaders, boolean escapeCell, char separator) {
if (data == null) {
return "";
}
@@ -234,9 +242,9 @@ public class ResultTableModel extends AbstractTableModel {
String rowName = getColumnName(i);
columns.setValue(i, 0, rowName);
});
- result = columns.getClipboardContent(true, true, false, '\t');
+ result = columns.getClipboardContent(true, true, escapeCell, separator);
}
- result += data.getClipboardContent(copyRowHeaders || !withRowHeader, true, false, '\t');
+ result += data.getClipboardContent(copyRowHeaders || !withRowHeader, true, escapeCell, separator);
return result;
}
=====================================
client/datasource/actions/src/main/java/fr/ird/observe/client/datasource/actions/report/actions/ChooseExportCsvDirectory.java
=====================================
@@ -0,0 +1,59 @@
+package fr.ird.observe.client.datasource.actions.report.actions;
+
+/*-
+ * #%L
+ * ObServe Client :: DataSource :: Actions
+ * %%
+ * Copyright (C) 2008 - 2022 IRD, 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.client.datasource.actions.ObserveKeyStrokesActions;
+import fr.ird.observe.client.datasource.actions.report.CsvExportUI;
+import fr.ird.observe.client.util.UIFileHelper;
+import org.nuiton.jaxx.runtime.swing.action.JComponentActionSupport;
+
+import java.awt.event.ActionEvent;
+import java.io.File;
+
+import static io.ultreia.java4all.i18n.I18n.t;
+
+/**
+ * Created on 02/08/2022.
+ *
+ * @author Tony Chemit - dev(a)tchemit.fr
+ * @since 9.0.7
+ */
+public class ChooseExportCsvDirectory extends JComponentActionSupport<CsvExportUI> {
+
+ public ChooseExportCsvDirectory() {
+ super("", t("observe.ui.action.choose.export.csv.directory"), "fileChooser", ObserveKeyStrokesActions.KEY_STROKE_STORAGE_DO_CHOOSE_FILE);
+ }
+
+ @Override
+ protected void doActionPerformed(ActionEvent e, CsvExportUI ui) {
+ File f = UIFileHelper.chooseDirectory(
+ ui,
+ t("observe.ui.title.choose.export.csv.directory"),
+ t("observe.ui.action.choose.export.csv.directory"),
+ new File(ui.getDirectoryText().getText())
+ );
+ if (f != null) {
+ ui.getHandler().changeDirectory(f);
+ }
+ }
+}
=====================================
client/datasource/actions/src/main/java/fr/ird/observe/client/datasource/actions/report/actions/CopyResultToClipboard.java → client/datasource/actions/src/main/java/fr/ird/observe/client/datasource/actions/report/actions/ExportToClipboard.java
=====================================
@@ -22,6 +22,7 @@ package fr.ird.observe.client.datasource.actions.report.actions;
* #L%
*/
+import fr.ird.observe.client.datasource.actions.ObserveKeyStrokesActions;
import fr.ird.observe.client.datasource.actions.actions.AdminTabUIActionSupport;
import fr.ird.observe.client.datasource.actions.report.ReportModel;
import fr.ird.observe.client.datasource.actions.report.ReportUI;
@@ -35,12 +36,16 @@ import java.awt.event.ActionEvent;
import static io.ultreia.java4all.i18n.I18n.t;
-public class CopyResultToClipboard extends AdminTabUIActionSupport<ReportUI> {
+public class ExportToClipboard extends AdminTabUIActionSupport<ReportUI> {
- private static final Logger log = LogManager.getLogger(CopyResultToClipboard.class);
+ private static final Logger log = LogManager.getLogger(ExportToClipboard.class);
- public CopyResultToClipboard() {
- super(""/*t("observe.ui.action.copy")*/, t("observe.ui.datasource.editor.actions.synchro.copy.tip"), "report-copy", 'C');
+ public ExportToClipboard() {
+ super("observe.ui.datasource.editor.actions.report.exportToClipboard",
+ t("observe.ui.datasource.editor.actions.synchro.copy.tip"),
+ "report-copy",
+ ObserveKeyStrokesActions.KEY_STROKE_EXPORT_CLIPBOARD);
+ setCheckMenuItemIsArmed(false);
}
public static void copyReportToClipBoard(Report report, ReportModel stepModel) {
=====================================
client/datasource/actions/src/main/java/fr/ird/observe/client/datasource/actions/report/actions/ExportToCsv.java
=====================================
@@ -0,0 +1,147 @@
+package fr.ird.observe.client.datasource.actions.report.actions;
+
+/*-
+ * #%L
+ * ObServe Client :: DataSource :: Actions
+ * %%
+ * Copyright (C) 2008 - 2022 IRD, 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.client.datasource.actions.ObserveKeyStrokesActions;
+import fr.ird.observe.client.datasource.actions.actions.AdminTabUIActionSupport;
+import fr.ird.observe.client.datasource.actions.report.CsvExportUI;
+import fr.ird.observe.client.datasource.actions.report.ReportModel;
+import fr.ird.observe.client.datasource.actions.report.ReportUI;
+import fr.ird.observe.client.datasource.actions.report.ResultTableModel;
+import fr.ird.observe.client.datasource.editor.api.ObserveKeyStrokesEditorApi;
+import fr.ird.observe.client.datasource.usage.UsageUIHandlerSupport;
+import fr.ird.observe.client.util.UIHelper;
+import fr.ird.observe.dto.ObserveUtil;
+import org.apache.logging.log4j.LogManager;
+import org.apache.logging.log4j.Logger;
+import org.nuiton.jaxx.runtime.context.JAXXInitialContext;
+
+import javax.swing.AbstractAction;
+import javax.swing.Action;
+import javax.swing.ActionMap;
+import javax.swing.InputMap;
+import javax.swing.JButton;
+import javax.swing.JComponent;
+import javax.swing.JOptionPane;
+import javax.swing.KeyStroke;
+import java.awt.Dimension;
+import java.awt.event.ActionEvent;
+import java.beans.PropertyChangeEvent;
+import java.beans.PropertyChangeListener;
+import java.io.File;
+import java.io.IOException;
+import java.nio.charset.StandardCharsets;
+import java.nio.file.Files;
+import java.nio.file.Path;
+import java.util.Objects;
+
+import static io.ultreia.java4all.i18n.I18n.t;
+
+/**
+ * Created on 02/08/2022.
+ *
+ * @author Tony Chemit - dev(a)tchemit.fr
+ * @since 9.0.7
+ */
+public class ExportToCsv extends AdminTabUIActionSupport<ReportUI> implements PropertyChangeListener {
+
+ private static final Logger log = LogManager.getLogger(ExportToClipboard.class);
+ private JButton applyButton;
+
+ public ExportToCsv() {
+ super(t("observe.ui.datasource.editor.actions.report.exportToCsv"),
+ t("observe.ui.datasource.editor.actions.report.exportToCsv.tip"),
+ "export-csv",
+ ObserveKeyStrokesActions.KEY_STROKE_EXPORT_CSV);
+ setCheckMenuItemIsArmed(false);
+ }
+
+ @Override
+ protected void doActionPerformed(ActionEvent e, ReportUI ui) {
+ ReportModel stepModel = ui.getStepModel();
+ JAXXInitialContext context = new JAXXInitialContext().add(stepModel);
+ CsvExportUI exportUi = new CsvExportUI(context);
+ KeyStroke keyStroke = ObserveKeyStrokesActions.KEY_STROKE_ALT_ENTER;
+
+ String applyText = ObserveKeyStrokesEditorApi.suffixTextWithKeyStroke(t("observe.ui.action.apply"), keyStroke);
+
+
+ Object[] options = {applyText};
+
+
+ JOptionPane optionPane = new JOptionPane(exportUi, JOptionPane.QUESTION_MESSAGE, JOptionPane.DEFAULT_OPTION, null, options, options[0]);
+
+ applyButton = UsageUIHandlerSupport.findButton(optionPane, applyText);
+ Objects.requireNonNull(applyButton).setEnabled(false);
+
+ stepModel.addPropertyChangeListener(ReportModel.EXPORT_CSV_FILE_PROPERTY_NAME, this);
+
+ try {
+ AbstractAction applyAction = new AbstractAction() {
+ @Override
+ public void actionPerformed(ActionEvent e) {
+ applyButton.doClick();
+ }
+ };
+
+ applyAction.putValue(Action.ACCELERATOR_KEY, keyStroke);
+ applyAction.putValue(Action.NAME, applyText);
+ applyAction.putValue(Action.SMALL_ICON, UIHelper.getContentActionIcon("save"));
+
+ applyButton.setIcon(UIHelper.getContentActionIcon("save"));
+
+ InputMap inputMap = optionPane.getInputMap(JComponent.WHEN_IN_FOCUSED_WINDOW);
+ inputMap.put((KeyStroke) applyAction.getValue(Action.ACCELERATOR_KEY), "apply");
+
+ ActionMap actionMap = optionPane.getActionMap();
+ actionMap.put("apply", applyAction);
+
+ File exportFile = stepModel.newExportCsvFile();
+ ui.getStepModel().setExportCsvFile(exportFile);
+
+ int response = UIHelper.askUser(getMainUI(), optionPane, new Dimension(600, 220), t("observe.ui.datasource.editor.actions.report.exportToCsv.tip"), options);
+
+ boolean accept = response == 0;
+ if (accept) {
+ Path exportCsvFile = stepModel.getExportCsvFile().toPath();
+ ResultTableModel model = stepModel.getResultModel();
+ String content = model.getCsvContent();
+ log.info("Export csv to: " + exportCsvFile);
+ try {
+ Files.write(exportCsvFile, content.getBytes(StandardCharsets.UTF_8));
+ } catch (IOException ex) {
+ throw new RuntimeException("Can't export csv to file: " + exportCsvFile, ex);
+ }
+ setUiStatus(t("observe.ui.datasource.editor.actions.report.exportToCsv.done", exportCsvFile));
+ }
+ } finally {
+ stepModel.removePropertyChangeListener(ReportModel.EXPORT_CSV_FILE_PROPERTY_NAME, this);
+ }
+ }
+
+ @Override
+ public void propertyChange(PropertyChangeEvent evt) {
+ File exportFile = (File) evt.getNewValue();
+ applyButton.setEnabled(exportFile != null && !exportFile.exists() && ObserveUtil.withCsvExtension(exportFile.getName()));
+ }
+}
=====================================
client/datasource/actions/src/main/java/fr/ird/observe/client/datasource/actions/report/actions/ToggleConfigure.java
=====================================
@@ -45,7 +45,6 @@ public class ToggleConfigure extends AdminTabUIActionSupport<ReportUI> {
public ToggleConfigure() {
super("", n("observe.ui.action.configuration.tip"), "generate", ObserveKeyStrokesEditorApi.KEY_STROKE_NAVIGATION_CONFIGURE);
-// setIcon(getContentScaledImage("configure"));
}
@Override
=====================================
client/datasource/actions/src/main/java/fr/ird/observe/client/datasource/actions/report/actions/ToggleExport.java
=====================================
@@ -0,0 +1,82 @@
+package fr.ird.observe.client.datasource.actions.report.actions;
+
+/*-
+ * #%L
+ * ObServe Client :: DataSource :: Actions
+ * %%
+ * Copyright (C) 2008 - 2022 IRD, 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.client.datasource.actions.ObserveKeyStrokesActions;
+import fr.ird.observe.client.datasource.actions.actions.AdminTabUIActionSupport;
+import fr.ird.observe.client.datasource.actions.report.ReportUI;
+import org.nuiton.jaxx.runtime.swing.action.MenuAction;
+
+import javax.swing.JComponent;
+import javax.swing.JPopupMenu;
+import javax.swing.SwingUtilities;
+import javax.swing.event.PopupMenuEvent;
+import javax.swing.event.PopupMenuListener;
+import java.awt.event.ActionEvent;
+
+import static io.ultreia.java4all.i18n.I18n.n;
+
+/**
+ * Created on 02/08/2022.
+ *
+ * @author Tony Chemit - dev(a)tchemit.fr
+ * @since 9.0.7
+ */
+public class ToggleExport extends AdminTabUIActionSupport<ReportUI> {
+
+ public ToggleExport() {
+ super("", n("observe.ui.action.export.tip"), "data-export", ObserveKeyStrokesActions.KEY_STROKE_EXPORT_POPUP);
+ }
+
+ @Override
+ public void init() {
+ super.init();
+ ui.getExportPopup().addPopupMenuListener(new PopupMenuListener() {
+ @Override
+ public void popupMenuWillBecomeVisible(PopupMenuEvent e) {
+ }
+
+ @Override
+ public void popupMenuWillBecomeInvisible(PopupMenuEvent e) {
+ ui.getToggleExport().setSelected(false);
+ }
+
+ @Override
+ public void popupMenuCanceled(PopupMenuEvent e) {
+ ui.getToggleExport().setSelected(false);
+ }
+ });
+ }
+
+ @Override
+ protected void doActionPerformed(ActionEvent e, ReportUI ui) {
+ ui.getToggleExport().setSelected(true);
+ SwingUtilities.invokeLater(() -> {
+ JComponent c = ui.getToggleExport();
+ JPopupMenu p = ui.getExportPopup();
+ MenuAction.preparePopup(p, c, false);
+ });
+ }
+
+}
+
=====================================
client/datasource/actions/src/main/resources/icons/action-export-csv.png
=====================================
Binary files /dev/null and b/client/datasource/actions/src/main/resources/icons/action-export-csv.png differ
=====================================
client/datasource/actions/src/main/resources/icons/action-format-csv.png
=====================================
Binary files /dev/null and b/client/datasource/actions/src/main/resources/icons/action-format-csv.png differ
=====================================
client/runner/src/main/i18n/translations/client-runner_en_GB.properties
=====================================
@@ -55,6 +55,7 @@ observe.config.defaultReportDirectory.description=Default directory where to sto
observe.config.defaultReportFile.description=Default report file to use
observe.config.defaultResourcesDirectory.description=Default user resources directory
observe.config.defaultValidationReportDirectory.description=Default validation report directory
+observe.config.exportDirectory.description=Default export directory for user export.
observe.config.feedBackDirectory.description=FeedBack directory
observe.config.h2.can.editReferential.description=Local database can edit referential
observe.config.h2.can.migrate.description=Flag to know if you can migrate h2 data sources
@@ -315,6 +316,7 @@ observe.ui.action.choose.avdth.file.description=AVDTH Database (*.mdb)
observe.ui.action.choose.db.dump=Choose the backup
observe.ui.action.choose.db.dump.description=Database backup (*.sql.gz)
observe.ui.action.choose.db.dump.directory=Choose the backup directory
+observe.ui.action.choose.export.csv.directory=Choose csv export directory
observe.ui.action.choose.reportFile=Choose the reports file
observe.ui.action.choose.reportFile.description=Report's file (*.properties)
observe.ui.action.close=Close
@@ -360,6 +362,7 @@ observe.ui.action.duplicate.remote.tip=Duplicate remote
observe.ui.action.duplicate.server.tip=Duplicate server
observe.ui.action.exit=Quit
observe.ui.action.exit.tip=quit Observe
+observe.ui.action.export.tip=Export
observe.ui.action.goDown.tip=Go down in navigation tree
observe.ui.action.goUp.tip=Go up in navigation tree
observe.ui.action.goto.next.stage=Next step
@@ -531,6 +534,10 @@ observe.ui.datasource.editor.actions.report.copy.column.headers.tip=Add in resul
observe.ui.datasource.editor.actions.report.copy.row.headers=Copy row header
observe.ui.datasource.editor.actions.report.copy.row.headers.tip=Add in result row headers
observe.ui.datasource.editor.actions.report.description=Generate reports
+observe.ui.datasource.editor.actions.report.exportToClipboard=Clipboard
+observe.ui.datasource.editor.actions.report.exportToCsv=CSV
+observe.ui.datasource.editor.actions.report.exportToCsv.done=Csv export done at %s
+observe.ui.datasource.editor.actions.report.exportToCsv.tip=Export to csv
observe.ui.datasource.editor.actions.report.no.report.found=No report found.
observe.ui.datasource.editor.actions.report.report.count.found=Found %s reports.
observe.ui.datasource.editor.actions.report.report.description=Description of selected report
@@ -827,6 +834,7 @@ observe.ui.title.can.not.export.obstuna=Could not export data...
observe.ui.title.choose.avdth.file=Select avdth file
observe.ui.title.choose.db.dump=Choose a database backup
observe.ui.title.choose.db.dump.directory=Choose directory of backup
+observe.ui.title.choose.export.csv.directory=Choose directory of csv export
observe.ui.title.choose.reportFile=Choose report definition file
observe.ui.title.confirmReplace=Confirm to replace
observe.ui.title.connect.existingDB=Connect to existing database
=====================================
client/runner/src/main/i18n/translations/client-runner_es_ES.properties
=====================================
@@ -55,6 +55,7 @@ observe.config.defaultReportDirectory.description=Directorio por defecto de los
observe.config.defaultReportFile.description=Default report file to use
observe.config.defaultResourcesDirectory.description=Directorio de almacenamiento de los recursos de usuario como las traducciones o la consultas de informes
observe.config.defaultValidationReportDirectory.description=Directorio por defecto de almacenamiento de los informes de validación
+observe.config.exportDirectory.description=Default export directory for user export.
observe.config.feedBackDirectory.description=FeedBack directory \#TODO
observe.config.h2.can.editReferential.description=Para poder editar el referencial de una base local
observe.config.h2.can.migrate.description=Autorizar la actualización de las bases locales (h2)
@@ -315,6 +316,7 @@ observe.ui.action.choose.avdth.file.description=AVDTH Database (*.mdb) \#TODO
observe.ui.action.choose.db.dump=Elegir la copia de seguridad
observe.ui.action.choose.db.dump.description=Copia de seguridad de la base (*.sql.gz)
observe.ui.action.choose.db.dump.directory=Elegir el directorio de la copia de seguridad
+observe.ui.action.choose.export.csv.directory=Choisir le répertoire de l'export csv
observe.ui.action.choose.reportFile=Elegir el archivo de definición de informe
observe.ui.action.choose.reportFile.description=Archivo de definición (*.properties)
observe.ui.action.close=Cerrar
@@ -360,6 +362,7 @@ observe.ui.action.duplicate.remote.tip=Duplicate remote \#TODO
observe.ui.action.duplicate.server.tip=Duplicate server \#TODO
observe.ui.action.exit=Salir
observe.ui.action.exit.tip=Salir de ObServe
+observe.ui.action.export.tip=Export
observe.ui.action.goDown.tip=Descender hacia etapas porteriores
observe.ui.action.goUp.tip=Ascender hacia etapas anteriores
observe.ui.action.goto.next.stage=Siguiente
@@ -531,6 +534,10 @@ observe.ui.datasource.editor.actions.report.copy.column.headers.tip=Añadir al r
observe.ui.datasource.editor.actions.report.copy.row.headers=Copiar las cabeceras de linea
observe.ui.datasource.editor.actions.report.copy.row.headers.tip=Añadir al resultado las cabeceras de linea (ej. la primera columna)
observe.ui.datasource.editor.actions.report.description=Generar los cuadros de síntesis del informe de fin del embarque
+observe.ui.datasource.editor.actions.report.exportToClipboard=Clipboard
+observe.ui.datasource.editor.actions.report.exportToCsv=CSV
+observe.ui.datasource.editor.actions.report.exportToCsv.done=Csv export done at %s
+observe.ui.datasource.editor.actions.report.exportToCsv.tip=Export to csv
observe.ui.datasource.editor.actions.report.no.report.found=No report found. \#TODO
observe.ui.datasource.editor.actions.report.report.count.found=Found %s reports. \#TODO
observe.ui.datasource.editor.actions.report.report.description=Descripción del informe seleccionado
@@ -827,6 +834,7 @@ observe.ui.title.can.not.export.obstuna=Impossible exportar los datos...
observe.ui.title.choose.avdth.file=Select avdth file \#TODO
observe.ui.title.choose.db.dump=Seleccionar una copia de seguridad de base local
observe.ui.title.choose.db.dump.directory=Seleccionar e directorio de destinación de la copia de seguridad
+observe.ui.title.choose.export.csv.directory=Choose directory of csv export
observe.ui.title.choose.reportFile=Seleccionar el archivo de definición de los informes
observe.ui.title.confirmReplace=Confirmar para reemplazar
observe.ui.title.connect.existingDB=Conexión a una fuente de datos que ya existe
=====================================
client/runner/src/main/i18n/translations/client-runner_fr_FR.properties
=====================================
@@ -55,6 +55,7 @@ observe.config.defaultReportDirectory.description=Répertoire par défaut des ra
observe.config.defaultReportFile.description=Fichier par défaut des rapports de l'application
observe.config.defaultResourcesDirectory.description=Répertoire où sont stockées les ressources.
observe.config.defaultValidationReportDirectory.description=Répertoire où sont stockés les rapports de validation
+observe.config.exportDirectory.description=Le répertoire par défaut pour les exports.
observe.config.feedBackDirectory.description=Répertoire où sont consigner les feedback
observe.config.h2.can.editReferential.description=Pour pouvoir éditer le référentiel d'une base locale
observe.config.h2.can.migrate.description=Autoriser la mise à jour des bases locales (H2)
@@ -315,6 +316,7 @@ observe.ui.action.choose.avdth.file.description=Base AVDTH (*.mdb)
observe.ui.action.choose.db.dump=Choisir la sauvegarde
observe.ui.action.choose.db.dump.description=Sauvegarde de base (*.sql.gz)
observe.ui.action.choose.db.dump.directory=Choisir le répertoire de sauvegarde
+observe.ui.action.choose.export.csv.directory=Choisir le répertoire de l'export csv
observe.ui.action.choose.reportFile=Choisir le fichier de définition de report
observe.ui.action.choose.reportFile.description=Fichier de définition (*.properties)
observe.ui.action.close=Fermer
@@ -360,6 +362,7 @@ observe.ui.action.duplicate.remote.tip=Duplicate la connexion distante
observe.ui.action.duplicate.server.tip=Duplicate la connexion server
observe.ui.action.exit=Quitter
observe.ui.action.exit.tip=Quitter ObServe
+observe.ui.action.export.tip=Exporter
observe.ui.action.goDown.tip=Descendre dans la navigation
observe.ui.action.goUp.tip=Remonter dans la navigation
observe.ui.action.goto.next.stage=Suivant
@@ -531,6 +534,10 @@ observe.ui.datasource.editor.actions.report.copy.column.headers.tip=Ajoute dans
observe.ui.datasource.editor.actions.report.copy.row.headers=Copier les entêtes de ligne
observe.ui.datasource.editor.actions.report.copy.row.headers.tip=Ajoute dans le résultat les entêtes de ligne (i.e la première colonne)
observe.ui.datasource.editor.actions.report.description=Générer les tableaux de synthèse du rapport de fin d'embarquement
+observe.ui.datasource.editor.actions.report.exportToClipboard=Presse papier
+observe.ui.datasource.editor.actions.report.exportToCsv=Csv
+observe.ui.datasource.editor.actions.report.exportToCsv.done=Export csv sauvegardé dans le fichier %s
+observe.ui.datasource.editor.actions.report.exportToCsv.tip=Exporter au format Csv
observe.ui.datasource.editor.actions.report.no.report.found=Aucun rapport trouvé.
observe.ui.datasource.editor.actions.report.report.count.found=%s rapports détectés.
observe.ui.datasource.editor.actions.report.report.description=Description du rapport sélectionné
@@ -827,6 +834,7 @@ observe.ui.title.can.not.export.obstuna=Impossible d'exporter des données...
observe.ui.title.choose.avdth.file=Choisir une base AVDTH
observe.ui.title.choose.db.dump=Choisir une sauvegarder de base locale
observe.ui.title.choose.db.dump.directory=Choisir le répertoire de destination de la sauvegarde
+observe.ui.title.choose.export.csv.directory=Choisir le répertoire de destination de l'export csc
observe.ui.title.choose.reportFile=Choisir le fichier de définition des reports
observe.ui.title.confirmReplace=Confirmation de remplacement
observe.ui.title.connect.existingDB=Connexion à une source de données existante
=====================================
toolkit/api/src/main/java/fr/ird/observe/dto/ObserveUtil.java
=====================================
@@ -62,7 +62,9 @@ import java.util.function.Supplier;
public class ObserveUtil {
public static final String SQL_GZ_EXTENSION_PATTERN = "^.+\\.sql\\.gz|.+\\.SQL\\.GZ$";
+ public static final String CSV_EXTENSION_PATTERN = "^.+\\.csv|.+\\.CSV$";
public static final String SQL_GZ_EXTENSION = ".sql.gz";
+ public static final String CSV_EXTENSION = ".csv";
public static final String PROPERTIES_EXTENSION_PATTERN = "^.+\\.properties|.+\\.PROPERTIES$";
public static final String PROPERTIES_EXTENSION = ".properties";
public static final String PNG_EXTENSION_PATTERN = "^.+\\.png|.+\\.PNG$";
@@ -150,6 +152,24 @@ public class ObserveUtil {
return filePath.endsWith(SQL_GZ_EXTENSION);
}
+ public static String addCsvExtension(String filePath) {
+ if (!filePath.endsWith(CSV_EXTENSION)) {
+ filePath += CSV_EXTENSION;
+ }
+ return filePath;
+ }
+
+ public static String removeCsvExtension(String filePath) {
+ if (filePath.endsWith(CSV_EXTENSION)) {
+ filePath = Strings.removeEnd(filePath, CSV_EXTENSION);
+ }
+ return filePath;
+ }
+
+ public static boolean withCsvExtension(String filePath) {
+ return filePath.endsWith(CSV_EXTENSION);
+ }
+
public static ScriptEngine getScriptEngine() {
ScriptEngineManager factory = new ScriptEngineManager();
return factory.getEngineByName(JS_ENGINE_NAME);
=====================================
toolkit/api/src/main/java/fr/ird/observe/dto/report/DataMatrix.java
=====================================
@@ -223,44 +223,38 @@ public class DataMatrix implements JsonAware {
public String getClipboardContent(boolean copyRowHeaders,
boolean copyColumnHeaders,
- boolean escapeCells, char sep) {
-
+ boolean escapeCells,
+ char sep) {
if (getWidth() <= 0 || getHeight() <= 0) {
return "";
}
-
StringBuilder buffer = new StringBuilder();
-
char eol = '\n';
-
for (int y = copyColumnHeaders ? 0 : 1, rows = getHeight(); y < rows; y++) {
-
Serializable value;
-
- // nouvell ligne
-
+ // new line
int x = copyRowHeaders ? 0 : 1;
-
for (int columns = getWidth() - 1; x < columns; x++) {
-
- // sur chaque cellule (sauf la dernière)
+ // all cells except the last one
value = getValue(x, y);
if (escapeCells) {
- value = "\"" + value + "\"";
+ value = escapeCell(value);
}
buffer.append(value).append(sep);
}
-
- // dernière cellule
+ // last cell
value = getValue(x, y);
if (escapeCells) {
- value = "\"" + value + "\"";
+ value = escapeCell(value);
}
buffer.append(value);
-
- // fin de ligne
+ // end of line
buffer.append(eol);
}
return buffer.toString();
}
+
+ private String escapeCell(Object value) {
+ return String.format("\"%s\"", value == null ? "" : value.toString().replaceAll("\"", "\"\""));
+ }
}
View it on GitLab: https://gitlab.com/ultreiaio/ird-observe/-/commit/512468e882d1ae9f08c90eab6…
--
View it on GitLab: https://gitlab.com/ultreiaio/ird-observe/-/commit/512468e882d1ae9f08c90eab6…
You're receiving this email because of your account on gitlab.com.
1
0
[Git][ultreiaio/ird-observe][develop] 22 commits: Update changelog for v.7.6.14 [skip CI]
by Tony CHEMIT (@tchemit) 31 Jul '22
by Tony CHEMIT (@tchemit) 31 Jul '22
31 Jul '22
Tony CHEMIT pushed to branch develop at ultreiaio / ird-observe
Commits:
1f069322 by Tony Chemit at 2022-07-29T17:47:32+02:00
Update changelog for v.7.6.14 [skip CI]
- - - - -
e4c938f0 by Tony Chemit at 2022-07-29T20:55:13+02:00
use cache of simplifiedObjectTypeSpecializedRules
- - - - -
892f5755 by Tony Chemit at 2022-07-30T13:52:08+02:00
Il faudrait mettre à jour le script qui crée les colonnes postgis pour chaque champ lat/lon - Closes #2422
- - - - -
941b3112 by Tony Chemit at 2022-07-30T17:57:06+02:00
Introduce sql package (from topia project) - See ultreiaio/java-util#31
- - - - -
b5ed977d by Tony Chemit at 2022-07-30T18:11:24+02:00
Introduce json package (from http project) - See ultreiaio/java-util#30
- - - - -
bb9cf456 by Tony Chemit at 2022-07-30T18:11:24+02:00
Introduce sql package (from topia project) - See ultreiaio/java-util#31
Introduce json package (from http project) - See ultreiaio/java-util#30
- - - - -
822fdc77 by Tony Chemit at 2022-07-30T18:11:24+02:00
tidy pom
- - - - -
a0c91b3e by Tony Chemit at 2022-07-30T18:11:24+02:00
Improve avdth API (move it from api-dto to api-services)
- - - - -
c16307fd by Tony Chemit at 2022-07-31T00:38:58+02:00
update pom
- - - - -
ce7a2d69 by Tony Chemit at 2022-07-31T02:30:33+02:00
import topia into toolkit
- - - - -
170cdf4a by Tony Chemit at 2022-07-31T15:40:31+02:00
TimeLog - Fix timeLog init
- - - - -
bdd12791 by Tony Chemit at 2022-07-31T15:40:30+02:00
Persistence - Improve Migration service code and logs
- - - - -
8fc507ba by Tony Chemit at 2022-07-31T15:40:30+02:00
TimeLog - use TimeLog.reset
- - - - -
b15c8fc9 by Tony Chemit at 2022-07-31T15:40:30+02:00
Persistence - Add SqlQuery and SqlFunction in sql package - See ultreiaio/java-util#33
- - - - -
53d646f8 by Tony Chemit at 2022-07-31T15:40:30+02:00
Persistence - Improve JdbcHelper (remove a very strange DriverManager.registerDriver code...)
- - - - -
3e5aec59 by Tony Chemit at 2022-07-31T15:40:30+02:00
Replace MutableInt by AtomicInteger
- - - - -
5d9aaec1 by Tony Chemit at 2022-07-31T15:40:30+02:00
Json - Remove guava json adapters from this project (remove then guava dependency :)) - Closes ultreiaio/java-util#35
- - - - -
41985592 by Tony Chemit at 2022-07-31T19:58:00+02:00
update pom
- - - - -
3abeb70e by Tony Chemit at 2022-07-31T19:58:00+02:00
Server - low log level
- - - - -
42ae3c87 by Tony Chemit at 2022-07-31T19:58:00+02:00
TimeLog - fix some usages (not on correct class)
- - - - -
be04d03d by Tony Chemit at 2022-07-31T19:58:26+02:00
Service Local - use TimeLog at correct place
- - - - -
ecdcb7ef by Tony Chemit at 2022-07-31T19:58:26+02:00
Service Client - Improve TimeLog and code flow
Improve generated service client to have TimeLog at nice place - See ultreiaio/http#54
Replace url by uri in HResponseNotAvailableException to avoid nasty IOException - See ultreiaio/http#55
- - - - -
30 changed files:
- CHANGELOG.md
- client/configuration/pom.xml
- client/configuration/src/main/java/fr/ird/observe/client/configuration/ClientConfig.java
- client/core/pom.xml
- 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
- client/core/src/main/java/fr/ird/observe/client/datasource/h2/backup/BackupsManager.java
- client/datasource/actions/pom.xml
- client/datasource/actions/src/main/java/fr/ird/observe/client/datasource/actions/save/actions/Start.java
- client/datasource/editor/api/pom.xml
- client/datasource/editor/api/src/main/java/fr/ird/observe/client/datasource/editor/api/DataSourceEditorHelper.java
- client/datasource/editor/api/src/main/java/fr/ird/observe/client/datasource/editor/api/avdth/ImportDialogModel.java
- client/datasource/editor/api/src/main/java/fr/ird/observe/client/datasource/editor/api/avdth/actions/Extract.java
- client/datasource/editor/api/src/main/java/fr/ird/observe/client/datasource/editor/api/avdth/actions/Import.java
- client/datasource/editor/api/src/main/java/fr/ird/observe/client/datasource/editor/api/loading/open/OpenDataSourceActionStep.java
- client/datasource/editor/api/src/main/java/fr/ird/observe/client/datasource/editor/api/navigation/tree/NavigationScopes.java
- client/datasource/editor/api/src/main/java/fr/ird/observe/client/datasource/editor/api/wizard/DataSourceHelper.java
- client/datasource/editor/api/src/main/java/fr/ird/observe/client/datasource/editor/api/wizard/StorageBackupUILauncher.java
- client/datasource/editor/api/src/main/java/fr/ird/observe/client/datasource/editor/api/wizard/launchers/CreateLauncher.java
- client/datasource/editor/common/pom.xml
- client/datasource/editor/ll/pom.xml
- client/datasource/editor/ps/pom.xml
- client/datasource/editor/ps/src/main/java/fr/ird/observe/client/datasource/editor/ps/data/dcp/DcpUIAdapter.java
- client/datasource/editor/ps/src/main/java/fr/ird/observe/client/datasource/editor/ps/data/dcp/DcpUIModelStates.java
- client/datasource/editor/ps/src/main/java/fr/ird/observe/client/datasource/editor/ps/data/dcp/FloatingObjectPartsTreeNode.java
- client/datasource/editor/ps/src/main/java/fr/ird/observe/client/datasource/editor/ps/data/dcp/FloatingObjectPartsTreeTable.java
- client/datasource/editor/ps/src/main/java/fr/ird/observe/client/datasource/editor/ps/data/dcp/FloatingObjectPartsTreeTableModel.java
- client/datasource/editor/ps/src/main/java/fr/ird/observe/client/datasource/editor/ps/data/dcp/actions/AddFloatingObjectPreset.java
- client/datasource/editor/ps/src/main/java/fr/ird/observe/client/datasource/editor/ps/data/logbook/FloatingObjectUIModelStates.java
- client/datasource/editor/ps/src/main/java/fr/ird/observe/client/datasource/editor/ps/data/observation/FloatingObjectUIModelStates.java
The diff was not included because it is too large.
View it on GitLab: https://gitlab.com/ultreiaio/ird-observe/-/compare/edc6e315cd24e5ea1daab3e0…
--
View it on GitLab: https://gitlab.com/ultreiaio/ird-observe/-/compare/edc6e315cd24e5ea1daab3e0…
You're receiving this email because of your account on gitlab.com.
1
0