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
June 2024
- 1 participants
- 23 discussions
[Git][ultreiaio/ird-observe][develop] Update changelog for v.9.3.6 [skip CI]
by Tony CHEMIT (@tchemit) 26 Jun '24
by Tony CHEMIT (@tchemit) 26 Jun '24
26 Jun '24
Tony CHEMIT pushed to branch develop at ultreiaio / ird-observe
Commits:
072987cb by Tony Chemit at 2024-06-26T10:07:01+02:00
Update changelog for v.9.3.6 [skip CI]
- - - - -
1 changed file:
- CHANGELOG.md
Changes:
=====================================
CHANGELOG.md
=====================================
@@ -1,7 +1,27 @@
# ObServe changelog
* Author [Tony Chemit](mailto:dev@tchemit.fr)
- * Last generated at 2024-05-22 10:52.
+ * Last generated at 2024-06-26 10:05.
+
+## Version [9.3.6](https://gitlab.com/ultreiaio/ird-observe/-/milestones/283)
+
+**Closed at 2024-06-26.**
+
+### Download
+* [Client (observe-9.3.6-client.zip)](https://repo1.maven.org/maven2/fr/ird/observe/ob…)
+* [Serveur (observe-9.3.6.war)](https://repo1.maven.org/maven2/fr/ird/observe/observe/9…)
+* [Serveur (observe-9.3.6-server.zip)](https://repo1.maven.org/maven2/fr/ird/observe/ob…)
+
+
+### Issues
+ * [[Type::Anomalie 2887]](https://gitlab.com/ultreiaio/ird-observe/-/issues/2887) **En synchro avancée de données, la modification de la configuration des arbres de navigation ne fonctionne plus** (Thanks to Tony CHEMIT) (Reported by Pascal Cauquil)
+ * [[Type::Anomalie 2889]](https://gitlab.com/ultreiaio/ird-observe/-/issues/2889) **Les transcodages ASSOC ne sont plus totalement respectés par l'importeur AVDTH** (Thanks to Tony CHEMIT) (Reported by Pascal Cauquil)
+ * [[Type::Anomalie 2890]](https://gitlab.com/ultreiaio/ird-observe/-/issues/2890) **Sur synchro avancée de données, on ne peut plus changer le classement de l'arbre** (Thanks to Tony CHEMIT) (Reported by Pascal Cauquil)
+ * [[Type::Anomalie 2891]](https://gitlab.com/ultreiaio/ird-observe/-/issues/2891) **L'utilisation du bouton de création d'un FOB brut (sans présélection) ne fonctionne plus en mode serveur** (Thanks to Tony CHEMIT) (Reported by Pascal Cauquil)
+ * [[Type::Anomalie 2896]](https://gitlab.com/ultreiaio/ird-observe/-/issues/2896) **Une règle de migration AVDTH ASSOC non respectée** (Thanks to Tony CHEMIT) (Reported by Pascal Cauquil)
+ * [[Type::Anomalie 2899]](https://gitlab.com/ultreiaio/ird-observe/-/issues/2899) **Amélioration du code de mise à jour sql pour les associations lors de remplacement de référentiel** (Thanks to Tony CHEMIT) (Reported by Tony CHEMIT)
+ * [[Type::Evolution 2888]](https://gitlab.com/ultreiaio/ird-observe/-/issues/2888) **En synchro avancée de données, amélioration de la gestion des droits des bases utilisées** (Thanks to Tony CHEMIT) (Reported by Pascal Cauquil)
+ * [[Type::Evolution 2892]](https://gitlab.com/ultreiaio/ird-observe/-/issues/2892) **Empêcher l 'assistant synchro données avancées de poursuivre si les 2 bases n'ont pas un droit saisisseur au minimum** (Thanks to Pascal Cauquil) (Reported by Pascal Cauquil)
## Version [9.3.5](https://gitlab.com/ultreiaio/ird-observe/-/milestones/282)
@@ -12,7 +32,6 @@
* [Serveur (observe-9.3.5.war)](https://repo1.maven.org/maven2/fr/ird/observe/observe/9…)
* [Serveur (observe-9.3.5-server.zip)](https://repo1.maven.org/maven2/fr/ird/observe/ob…)
-
### Issues
* [[Type::Anomalie 2884]](https://gitlab.com/ultreiaio/ird-observe/-/issues/2884) **Le système de conservation du dernier chemin utilisé pour une sauvegarde empêche le logiciel de redémarrer si le volume utilisé n'existe plus** (Thanks to Tony CHEMIT) (Reported by Pascal Cauquil)
* [[Type::Anomalie 2885]](https://gitlab.com/ultreiaio/ird-observe/-/issues/2885) **Le répertoire à utiliser pour les sauvegardes n'est pas mis à jour dans la configuration lors d'un sauvegarde pendant un nouvel import** (Thanks to Tony CHEMIT) (Reported by Tony CHEMIT)
View it on GitLab: https://gitlab.com/ultreiaio/ird-observe/-/commit/072987cbd055819ab5389c819…
--
View it on GitLab: https://gitlab.com/ultreiaio/ird-observe/-/commit/072987cbd055819ab5389c819…
You're receiving this email because of your account on gitlab.com.
1
0
[Git][ultreiaio/ird-observe][develop] Do not deploy to tomcat in build-for-release
by Tony CHEMIT (@tchemit) 26 Jun '24
by Tony CHEMIT (@tchemit) 26 Jun '24
26 Jun '24
Tony CHEMIT pushed to branch develop at ultreiaio / ird-observe
Commits:
3ed656ed by Tony Chemit at 2024-06-26T09:09:44+02:00
Do not deploy to tomcat in build-for-release
- - - - -
1 changed file:
- .gitlab-ci.yml
Changes:
=====================================
.gitlab-ci.yml
=====================================
@@ -47,7 +47,7 @@ cache:
environment:
name: test
script:
- - if [ -n "${BUILD_FOR_RELEASE}" ]; then ultreiaio-maven-execute 'clean install -U -e -DperformRelease -Pdeploy'; fi
+ - if [ -n "${BUILD_FOR_RELEASE}" ]; then ultreiaio-maven-execute 'clean install -U -e -DperformRelease -Pdeploy -Dmaven.tomcat.skip'; fi
.publish-site: &publish-site
environment:
View it on GitLab: https://gitlab.com/ultreiaio/ird-observe/-/commit/3ed656ed2ea6cede959251e11…
--
View it on GitLab: https://gitlab.com/ultreiaio/ird-observe/-/commit/3ed656ed2ea6cede959251e11…
You're receiving this email because of your account on gitlab.com.
1
0
[Git][ultreiaio/ird-observe][develop] 2 commits: Fix one validator which used system locale to translate a type (instead of...
by Tony CHEMIT (@tchemit) 26 Jun '24
by Tony CHEMIT (@tchemit) 26 Jun '24
26 Jun '24
Tony CHEMIT pushed to branch develop at ultreiaio / ird-observe
Commits:
196e173a by Tony Chemit at 2024-06-26T08:31:50+02:00
Fix one validator which used system locale to translate a type (instead of using the decoratorService locale)
- - - - -
2cb15c22 by Tony Chemit at 2024-06-26T08:32:13+02:00
Fix ValidateServiceFixtures (assert arguments are flipped)
- - - - -
2 changed files:
- core/services/test/src/main/java/fr/ird/observe/services/service/ValidateServiceFixtures.java
- toolkit/api-validation/src/main/java/fr/ird/observe/validation/validators/referential/IdDtoReferentialDisabledFieldValidationSupport.java
Changes:
=====================================
core/services/test/src/main/java/fr/ird/observe/services/service/ValidateServiceFixtures.java
=====================================
@@ -115,7 +115,7 @@ public class ValidateServiceFixtures extends GeneratedValidateServiceFixtures {
}
private void assertResult(ValidationResult actual, ValidationResult expected) {
- Assert.assertEquals(actual.getNodes().size(), expected.getNodes().size());
+ Assert.assertEquals(expected.getNodes().size(), actual.getNodes().size());
Iterator<ValidationResultDto> expectedIterator = expected.getNodes().iterator();
for (ValidationResultDto actualNode : actual.getNodes()) {
@@ -125,9 +125,9 @@ public class ValidateServiceFixtures extends GeneratedValidateServiceFixtures {
}
private void assertResult(ValidationResultDto actual, ValidationResultDto expected) {
- Assert.assertEquals(actual.getDatum().getId(), expected.getDatum().getId());
- Assert.assertEquals(actual.getMessages(), expected.getMessages());
- Assert.assertEquals(actual.getChildCount(), expected.getChildCount());
+ Assert.assertEquals(expected.getDatum().getId(), actual.getDatum().getId());
+ Assert.assertEquals(expected.getMessages(), actual.getMessages());
+ Assert.assertEquals(expected.getChildCount(), actual.getChildCount());
if (actual.getChildren() != null) {
Iterator<ValidationResultDto> actualChildren = actual.getChildren().iterator();
Iterator<ValidationResultDto> expectedChildren = expected.getChildren().iterator();
=====================================
toolkit/api-validation/src/main/java/fr/ird/observe/validation/validators/referential/IdDtoReferentialDisabledFieldValidationSupport.java
=====================================
@@ -106,7 +106,8 @@ public abstract class IdDtoReferentialDisabledFieldValidationSupport extends Nui
referenceValue = referentialDtoReference.toString();
} else {
if (referenceType == null) {
- referenceType = I18nDecoratorHelper.getType(referentialDtoReference.getReferenceType());
+ DecoratorService decoratorService = (DecoratorService) stack.findValue("decoratorService");
+ referenceType = I18nDecoratorHelper.getType(decoratorService.getReferentialLocale().getLocale(), referentialDtoReference.getReferenceType());
}
}
try {
View it on GitLab: https://gitlab.com/ultreiaio/ird-observe/-/compare/aa8ce8cce35d5bf8b9614d9a…
--
View it on GitLab: https://gitlab.com/ultreiaio/ird-observe/-/compare/aa8ce8cce35d5bf8b9614d9a…
You're receiving this email because of your account on gitlab.com.
1
0
[Git][ultreiaio/ird-observe][develop] Fix persistence tests (by skipping them), when some files are missing to execute them
by Tony CHEMIT (@tchemit) 25 Jun '24
by Tony CHEMIT (@tchemit) 25 Jun '24
25 Jun '24
Tony CHEMIT pushed to branch develop at ultreiaio / ird-observe
Commits:
aa8ce8cc by Tony Chemit at 2024-06-25T17:40:30+02:00
Fix persistence tests (by skipping them), when some files are missing to execute them
- - - - -
5 changed files:
- core/persistence/test/src/test/java/fr/ird/observe/persistence/avdth/data/AvdthDataBuilderTestSupport.java
- core/persistence/test/src/test/java/fr/ird/observe/persistence/avdth/referential/AvdthReferentialBuilderTest.java
- core/persistence/test/src/test/java/fr/ird/observe/persistence/avdth/referential/AvdthWeightCategoryBuilderTest.java
- core/persistence/test/src/test/java/org/nuiton/topia/persistence/jdbc/JdbcHelperPostgresTest.java
- toolkit/test-api/src/main/java/fr/ird/observe/test/ObserveTestConfiguration.java
Changes:
=====================================
core/persistence/test/src/test/java/fr/ird/observe/persistence/avdth/data/AvdthDataBuilderTestSupport.java
=====================================
@@ -98,6 +98,7 @@ public abstract class AvdthDataBuilderTestSupport extends PersistenceTestSupport
}
public static List<String> allDatabases(Path path) {
+ Assume.assumeTrue("Skip, avdth root path " + path + " not found", Files.exists(path));
try (Stream<Path> pathStream = Files.find(path, 1, (p, b) -> p.toFile().getName().endsWith(".mdb"))) {
List<String> collect = pathStream.map(p -> p.toFile().getName()).sorted().collect(Collectors.toList());
Collections.reverse(collect);
@@ -127,6 +128,7 @@ public abstract class AvdthDataBuilderTestSupport extends PersistenceTestSupport
public void build() throws SQLException, IOException, MissingReferentialException {
log.info(String.format("Start for database: %s", dbName));
Path avdthFile = getRootPath().resolve(dbName);
+ Assume.assumeTrue("Skip, avdth file " + avdthFile + " not found", Files.exists(avdthFile));
Path scriptPath = TOPIA_TEST_CLASS_RESOURCE.getTestDirectory().toPath().resolve("export-" + dbName.replace(".mdb", ".sql"));
Path scriptTemporaryDirectory = scriptPath.getParent().resolve(scriptPath.toFile().getName().replace(".sql", "-tmp"));
=====================================
core/persistence/test/src/test/java/fr/ird/observe/persistence/avdth/referential/AvdthReferentialBuilderTest.java
=====================================
@@ -39,10 +39,12 @@ import fr.ird.observe.test.spi.DatabaseNameConfiguration;
import fr.ird.observe.test.spi.DatabasePasswordConfiguration;
import fr.ird.observe.test.spi.DatabaseVersionConfiguration;
import org.junit.Assert;
+import org.junit.Assume;
import org.junit.ClassRule;
import org.junit.Test;
import java.io.IOException;
+import java.nio.file.Files;
import java.nio.file.Path;
import java.sql.Connection;
import java.sql.SQLException;
@@ -74,6 +76,7 @@ public class AvdthReferentialBuilderTest extends TestSupportWithConfig {
Path avdthFile = AvdthFixtures.getAvdthCachePath()
.resolve("OA")
.resolve("OA_2020_V35.mdb");
+ Assume.assumeTrue("Skip, avdth file " + avdthFile + " not found", Files.exists(avdthFile));
Path scriptPath = localTestMethodResource.getTestDirectory().toPath().resolve("export-" + avdthFile.toFile().getName().replace(".mdb", ".sql"));
Path scriptTemporaryDirectory = scriptPath.getParent().resolve(scriptPath.toFile().getName().replace(".sql", "-tmp"));
=====================================
core/persistence/test/src/test/java/fr/ird/observe/persistence/avdth/referential/AvdthWeightCategoryBuilderTest.java
=====================================
@@ -38,10 +38,12 @@ import fr.ird.observe.test.spi.DatabaseNameConfiguration;
import fr.ird.observe.test.spi.DatabasePasswordConfiguration;
import fr.ird.observe.test.spi.DatabaseVersionConfiguration;
import org.junit.Assert;
+import org.junit.Assume;
import org.junit.ClassRule;
import org.junit.Test;
import java.io.IOException;
+import java.nio.file.Files;
import java.nio.file.Path;
import java.sql.Connection;
import java.sql.SQLException;
@@ -70,6 +72,7 @@ public class AvdthWeightCategoryBuilderTest extends TestSupportWithConfig {
public void build() throws SQLException, IOException {
Path avdthFile = AvdthFixtures.getAvdthCachePath()
.resolve("avdth-gen-35_74.mdb");
+ Assume.assumeTrue("Skip, avdth file " + avdthFile + " not found", Files.exists(avdthFile));
Path scriptPath = localTestMethodResource.getTestDirectory().toPath().resolve("export-" + avdthFile.toFile().getName().replace(".mdb", ".sql"));
Path scriptTemporaryDirectory = scriptPath.getParent().resolve(scriptPath.toFile().getName().replace(".sql", "-tmp"));
=====================================
core/persistence/test/src/test/java/org/nuiton/topia/persistence/jdbc/JdbcHelperPostgresTest.java
=====================================
@@ -61,10 +61,10 @@ public class JdbcHelperPostgresTest {
@Test
public void isTableExist() throws SQLException {
- boolean actual = jdbcHelper.isTableExist("Public", "Tms_version");
+ boolean actual = jdbcHelper.isTableExist("Common", "database_version");
Assert.assertTrue(actual);
- actual = jdbcHelper.isTableExist("PUBLIC", "tms_version-fake");
+ actual = jdbcHelper.isTableExist("PUBLIC", "database_version-fake");
Assert.assertFalse(actual);
}
@Test
=====================================
toolkit/test-api/src/main/java/fr/ird/observe/test/ObserveTestConfiguration.java
=====================================
@@ -33,10 +33,12 @@ import fr.ird.observe.test.spi.DatabaseVersionConfiguration;
import io.ultreia.java4all.util.Version;
import io.ultreia.java4all.util.sql.conf.JdbcConfiguration;
import io.ultreia.java4all.util.sql.conf.JdbcConfigurationBuilder;
+import org.junit.Assume;
import java.lang.reflect.AnnotatedElement;
import java.net.MalformedURLException;
import java.net.URL;
+import java.nio.file.Files;
import java.nio.file.Path;
/**
@@ -145,9 +147,9 @@ public class ObserveTestConfiguration {
}
public static JdbcConfiguration pgConfiguration() {
- return new JdbcConfigurationBuilder().forDatabase(ObserveTestConfiguration.getTestPropertyAsString(ObserveTestConfiguration.PG_URL),//"jdbc:postgresql://localhost:5432/observe_9",
- ObserveTestConfiguration.getTestPropertyAsString(ObserveTestConfiguration.PG_LOGIN),//"obstuna-referentiel",
- ObserveTestConfiguration.getTestPropertyAsString(ObserveTestConfiguration.PG_PASSWORD)//";;dm8-referentiel.."
+ return new JdbcConfigurationBuilder().forDatabase(ObserveTestConfiguration.getTestPropertyAsString(ObserveTestConfiguration.PG_URL),
+ ObserveTestConfiguration.getTestPropertyAsString(ObserveTestConfiguration.PG_LOGIN),
+ ObserveTestConfiguration.getTestPropertyAsString(ObserveTestConfiguration.PG_PASSWORD)
);
}
@@ -155,6 +157,7 @@ public class ObserveTestConfiguration {
public static void injectCredentials() {
Path credentialPath = Path.of(ObserveTestConfiguration.getTestPropertyAsString(ToolkitFixtures.TEST_CREDENTIALS_KEY));
+ Assume.assumeTrue("Skip, no credential file found", Files.exists(credentialPath));
ToolkitFixtures.injectCredentials(credentialPath,
ObserveTestConfiguration.PG_URL,
ObserveTestConfiguration.PG_LOGIN,
View it on GitLab: https://gitlab.com/ultreiaio/ird-observe/-/commit/aa8ce8cce35d5bf8b9614d9a3…
--
View it on GitLab: https://gitlab.com/ultreiaio/ird-observe/-/commit/aa8ce8cce35d5bf8b9614d9a3…
You're receiving this email because of your account on gitlab.com.
1
0
[Git][ultreiaio/ird-observe][develop] 3 commits: En synchro avancée de données, la modification de la configuration des arbres...
by Tony CHEMIT (@tchemit) 25 Jun '24
by Tony CHEMIT (@tchemit) 25 Jun '24
25 Jun '24
Tony CHEMIT pushed to branch develop at ultreiaio / ird-observe
Commits:
f8d211b9 by Tony Chemit at 2024-06-25T17:28:55+02:00
En synchro avancée de données, la modification de la configuration des arbres de navigation ne fonctionne plus - Closes #2887
- - - - -
cfa3abfb by Tony Chemit at 2024-06-25T17:28:55+02:00
Amélioration du code de mise à jour sql pour les associations lors de remplacement de référentiel - Closes #2899
- - - - -
39784e11 by Tony Chemit at 2024-06-25T17:29:32+02:00
Fix persistence tests (by skipping them), when some files are missing to execute them
- - - - -
9 changed files:
- client/datasource/actions/src/main/i18n/getters/java.getter
- client/datasource/actions/src/main/java/fr/ird/observe/client/datasource/actions/synchronize/data/tree/DataSelectionTreePaneHandler.java
- client/datasource/actions/src/main/java/fr/ird/observe/client/datasource/actions/synchronize/data/tree/DataSelectionTreePaneModel.java
- core/persistence/java/src/main/resources/META-INF/persistence/Observe/TopiaEntitySqlScriptModel.json
- core/persistence/test/src/test/java/fr/ird/observe/persistence/avdth/data/AvdthDataBuilderTestSupport.java
- core/persistence/test/src/test/java/fr/ird/observe/persistence/avdth/referential/AvdthReferentialBuilderTest.java
- core/persistence/test/src/test/java/fr/ird/observe/persistence/avdth/referential/AvdthWeightCategoryBuilderTest.java
- toolkit/templates/src/main/java/fr/ird/observe/toolkit/templates/entity/ReplaceReferentialScriptGenerator.java
- toolkit/test-api/src/main/java/fr/ird/observe/test/ObserveTestConfiguration.java
Changes:
=====================================
client/datasource/actions/src/main/i18n/getters/java.getter
=====================================
@@ -206,3 +206,4 @@ observe.ui.tree.action.collapseAll.tip
observe.ui.tree.action.expandAll.tip
observe.ui.tree.action.selectAll.tip
observe.ui.tree.action.unselectAll.tip
+observe.ui.tree.reload
=====================================
client/datasource/actions/src/main/java/fr/ird/observe/client/datasource/actions/synchronize/data/tree/DataSelectionTreePaneHandler.java
=====================================
@@ -39,6 +39,7 @@ import fr.ird.observe.navigation.tree.selection.IdState;
import fr.ird.observe.navigation.tree.selection.SelectionTree;
import fr.ird.observe.navigation.tree.selection.SelectionTreeModel;
import fr.ird.observe.navigation.tree.selection.SelectionTreeNode;
+import io.ultreia.java4all.i18n.I18n;
import io.ultreia.java4all.util.TwoSideContext;
import org.apache.logging.log4j.LogManager;
import org.apache.logging.log4j.Logger;
@@ -158,9 +159,11 @@ public class DataSelectionTreePaneHandler implements UIHandler<DataSelectionTree
}
public static void rebuildTree(DataSynchroModel stepModel, DataSelectionTreePane ui, boolean rebuildFlatModel) {
- ui.getTree().getTree().clearSelection();
- stepModel.rebuildSelectionModel(ui.getSide(), rebuildFlatModel);
- finalizeTree(ui);
+ stepModel.getActionExecutor().addAction(I18n.t("observe.ui.tree.reload"), ()-> {
+ ui.getTree().getTree().clearSelection();
+ stepModel.rebuildSelectionModel(ui.getSide(), rebuildFlatModel);
+ finalizeTree(ui);
+ });
}
public static void afterTreeBuild(DataSelectionTreePane ui) {
=====================================
client/datasource/actions/src/main/java/fr/ird/observe/client/datasource/actions/synchronize/data/tree/DataSelectionTreePaneModel.java
=====================================
@@ -98,6 +98,7 @@ public class DataSelectionTreePaneModel extends AbstractJavaBean {
* Can we delete from this side?
*/
private boolean canDelete;
+
public void dispose() {
source = null;
treeFlatModel = null;
@@ -178,7 +179,9 @@ public class DataSelectionTreePaneModel extends AbstractJavaBean {
public void rebuildSelectionModel(boolean rebuildFlatModel, List<IdAndLastUpdateDate> otherSideIds) {
if (rebuildFlatModel) {
- treeFlatModel = selectionDataModel.buildFlatModel(source.getNavigationService()::loadSelectionRoot);
+ try (ObserveSwingDataSource dataSource = ObserveSwingDataSource.doOpenSource(source)) {
+ treeFlatModel = selectionDataModel.buildFlatModel(dataSource.getNavigationService()::loadSelectionRoot);
+ }
}
selectionDataModel.populate(treeFlatModel, r -> {
computeDataIds(r);
=====================================
core/persistence/java/src/main/resources/META-INF/persistence/Observe/TopiaEntitySqlScriptModel.json
=====================================
@@ -1116,7 +1116,8 @@
"UPDATE ps_common.trip SET captain = '%3$s', topiaVersion = topiaVersion + 1, lastUpdateDate = '%1$s'::timestamp WHERE captain = '%2$s';",
"UPDATE ps_common.trip SET observationsDataEntryOperator = '%3$s', topiaVersion = topiaVersion + 1, lastUpdateDate = '%1$s'::timestamp WHERE observationsDataEntryOperator = '%2$s';",
"UPDATE ps_common.trip SET logbookDataEntryOperator = '%3$s', topiaVersion = topiaVersion + 1, lastUpdateDate = '%1$s'::timestamp WHERE logbookDataEntryOperator = '%2$s';",
- "UPDATE ps_logbook.sample_person SET person = '%3$s' WHERE person = '%2$s';"
+ "UPDATE ps_logbook.sample_person SET person = '%3$s' WHERE person = '%2$s' AND (SELECT COUNT(s.person) FROM ps_logbook.sample_person s WHERE s.person = '%3$s') = 0;",
+ "DELETE FROM ps_logbook.sample_person WHERE person = '%2$s';"
],
"org.nuiton.topia.service.sql.script.DeleteReferentialScript": [
"DELETE FROM common.person WHERE topiaId = '%1$s';"
@@ -1239,10 +1240,14 @@
"UPDATE ps_localmarket.batch SET species = '%3$s', topiaVersion = topiaVersion + 1, lastUpdateDate = '%1$s'::timestamp WHERE species = '%2$s';",
"UPDATE ps_localmarket.surveyPart SET species = '%3$s', topiaVersion = topiaVersion + 1, lastUpdateDate = '%1$s'::timestamp WHERE species = '%2$s';",
"UPDATE ps_localmarket.sampleSpecies SET species = '%3$s', topiaVersion = topiaVersion + 1, lastUpdateDate = '%1$s'::timestamp WHERE species = '%2$s';",
- "UPDATE ll_common.trip_species SET species = '%3$s' WHERE species = '%2$s';",
- "UPDATE ll_observation.catch_predator SET species = '%3$s' WHERE species = '%2$s';",
- "UPDATE ll_observation.tdr_species SET species = '%3$s' WHERE species = '%2$s';",
- "UPDATE ll_logbook.catch_predator SET species = '%3$s' WHERE species = '%2$s';"
+ "UPDATE ll_common.trip_species SET species = '%3$s' WHERE species = '%2$s' AND (SELECT COUNT(s.species) FROM ll_common.trip_species s WHERE s.species = '%3$s') = 0;",
+ "DELETE FROM ll_common.trip_species WHERE species = '%2$s';",
+ "UPDATE ll_observation.catch_predator SET species = '%3$s' WHERE species = '%2$s' AND (SELECT COUNT(s.species) FROM ll_observation.catch_predator s WHERE s.species = '%3$s') = 0;",
+ "DELETE FROM ll_observation.catch_predator WHERE species = '%2$s';",
+ "UPDATE ll_observation.tdr_species SET species = '%3$s' WHERE species = '%2$s' AND (SELECT COUNT(s.species) FROM ll_observation.tdr_species s WHERE s.species = '%3$s') = 0;",
+ "DELETE FROM ll_observation.tdr_species WHERE species = '%2$s';",
+ "UPDATE ll_logbook.catch_predator SET species = '%3$s' WHERE species = '%2$s' AND (SELECT COUNT(s.species) FROM ll_logbook.catch_predator s WHERE s.species = '%3$s') = 0;",
+ "DELETE FROM ll_logbook.catch_predator WHERE species = '%2$s';"
],
"org.nuiton.topia.service.sql.script.ReplaceReferentialInReferentialScript": [
"UPDATE ps_common.weightCategory SET species = '%3$s', topiaVersion = topiaVersion + 1, lastUpdateDate = '%1$s'::timestamp WHERE species = '%2$s';",
@@ -1615,8 +1620,10 @@
"UPDATE common.lastUpdateDate SET lastUpdateDate = '%1$s'::timestamp WHERE type ='fr.ird.observe.entities.referential.ll.common.MitigationType';"
],
"org.nuiton.topia.service.sql.script.ReplaceReferentialInDataScript": [
- "UPDATE ll_observation.set_mitigationType SET mitigationType = '%3$s' WHERE mitigationType = '%2$s';",
- "UPDATE ll_logbook.set_mitigationType SET mitigationType = '%3$s' WHERE mitigationType = '%2$s';"
+ "UPDATE ll_observation.set_mitigationType SET mitigationType = '%3$s' WHERE mitigationType = '%2$s' AND (SELECT COUNT(s.mitigationType) FROM ll_observation.set_mitigationType s WHERE s.mitigationType = '%3$s') = 0;",
+ "DELETE FROM ll_observation.set_mitigationType WHERE mitigationType = '%2$s';",
+ "UPDATE ll_logbook.set_mitigationType SET mitigationType = '%3$s' WHERE mitigationType = '%2$s' AND (SELECT COUNT(s.mitigationType) FROM ll_logbook.set_mitigationType s WHERE s.mitigationType = '%3$s') = 0;",
+ "DELETE FROM ll_logbook.set_mitigationType WHERE mitigationType = '%2$s';"
],
"org.nuiton.topia.service.sql.script.DeleteReferentialScript": [
"DELETE FROM ll_common.mitigationType WHERE topiaId = '%1$s';"
@@ -2043,8 +2050,10 @@
"UPDATE common.lastUpdateDate SET lastUpdateDate = '%1$s'::timestamp WHERE type ='fr.ird.observe.entities.referential.ps.common.ObservedSystem';"
],
"org.nuiton.topia.service.sql.script.ReplaceReferentialInDataScript": [
- "UPDATE ps_observation.activity_observedSystem SET observedSystem = '%3$s' WHERE observedSystem = '%2$s';",
- "UPDATE ps_logbook.activity_observedSystem SET observedSystem = '%3$s' WHERE observedSystem = '%2$s';"
+ "UPDATE ps_observation.activity_observedSystem SET observedSystem = '%3$s' WHERE observedSystem = '%2$s' AND (SELECT COUNT(s.observedSystem) FROM ps_observation.activity_observedSystem s WHERE s.observedSystem = '%3$s') = 0;",
+ "DELETE FROM ps_observation.activity_observedSystem WHERE observedSystem = '%2$s';",
+ "UPDATE ps_logbook.activity_observedSystem SET observedSystem = '%3$s' WHERE observedSystem = '%2$s' AND (SELECT COUNT(s.observedSystem) FROM ps_logbook.activity_observedSystem s WHERE s.observedSystem = '%3$s') = 0;",
+ "DELETE FROM ps_logbook.activity_observedSystem WHERE observedSystem = '%2$s';"
],
"org.nuiton.topia.service.sql.script.DeleteReferentialScript": [
"DELETE FROM ps_common.observedSystem WHERE topiaId = '%1$s';"
=====================================
core/persistence/test/src/test/java/fr/ird/observe/persistence/avdth/data/AvdthDataBuilderTestSupport.java
=====================================
@@ -127,6 +127,7 @@ public abstract class AvdthDataBuilderTestSupport extends PersistenceTestSupport
public void build() throws SQLException, IOException, MissingReferentialException {
log.info(String.format("Start for database: %s", dbName));
Path avdthFile = getRootPath().resolve(dbName);
+ Assume.assumeTrue("Skip, avdth file " + avdthFile + " not found", Files.exists(avdthFile));
Path scriptPath = TOPIA_TEST_CLASS_RESOURCE.getTestDirectory().toPath().resolve("export-" + dbName.replace(".mdb", ".sql"));
Path scriptTemporaryDirectory = scriptPath.getParent().resolve(scriptPath.toFile().getName().replace(".sql", "-tmp"));
=====================================
core/persistence/test/src/test/java/fr/ird/observe/persistence/avdth/referential/AvdthReferentialBuilderTest.java
=====================================
@@ -39,10 +39,12 @@ import fr.ird.observe.test.spi.DatabaseNameConfiguration;
import fr.ird.observe.test.spi.DatabasePasswordConfiguration;
import fr.ird.observe.test.spi.DatabaseVersionConfiguration;
import org.junit.Assert;
+import org.junit.Assume;
import org.junit.ClassRule;
import org.junit.Test;
import java.io.IOException;
+import java.nio.file.Files;
import java.nio.file.Path;
import java.sql.Connection;
import java.sql.SQLException;
@@ -74,6 +76,7 @@ public class AvdthReferentialBuilderTest extends TestSupportWithConfig {
Path avdthFile = AvdthFixtures.getAvdthCachePath()
.resolve("OA")
.resolve("OA_2020_V35.mdb");
+ Assume.assumeTrue("Skip, avdth file " + avdthFile + " not found", Files.exists(avdthFile));
Path scriptPath = localTestMethodResource.getTestDirectory().toPath().resolve("export-" + avdthFile.toFile().getName().replace(".mdb", ".sql"));
Path scriptTemporaryDirectory = scriptPath.getParent().resolve(scriptPath.toFile().getName().replace(".sql", "-tmp"));
=====================================
core/persistence/test/src/test/java/fr/ird/observe/persistence/avdth/referential/AvdthWeightCategoryBuilderTest.java
=====================================
@@ -38,10 +38,12 @@ import fr.ird.observe.test.spi.DatabaseNameConfiguration;
import fr.ird.observe.test.spi.DatabasePasswordConfiguration;
import fr.ird.observe.test.spi.DatabaseVersionConfiguration;
import org.junit.Assert;
+import org.junit.Assume;
import org.junit.ClassRule;
import org.junit.Test;
import java.io.IOException;
+import java.nio.file.Files;
import java.nio.file.Path;
import java.sql.Connection;
import java.sql.SQLException;
@@ -70,6 +72,7 @@ public class AvdthWeightCategoryBuilderTest extends TestSupportWithConfig {
public void build() throws SQLException, IOException {
Path avdthFile = AvdthFixtures.getAvdthCachePath()
.resolve("avdth-gen-35_74.mdb");
+ Assume.assumeTrue("Skip, avdth file " + avdthFile + " not found", Files.exists(avdthFile));
Path scriptPath = localTestMethodResource.getTestDirectory().toPath().resolve("export-" + avdthFile.toFile().getName().replace(".mdb", ".sql"));
Path scriptTemporaryDirectory = scriptPath.getParent().resolve(scriptPath.toFile().getName().replace(".sql", "-tmp"));
=====================================
toolkit/templates/src/main/java/fr/ird/observe/toolkit/templates/entity/ReplaceReferentialScriptGenerator.java
=====================================
@@ -22,6 +22,7 @@ package fr.ird.observe.toolkit.templates.entity;
* #L%
*/
+import fr.ird.observe.spi.referential.SqlStatements;
import org.nuiton.topia.service.sql.metadata.TopiaMetadataAssociation;
import org.nuiton.topia.service.sql.metadata.TopiaMetadataComposition;
import org.nuiton.topia.service.sql.metadata.TopiaMetadataEntity;
@@ -55,11 +56,11 @@ public class ReplaceReferentialScriptGenerator {
/**
* To update a reference of a composition relation.
*/
- public static final String COMPOSITION_UPDATE_STATEMENT = "UPDATE %s.%s SET %s = '%s', topiaVersion = topiaVersion + 1, lastUpdateDate = '%s'::timestamp WHERE %s = '%s';";
+ public static final String COMPOSITION_UPDATE_STATEMENT = "UPDATE %1$s.%2$s SET %3$s = '%4$s', topiaVersion = topiaVersion + 1, lastUpdateDate = '%5$s'::timestamp WHERE %3$s = '%6$s';";
/**
* To update a reference of an association relation.
*/
- private static final String ASSOCIATION_UPDATE_STATEMENT = "UPDATE %s.%s SET %s = '%s' WHERE %s = '%s';";
+ private static final String ASSOCIATION_UPDATE_STATEMENT = "UPDATE %1$s.%2$s SET %3$s = '%4$s' WHERE %3$s = '%5$s' AND (SELECT COUNT(s.%3$s) FROM %1$s.%2$s s WHERE s.%3$s = '%4$s') = 0;";
/**
* All reverse relation many-to-one.
*/
@@ -96,6 +97,8 @@ public class ReplaceReferentialScriptGenerator {
}
String sql = generateAssociationUpdateStatement(replacementStruct, sourceId, replacementId);
builder.add(sql);
+ sql = generateAssociationDeleteStatement(replacementStruct, sourceId);
+ builder.add(sql);
}
return builder;
}
@@ -107,7 +110,6 @@ public class ReplaceReferentialScriptGenerator {
composition.getTargetDbName(),
replacementId,
lastUpdateDate,
- composition.getTargetDbName(),
sourceId);
}
@@ -117,7 +119,14 @@ public class ReplaceReferentialScriptGenerator {
association.getTableName(),
association.getTargetDbName(),
replacementId,
- association.getTargetDbName(),
sourceId);
}
+
+ private String generateAssociationDeleteStatement(TopiaMetadataAssociation association, String sourceId) {
+ return String.format(SqlStatements.ASSOCIATION_DELETE_STATEMENT,
+ association.getOwner().getDbSchemaName(),
+ association.getTableName(),
+ association.getTargetDbName(),
+ sourceId).trim();
+ }
}
=====================================
toolkit/test-api/src/main/java/fr/ird/observe/test/ObserveTestConfiguration.java
=====================================
@@ -33,10 +33,12 @@ import fr.ird.observe.test.spi.DatabaseVersionConfiguration;
import io.ultreia.java4all.util.Version;
import io.ultreia.java4all.util.sql.conf.JdbcConfiguration;
import io.ultreia.java4all.util.sql.conf.JdbcConfigurationBuilder;
+import org.junit.Assume;
import java.lang.reflect.AnnotatedElement;
import java.net.MalformedURLException;
import java.net.URL;
+import java.nio.file.Files;
import java.nio.file.Path;
/**
@@ -155,6 +157,7 @@ public class ObserveTestConfiguration {
public static void injectCredentials() {
Path credentialPath = Path.of(ObserveTestConfiguration.getTestPropertyAsString(ToolkitFixtures.TEST_CREDENTIALS_KEY));
+ Assume.assumeTrue("Skip, no credential file found", Files.exists(credentialPath));
ToolkitFixtures.injectCredentials(credentialPath,
ObserveTestConfiguration.PG_URL,
ObserveTestConfiguration.PG_LOGIN,
View it on GitLab: https://gitlab.com/ultreiaio/ird-observe/-/compare/24056b129bbe3bbb0b4e916d…
--
View it on GitLab: https://gitlab.com/ultreiaio/ird-observe/-/compare/24056b129bbe3bbb0b4e916d…
You're receiving this email because of your account on gitlab.com.
1
0
[Git][ultreiaio/ird-observe][develop] Amélioration du code de mise à jour sql pour les associations lors de...
by Tony CHEMIT (@tchemit) 25 Jun '24
by Tony CHEMIT (@tchemit) 25 Jun '24
25 Jun '24
Tony CHEMIT pushed to branch develop at ultreiaio / ird-observe
Commits:
24056b12 by Tony Chemit at 2024-06-25T17:12:09+02:00
Amélioration du code de mise à jour sql pour les associations lors de remplacement de référentiel - Closes #2899
- - - - -
2 changed files:
- core/persistence/java/src/main/resources/META-INF/persistence/Observe/TopiaEntitySqlScriptModel.json
- toolkit/templates/src/main/java/fr/ird/observe/toolkit/templates/entity/ReplaceReferentialScriptGenerator.java
Changes:
=====================================
core/persistence/java/src/main/resources/META-INF/persistence/Observe/TopiaEntitySqlScriptModel.json
=====================================
@@ -1116,7 +1116,8 @@
"UPDATE ps_common.trip SET captain = '%3$s', topiaVersion = topiaVersion + 1, lastUpdateDate = '%1$s'::timestamp WHERE captain = '%2$s';",
"UPDATE ps_common.trip SET observationsDataEntryOperator = '%3$s', topiaVersion = topiaVersion + 1, lastUpdateDate = '%1$s'::timestamp WHERE observationsDataEntryOperator = '%2$s';",
"UPDATE ps_common.trip SET logbookDataEntryOperator = '%3$s', topiaVersion = topiaVersion + 1, lastUpdateDate = '%1$s'::timestamp WHERE logbookDataEntryOperator = '%2$s';",
- "UPDATE ps_logbook.sample_person SET person = '%3$s' WHERE person = '%2$s';"
+ "UPDATE ps_logbook.sample_person SET person = '%3$s' WHERE person = '%2$s' AND (SELECT COUNT(s.person) FROM ps_logbook.sample_person s WHERE s.person = '%3$s') = 0;",
+ "DELETE FROM ps_logbook.sample_person WHERE person = '%2$s';"
],
"org.nuiton.topia.service.sql.script.DeleteReferentialScript": [
"DELETE FROM common.person WHERE topiaId = '%1$s';"
@@ -1239,10 +1240,14 @@
"UPDATE ps_localmarket.batch SET species = '%3$s', topiaVersion = topiaVersion + 1, lastUpdateDate = '%1$s'::timestamp WHERE species = '%2$s';",
"UPDATE ps_localmarket.surveyPart SET species = '%3$s', topiaVersion = topiaVersion + 1, lastUpdateDate = '%1$s'::timestamp WHERE species = '%2$s';",
"UPDATE ps_localmarket.sampleSpecies SET species = '%3$s', topiaVersion = topiaVersion + 1, lastUpdateDate = '%1$s'::timestamp WHERE species = '%2$s';",
- "UPDATE ll_common.trip_species SET species = '%3$s' WHERE species = '%2$s';",
- "UPDATE ll_observation.catch_predator SET species = '%3$s' WHERE species = '%2$s';",
- "UPDATE ll_observation.tdr_species SET species = '%3$s' WHERE species = '%2$s';",
- "UPDATE ll_logbook.catch_predator SET species = '%3$s' WHERE species = '%2$s';"
+ "UPDATE ll_common.trip_species SET species = '%3$s' WHERE species = '%2$s' AND (SELECT COUNT(s.species) FROM ll_common.trip_species s WHERE s.species = '%3$s') = 0;",
+ "DELETE FROM ll_common.trip_species WHERE species = '%2$s';",
+ "UPDATE ll_observation.catch_predator SET species = '%3$s' WHERE species = '%2$s' AND (SELECT COUNT(s.species) FROM ll_observation.catch_predator s WHERE s.species = '%3$s') = 0;",
+ "DELETE FROM ll_observation.catch_predator WHERE species = '%2$s';",
+ "UPDATE ll_observation.tdr_species SET species = '%3$s' WHERE species = '%2$s' AND (SELECT COUNT(s.species) FROM ll_observation.tdr_species s WHERE s.species = '%3$s') = 0;",
+ "DELETE FROM ll_observation.tdr_species WHERE species = '%2$s';",
+ "UPDATE ll_logbook.catch_predator SET species = '%3$s' WHERE species = '%2$s' AND (SELECT COUNT(s.species) FROM ll_logbook.catch_predator s WHERE s.species = '%3$s') = 0;",
+ "DELETE FROM ll_logbook.catch_predator WHERE species = '%2$s';"
],
"org.nuiton.topia.service.sql.script.ReplaceReferentialInReferentialScript": [
"UPDATE ps_common.weightCategory SET species = '%3$s', topiaVersion = topiaVersion + 1, lastUpdateDate = '%1$s'::timestamp WHERE species = '%2$s';",
@@ -1615,8 +1620,10 @@
"UPDATE common.lastUpdateDate SET lastUpdateDate = '%1$s'::timestamp WHERE type ='fr.ird.observe.entities.referential.ll.common.MitigationType';"
],
"org.nuiton.topia.service.sql.script.ReplaceReferentialInDataScript": [
- "UPDATE ll_observation.set_mitigationType SET mitigationType = '%3$s' WHERE mitigationType = '%2$s';",
- "UPDATE ll_logbook.set_mitigationType SET mitigationType = '%3$s' WHERE mitigationType = '%2$s';"
+ "UPDATE ll_observation.set_mitigationType SET mitigationType = '%3$s' WHERE mitigationType = '%2$s' AND (SELECT COUNT(s.mitigationType) FROM ll_observation.set_mitigationType s WHERE s.mitigationType = '%3$s') = 0;",
+ "DELETE FROM ll_observation.set_mitigationType WHERE mitigationType = '%2$s';",
+ "UPDATE ll_logbook.set_mitigationType SET mitigationType = '%3$s' WHERE mitigationType = '%2$s' AND (SELECT COUNT(s.mitigationType) FROM ll_logbook.set_mitigationType s WHERE s.mitigationType = '%3$s') = 0;",
+ "DELETE FROM ll_logbook.set_mitigationType WHERE mitigationType = '%2$s';"
],
"org.nuiton.topia.service.sql.script.DeleteReferentialScript": [
"DELETE FROM ll_common.mitigationType WHERE topiaId = '%1$s';"
@@ -2043,8 +2050,10 @@
"UPDATE common.lastUpdateDate SET lastUpdateDate = '%1$s'::timestamp WHERE type ='fr.ird.observe.entities.referential.ps.common.ObservedSystem';"
],
"org.nuiton.topia.service.sql.script.ReplaceReferentialInDataScript": [
- "UPDATE ps_observation.activity_observedSystem SET observedSystem = '%3$s' WHERE observedSystem = '%2$s';",
- "UPDATE ps_logbook.activity_observedSystem SET observedSystem = '%3$s' WHERE observedSystem = '%2$s';"
+ "UPDATE ps_observation.activity_observedSystem SET observedSystem = '%3$s' WHERE observedSystem = '%2$s' AND (SELECT COUNT(s.observedSystem) FROM ps_observation.activity_observedSystem s WHERE s.observedSystem = '%3$s') = 0;",
+ "DELETE FROM ps_observation.activity_observedSystem WHERE observedSystem = '%2$s';",
+ "UPDATE ps_logbook.activity_observedSystem SET observedSystem = '%3$s' WHERE observedSystem = '%2$s' AND (SELECT COUNT(s.observedSystem) FROM ps_logbook.activity_observedSystem s WHERE s.observedSystem = '%3$s') = 0;",
+ "DELETE FROM ps_logbook.activity_observedSystem WHERE observedSystem = '%2$s';"
],
"org.nuiton.topia.service.sql.script.DeleteReferentialScript": [
"DELETE FROM ps_common.observedSystem WHERE topiaId = '%1$s';"
=====================================
toolkit/templates/src/main/java/fr/ird/observe/toolkit/templates/entity/ReplaceReferentialScriptGenerator.java
=====================================
@@ -22,6 +22,7 @@ package fr.ird.observe.toolkit.templates.entity;
* #L%
*/
+import fr.ird.observe.spi.referential.SqlStatements;
import org.nuiton.topia.service.sql.metadata.TopiaMetadataAssociation;
import org.nuiton.topia.service.sql.metadata.TopiaMetadataComposition;
import org.nuiton.topia.service.sql.metadata.TopiaMetadataEntity;
@@ -55,11 +56,11 @@ public class ReplaceReferentialScriptGenerator {
/**
* To update a reference of a composition relation.
*/
- public static final String COMPOSITION_UPDATE_STATEMENT = "UPDATE %s.%s SET %s = '%s', topiaVersion = topiaVersion + 1, lastUpdateDate = '%s'::timestamp WHERE %s = '%s';";
+ public static final String COMPOSITION_UPDATE_STATEMENT = "UPDATE %1$s.%2$s SET %3$s = '%4$s', topiaVersion = topiaVersion + 1, lastUpdateDate = '%5$s'::timestamp WHERE %3$s = '%6$s';";
/**
* To update a reference of an association relation.
*/
- private static final String ASSOCIATION_UPDATE_STATEMENT = "UPDATE %s.%s SET %s = '%s' WHERE %s = '%s';";
+ private static final String ASSOCIATION_UPDATE_STATEMENT = "UPDATE %1$s.%2$s SET %3$s = '%4$s' WHERE %3$s = '%5$s' AND (SELECT COUNT(s.%3$s) FROM %1$s.%2$s s WHERE s.%3$s = '%4$s') = 0;";
/**
* All reverse relation many-to-one.
*/
@@ -96,6 +97,8 @@ public class ReplaceReferentialScriptGenerator {
}
String sql = generateAssociationUpdateStatement(replacementStruct, sourceId, replacementId);
builder.add(sql);
+ sql = generateAssociationDeleteStatement(replacementStruct, sourceId);
+ builder.add(sql);
}
return builder;
}
@@ -107,7 +110,6 @@ public class ReplaceReferentialScriptGenerator {
composition.getTargetDbName(),
replacementId,
lastUpdateDate,
- composition.getTargetDbName(),
sourceId);
}
@@ -117,7 +119,14 @@ public class ReplaceReferentialScriptGenerator {
association.getTableName(),
association.getTargetDbName(),
replacementId,
- association.getTargetDbName(),
sourceId);
}
+
+ private String generateAssociationDeleteStatement(TopiaMetadataAssociation association, String sourceId) {
+ return String.format(SqlStatements.ASSOCIATION_DELETE_STATEMENT,
+ association.getOwner().getDbSchemaName(),
+ association.getTableName(),
+ association.getTargetDbName(),
+ sourceId).trim();
+ }
}
View it on GitLab: https://gitlab.com/ultreiaio/ird-observe/-/commit/24056b129bbe3bbb0b4e916d3…
--
View it on GitLab: https://gitlab.com/ultreiaio/ird-observe/-/commit/24056b129bbe3bbb0b4e916d3…
You're receiving this email because of your account on gitlab.com.
1
0
[Git][ultreiaio/ird-observe][develop] En synchro avancée de données, la modification de la configuration des arbres...
by Tony CHEMIT (@tchemit) 25 Jun '24
by Tony CHEMIT (@tchemit) 25 Jun '24
25 Jun '24
Tony CHEMIT pushed to branch develop at ultreiaio / ird-observe
Commits:
0799f1e0 by Tony Chemit at 2024-06-25T16:42:29+02:00
En synchro avancée de données, la modification de la configuration des arbres de navigation ne fonctionne plus - Closes #2887
- - - - -
2 changed files:
- client/datasource/actions/src/main/java/fr/ird/observe/client/datasource/actions/synchronize/data/tree/DataSelectionTreePaneHandler.java
- client/datasource/actions/src/main/java/fr/ird/observe/client/datasource/actions/synchronize/data/tree/DataSelectionTreePaneModel.java
Changes:
=====================================
client/datasource/actions/src/main/java/fr/ird/observe/client/datasource/actions/synchronize/data/tree/DataSelectionTreePaneHandler.java
=====================================
@@ -39,6 +39,7 @@ import fr.ird.observe.navigation.tree.selection.IdState;
import fr.ird.observe.navigation.tree.selection.SelectionTree;
import fr.ird.observe.navigation.tree.selection.SelectionTreeModel;
import fr.ird.observe.navigation.tree.selection.SelectionTreeNode;
+import io.ultreia.java4all.i18n.I18n;
import io.ultreia.java4all.util.TwoSideContext;
import org.apache.logging.log4j.LogManager;
import org.apache.logging.log4j.Logger;
@@ -158,9 +159,11 @@ public class DataSelectionTreePaneHandler implements UIHandler<DataSelectionTree
}
public static void rebuildTree(DataSynchroModel stepModel, DataSelectionTreePane ui, boolean rebuildFlatModel) {
- ui.getTree().getTree().clearSelection();
- stepModel.rebuildSelectionModel(ui.getSide(), rebuildFlatModel);
- finalizeTree(ui);
+ stepModel.getActionExecutor().addAction(I18n.t("observe.ui.tree.reload"), ()-> {
+ ui.getTree().getTree().clearSelection();
+ stepModel.rebuildSelectionModel(ui.getSide(), rebuildFlatModel);
+ finalizeTree(ui);
+ });
}
public static void afterTreeBuild(DataSelectionTreePane ui) {
=====================================
client/datasource/actions/src/main/java/fr/ird/observe/client/datasource/actions/synchronize/data/tree/DataSelectionTreePaneModel.java
=====================================
@@ -98,6 +98,7 @@ public class DataSelectionTreePaneModel extends AbstractJavaBean {
* Can we delete from this side?
*/
private boolean canDelete;
+
public void dispose() {
source = null;
treeFlatModel = null;
@@ -178,7 +179,9 @@ public class DataSelectionTreePaneModel extends AbstractJavaBean {
public void rebuildSelectionModel(boolean rebuildFlatModel, List<IdAndLastUpdateDate> otherSideIds) {
if (rebuildFlatModel) {
- treeFlatModel = selectionDataModel.buildFlatModel(source.getNavigationService()::loadSelectionRoot);
+ try (ObserveSwingDataSource dataSource = ObserveSwingDataSource.doOpenSource(source)) {
+ treeFlatModel = selectionDataModel.buildFlatModel(dataSource.getNavigationService()::loadSelectionRoot);
+ }
}
selectionDataModel.populate(treeFlatModel, r -> {
computeDataIds(r);
View it on GitLab: https://gitlab.com/ultreiaio/ird-observe/-/commit/0799f1e016c58ae5be8f19c44…
--
View it on GitLab: https://gitlab.com/ultreiaio/ird-observe/-/commit/0799f1e016c58ae5be8f19c44…
You're receiving this email because of your account on gitlab.com.
1
0
[Git][ultreiaio/ird-observe][develop] En synchro avancée de données, la modification de la configuration des arbres...
by Tony CHEMIT (@tchemit) 25 Jun '24
by Tony CHEMIT (@tchemit) 25 Jun '24
25 Jun '24
Tony CHEMIT pushed to branch develop at ultreiaio / ird-observe
Commits:
ea74c316 by Tony Chemit at 2024-06-25T16:42:01+02:00
En synchro avancée de données, la modification de la configuration des arbres de navigation ne fonctionne plus - Closes #2887
- - - - -
1 changed file:
- client/datasource/actions/src/main/java/fr/ird/observe/client/datasource/actions/synchronize/data/tree/DataSelectionTreePaneModel.java
Changes:
=====================================
client/datasource/actions/src/main/java/fr/ird/observe/client/datasource/actions/synchronize/data/tree/DataSelectionTreePaneModel.java
=====================================
@@ -98,6 +98,7 @@ public class DataSelectionTreePaneModel extends AbstractJavaBean {
* Can we delete from this side?
*/
private boolean canDelete;
+
public void dispose() {
source = null;
treeFlatModel = null;
@@ -178,7 +179,9 @@ public class DataSelectionTreePaneModel extends AbstractJavaBean {
public void rebuildSelectionModel(boolean rebuildFlatModel, List<IdAndLastUpdateDate> otherSideIds) {
if (rebuildFlatModel) {
- treeFlatModel = selectionDataModel.buildFlatModel(source.getNavigationService()::loadSelectionRoot);
+ try (ObserveSwingDataSource dataSource = ObserveSwingDataSource.doOpenSource(source)) {
+ treeFlatModel = selectionDataModel.buildFlatModel(dataSource.getNavigationService()::loadSelectionRoot);
+ }
}
selectionDataModel.populate(treeFlatModel, r -> {
computeDataIds(r);
View it on GitLab: https://gitlab.com/ultreiaio/ird-observe/-/commit/ea74c31689aee33b1b006ee23…
--
View it on GitLab: https://gitlab.com/ultreiaio/ird-observe/-/commit/ea74c31689aee33b1b006ee23…
You're receiving this email because of your account on gitlab.com.
1
0
[Git][ultreiaio/ird-observe][develop] 8 commits: Permettre la sauvegarde de la source de données, si le droit en lecture de données est présent
by Tony CHEMIT (@tchemit) 25 Jun '24
by Tony CHEMIT (@tchemit) 25 Jun '24
25 Jun '24
Tony CHEMIT pushed to branch develop at ultreiaio / ird-observe
Commits:
eccb1224 by Tony Chemit at 2024-06-24T17:08:45+02:00
Permettre la sauvegarde de la source de données, si le droit en lecture de données est présent
- - - - -
8c2c4e3b by Tony Chemit at 2024-06-24T17:11:34+02:00
Amélioration des droits sur l'onglet de configuration de la synchronisation avancée de données
- - - - -
b391616f by Tony Chemit at 2024-06-24T17:11:57+02:00
Correction d'un traduction sur les droits nécessaires pour un appel service
- - - - -
21541a6a by Tony Chemit at 2024-06-24T17:12:45+02:00
Gestion plus fine des droits sur les actions copier/supprimer
- - - - -
c75875bc by Tony Chemit at 2024-06-25T12:57:30+02:00
Extraction du code pour gérer le mode de synchronisation et utilisation sur la synchronisation de référentiel
- - - - -
d98dfa59 by Tony Chemit at 2024-06-25T12:57:35+02:00
Mise en place du mode de synchronisation sur la synchronisation de données
- - - - -
25c1331f by Tony Chemit at 2024-06-25T16:22:39+02:00
Revue de la disposition des actions propre à chaque arbre de navigation pour les positionner au centre de l'écran (comme en synchronisation avancée de référentiels)
- - - - -
ffa96efa by Tony Chemit at 2024-06-25T16:23:09+02:00
Merge branch 'feature/issue_2888' into develop
En synchro avancée de données, amélioration de la gestion des droits des bases utilisées - Closes #2888
- - - - -
29 changed files:
- client/datasource/actions/src/main/i18n/getters/java-enumeration.getter
- 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/synchronize/SelectSynchronizeMode.java
- + client/datasource/actions/src/main/java/fr/ird/observe/client/datasource/actions/synchronize/SynchronizeConfigUI.java
- client/datasource/actions/src/main/java/fr/ird/observe/client/datasource/actions/synchronize/referential/ng/actions/SelectReferentialSynchronizeMode.java → client/datasource/actions/src/main/java/fr/ird/observe/client/datasource/actions/synchronize/SynchronizeConfigUI.jcss
- client/datasource/actions/src/main/java/fr/ird/observe/client/datasource/actions/synchronize/referential/ng/ReferentialSynchronizeMode.java → client/datasource/actions/src/main/java/fr/ird/observe/client/datasource/actions/synchronize/SynchronizeMode.java
- + client/datasource/actions/src/main/java/fr/ird/observe/client/datasource/actions/synchronize/SynchronizeModel.java
- + client/datasource/actions/src/main/java/fr/ird/observe/client/datasource/actions/synchronize/data/DataSynchroConfigUI.jaxx
- client/datasource/actions/src/main/java/fr/ird/observe/client/datasource/actions/synchronize/data/DataSynchroModel.java
- client/datasource/actions/src/main/java/fr/ird/observe/client/datasource/actions/synchronize/data/DataSynchroUIHandler.java
- client/datasource/actions/src/main/java/fr/ird/observe/client/datasource/actions/synchronize/data/actions/Start.java
- client/datasource/actions/src/main/java/fr/ird/observe/client/datasource/actions/synchronize/data/tree/DataSelectionTreePane.jaxx
- client/datasource/actions/src/main/java/fr/ird/observe/client/datasource/actions/synchronize/data/tree/DataSelectionTreePaneHandler.java
- client/datasource/actions/src/main/java/fr/ird/observe/client/datasource/actions/synchronize/data/tree/DataSelectionTreePaneModel.java
- client/datasource/actions/src/main/java/fr/ird/observe/client/datasource/actions/synchronize/referential/ng/ReferentialSynchroConfigUI.jaxx
- client/datasource/actions/src/main/java/fr/ird/observe/client/datasource/actions/synchronize/referential/ng/ReferentialSynchroConfigUI.jcss
- client/datasource/actions/src/main/java/fr/ird/observe/client/datasource/actions/synchronize/referential/ng/ReferentialSynchroModel.java
- client/datasource/actions/src/main/java/fr/ird/observe/client/datasource/actions/synchronize/referential/ng/ReferentialSynchroUIHandler.java
- client/datasource/actions/src/main/java/fr/ird/observe/client/datasource/actions/synchronize/referential/ng/actions/Start.java
- client/datasource/actions/src/main/java/fr/ird/observe/client/datasource/actions/synchronize/referential/ng/tree/ReferentialSelectionTreePaneHandler.java
- client/datasource/actions/src/main/java/fr/ird/observe/client/datasource/actions/synchronize/referential/ng/tree/ReferentialSynchronizeTreeModelsBuilder.java
- client/datasource/editor/api/src/main/i18n/getters/java.getter
- client/datasource/editor/api/src/main/java/fr/ird/observe/client/datasource/editor/api/navigation/actions/SaveStorageToFile.java
- client/datasource/editor/api/src/main/java/fr/ird/observe/client/datasource/editor/api/wizard/connexion/DataSourceSelectorModel.java
- 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-i18n/src/main/i18n/translations/toolkit-api-i18n_fr_FR.properties
Changes:
=====================================
client/datasource/actions/src/main/i18n/getters/java-enumeration.getter
=====================================
@@ -20,9 +20,9 @@ observe.constant.AdminStep.SYNCHRONIZE
observe.constant.AdminStep.SYNCHRONIZE.description
observe.constant.AdminStep.VALIDATE
observe.constant.AdminStep.VALIDATE.description
-observe.constant.ReferentialSynchronizeMode.BOTH
-observe.constant.ReferentialSynchronizeMode.FROM_LEFT_TO_RIGHT
-observe.constant.ReferentialSynchronizeMode.FROM_RIGHT_TO_LEFT
+observe.constant.SynchronizeMode.BOTH
+observe.constant.SynchronizeMode.FROM_LEFT_TO_RIGHT
+observe.constant.SynchronizeMode.FROM_RIGHT_TO_LEFT
observe.constant.ValidationModelMode.DATA
observe.constant.ValidationModelMode.DATA.description
observe.constant.ValidationModelMode.REFERENTIEL
=====================================
client/datasource/actions/src/main/i18n/getters/java.getter
=====================================
@@ -13,6 +13,7 @@ observe.ui.action.choose.export.csv.directory
observe.ui.action.choose.reportFile
observe.ui.action.close
observe.ui.action.close.synchro.tip
+observe.ui.action.config.export.required.read.data
observe.ui.action.config.export.required.write.data
observe.ui.action.config.left.datasource.required.write.data
observe.ui.action.configuration.tip
@@ -104,6 +105,7 @@ observe.ui.datasource.editor.actions.synchro.data.launch.operation
observe.ui.datasource.editor.actions.synchro.data.message.data.loaded
observe.ui.datasource.editor.actions.synchro.data.title
observe.ui.datasource.editor.actions.synchro.data.title.tip
+observe.ui.datasource.editor.actions.synchro.data.withMode
observe.ui.datasource.editor.actions.synchro.launch.operation
observe.ui.datasource.editor.actions.synchro.prepare.operation
observe.ui.datasource.editor.actions.synchro.referential
=====================================
client/datasource/actions/src/main/i18n/getters/jaxx.getter
=====================================
@@ -27,8 +27,8 @@ observe.ui.datasource.editor.actions.report.copy.row.headers.tip
observe.ui.datasource.editor.actions.report.select.file
observe.ui.datasource.editor.actions.report.select.file.tip
observe.ui.datasource.editor.actions.report.variables
+observe.ui.datasource.editor.actions.synchro.config.mode
observe.ui.datasource.editor.actions.synchro.data.actionsToPerform
-observe.ui.datasource.editor.actions.synchro.referential.config.mode
observe.ui.datasource.editor.actions.synchro.referential.obsolete.entities.list
observe.ui.datasource.editor.actions.synchro.referential.obsolete.entity.fix
observe.ui.datasource.editor.actions.synchro.referential.safe.entity.to.choose.label
=====================================
client/datasource/actions/src/main/java/fr/ird/observe/client/datasource/actions/synchronize/SelectSynchronizeMode.java
=====================================
@@ -0,0 +1,68 @@
+package fr.ird.observe.client.datasource.actions.synchronize;
+
+/*-
+ * #%L
+ * ObServe Client :: DataSource :: Actions
+ * %%
+ * Copyright (C) 2008 - 2024 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 org.nuiton.jaxx.runtime.swing.action.JAXXObjectActionSupport;
+
+import javax.swing.ActionMap;
+import javax.swing.InputMap;
+import javax.swing.JComponent;
+import java.awt.event.ActionEvent;
+
+/**
+ * To select synchronize mode on admin config ui.
+ * <p>
+ * Created at 25/06/2024.
+ *
+ * @author Tony Chemit - dev(a)tchemit.fr
+ * @since 9.3.6
+ */
+public class SelectSynchronizeMode extends JAXXObjectActionSupport<SynchronizeConfigUI> {
+
+ private final SynchronizeMode mode;
+
+ public SelectSynchronizeMode(SynchronizeMode mode) {
+ super(SelectSynchronizeMode.class.getName() + "#" + mode, mode.getLabel(), mode.getLabel(), mode.getIconName(), mode.getKeyStroke());
+ this.mode = mode;
+ }
+
+ @Override
+ protected InputMap getInputMap(SynchronizeConfigUI ui, int inputMapCondition) {
+ return ui.getInputMap(inputMapCondition);
+ }
+
+ @Override
+ protected int getInputMapCondition() {
+ return JComponent.WHEN_IN_FOCUSED_WINDOW;
+ }
+
+ @Override
+ protected ActionMap getActionMap(SynchronizeConfigUI ui) {
+ return ui.getActionMap();
+ }
+
+ @Override
+ protected void doActionPerformed(ActionEvent e, SynchronizeConfigUI ui) {
+ ui.getStepModel().setSynchronizeMode(mode);
+ }
+}
=====================================
client/datasource/actions/src/main/java/fr/ird/observe/client/datasource/actions/synchronize/SynchronizeConfigUI.java
=====================================
@@ -0,0 +1,108 @@
+package fr.ird.observe.client.datasource.actions.synchronize;
+
+/*-
+ * #%L
+ * ObServe Client :: DataSource :: Actions
+ * %%
+ * Copyright (C) 2008 - 2024 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.AdminUIModel;
+import fr.ird.observe.client.datasource.editor.api.wizard.connexion.DataSourceSelectorModel;
+import org.apache.logging.log4j.LogManager;
+import org.apache.logging.log4j.Logger;
+import org.nuiton.jaxx.runtime.JAXXObject;
+import org.nuiton.jaxx.runtime.swing.JAXXButtonGroup;
+
+import javax.swing.ActionMap;
+import javax.swing.InputMap;
+import javax.swing.JToggleButton;
+import java.util.EnumSet;
+
+/**
+ * Contract of admin config ui when using synchronize mode.
+ * <p>
+ * Created at 25/06/2024.
+ *
+ * @author Tony Chemit - dev(a)tchemit.fr
+ * @since 9.3.6
+ */
+public interface SynchronizeConfigUI extends JAXXObject {
+ Logger log = LogManager.getLogger(SynchronizeConfigUI.class);
+
+ JToggleButton getBOTH();
+
+ JToggleButton getFROM_LEFT_TO_RIGHT();
+
+ JToggleButton getFROM_RIGHT_TO_LEFT();
+
+ AdminUIModel getModel();
+
+ SynchronizeModel getStepModel();
+
+ JAXXButtonGroup getSynchronizeMode();
+
+ ActionMap getActionMap();
+
+ InputMap getInputMap(int condition);
+
+ default void updateSynchroModes() {
+ AdminUIModel model = getModel();
+ SynchronizeModel stepModel = getStepModel();
+ SynchronizeMode synchronizeMode = stepModel.getSynchronizeMode();
+ log.info(String.format("Will update synchro modes (previous value: %s)", synchronizeMode));
+ DataSourceSelectorModel leftSourceModel = model.getConfigModel().getLeftSourceModel();
+ if (!leftSourceModel.isInit()) {
+ return;
+ }
+ DataSourceSelectorModel rightSourceModel = model.getConfigModel().getRightSourceModel();
+ if (!rightSourceModel.isInit()) {
+ return;
+ }
+ boolean dataSourcesValid = leftSourceModel.validateExt() && rightSourceModel.validateExt();
+ boolean leftToRightEnabled = dataSourcesValid && stepModel.isCanWrite(rightSourceModel);
+ log.debug(String.format("Update synchro modes: leftToRight: %s", leftToRightEnabled));
+ boolean rightToLeftEnabled = dataSourcesValid && stepModel.isCanWrite(leftSourceModel);
+ log.debug(String.format("Update synchro modes: rightToLeft: %s", rightToLeftEnabled));
+ boolean bothEnabled = leftToRightEnabled && rightToLeftEnabled;
+ log.debug(String.format("Update synchro modes: both: %s", bothEnabled));
+ getFROM_LEFT_TO_RIGHT().setEnabled(leftToRightEnabled);
+ getFROM_RIGHT_TO_LEFT().setEnabled(rightToLeftEnabled);
+ getBOTH().setEnabled(bothEnabled);
+ EnumSet<SynchronizeMode> candidates = EnumSet.allOf(SynchronizeMode.class);
+ if (!leftToRightEnabled) {
+ candidates.remove(SynchronizeMode.FROM_LEFT_TO_RIGHT);
+ }
+ if (!rightToLeftEnabled) {
+ candidates.remove(SynchronizeMode.FROM_RIGHT_TO_LEFT);
+ }
+ if (!bothEnabled) {
+ candidates.remove(SynchronizeMode.BOTH);
+ }
+ if (!candidates.contains(synchronizeMode)) {
+ if (candidates.isEmpty()) {
+ synchronizeMode = null;
+ } else {
+ synchronizeMode = candidates.iterator().next();
+ }
+ }
+ log.info(String.format("Will update synchro modes (new value: %s)", synchronizeMode));
+ stepModel.setSynchronizeMode(null);
+ stepModel.setSynchronizeMode(synchronizeMode);
+ }
+}
=====================================
client/datasource/actions/src/main/java/fr/ird/observe/client/datasource/actions/synchronize/referential/ng/actions/SelectReferentialSynchronizeMode.java → client/datasource/actions/src/main/java/fr/ird/observe/client/datasource/actions/synchronize/SynchronizeConfigUI.jcss
=====================================
@@ -1,6 +1,4 @@
-package fr.ird.observe.client.datasource.actions.synchronize.referential.ng.actions;
-
-/*-
+/*
* #%L
* ObServe Client :: DataSource :: Actions
* %%
@@ -22,23 +20,19 @@ package fr.ird.observe.client.datasource.actions.synchronize.referential.ng.acti
* #L%
*/
-import fr.ird.observe.client.datasource.actions.synchronize.referential.ng.ReferentialSynchroConfigUI;
-import fr.ird.observe.client.datasource.actions.synchronize.referential.ng.ReferentialSynchronizeMode;
-import org.nuiton.jaxx.runtime.swing.action.JComponentActionSupport;
-
-import java.awt.event.ActionEvent;
-
-public class SelectReferentialSynchronizeMode extends JComponentActionSupport<ReferentialSynchroConfigUI> {
-
- private final ReferentialSynchronizeMode mode;
+#synchronizeConfigPanel {
+ border:{new TitledBorder(t("observe.ui.datasource.editor.actions.synchro.config.mode") + "")};
+}
- public SelectReferentialSynchronizeMode(ReferentialSynchronizeMode mode) {
- super(SelectReferentialSynchronizeMode.class.getName() + "#" + mode, mode.getLabel(), mode.getLabel(), mode.getIconName(), mode.getKeyStroke());
- this.mode = mode;
- }
+#synchronizeMode {
+ selectedValue:{stepModel.getSynchronizeMode()};
+}
- @Override
- protected void doActionPerformed(ActionEvent e, ReferentialSynchroConfigUI ui) {
- ui.getStepModel().setSynchronizeMode(mode);
- }
+.synchronizeMode {
+ buttonGroup:"synchronizeMode";
+ enabled:false;
+ selected:{java.util.Objects.equals(fr.ird.observe.client.datasource.actions.synchronize.SynchronizeMode.%%, stepModel.getSynchronizeMode())};
+ value:{fr.ird.observe.client.datasource.actions.synchronize.SynchronizeMode.%%};
+ action:{new fr.ird.observe.client.datasource.actions.synchronize.SelectSynchronizeMode(fr.ird.observe.client.datasource.actions.synchronize.SynchronizeMode.%%)};
}
+
=====================================
client/datasource/actions/src/main/java/fr/ird/observe/client/datasource/actions/synchronize/referential/ng/ReferentialSynchronizeMode.java → client/datasource/actions/src/main/java/fr/ird/observe/client/datasource/actions/synchronize/SynchronizeMode.java
=====================================
@@ -1,4 +1,4 @@
-package fr.ird.observe.client.datasource.actions.synchronize.referential.ng;
+package fr.ird.observe.client.datasource.actions.synchronize;
/*-
* #%L
@@ -30,7 +30,7 @@ import io.ultreia.java4all.i18n.spi.enumeration.TranslateEnumeration;
import javax.swing.KeyStroke;
/**
- * Type de synchronisation de référentiel. Définit quelles bases sont en écriture.
+ * Synchronize mode, defines on which side we can write.
* <p>
* Created on 10/08/16.
*
@@ -38,8 +38,7 @@ import javax.swing.KeyStroke;
* @since 5.0
*/
@TranslateEnumeration(name = I18nDecoratorHelper.I18N_CONSTANT_LABEL, pattern = I18nDecoratorHelper.I18N_CONSTANT_LABEL_PATTERN)
-public enum ReferentialSynchronizeMode {
-
+public enum SynchronizeMode {
/**
* La base de gauche est en lecture, la base de droite est en écriture.
*/
@@ -52,7 +51,6 @@ public enum ReferentialSynchronizeMode {
* La base de gauche est en écriture, la base de droite est en écriture.
*/
BOTH(true, true, "copyToBoth");
-
/**
* Est ce que la source de gauche est en écriture ?
*/
@@ -66,7 +64,7 @@ public enum ReferentialSynchronizeMode {
private final String iconName;
- ReferentialSynchronizeMode(boolean leftWrite, boolean rightWrite, String iconName) {
+ SynchronizeMode(boolean leftWrite, boolean rightWrite, String iconName) {
this.leftWrite = leftWrite;
this.rightWrite = rightWrite;
this.keyStroke = ObserveKeyStrokesSupport.getFunctionKeyStroke(ordinal() + 1);
@@ -90,6 +88,6 @@ public enum ReferentialSynchronizeMode {
}
public String getLabel() {
- return ReferentialSynchronizeModeI18n.getLabel(this);
+ return SynchronizeModeI18n.getLabel(this);
}
}
=====================================
client/datasource/actions/src/main/java/fr/ird/observe/client/datasource/actions/synchronize/SynchronizeModel.java
=====================================
@@ -0,0 +1,73 @@
+package fr.ird.observe.client.datasource.actions.synchronize;
+
+/*-
+ * #%L
+ * ObServe Client :: DataSource :: Actions
+ * %%
+ * Copyright (C) 2008 - 2024 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.AdminActionModel;
+import fr.ird.observe.client.datasource.actions.AdminUI;
+import fr.ird.observe.client.datasource.actions.AdminUIModel;
+import fr.ird.observe.client.datasource.actions.synchronize.data.DataSynchroModel;
+import fr.ird.observe.client.datasource.editor.api.wizard.connexion.DataSourceSelectorModel;
+import io.ultreia.java4all.bean.JavaBean;
+
+/**
+ * Contract of {@link AdminActionModel} model when using synchronize mode.
+ * <p>
+ * Created at 25/06/2024.
+ *
+ * @author Tony Chemit - dev(a)tchemit.fr
+ * @since 9.3.6
+ */
+public interface SynchronizeModel extends JavaBean {
+
+ String SYNCHRONIZE_MODE_PROPERTY_NAME = "synchronizeMode";
+
+ SynchronizeMode getSynchronizeMode();
+
+ void setSynchronizeMode(SynchronizeMode synchronizeMode);
+
+ default void start(AdminUIModel uiModel) {
+
+ addPropertyChangeListener(SYNCHRONIZE_MODE_PROPERTY_NAME, evt -> {
+ if (uiModel.isWasStarted()) {
+ // on ne propage plus rien (il n'y a plus de configuration possible...)
+ return;
+ }
+ uiModel.validate();
+ });
+
+ setSynchronizeMode(SynchronizeMode.FROM_LEFT_TO_RIGHT);
+ }
+
+ default void afterInit(AdminUI parentUI) {
+ addPropertyChangeListener(DataSynchroModel.SYNCHRONIZE_MODE_PROPERTY_NAME, evt -> {
+ SynchronizeMode newValue = (SynchronizeMode) evt.getNewValue();
+ if (parentUI.getTabs().getComponentCount() > 1 && newValue != null) {
+ parentUI.getTabs().setTitleAt(1, getTitleWithMode(newValue));
+ }
+ });
+ }
+
+ boolean isCanWrite(DataSourceSelectorModel dataSourceSelectorModel);
+
+ String getTitleWithMode(SynchronizeMode mode);
+}
=====================================
client/datasource/actions/src/main/java/fr/ird/observe/client/datasource/actions/synchronize/data/DataSynchroConfigUI.jaxx
=====================================
@@ -0,0 +1,50 @@
+<!--
+ #%L
+ ObServe Client :: DataSource :: Actions
+ %%
+ Copyright (C) 2008 - 2023 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%
+ -->
+<JPanel id="dataSynchronizeConfig" layout="{new BorderLayout()}" implements="fr.ird.observe.client.datasource.actions.synchronize.SynchronizeConfigUI">
+
+ <style source="../SynchronizeConfigUI.jcss"/>
+ <import>
+ fr.ird.observe.client.datasource.actions.AdminUIModel
+
+ io.ultreia.java4all.i18n.I18n
+
+ static io.ultreia.java4all.i18n.I18n.t
+ static fr.ird.observe.client.util.UIHelper.getStringValue
+ </import>
+
+ <DataSynchroUIHandler id='handler' initializer='getContextValue(DataSynchroUIHandler.class)'/>
+ <AdminUIModel id='model' initializer='getContextValue(AdminUIModel.class)'/>
+ <DataSynchroModel id='stepModel' initializer='model.getDataSynchroModel()'/>
+ <ButtonGroup id='synchronizeMode'/>
+
+ <script><![CDATA[
+public void destroy() {
+ model = null;
+ stepModel = null;
+}
+]]>
+ </script>
+
+ <JPanel id="synchronizeConfigPanel" constraints='BorderLayout.CENTER' layout='{new GridLayout(0, 1)}'>
+ <JToggleButton id="FROM_LEFT_TO_RIGHT" styleClass="synchronizeMode"/>
+ <JToggleButton id="FROM_RIGHT_TO_LEFT" styleClass="synchronizeMode"/>
+ <JToggleButton id="BOTH" styleClass="synchronizeMode"/>
+ </JPanel>
+</JPanel>
=====================================
client/datasource/actions/src/main/java/fr/ird/observe/client/datasource/actions/synchronize/data/DataSynchroModel.java
=====================================
@@ -25,11 +25,14 @@ package fr.ird.observe.client.datasource.actions.synchronize.data;
import fr.ird.observe.client.datasource.actions.AdminActionModel;
import fr.ird.observe.client.datasource.actions.AdminStep;
import fr.ird.observe.client.datasource.actions.AdminUIModel;
+import fr.ird.observe.client.datasource.actions.synchronize.SynchronizeMode;
+import fr.ird.observe.client.datasource.actions.synchronize.SynchronizeModel;
import fr.ird.observe.client.datasource.actions.synchronize.data.tree.DataSelectionTreePaneModel;
import fr.ird.observe.client.datasource.api.data.DataTaskSupport;
import fr.ird.observe.client.datasource.api.data.TaskSide;
import fr.ird.observe.client.datasource.editor.api.wizard.connexion.DataSourceSelectorModel;
import fr.ird.observe.datasource.configuration.ObserveDataSourceInformation;
+import io.ultreia.java4all.i18n.I18n;
import io.ultreia.java4all.util.TwoSideContext;
import org.apache.logging.log4j.LogManager;
import org.apache.logging.log4j.Logger;
@@ -43,8 +46,7 @@ import javax.swing.DefaultListModel;
* @author Tony Chemit - dev(a)tchemit.fr
* @since 5.0
*/
-public class DataSynchroModel extends AdminActionModel implements TwoSideContext<TaskSide, DataSelectionTreePaneModel> {
-
+public class DataSynchroModel extends AdminActionModel implements SynchronizeModel, TwoSideContext<TaskSide, DataSelectionTreePaneModel> {
public static final String LEFT_MODEL = "leftModel";
public static final String RIGHT_MODEL = "rightModel";
private static final String TASKS_EMPTY_PROPERTY_NAME = "tasksEmpty";
@@ -57,11 +59,14 @@ public class DataSynchroModel extends AdminActionModel implements TwoSideContext
* Right model.
*/
private final DataSelectionTreePaneModel rightModel = new DataSelectionTreePaneModel();
-
/**
* Registered tasks to apply.
*/
private final DefaultListModel<DataTaskSupport> tasks = new DefaultListModel<>();
+ /**
+ * Synchronize mode.
+ */
+ private SynchronizeMode synchronizeMode;
public DataSynchroModel() {
super(AdminStep.DATA_SYNCHRONIZE);
@@ -86,6 +91,29 @@ public class DataSynchroModel extends AdminActionModel implements TwoSideContext
rightSourceModel.setRequiredReadOnReferential(true);
rightSourceModel.setRequiredReadOnData(true);
fireTasksEmptyChanged();
+ SynchronizeModel.super.start(uiModel);
+ }
+
+ @Override
+ public boolean isCanWrite(DataSourceSelectorModel dataSourceSelectorModel) {
+ return dataSourceSelectorModel.isCanWriteData();
+ }
+
+ @Override
+ public String getTitleWithMode(SynchronizeMode mode) {
+ return I18n.t("observe.ui.datasource.editor.actions.synchro.data.withMode", mode.getLabel());
+ }
+
+ @Override
+ public SynchronizeMode getSynchronizeMode() {
+ return synchronizeMode;
+ }
+
+ @Override
+ public void setSynchronizeMode(SynchronizeMode synchronizeMode) {
+ Object oldValue = getSynchronizeMode();
+ this.synchronizeMode = synchronizeMode;
+ firePropertyChange(SYNCHRONIZE_MODE_PROPERTY_NAME, oldValue, synchronizeMode);
}
@Override
=====================================
client/datasource/actions/src/main/java/fr/ird/observe/client/datasource/actions/synchronize/data/DataSynchroUIHandler.java
=====================================
@@ -29,6 +29,7 @@ import fr.ird.observe.client.datasource.actions.synchronize.data.tree.DataSelect
import fr.ird.observe.client.datasource.api.data.TaskSide;
import fr.ird.observe.client.datasource.editor.api.selection.actions.SelectUnselectWithOpposite;
import fr.ird.observe.client.datasource.editor.api.wizard.StorageUIModel;
+import fr.ird.observe.client.util.UIHelper;
import fr.ird.observe.client.util.init.UIInitHelper;
import org.nuiton.jaxx.runtime.spi.UIHandler;
@@ -64,15 +65,21 @@ class DataSynchroUIHandler extends AdminTabUIHandler<DataSynchroUI> implements U
SelectUnselectWithOpposite.init(ui.getLeftTreePane().getTree(), null, new SelectUnselectWithOpposite(ui.getRightTreePane().getTree()));
JScrollPane descriptionPane = ui.getDescriptionPane();
descriptionPane.getParent().remove(descriptionPane);
-
hideFixedPanelLabel(ui);
+ ui.getStepModel().afterInit(parentUI);
}
@Override
protected void initConfig(ConfigUI configUI) {
+ configUI.getLeftSourceConfig().getSourceInfoLabel().setVisible(true);
configUI.getLeftSourceModel().setSourceLabel(t("observe.ui.datasource.storage.config.left.storage"));
+ configUI.getLeftSourceConfig().getSourceInfoLabel().setText(t("observe.ui.action.config.export.required.read.data"));
+ configUI.getRightSourceConfig().getSourceInfoLabel().setText(t("observe.ui.action.config.export.required.read.data"));
configUI.getRightSourceModel().setSourceLabel(t("observe.ui.datasource.storage.config.right.storage"));
+ DataSynchroConfigUI extraConfig = new DataSynchroConfigUI(UIHelper.initialContext(configUI, this));
+ configUI.getExtraConfig().add(extraConfig);
ConfigModel configModel = configUI.getStepModel();
+ configModel.addPropertyChangeListener(StorageUIModel.VALID_STEP_PROPERTY_NAME, evt -> extraConfig.updateSynchroModes());
configModel.addPropertyChangeListener(StorageUIModel.VALID_PROPERTY_NAME, evt -> getModel().validate());
}
=====================================
client/datasource/actions/src/main/java/fr/ird/observe/client/datasource/actions/synchronize/data/actions/Start.java
=====================================
@@ -72,12 +72,18 @@ public class Start extends DataSynchroUIActionSupport {
rightModel.setSource(rightSource);
DataSelectionTreePane leftTreePane = tabUI.getLeftTreePane();
- DataSelectionTreePaneHandler.initDatasource(configModel.getLeftSourceModel(), rightSource.getDataSourceInformation().canWriteData(), leftTreePane, leftModel.getIdStates());
+ boolean rightCanWrite = rightSource.getDataSourceInformation().canWriteData()
+ && configModel.getRightSourceModel().isCanWriteReferential()
+ && stepModel.getSynchronizeMode().isRightWrite();
+ DataSelectionTreePaneHandler.initDatasource(configModel.getLeftSourceModel(), rightCanWrite, stepModel.getSynchronizeMode().isLeftWrite(),leftTreePane, leftModel.getIdStates());
progressModel.increments();
sendMessage(t("observe.ui.datasource.editor.actions.synchro.data.message.data.loaded", leftSourceLabel));
DataSelectionTreePane rightTreePane = tabUI.getRightTreePane();
- DataSelectionTreePaneHandler.initDatasource(configModel.getRightSourceModel(), leftSource.getDataSourceInformation().canWriteData(), rightTreePane, rightModel.getIdStates());
+ boolean leftCanWrite = leftSource.getDataSourceInformation().canWriteData()
+ && configModel.getLeftSourceModel().isCanWriteReferential()
+ && stepModel.getSynchronizeMode().isLeftWrite();
+ DataSelectionTreePaneHandler.initDatasource(configModel.getRightSourceModel(), leftCanWrite, stepModel.getSynchronizeMode().isRightWrite(),rightTreePane, rightModel.getIdStates());
progressModel.increments();
sendMessage(t("observe.ui.datasource.editor.actions.synchro.data.message.data.loaded", rightSourceLabel));
=====================================
client/datasource/actions/src/main/java/fr/ird/observe/client/datasource/actions/synchronize/data/tree/DataSelectionTreePane.jaxx
=====================================
@@ -30,9 +30,10 @@
<JToggleButton id="toggleNewer"/>
<JToggleButton id="toggleOlder"/>
<JToggleButton id="toggleEquals"/>
- <JSeparator orientation='{JSeparator.VERTICAL}'/>
- <JButton id="copy" enabled="false"/>
- <JButton id="delete" enabled="false"/>
</JToolBar>
<SelectionTreePane id='tree' constructorParams="!side.onLeft()" constraints='BorderLayout.CENTER'/>
+ <JToolBar id="middleActions" layout="{new GridLayout(0, 1)}" constraints='BorderLayout.EAST'>
+ <JButton id="copy" enabled="false" visible="{model.isCanCopy()}"/>
+ <JButton id="delete" enabled="false" visible="{model.isCanDelete()}"/>
+ </JToolBar>
</JPanel>
=====================================
client/datasource/actions/src/main/java/fr/ird/observe/client/datasource/actions/synchronize/data/tree/DataSelectionTreePaneHandler.java
=====================================
@@ -49,6 +49,7 @@ import javax.swing.JPopupMenu;
import javax.swing.SwingUtilities;
import javax.swing.ToolTipManager;
import javax.swing.tree.TreePath;
+import java.awt.BorderLayout;
import java.awt.Color;
import java.awt.Component;
import java.awt.event.MouseAdapter;
@@ -63,9 +64,8 @@ import java.util.function.Consumer;
*/
public class DataSelectionTreePaneHandler implements UIHandler<DataSelectionTreePane> {
- private static final Logger log = LogManager.getLogger(DataSelectionTreePaneHandler.class);
-
public static final TwoSideContext<TaskSide, String> MODEL_NAMES = TwoSideContext.of(DataSynchroModel.LEFT_MODEL, DataSynchroModel.RIGHT_MODEL);
+ private static final Logger log = LogManager.getLogger(DataSelectionTreePaneHandler.class);
static DataSelectionTreePaneModel getModel(DataSelectionTreePane ui) {
return ui.getContextValue(DataSelectionTreePaneModel.class, MODEL_NAMES.onSameSide(ui.getSide()));
@@ -92,6 +92,11 @@ public class DataSelectionTreePaneHandler implements UIHandler<DataSelectionTree
for (Component component : ui.getToolbar().getComponents()) {
treePane.getToolbar().add(component);
}
+ boolean isLeft = taskSide.onLeft();
+ if (!isLeft) {
+ ui.remove(ui.getMiddleActions());
+ ui.add(ui.getMiddleActions(), BorderLayout.WEST);
+ }
Consumer<TreeConfigUI> consumer = TreeConfigUIHandler::hideOptions;
Consumer<TreeConfigUI> apply = u -> rebuildTree(parent.getModel().getDataSynchroModel(), ui, true);
@@ -104,14 +109,13 @@ public class DataSelectionTreePaneHandler implements UIHandler<DataSelectionTree
DataSelectionTreePaneModel model = ui.getModel();
model.setSelectionDataModel(treeModel);
// When model idStates has changed, rebuild the tree (but not the flat model)
- model.addPropertyChangeListener(DataSelectionTreePaneModel.ID_STATES_PROPERTY_NAME,
- evt -> DataSelectionTreePaneHandler.rebuildTree(parent.getStepModel(), ui, false));
+ model.addPropertyChangeListener(DataSelectionTreePaneModel.ID_STATES_PROPERTY_NAME, evt -> rebuildTree(parent.getStepModel(), ui, false));
// When tree model has changed, rebuild accessibility to copy and delete action
treeModel.addPropertyChangeListener(evt -> {
boolean withDataSelected = !treeModel.isSelectionEmpty();
- ui.getCopy().setEnabled(withDataSelected);
- ui.getDelete().setEnabled(withDataSelected);
+ ui.getCopy().setEnabled(ui.getModel().isCanCopy() && withDataSelected);
+ ui.getDelete().setEnabled(ui.getModel().isCanDelete() && withDataSelected);
});
// When use double clicks in tree, update selection state of the selected node
tree.addMouseListener(new MouseAdapter() {
@@ -131,15 +135,14 @@ public class DataSelectionTreePaneHandler implements UIHandler<DataSelectionTree
});
}
- public static void initDatasource(DataSourceSelectorModel sourceModel, boolean oppositeCanWriteData, DataSelectionTreePane ui, EnumSet<IdState> idStates) {
+ public static void initDatasource(DataSourceSelectorModel sourceModel, boolean oppositeCanWrite, boolean canWrite, DataSelectionTreePane ui, EnumSet<IdState> idStates) {
ui.setContextValue(sourceModel);
- boolean canWriteData = sourceModel.getDataSourceInformation().canWriteData();
+ boolean canWriteData = canWrite && sourceModel.isCanWriteData();
Color color = canWriteData ? Color.BLACK : Color.RED;
-
- ui.getDelete().setEnabled(canWriteData);
- ui.getCopy().setEnabled(oppositeCanWriteData);
+ ui.getModel().setCanCopy(oppositeCanWrite);
+ ui.getModel().setCanDelete(canWriteData);
ui.getToggleEquals().setSelected(idStates.contains(IdState.EQUALS));
ui.getToggleOlder().setSelected(idStates.contains(IdState.OBSOLETE));
ui.getToggleNewer().setSelected(idStates.contains(IdState.UPDATED));
@@ -180,5 +183,4 @@ public class DataSelectionTreePaneHandler implements UIHandler<DataSelectionTree
public void beforeInit(DataSelectionTreePane ui) {
ui.setComponentPopupMenu(new JPopupMenu());
}
-
}
=====================================
client/datasource/actions/src/main/java/fr/ird/observe/client/datasource/actions/synchronize/data/tree/DataSelectionTreePaneModel.java
=====================================
@@ -60,6 +60,8 @@ public class DataSelectionTreePaneModel extends AbstractJavaBean {
public static final String ID_STATES_PROPERTY_NAME = "idStates";
private static final Logger log = LogManager.getLogger(DataSelectionTreePaneModel.class);
private static final String SOURCE_PROPERTY_NAME = "source";
+ private static final String CAN_COPY_PROPERTY_NAME = "canCopy";
+ private static final String CAN_DELETE_PROPERTY_NAME = "canDelete";
/**
* Which id states we use in tree model.
*/
@@ -88,6 +90,14 @@ public class DataSelectionTreePaneModel extends AbstractJavaBean {
*/
private List<IdAndLastUpdateDate> dataIds = List.of();
+ /**
+ * Can we copy from this side?
+ */
+ private boolean canCopy;
+ /**
+ * Can we delete from this side?
+ */
+ private boolean canDelete;
public void dispose() {
source = null;
treeFlatModel = null;
@@ -104,6 +114,26 @@ public class DataSelectionTreePaneModel extends AbstractJavaBean {
firePropertyChange(SOURCE_PROPERTY_NAME, source);
}
+ public boolean isCanCopy() {
+ return canCopy;
+ }
+
+ public void setCanCopy(boolean canCopy) {
+ boolean oldValue = this.canCopy;
+ this.canCopy = canCopy;
+ firePropertyChange(CAN_COPY_PROPERTY_NAME, oldValue, canCopy);
+ }
+
+ public boolean isCanDelete() {
+ return canDelete;
+ }
+
+ public void setCanDelete(boolean canDelete) {
+ boolean oldValue = this.canDelete;
+ this.canDelete = canDelete;
+ firePropertyChange(CAN_DELETE_PROPERTY_NAME, oldValue, canDelete);
+ }
+
public SelectionTreeModel getSelectionDataModel() {
return selectionDataModel;
}
=====================================
client/datasource/actions/src/main/java/fr/ird/observe/client/datasource/actions/synchronize/referential/ng/ReferentialSynchroConfigUI.jaxx
=====================================
@@ -17,21 +17,14 @@
<http://www.gnu.org/licenses/gpl-3.0.html>.
#L%
-->
-<JPanel id="referentialSynchronizeConfig" layout="{new BorderLayout()}">
+<JPanel id="referentialSynchronizeConfig" layout="{new BorderLayout()}" implements="fr.ird.observe.client.datasource.actions.synchronize.SynchronizeConfigUI">
+ <style source="../../SynchronizeConfigUI.jcss"/>
<import>
- fr.ird.observe.client.configuration.ClientConfig
- fr.ird.observe.client.datasource.actions.synchronize.referential.ng.ReferentialSynchronizeMode
- fr.ird.observe.client.datasource.actions.synchronize.referential.ng.actions.SelectReferentialSynchronizeMode
fr.ird.observe.client.datasource.actions.AdminUIModel
- org.nuiton.validator.NuitonValidatorScope
io.ultreia.java4all.i18n.I18n
- java.io.File
- java.util.Objects
- javax.swing.JComboBox
-
static io.ultreia.java4all.i18n.I18n.t
static fr.ird.observe.client.util.UIHelper.getStringValue
</import>
@@ -49,7 +42,7 @@ public void destroy() {
]]>
</script>
- <JPanel id="referentialSynchronizeConfigPanel" constraints='BorderLayout.CENTER' layout='{new GridLayout(0, 1)}'>
+ <JPanel id="synchronizeConfigPanel" constraints='BorderLayout.CENTER' layout='{new GridLayout(0, 1)}'>
<JToggleButton id="FROM_LEFT_TO_RIGHT" styleClass="synchronizeMode"/>
<JToggleButton id="FROM_RIGHT_TO_LEFT" styleClass="synchronizeMode"/>
<JToggleButton id="BOTH" styleClass="synchronizeMode"/>
@@ -57,8 +50,7 @@ public void destroy() {
<Table constraints='BorderLayout.SOUTH' weightx='1'>
<row>
<cell>
- <JCheckBox id='showProperties'
- onStateChanged='getStepModel().setShowProperties(((JCheckBox)event.getSource()).isSelected())'/>
+ <JCheckBox id='showProperties' onStateChanged='getStepModel().setShowProperties(((JCheckBox)event.getSource()).isSelected())'/>
</cell>
</row>
<row>
=====================================
client/datasource/actions/src/main/java/fr/ird/observe/client/datasource/actions/synchronize/referential/ng/ReferentialSynchroConfigUI.jcss
=====================================
@@ -20,22 +20,6 @@
* #L%
*/
-#referentialSynchronizeConfigPanel {
- border:{new TitledBorder(t("observe.ui.datasource.editor.actions.synchro.referential.config.mode") + "")};
-}
-
-#synchronizeMode {
- selectedValue:{stepModel.getSynchronizeMode()};
-}
-
-.synchronizeMode {
- buttonGroup:"synchronizeMode";
- enabled:false;
- selected:{Objects.equals(ReferentialSynchronizeMode.%%, stepModel.getSynchronizeMode())};
- value:{ReferentialSynchronizeMode.%%};
- action:{new SelectReferentialSynchronizeMode(ReferentialSynchronizeMode.%%)};
-}
-
#showProperties {
text:"observe.ui.action.show.properties";
toolTipText:"observe.ui.action.show.properties.tip";
=====================================
client/datasource/actions/src/main/java/fr/ird/observe/client/datasource/actions/synchronize/referential/ng/ReferentialSynchroModel.java
=====================================
@@ -27,6 +27,8 @@ import fr.ird.observe.client.datasource.actions.AdminActionModel;
import fr.ird.observe.client.datasource.actions.AdminStep;
import fr.ird.observe.client.datasource.actions.AdminUIModel;
import fr.ird.observe.client.datasource.actions.config.ConfigModel;
+import fr.ird.observe.client.datasource.actions.synchronize.SynchronizeMode;
+import fr.ird.observe.client.datasource.actions.synchronize.SynchronizeModel;
import fr.ird.observe.client.datasource.actions.synchronize.referential.ng.task.ReferentialSynchronizeTaskListModel;
import fr.ird.observe.client.datasource.actions.synchronize.referential.ng.task.SwingReferentialSynchronizeTask;
import fr.ird.observe.client.datasource.actions.synchronize.referential.ng.tree.ReferentialSynchronizeTreeModel;
@@ -43,6 +45,7 @@ import fr.ird.observe.services.service.referential.SynchronizeEngine;
import fr.ird.observe.services.service.referential.differential.DifferentialModelBuilder;
import fr.ird.observe.services.service.referential.differential.DifferentialType;
import fr.ird.observe.services.service.referential.synchro.SynchronizeTaskType;
+import io.ultreia.java4all.i18n.I18n;
import io.ultreia.java4all.util.LeftOrRight;
import io.ultreia.java4all.util.LeftOrRightContext;
import org.apache.logging.log4j.LogManager;
@@ -64,9 +67,8 @@ import java.util.Set;
* @since 5.0
*/
@SuppressWarnings("unused")
-public class ReferentialSynchroModel extends AdminActionModel {
+public class ReferentialSynchroModel extends AdminActionModel implements SynchronizeModel {
- public static final String SYNCHRONIZE_MODE_PROPERTY_NAME = "synchronizeMode";
public static final String SHOW_PROPERTIES_PROPERTY_NAME = "showProperties";
public static final String LEFT_SOURCE_PROPERTY_NAME = "leftSource";
public static final String RIGHT_SOURCE_PROPERTY_NAME = "rightSource";
@@ -91,7 +93,7 @@ public class ReferentialSynchroModel extends AdminActionModel {
private final LeftOrRightContext<ReferentialSynchronizeTreeModel> treeModels;
private ObserveSwingDataSource leftSource;
private ObserveSwingDataSource rightSource;
- private ReferentialSynchronizeMode synchronizeMode;
+ private SynchronizeMode synchronizeMode;
private boolean showProperties;
private ReferentialSynchronizeTreeModel leftTreeModel;
private ReferentialSynchronizeTreeModel rightTreeModel;
@@ -147,6 +149,17 @@ public class ReferentialSynchroModel extends AdminActionModel {
};
}
+ @Override
+ public boolean isCanWrite(DataSourceSelectorModel dataSourceSelectorModel) {
+ return dataSourceSelectorModel.isCanWriteReferential();
+ }
+
+ @Override
+ public String getTitleWithMode(SynchronizeMode mode) {
+ return I18n.t("observe.ui.datasource.editor.actions.synchro.referential.withMode", mode.getLabel());
+ }
+
+
@Override
public void start(AdminUIModel uiModel) {
@@ -154,21 +167,13 @@ public class ReferentialSynchroModel extends AdminActionModel {
configModel.getLeftSourceModel().setRequiredReadOnReferential(true);
configModel.getRightSourceModel().setRequiredReadOnReferential(true);
- addPropertyChangeListener(SYNCHRONIZE_MODE_PROPERTY_NAME, evt -> {
- if (uiModel.isWasStarted()) {
- // on ne propage plus rien (il n'y a plus de configuration possible...)
- log.debug("Stop propagation, was started... " + evt.getPropertyName());
- return;
- }
- uiModel.validate();
- });
- setSynchronizeMode(ReferentialSynchronizeMode.FROM_LEFT_TO_RIGHT);
+ SynchronizeModel.super.start(uiModel);
setShowProperties(true);
}
@Override
public boolean validateConfig(AdminUIModel uiModel) {
- ReferentialSynchronizeMode synchronizeMode = uiModel.getReferentialSynchroModel().getSynchronizeMode();
+ SynchronizeMode synchronizeMode = uiModel.getReferentialSynchroModel().getSynchronizeMode();
if (synchronizeMode == null) {
log.info("No synchronize mode selected");
return false;
@@ -212,11 +217,13 @@ public class ReferentialSynchroModel extends AdminActionModel {
rightTreeModel = null;
}
- public ReferentialSynchronizeMode getSynchronizeMode() {
+ @Override
+ public SynchronizeMode getSynchronizeMode() {
return synchronizeMode;
}
- public void setSynchronizeMode(ReferentialSynchronizeMode synchronizeMode) {
+ @Override
+ public void setSynchronizeMode(SynchronizeMode synchronizeMode) {
Object oldValue = getSynchronizeMode();
this.synchronizeMode = synchronizeMode;
firePropertyChange(SYNCHRONIZE_MODE_PROPERTY_NAME, oldValue, synchronizeMode);
=====================================
client/datasource/actions/src/main/java/fr/ird/observe/client/datasource/actions/synchronize/referential/ng/ReferentialSynchroUIHandler.java
=====================================
@@ -23,17 +23,12 @@ package fr.ird.observe.client.datasource.actions.synchronize.referential.ng;
*/
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.editor.api.wizard.StorageUIModel;
-import fr.ird.observe.client.datasource.editor.api.wizard.connexion.DataSourceSelectorModel;
import fr.ird.observe.client.util.UIHelper;
-import org.apache.logging.log4j.LogManager;
-import org.apache.logging.log4j.Logger;
import org.nuiton.jaxx.runtime.spi.UIHandler;
import javax.swing.ToolTipManager;
-import java.util.EnumSet;
import static io.ultreia.java4all.i18n.I18n.t;
@@ -45,21 +40,13 @@ import static io.ultreia.java4all.i18n.I18n.t;
*/
public class ReferentialSynchroUIHandler extends AdminTabUIHandler<ReferentialSynchroUI> implements UIHandler<ReferentialSynchroUI> {
- private static final Logger log = LogManager.getLogger(ReferentialSynchroUIHandler.class);
-
@Override
public void afterInit(ReferentialSynchroUI ui) {
super.afterInit(ui);
setAutoStart(ui.getStart());
ui.getLeftTreePane().init();
ui.getRightTreePane().init();
- ui.getStepModel().addPropertyChangeListener(ReferentialSynchroModel.SYNCHRONIZE_MODE_PROPERTY_NAME, evt -> {
-
- ReferentialSynchronizeMode newValue = (ReferentialSynchronizeMode) evt.getNewValue();
- if (parentUI.getTabs().getComponentCount() > 1 && newValue != null) {
- parentUI.getTabs().setTitleAt(1, t("observe.ui.datasource.editor.actions.synchro.referential.withMode", newValue.getLabel()));
- }
- });
+ ui.getStepModel().afterInit(parentUI);
hideFixedPanelLabel(ui);
ToolTipManager.sharedInstance().registerComponent(ui.getLeftTreePane().getTree());
ToolTipManager.sharedInstance().registerComponent(ui.getRightTreePane().getTree());
@@ -72,50 +59,6 @@ public class ReferentialSynchroUIHandler extends AdminTabUIHandler<ReferentialSy
configUI.getExtraConfig().add(extraConfig);
configUI.getLeftSourceModel().setSourceLabel(t("observe.ui.datasource.storage.config.left.storage"));
configUI.getRightSourceModel().setSourceLabel(t("observe.ui.datasource.storage.config.right.storage"));
- configUI.getStepModel().addPropertyChangeListener(StorageUIModel.VALID_STEP_PROPERTY_NAME, evt -> updateSynchroModes(extraConfig));
- }
-
- private void updateSynchroModes(ReferentialSynchroConfigUI extraConfig) {
- AdminUIModel model = getUi().getModel();
- ReferentialSynchronizeMode synchronizeMode = model.getReferentialSynchroModel().getSynchronizeMode();
- log.info(String.format("Will update synchro modes (previous value: %s)", synchronizeMode));
- DataSourceSelectorModel leftSourceModel = model.getConfigModel().getLeftSourceModel();
- if (!leftSourceModel.isInit()) {
- return;
- }
- DataSourceSelectorModel rightSourceModel = model.getConfigModel().getRightSourceModel();
- if (!rightSourceModel.isInit()) {
- return;
- }
- boolean dataSourcesValid = leftSourceModel.validateExt() && rightSourceModel.validateExt();
- boolean leftToRightEnabled = dataSourcesValid && rightSourceModel.isCanWriteReferential();
- log.debug(String.format("Update synchro modes: leftToRight: %s", leftToRightEnabled));
- boolean rightToLeftEnabled = dataSourcesValid && leftSourceModel.isCanWriteReferential();
- log.debug(String.format("Update synchro modes: rightToLeft: %s", rightToLeftEnabled));
- boolean bothEnabled = leftToRightEnabled && rightToLeftEnabled;
- log.debug(String.format("Update synchro modes: both: %s", bothEnabled));
- extraConfig.getFROM_LEFT_TO_RIGHT().setEnabled(leftToRightEnabled);
- extraConfig.getFROM_RIGHT_TO_LEFT().setEnabled(rightToLeftEnabled);
- extraConfig.getBOTH().setEnabled(bothEnabled);
- EnumSet<ReferentialSynchronizeMode> candidates = EnumSet.allOf(ReferentialSynchronizeMode.class);
- if (!leftToRightEnabled) {
- candidates.remove(ReferentialSynchronizeMode.FROM_LEFT_TO_RIGHT);
- }
- if (!rightToLeftEnabled) {
- candidates.remove(ReferentialSynchronizeMode.FROM_RIGHT_TO_LEFT);
- }
- if (!bothEnabled) {
- candidates.remove(ReferentialSynchronizeMode.BOTH);
- }
- if (!candidates.contains(synchronizeMode)) {
- if (candidates.isEmpty()) {
- synchronizeMode = null;
- } else {
- synchronizeMode = candidates.iterator().next();
- }
- }
- log.info(String.format("Will update synchro modes (new value: %s)", synchronizeMode));
- model.getReferentialSynchroModel().setSynchronizeMode(null);
- model.getReferentialSynchroModel().setSynchronizeMode(synchronizeMode);
+ configUI.getStepModel().addPropertyChangeListener(StorageUIModel.VALID_STEP_PROPERTY_NAME, evt -> extraConfig.updateSynchroModes());
}
}
=====================================
client/datasource/actions/src/main/java/fr/ird/observe/client/datasource/actions/synchronize/referential/ng/actions/Start.java
=====================================
@@ -23,9 +23,9 @@ package fr.ird.observe.client.datasource.actions.synchronize.referential.ng.acti
*/
import fr.ird.observe.client.datasource.actions.AdminUIModel;
+import fr.ird.observe.client.datasource.actions.synchronize.SynchronizeMode;
import fr.ird.observe.client.datasource.actions.synchronize.referential.ng.ReferentialSynchroModel;
import fr.ird.observe.client.datasource.actions.synchronize.referential.ng.ReferentialSynchroUI;
-import fr.ird.observe.client.datasource.actions.synchronize.referential.ng.ReferentialSynchronizeMode;
import fr.ird.observe.client.datasource.actions.synchronize.referential.ng.tree.ReferentialSelectionTree;
import fr.ird.observe.client.datasource.actions.synchronize.referential.ng.tree.ReferentialSelectionTreePane;
import fr.ird.observe.client.datasource.actions.synchronize.referential.ng.tree.ReferentialSynchronizeTreeModel;
@@ -66,7 +66,7 @@ public class Start extends ReferentialSynchroUIActionSupport {
try (ObserveSwingDataSource rightSource = ui.getModel().getConfigModel().getRightSourceModel().getSafeSource(true)) {
stepModel.setRightSource(rightSource);
DifferentialModelBuilder engine = stepModel.newDifferentialModelBuilder();
- ReferentialSynchronizeMode synchronizeMode = stepModel.getSynchronizeMode();
+ SynchronizeMode synchronizeMode = stepModel.getSynchronizeMode();
ProgressionModel progressionModel = stepModel.getProgressModel();
ReferentialSynchronizeTreeModelsBuilder treeModelsBuilder = new ReferentialSynchronizeTreeModelsBuilder(synchronizeMode, stepModel.isShowProperties(), engine, progressionModel);
LeftOrRightContext<ReferentialSynchronizeTreeModel> treePair = treeModelsBuilder.build();
@@ -97,11 +97,11 @@ public class Start extends ReferentialSynchroUIActionSupport {
private void initTree(ReferentialSelectionTreePane pane, ReferentialSynchronizeTreeModel treeModel, DataSourceSelectorModel dataSourceSelectorModel, String message, PropertyChangeListener listener) {
ReferentialSelectionTree tree = pane.getTree();
- ReferentialSynchronizeMode newValue = ui.getStepModel().getSynchronizeMode();
+ SynchronizeMode synchronizeMode = ui.getStepModel().getSynchronizeMode();
pane.setContextValue(dataSourceSelectorModel);
Color color =
- (treeModel.isLeft() && newValue.isLeftWrite() || !treeModel.isLeft() && newValue.isRightWrite()) ?
+ (treeModel.isLeft() && synchronizeMode.isLeftWrite() || !treeModel.isLeft() && synchronizeMode.isRightWrite()) ?
Color.BLACK : Color.RED;
pane.setBorder(new TitledBorder(""));
String label = dataSourceSelectorModel.getLabel();
@@ -110,9 +110,17 @@ public class Start extends ReferentialSynchroUIActionSupport {
pane.getDataSourceLabel().setText(dataSourceSelectorModel.getSource().getLabel() + " " + labelWithUrl);
pane.getDataSourceLabel().setForeground(color);
+ boolean isRight = pane.isRight();
+ boolean canCopy = isRight ? synchronizeMode.isLeftWrite() : synchronizeMode.isRightWrite();
+ boolean canRevert = isRight ? synchronizeMode.isRightWrite() : synchronizeMode.isLeftWrite();
+ pane.getCopy().setVisible(canCopy);
+ pane.getRevert().setVisible(canRevert);
+ pane.getDeactivate().setVisible(canRevert);
+ pane.getDeactivateWithReplace().setVisible(canRevert);
+ pane.getDelete().setVisible(canRevert);
+
tree.setModel(treeModel);
treeModel.addPropertyChangeListener(ReferentialSynchronizeTreeModel.SELECTED_COUNT, listener);
-
listener.propertyChange(null);
sendMessage(message);
}
=====================================
client/datasource/actions/src/main/java/fr/ird/observe/client/datasource/actions/synchronize/referential/ng/tree/ReferentialSelectionTreePaneHandler.java
=====================================
@@ -22,16 +22,17 @@ package fr.ird.observe.client.datasource.actions.synchronize.referential.ng.tree
* #L%
*/
-import fr.ird.observe.client.datasource.actions.synchronize.referential.ng.ReferentialSynchroModel;
-import fr.ird.observe.client.datasource.actions.synchronize.referential.ng.ReferentialSynchroUI;
-import fr.ird.observe.client.datasource.actions.synchronize.referential.ng.ReferentialSynchroUIHandler;
-import fr.ird.observe.client.datasource.actions.synchronize.referential.ng.ReferentialSynchronizeMode;
-import fr.ird.observe.client.datasource.actions.synchronize.referential.ng.tree.actions.*;
+import fr.ird.observe.client.datasource.actions.synchronize.referential.ng.tree.actions.RegisterCopy;
+import fr.ird.observe.client.datasource.actions.synchronize.referential.ng.tree.actions.RegisterDeactivate;
+import fr.ird.observe.client.datasource.actions.synchronize.referential.ng.tree.actions.RegisterDeactivateWithReplacement;
+import fr.ird.observe.client.datasource.actions.synchronize.referential.ng.tree.actions.RegisterDelete;
+import fr.ird.observe.client.datasource.actions.synchronize.referential.ng.tree.actions.RegisterRevert;
+import fr.ird.observe.client.datasource.actions.synchronize.referential.ng.tree.actions.SelectUnselect;
import fr.ird.observe.client.util.init.DefaultUIInitializer;
import io.ultreia.java4all.util.LeftOrRight;
import org.nuiton.jaxx.runtime.spi.UIHandler;
-import java.awt.*;
+import java.awt.BorderLayout;
/**
* @author Tony Chemit - dev(a)tchemit.fr
@@ -45,16 +46,13 @@ public class ReferentialSelectionTreePaneHandler implements UIHandler<Referentia
}
void init(ReferentialSelectionTreePane ui) {
- ReferentialSynchroUI parent = ui.getContextValue(ReferentialSynchroUI.class, ReferentialSynchroUIHandler.ADMIN_TAB_UI);
- ReferentialSynchroModel stepModel = parent.getStepModel();
- stepModel.addPropertyChangeListener(ReferentialSynchroModel.SYNCHRONIZE_MODE_PROPERTY_NAME, evt -> onUpdateMode(ui, (ReferentialSynchronizeMode) evt.getNewValue()));
boolean isLeft = ui.isLeft();
- LeftOrRight side = isLeft?LeftOrRight.LEFT : LeftOrRight.RIGHT;
- RegisterCopy.init(ui, ui.copy, new RegisterCopy(ui, side));
- RegisterRevert.init(ui, ui.revert, new RegisterRevert(ui, side));
- RegisterDeactivate.init(ui, ui.deactivate, new RegisterDeactivate(ui, side));
- RegisterDeactivateWithReplacement.init(ui, ui.deactivateWithReplace, new RegisterDeactivateWithReplacement(ui, side));
- RegisterDelete.init(ui, ui.delete, new RegisterDelete(ui, side));
+ LeftOrRight side = isLeft ? LeftOrRight.LEFT : LeftOrRight.RIGHT;
+ RegisterCopy.init(ui, ui.getCopy(), new RegisterCopy(ui, side));
+ RegisterRevert.init(ui, ui.getRevert(), new RegisterRevert(ui, side));
+ RegisterDeactivate.init(ui, ui.getDeactivate(), new RegisterDeactivate(ui, side));
+ RegisterDeactivateWithReplacement.init(ui, ui.getDeactivateWithReplace(), new RegisterDeactivateWithReplacement(ui, side));
+ RegisterDelete.init(ui, ui.getDelete(), new RegisterDelete(ui, side));
SelectUnselect.init(ui, null, new SelectUnselect(ui));
if (!isLeft) {
ui.remove(ui.getMiddleActions());
@@ -65,20 +63,5 @@ public class ReferentialSelectionTreePaneHandler implements UIHandler<Referentia
// an update is asked using the deleted data...)
ui.getMiddleActions().remove(ui.delete);
}
-
- private void onUpdateMode(ReferentialSelectionTreePane ui, ReferentialSynchronizeMode synchronizeMode) {
- if (synchronizeMode == null) {
- return;
- }
- boolean isRight = ui.isRight();
- boolean canCopy = isRight ? synchronizeMode.isLeftWrite() : synchronizeMode.isRightWrite();
- boolean canRevert = isRight ? synchronizeMode.isRightWrite() : synchronizeMode.isLeftWrite();
- ui.copy.setVisible(canCopy);
- ui.revert.setVisible(canRevert);
- ui.deactivate.setVisible(canRevert);
- ui.deactivateWithReplace.setVisible(canRevert);
- ui.delete.setVisible(canRevert);
- }
-
}
=====================================
client/datasource/actions/src/main/java/fr/ird/observe/client/datasource/actions/synchronize/referential/ng/tree/ReferentialSynchronizeTreeModelsBuilder.java
=====================================
@@ -23,7 +23,7 @@ package fr.ird.observe.client.datasource.actions.synchronize.referential.ng.tree
*/
import fr.ird.observe.client.WithClientUIContextApi;
-import fr.ird.observe.client.datasource.actions.synchronize.referential.ng.ReferentialSynchronizeMode;
+import fr.ird.observe.client.datasource.actions.synchronize.SynchronizeMode;
import fr.ird.observe.client.datasource.actions.synchronize.referential.ng.tree.node.ReferentialAddedSynchroNode;
import fr.ird.observe.client.datasource.actions.synchronize.referential.ng.tree.node.ReferentialPropertyUpdatedNode;
import fr.ird.observe.client.datasource.actions.synchronize.referential.ng.tree.node.ReferentialSynchroNodeSupport;
@@ -130,7 +130,7 @@ public class ReferentialSynchronizeTreeModelsBuilder implements WithClientUICont
}
- public ReferentialSynchronizeTreeModelsBuilder(ReferentialSynchronizeMode synchronizeMode, boolean showProperties, DifferentialModelBuilder engine, ProgressionModel progressionModel) {
+ public ReferentialSynchronizeTreeModelsBuilder(SynchronizeMode synchronizeMode, boolean showProperties, DifferentialModelBuilder engine, ProgressionModel progressionModel) {
this.engine = Objects.requireNonNull(engine);
this.leftRootNode = new RootSynchroNode(true, Objects.requireNonNull(synchronizeMode).isLeftWrite(), showProperties);
this.rightRootNode = new RootSynchroNode(false, synchronizeMode.isRightWrite(), showProperties);
=====================================
client/datasource/editor/api/src/main/i18n/getters/java.getter
=====================================
@@ -268,7 +268,7 @@ observe.ui.datasource.storage.no.data.import
observe.ui.datasource.storage.no.referentiel.import
observe.ui.datasource.storage.report.can.migrate
observe.ui.datasource.storage.report.can.not.migrate
-observe.ui.datasource.storage.required.rw.on.data
+observe.ui.datasource.storage.required.read.on.data
observe.ui.datasource.storage.server.dataBase.name
observe.ui.datasource.storage.server.default.dataBase
observe.ui.datasource.storage.server.sessionExpire
=====================================
client/datasource/editor/api/src/main/java/fr/ird/observe/client/datasource/editor/api/navigation/actions/SaveStorageToFile.java
=====================================
@@ -60,7 +60,7 @@ public class SaveStorageToFile extends MenuActionSupport implements Runnable {
if (!service.isLocal() && !(service.canReadData() && service.canWriteData())) {
askToUser(
t("observe.ui.title.can.not.export.obstuna"),
- t("observe.ui.datasource.storage.required.rw.on.data", service),
+ t("observe.ui.datasource.storage.required.read.on.data", service),
JOptionPane.ERROR_MESSAGE,
new Object[]{t("observe.ui.choice.cancel")},
0
=====================================
client/datasource/editor/api/src/main/java/fr/ird/observe/client/datasource/editor/api/wizard/connexion/DataSourceSelectorModel.java
=====================================
@@ -134,6 +134,10 @@ public class DataSourceSelectorModel extends StorageUIModel {
return isLocal() || Optional.ofNullable(getDataSourceInformation()).map(ObserveDataSourceInformation::canWriteReferential).orElse(false);
}
+ public boolean isCanWriteData() {
+ return isLocal() || Optional.ofNullable(getDataSourceInformation()).map(ObserveDataSourceInformation::canWriteData).orElse(false);
+ }
+
public boolean validateExt() {
setValidationMessage(null);
if (!isValid()) {
=====================================
client/runner/src/main/i18n/translations/client-runner_en_GB.properties
=====================================
@@ -208,9 +208,6 @@ observe.constant.ObstunaAdminAction.SECURITY=Update security
observe.constant.ObstunaAdminAction.SECURITY.description=Update security
observe.constant.ObstunaAdminAction.UPDATE=Update
observe.constant.ObstunaAdminAction.UPDATE.description=Update a database
-observe.constant.ReferentialSynchronizeMode.BOTH=Bi directional
-observe.constant.ReferentialSynchronizeMode.FROM_LEFT_TO_RIGHT=From left to right
-observe.constant.ReferentialSynchronizeMode.FROM_RIGHT_TO_LEFT=From right to left
observe.constant.StorageStep.BACKUP=Save
observe.constant.StorageStep.BACKUP.description=Save local database before changing data source
observe.constant.StorageStep.CHOOSE_DB_MODE=Mode
@@ -227,6 +224,9 @@ observe.constant.StorageStep.ROLES=Security
observe.constant.StorageStep.ROLES.description=Apply security on database roles
observe.constant.StorageStep.SELECT_DATA=Data selection
observe.constant.StorageStep.SELECT_DATA.description=Select data to export in backup
+observe.constant.SynchronizeMode.BOTH=Bi directional
+observe.constant.SynchronizeMode.FROM_LEFT_TO_RIGHT=From left to right
+observe.constant.SynchronizeMode.FROM_RIGHT_TO_LEFT=From right to left
observe.constant.ValidationModelMode.DATA=Only data
observe.constant.ValidationModelMode.DATA.description=Only data
observe.constant.ValidationModelMode.REFERENTIEL=Only referential
@@ -360,6 +360,7 @@ observe.ui.action.commandline.launch.h2.server.mode=Launch ObServe in server mod
observe.ui.action.commandline.launch.remote.admin.ui=Launch an administration task on remote
observe.ui.action.commandline.launch.server.admin.ui=Launch an administration task on server
observe.ui.action.commandline.use.jmx=Add JMX support
+observe.ui.action.config.export.required.read.data=Read permission is required on data for this operation
observe.ui.action.config.export.required.read.referentiel=Read permission is required on referential for this operation
observe.ui.action.config.export.required.write.data=Write permission is required on data for this operation
observe.ui.action.config.left.datasource.required.write.data=Write permission is required on data for this operation
@@ -591,6 +592,7 @@ observe.ui.datasource.editor.actions.report.variables=Variables configuration
observe.ui.datasource.editor.actions.saveLocal=Save local database
observe.ui.datasource.editor.actions.saveLocal.description=Save modifications on local database
observe.ui.datasource.editor.actions.synchro.cancel.tip=Cancel
+observe.ui.datasource.editor.actions.synchro.config.mode=Synchronisation mode
observe.ui.datasource.editor.actions.synchro.copy.tip=Copy result of report in clipboard
observe.ui.datasource.editor.actions.synchro.data=Advanced data management
observe.ui.datasource.editor.actions.synchro.data.actionsToPerform=Operations to perform
@@ -600,6 +602,7 @@ observe.ui.datasource.editor.actions.synchro.data.launch.operation=Get data fro
observe.ui.datasource.editor.actions.synchro.data.message.data.loaded=Database «%s» - Data loaded
observe.ui.datasource.editor.actions.synchro.data.title=Advanced data management
observe.ui.datasource.editor.actions.synchro.data.title.tip=Advanced data management
+observe.ui.datasource.editor.actions.synchro.data.withMode=Advanced data management (%s)
observe.ui.datasource.editor.actions.synchro.launch.operation=Launch operation < %1$S >
observe.ui.datasource.editor.actions.synchro.prepare.operation=Prepare operation < %1$s >
observe.ui.datasource.editor.actions.synchro.referential=Advanced referential management
@@ -613,7 +616,6 @@ observe.ui.datasource.editor.actions.synchro.referential.action.deleteFromLeft.t
observe.ui.datasource.editor.actions.synchro.referential.action.deleteFromRight.tip=Delete selected referential(s) from right database
observe.ui.datasource.editor.actions.synchro.referential.action.revertFromLeft.tip=Revert selected referential(s) into left database
observe.ui.datasource.editor.actions.synchro.referential.action.revertFromRight.tip=Revert selected referential(s) into right database
-observe.ui.datasource.editor.actions.synchro.referential.config.mode=Synchronisation mode
observe.ui.datasource.editor.actions.synchro.referential.description=Advanced referential management
observe.ui.datasource.editor.actions.synchro.referential.launch.operation=Compute differentials of referential
observe.ui.datasource.editor.actions.synchro.referential.legacy=Update referential
@@ -832,7 +834,7 @@ observe.ui.datasource.storage.remoteConfiguration.presets.save=Save current conf
observe.ui.datasource.storage.report.action.migrate=Update policy
observe.ui.datasource.storage.report.can.migrate=Update if necessary (current version\: %1$s)
observe.ui.datasource.storage.report.can.not.migrate=No update possible
-observe.ui.datasource.storage.required.rw.on.data=You don't have sufficient credentials to perform this operation.\n\nTo perform this operation, you need Read/Write permissions on data.
+observe.ui.datasource.storage.required.read.on.data=You don't have sufficient credentials to perform this operation.\n\nTo perform this operation, you need Read permission on data.
observe.ui.datasource.storage.server.dataBase=Databases
observe.ui.datasource.storage.server.dataBase.name=Database
observe.ui.datasource.storage.server.default.dataBase=default
=====================================
client/runner/src/main/i18n/translations/client-runner_es_ES.properties
=====================================
@@ -208,9 +208,6 @@ observe.constant.ObstunaAdminAction.SECURITY=Actualización de seguridad de base
observe.constant.ObstunaAdminAction.SECURITY.description=Actualización de securidad de una base remota
observe.constant.ObstunaAdminAction.UPDATE=Actualización de une base remota
observe.constant.ObstunaAdminAction.UPDATE.description=Actualización de una base remota
-observe.constant.ReferentialSynchronizeMode.BOTH=Bidireccional
-observe.constant.ReferentialSynchronizeMode.FROM_LEFT_TO_RIGHT=De izquierda a derecha
-observe.constant.ReferentialSynchronizeMode.FROM_RIGHT_TO_LEFT=De derecha a izquierda
observe.constant.StorageStep.BACKUP=Copia de seguridad
observe.constant.StorageStep.BACKUP.description=Guardadar la base local antes de cambiar la fuente de datos
observe.constant.StorageStep.CHOOSE_DB_MODE=Modo
@@ -227,6 +224,9 @@ observe.constant.StorageStep.ROLES=Seguridad
observe.constant.StorageStep.ROLES.description=Configuración de la seguridad
observe.constant.StorageStep.SELECT_DATA=Selección de datos
observe.constant.StorageStep.SELECT_DATA.description=Seleccionar los datos a exportar en la copia de seguridad
+observe.constant.SynchronizeMode.BOTH=Bidireccional
+observe.constant.SynchronizeMode.FROM_LEFT_TO_RIGHT=De izquierda a derecha
+observe.constant.SynchronizeMode.FROM_RIGHT_TO_LEFT=De derecha a izquierda
observe.constant.ValidationModelMode.DATA=Datos
observe.constant.ValidationModelMode.DATA.description=Datos
observe.constant.ValidationModelMode.REFERENTIEL=Referencial
@@ -360,6 +360,7 @@ observe.ui.action.commandline.launch.h2.server.mode=Ejecutar ObServe en modo ser
observe.ui.action.commandline.launch.remote.admin.ui=Ejecutar una operación de administración sobre remota
observe.ui.action.commandline.launch.server.admin.ui=Lancer une opération d'administration sur un serveur \#TODO
observe.ui.action.commandline.use.jmx=Mostrar el soporte JMX
+observe.ui.action.config.export.required.read.data=Debe tener derechos de lectura sobre los datos para esta operación
observe.ui.action.config.export.required.read.referentiel=Debe tener derechos de lectura sobre el referencial de datos para esta operación
observe.ui.action.config.export.required.write.data=Debe tener derechos de escritura sobre los datos para esta operación
observe.ui.action.config.left.datasource.required.write.data=Write permission is required on data for this operation \#TODO
@@ -591,6 +592,7 @@ observe.ui.datasource.editor.actions.report.variables=Configuración de variable
observe.ui.datasource.editor.actions.saveLocal=Copia de seguridad de la base local
observe.ui.datasource.editor.actions.saveLocal.description=Guardar las modificationes realizadas en la base locale
observe.ui.datasource.editor.actions.synchro.cancel.tip=Cancelar
+observe.ui.datasource.editor.actions.synchro.config.mode=Modo de synchronización
observe.ui.datasource.editor.actions.synchro.copy.tip=Copiar el informe en el portapapeles
observe.ui.datasource.editor.actions.synchro.data=Gestión avanzada de los datos
observe.ui.datasource.editor.actions.synchro.data.actionsToPerform=Operaciones a realisar
@@ -600,6 +602,7 @@ observe.ui.datasource.editor.actions.synchro.data.launch.operation=Recuperar los
observe.ui.datasource.editor.actions.synchro.data.message.data.loaded=Base «%s» - Datos recuperadas.
observe.ui.datasource.editor.actions.synchro.data.title=Gestión avanzada de los datos
observe.ui.datasource.editor.actions.synchro.data.title.tip=Sincronización bi-directionnal de los datos de los usaurios
+observe.ui.datasource.editor.actions.synchro.data.withMode=Gestión avanzada de los datos (%s)
observe.ui.datasource.editor.actions.synchro.launch.operation=Comenzar la operación < %1$s >
observe.ui.datasource.editor.actions.synchro.prepare.operation=Preparar la operación <%1$s>
observe.ui.datasource.editor.actions.synchro.referential=Gestión avanzada del referencial
@@ -613,7 +616,6 @@ observe.ui.datasource.editor.actions.synchro.referential.action.deleteFromLeft.t
observe.ui.datasource.editor.actions.synchro.referential.action.deleteFromRight.tip=Eliminar el referencial seleccionado en la base de la derecha
observe.ui.datasource.editor.actions.synchro.referential.action.revertFromLeft.tip=Volver atrás el referencial seleccionado en la izquierda
observe.ui.datasource.editor.actions.synchro.referential.action.revertFromRight.tip=Volver atrás el referencial seleccionado en la derecha
-observe.ui.datasource.editor.actions.synchro.referential.config.mode=Modo de synchronización
observe.ui.datasource.editor.actions.synchro.referential.description=Gestión avanzada del referencial
observe.ui.datasource.editor.actions.synchro.referential.launch.operation=Calcular el diferencial de los referenciales de los fuentes de datos
observe.ui.datasource.editor.actions.synchro.referential.legacy=Actualización del referencial
@@ -832,7 +834,7 @@ observe.ui.datasource.storage.remoteConfiguration.presets.save=Enregister cette
observe.ui.datasource.storage.report.action.migrate=Politica de actualización
observe.ui.datasource.storage.report.can.migrate=Actualizar si es necesario (version actual \: %1$s)
observe.ui.datasource.storage.report.can.not.migrate=No es posible actualizar
-observe.ui.datasource.storage.required.rw.on.data=No tiene los permisos necesarios para realizar esta operación.\n\nDebe tener permios de lectura y escritura de los datos del obaservador.
+observe.ui.datasource.storage.required.read.on.data=No tiene los permisos necesarios para realizar esta operación.\n\nDebe tener permios de lectura de los datos del obaservador.
observe.ui.datasource.storage.server.dataBase=Base de datos
observe.ui.datasource.storage.server.dataBase.name=Database \#TODO
observe.ui.datasource.storage.server.default.dataBase=default \#TODO
=====================================
client/runner/src/main/i18n/translations/client-runner_fr_FR.properties
=====================================
@@ -208,9 +208,6 @@ observe.constant.ObstunaAdminAction.SECURITY=Mise à jour de la sécurité d'une
observe.constant.ObstunaAdminAction.SECURITY.description=Mise à jour de la sécurité d'une base distante
observe.constant.ObstunaAdminAction.UPDATE=Mise à jour d'une base distante
observe.constant.ObstunaAdminAction.UPDATE.description=Mise à jour d'une base distante
-observe.constant.ReferentialSynchronizeMode.BOTH=Bidirectionnel
-observe.constant.ReferentialSynchronizeMode.FROM_LEFT_TO_RIGHT=De la gauche vers la droite
-observe.constant.ReferentialSynchronizeMode.FROM_RIGHT_TO_LEFT=De la droite vers la gauche
observe.constant.StorageStep.BACKUP=Sauvegarde
observe.constant.StorageStep.BACKUP.description=Sauvegarder la base locale avant de changer de source de données
observe.constant.StorageStep.CHOOSE_DB_MODE=Mode
@@ -227,6 +224,9 @@ observe.constant.StorageStep.ROLES=Sécurité
observe.constant.StorageStep.ROLES.description=Mise en place de la sécurité
observe.constant.StorageStep.SELECT_DATA=Sélection données
observe.constant.StorageStep.SELECT_DATA.description=Sélectionner les données à exporter dans la sauvegarde
+observe.constant.SynchronizeMode.BOTH=Bidirectionnel
+observe.constant.SynchronizeMode.FROM_LEFT_TO_RIGHT=De la gauche vers la droite
+observe.constant.SynchronizeMode.FROM_RIGHT_TO_LEFT=De la droite vers la gauche
observe.constant.ValidationModelMode.DATA=Données
observe.constant.ValidationModelMode.DATA.description=Données
observe.constant.ValidationModelMode.REFERENTIEL=Référentiel
@@ -360,6 +360,7 @@ observe.ui.action.commandline.launch.h2.server.mode=Lancer ObServe en mode serve
observe.ui.action.commandline.launch.remote.admin.ui=Lancer une opération d'administration sur une base distante
observe.ui.action.commandline.launch.server.admin.ui=Lancer une opération d'administration sur un serveur
observe.ui.action.commandline.use.jmx=Ajouter le support JMX
+observe.ui.action.config.export.required.read.data=Lecture sur les données requis pour cette opération
observe.ui.action.config.export.required.read.referentiel=Lecture sur le référentiel requis pour cette opération
observe.ui.action.config.export.required.write.data=Écriture sur les données requis pour cette opération
observe.ui.action.config.left.datasource.required.write.data=Écriture sur les données requis pour cette opération
@@ -591,6 +592,7 @@ observe.ui.datasource.editor.actions.report.variables=Configuration des variable
observe.ui.datasource.editor.actions.saveLocal=Sauvegarde de la base locale
observe.ui.datasource.editor.actions.saveLocal.description=Sauvegarder les modifications effectuées vers la base locale
observe.ui.datasource.editor.actions.synchro.cancel.tip=Annuler
+observe.ui.datasource.editor.actions.synchro.config.mode=Mode de synchronisation
observe.ui.datasource.editor.actions.synchro.copy.tip=Copier le rapport dans le presse-papier
observe.ui.datasource.editor.actions.synchro.data=Gestion avancée de données
observe.ui.datasource.editor.actions.synchro.data.actionsToPerform=Opérations à réaliser
@@ -600,6 +602,7 @@ observe.ui.datasource.editor.actions.synchro.data.launch.operation=Récupérer l
observe.ui.datasource.editor.actions.synchro.data.message.data.loaded=Source «%s» - Données récupérées.
observe.ui.datasource.editor.actions.synchro.data.title=Gestion avancée de données
observe.ui.datasource.editor.actions.synchro.data.title.tip=Synchronisation bidirectionnelle des données utilisateurs
+observe.ui.datasource.editor.actions.synchro.data.withMode=Gestion avancée de données (%s)
observe.ui.datasource.editor.actions.synchro.launch.operation=Démarrer l'opération < %1$s >
observe.ui.datasource.editor.actions.synchro.prepare.operation=Préparer l'opération <%1$s>
observe.ui.datasource.editor.actions.synchro.referential=Gestion avancée du référentiel
@@ -613,7 +616,6 @@ observe.ui.datasource.editor.actions.synchro.referential.action.deleteFromLeft.t
observe.ui.datasource.editor.actions.synchro.referential.action.deleteFromRight.tip=Supprimer le référentiel sélectionnée de la base de droite
observe.ui.datasource.editor.actions.synchro.referential.action.revertFromLeft.tip=Revenir en arrière du référentiel sélectionné à gauche
observe.ui.datasource.editor.actions.synchro.referential.action.revertFromRight.tip=Revenir en arrière du référentiel sélectionné à droite
-observe.ui.datasource.editor.actions.synchro.referential.config.mode=Mode de synchronisation
observe.ui.datasource.editor.actions.synchro.referential.description=Gestion avancée du référentiel
observe.ui.datasource.editor.actions.synchro.referential.launch.operation=Calculer le différentiel des référentiels des sources de données
observe.ui.datasource.editor.actions.synchro.referential.legacy=Mise à jour du référentiel
@@ -832,7 +834,7 @@ observe.ui.datasource.storage.remoteConfiguration.presets.save=Enregister cette
observe.ui.datasource.storage.report.action.migrate=Politique de mise à jour
observe.ui.datasource.storage.report.can.migrate=Mise à jour si nécessaire (version actuelle \: %1$s)
observe.ui.datasource.storage.report.can.not.migrate=Pas de mise à jour possible
-observe.ui.datasource.storage.required.rw.on.data=Vous n'avez pas les droits suffisants pour effectuer cette opération.\n\nPour effectuer cette opération vous devez avoir les droits de lecture et d'écriture sur les données observateur.
+observe.ui.datasource.storage.required.read.on.data=Vous n'avez pas les droits suffisants pour effectuer cette opération.\n\nPour effectuer cette opération vous devez avoir les droits de lecture sur les données observateur.
observe.ui.datasource.storage.server.dataBase=Base de données
observe.ui.datasource.storage.server.dataBase.name=Base
observe.ui.datasource.storage.server.default.dataBase=par défaut
=====================================
toolkit/api-i18n/src/main/i18n/translations/toolkit-api-i18n_fr_FR.properties
=====================================
@@ -137,7 +137,7 @@ observe.referential.common.Wind.speedRange=Vitesse (nd)
observe.referential.common.Wind.swellHeight=Houle (m)
observe.referential.diff.loading.type=Chargement du référentiel %-2d/%d «%s»
observe.referential.package.title=%sRéférentiel %s
-observe.service.error.method.unauthorized=Vous n'avez pas les autorisations nécessaire pour appeler le service '%s → %s'
+observe.service.error.method.unauthorized=Vous n'avez pas les droits suffisants pour appeler le service '%s → %s'
observe.services.topia.error.concurrentModification=La donnée %s est plus récente en base (%s) que votre version (%s)
observe.services.topia.error.data.not.found=Donnée [%s] (de type\: %s) non trouvée.
observe.services.topia.error.data.source.with.no.referential=Impossible de créer la base (aucun import référentiel)
View it on GitLab: https://gitlab.com/ultreiaio/ird-observe/-/compare/564508d66fc144bfb2b378eb…
--
View it on GitLab: https://gitlab.com/ultreiaio/ird-observe/-/compare/564508d66fc144bfb2b378eb…
You're receiving this email because of your account on gitlab.com.
1
0
25 Jun '24
Tony CHEMIT deleted branch feature/issue_2888 at ultreiaio / ird-observe
--
You're receiving this email because of your account on gitlab.com.
1
0