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
September 2018
- 1 participants
- 147 discussions
Tony CHEMIT pushed to branch develop at ultreiaio / ird-observe
Commits:
27cee384 by Tony CHEMIT at 2018-09-20T21:39:05Z
use last pom
- - - - -
8a5dc471 by Tony CHEMIT at 2018-09-20T21:39:06Z
clean stream api
- - - - -
afa006b5 by Tony CHEMIT at 2018-09-20T21:39:06Z
La suppression d'une espèce avec remplacement de code échoue - Closes #1060
La suppression d'océan avec remplacement de code pose problème - Closes #1061
La suppression d'un sexe avec remplacement de code échoue - Closes #1062
- - - - -
a6c3f482 by Tony CHEMIT at 2018-09-20T21:39:38Z
L'UI de synchro de référentiels ne présente plus les éléments à synchroniser qu'un par un - See #1058
- - - - -
c4d4d144 by Tony CHEMIT at 2018-09-20T21:39:56Z
L'UI de synchro de référentiels ne présente plus les éléments à synchroniser qu'un par un - Closes #1058
- - - - -
c584d205 by Tony CHEMIT at 2018-09-20T21:42:54Z
Only remove program node if it is enabled (otherwise it is not in navigation tree)
- - - - -
97932c26 by Tony CHEMIT at 2018-09-20T21:43:12Z
[SYNCHRO] Problème avec la synchro avancée d'un programme - Closes #1063
- - - - -
1c6911bf by Tony CHEMIT at 2018-09-20T21:51:47Z
[SYNCHRO] La synchro avancée d'une marée nécessitant une référence absente dans la base cible provoque une exception - Closes #1064
- - - - -
b1bdef9b by Tony CHEMIT at 2018-09-20T21:52:12Z
L'UI de remplacement de code de référentiel dépasse parfois les limites de l'écran - Closes #1059
- - - - -
d9519a0d by Tony CHEMIT at 2018-09-20T21:52:28Z
remove EntityMap class
- - - - -
3b2a79fe by Tony CHEMIT at 2018-09-20T21:55:17Z
Use topia-extension usage support to compute usages (see #1066)
- - - - -
56066f62 by Tony CHEMIT at 2018-09-20T21:56:19Z
use new topia metadata model feature to generate clean sql statements (See #1065)
- - - - -
e51e349e by Tony CHEMIT at 2018-09-20T21:56:32Z
improve logs (validators are now warns a lot too much :()
- - - - -
52266f0e by Tony CHEMIT at 2018-09-20T21:58:16Z
[LL] Après migration l'UI v7 n'affiche plus qu'une seule des captures de chaque opération de pêche - Closes #1068
- - - - -
fa10436f by Tony CHEMIT at 2018-09-20T21:58:33Z
Add more accelerator on referential nb synchro config ui
- - - - -
59bfe7b2 by Tony CHEMIT at 2018-09-20T21:58:44Z
fix parameter order to generate update sql statement
- - - - -
866e60a5 by Tony CHEMIT at 2018-09-20T22:01:42Z
fix a missing decorator
- - - - -
0b8b734a by Tony CHEMIT at 2018-09-20T22:02:00Z
Suppression de la configuration d'ajout de référentiels dans les deux actions de synchronisation de données + réusinage du code commun aux deux actions
- - - - -
30 changed files:
- client-configuration/src/main/resources/log4j2.xml
- client-configuration/src/main/resources/observe-log4j2.xml
- client/src/main/java/fr/ird/observe/client/db/ObserveSwingDataSource.java
- client/src/main/java/fr/ird/observe/client/ui/ObserveKeyStrokes.java
- client/src/main/java/fr/ird/observe/client/ui/admin/AdminTabUIHandler.java
- client/src/main/java/fr/ird/observe/client/ui/admin/export/ExportModel.java
- client/src/main/java/fr/ird/observe/client/ui/admin/export/ExportUI.jaxx
- client/src/main/java/fr/ird/observe/client/ui/admin/export/ExportUI.jcss
- client/src/main/java/fr/ird/observe/client/ui/admin/export/ExportUIHandler.java
- client/src/main/java/fr/ird/observe/client/ui/admin/synchronize/data/DataSynchroModel.java
- client/src/main/java/fr/ird/observe/client/ui/admin/synchronize/data/DataSynchroUIHandler.java
- client/src/main/java/fr/ird/observe/client/ui/admin/synchronize/referential/ng/ReferentialSynchroUIHandler.java
- client/src/main/java/fr/ird/observe/client/ui/content/ref/ContentReferenceUIHandler.java
- client/src/main/java/fr/ird/observe/client/ui/content/ref/usage/UsageForDeleteUI.jaxx
- client/src/main/java/fr/ird/observe/client/ui/content/ref/usage/UsageForDesactivateUI.jaxx
- client/src/main/java/fr/ird/observe/client/ui/content/ref/usage/UsageForDisplayUI.jaxx
- client/src/main/java/fr/ird/observe/client/ui/util/UIHelper.java
- client/src/main/resources/i18n/client_en_GB.properties
- client/src/main/resources/i18n/client_es_ES.properties
- client/src/main/resources/i18n/client_fr_FR.properties
- dto/src/main/java/fr/ird/observe/dto/data/seine/RouteDto.java
- dto/src/main/java/fr/ird/observe/dto/decoration/DecoratorService.java
- persistence/pom.xml
- persistence/src/main/java/fr/ird/observe/persistence/ObserveTopiaApplicationContext.java
- persistence/src/main/java/fr/ird/observe/persistence/migration/DataSourceMigrationForVersion_6_0.java
- persistence/src/main/java/fr/ird/observe/persistence/migration/DataSourceMigrationForVersion_7_0.java
- pom.xml
- server-configuration/src/main/resources/log4j2.xml
- server-configuration/src/main/resources/observeweb-log4j2.xml
- server/src/main/filtered-resources/mapping
The diff was not included because it is too large.
View it on GitLab: https://gitlab.com/ultreiaio/ird-observe/compare/68a1691bf5ce55bdc6c9127a20…
--
View it on GitLab: https://gitlab.com/ultreiaio/ird-observe/compare/68a1691bf5ce55bdc6c9127a20…
You're receiving this email because of your account on gitlab.com.
1
0
[Git][ultreiaio/ird-observe][develop-7.x] use last pom and topia-extension
by Tony CHEMIT 20 Sep '18
by Tony CHEMIT 20 Sep '18
20 Sep '18
Tony CHEMIT pushed to branch develop-7.x at ultreiaio / ird-observe
Commits:
db9f5e24 by Tony CHEMIT at 2018-09-20T21:19:29Z
use last pom and topia-extension
- - - - -
1 changed file:
- pom.xml
Changes:
=====================================
pom.xml
=====================================
@@ -26,7 +26,7 @@
<parent>
<groupId>io.ultreia.maven</groupId>
<artifactId>pom</artifactId>
- <version>2018.57</version>
+ <version>2018.58</version>
</parent>
<groupId>fr.ird.observe</groupId>
@@ -152,7 +152,7 @@
<maven.build.timestamp.format>dd/MM/yyyy HH:mm z</maven.build.timestamp.format>
<buildDate>${maven.build.timestamp}</buildDate>
- <observeToolkitVersion>3.7.8-SNAPSHOT</observeToolkitVersion>
+ <observeToolkitVersion>3.7.8</observeToolkitVersion>
<!--<lib.version.java4all.http>1.0.13</lib.version.java4all.http>-->
<lib.version.nuiton.validation>3.1</lib.version.nuiton.validation>
<!--<lib.version.java4all.config>1.0.3</lib.version.java4all.config>-->
@@ -162,7 +162,7 @@
<lib.version.h2>1.4.196</lib.version.h2>
<!--<lib.version.nuiton.topia>3.6-SNAPSHOT</lib.version.nuiton.topia>-->
<!--<lib.version.java4all.eugene>3.0-alpha-21</lib.version.java4all.eugene>-->
- <lib.version.java4all.topia>1.1.8-SNAPSHOT</lib.version.java4all.topia>
+ <!--<lib.version.java4all.topia>1.1.9-SNAPSHOT</lib.version.java4all.topia>-->
<!-- license header configuration -->
<license.licenseName>gpl_v3</license.licenseName>
<license.organizationName>IRD, Code Lutin, Ultreia.io</license.organizationName>
View it on GitLab: https://gitlab.com/ultreiaio/ird-observe/commit/db9f5e24d58519442e33c8ac410…
--
View it on GitLab: https://gitlab.com/ultreiaio/ird-observe/commit/db9f5e24d58519442e33c8ac410…
You're receiving this email because of your account on gitlab.com.
1
0
[Git][ultreiaio/ird-observe][develop-7.x] 2 commits: fix a missing decorator
by Tony CHEMIT 20 Sep '18
by Tony CHEMIT 20 Sep '18
20 Sep '18
Tony CHEMIT pushed to branch develop-7.x at ultreiaio / ird-observe
Commits:
7e6a822d by Tony CHEMIT at 2018-09-20T20:40:35Z
fix a missing decorator
- - - - -
4ff135c9 by Tony CHEMIT at 2018-09-20T20:41:25Z
Suppression de la configuration d'ajout de référentiels dans les deux actions de synchronisation de données + réusinage du code commun aux deux actions
- - - - -
13 changed files:
- client/src/main/java/fr/ird/observe/client/ui/admin/AdminTabUIHandler.java
- client/src/main/java/fr/ird/observe/client/ui/admin/export/ExportModel.java
- client/src/main/java/fr/ird/observe/client/ui/admin/export/ExportUI.jaxx
- client/src/main/java/fr/ird/observe/client/ui/admin/export/ExportUI.jcss
- client/src/main/java/fr/ird/observe/client/ui/admin/export/ExportUIHandler.java
- client/src/main/java/fr/ird/observe/client/ui/admin/synchronize/data/DataSynchroModel.java
- client/src/main/java/fr/ird/observe/client/ui/admin/synchronize/data/DataSynchroUI.jaxx
- client/src/main/java/fr/ird/observe/client/ui/admin/synchronize/data/DataSynchroUI.jcss
- client/src/main/java/fr/ird/observe/client/ui/admin/synchronize/data/DataSynchroUIHandler.java
- client/src/main/resources/i18n/client_en_GB.properties
- client/src/main/resources/i18n/client_es_ES.properties
- client/src/main/resources/i18n/client_fr_FR.properties
- dto/src/main/java/fr/ird/observe/dto/decoration/DecoratorService.java
Changes:
=====================================
client/src/main/java/fr/ird/observe/client/ui/admin/AdminTabUIHandler.java
=====================================
@@ -25,10 +25,16 @@ import fr.ird.observe.client.ObserveRunner;
import fr.ird.observe.client.ObserveSwingApplicationContext;
import fr.ird.observe.client.db.ObserveSwingDataSource;
import fr.ird.observe.client.ui.admin.resume.ShowResumeUI;
+import fr.ird.observe.client.ui.content.ref.usage.UsageForDisplayUI;
+import fr.ird.observe.client.ui.util.ProgressModel;
+import fr.ird.observe.client.ui.util.UIHelper;
import fr.ird.observe.dto.I18nEnumHelper;
import fr.ird.observe.dto.decoration.DecoratorService;
+import fr.ird.observe.dto.decoration.ObserveI18nDecoratorHelper;
import fr.ird.observe.dto.decoration.decorators.ReferentialReferenceDecorator;
import fr.ird.observe.dto.reference.DataDtoReference;
+import fr.ird.observe.dto.reference.DtoReference;
+import fr.ird.observe.dto.reference.ReferentialDtoReference;
import fr.ird.observe.dto.referential.ProgramReference;
import fr.ird.observe.services.service.BabModelVersionException;
import fr.ird.observe.services.service.DatabaseConnexionNotAuthorizedException;
@@ -36,14 +42,23 @@ import fr.ird.observe.services.service.DatabaseNotFoundException;
import fr.ird.observe.services.service.data.DeleteTripResult;
import fr.ird.observe.services.service.data.ExportTripResult;
import fr.ird.observe.services.service.data.ImportTripResult;
+import fr.ird.observe.services.service.referential.MissingReferentialRequest;
+import fr.ird.observe.services.service.referential.MissingReferentialResult;
+import fr.ird.observe.services.service.referential.ReferentialService;
+import fr.ird.observe.spi.map.ImmutableSetDtoMap;
+import fr.ird.observe.spi.map.ImmutableSetStringMap;
import org.apache.commons.lang3.StringUtils;
-import org.apache.logging.log4j.Logger;
import org.apache.logging.log4j.LogManager;
+import org.apache.logging.log4j.Logger;
+import org.nuiton.decorator.Decorator;
import org.nuiton.jaxx.runtime.swing.wizard.ext.WizardState;
import org.nuiton.util.StringUtil;
+import javax.swing.JOptionPane;
import java.io.PrintWriter;
import java.io.StringWriter;
+import java.util.Collection;
+import java.util.Set;
import java.util.concurrent.Callable;
import static org.nuiton.i18n.I18n.n;
@@ -65,7 +80,7 @@ public class AdminTabUIHandler<U extends AdminTabUI> {
protected AdminUI parentUI;
/** Service de decoration. */
- private DecoratorService decoratorService;
+ protected DecoratorService decoratorService;
public void beforeInit(U ui) {
this.ui = ui;
@@ -181,12 +196,13 @@ public class AdminTabUIHandler<U extends AdminTabUI> {
}
protected void logExportResult(String i18nKey,
+ String sourceLabel,
ExportTripResult tripResult,
ReferentialReferenceDecorator programDecorator,
ProgramReference program,
DataDtoReference trip) {
- String message = sendLogResultMessage(i18nKey, programDecorator, program, trip, tripResult.getTime());
+ String message = sendLogResultMessage(i18nKey, sourceLabel, programDecorator, program, trip, tripResult.getTime());
if (log.isInfoEnabled()) {
log.info(message);
}
@@ -196,6 +212,7 @@ public class AdminTabUIHandler<U extends AdminTabUI> {
protected void logImportResult(String importI18nKey,
String deleteI18nKey,
+ String sourceLabel,
ImportTripResult tripResult,
ReferentialReferenceDecorator programDecorator,
ProgramReference program,
@@ -203,7 +220,7 @@ public class AdminTabUIHandler<U extends AdminTabUI> {
if (tripResult.isDeleted()) {
- String message = sendLogResultMessage(deleteI18nKey, programDecorator, program, trip, tripResult.getDeleteTime());
+ String message = sendLogResultMessage(deleteI18nKey, sourceLabel, programDecorator, program, trip, tripResult.getDeleteTime());
if (log.isInfoEnabled()) {
log.info(message);
}
@@ -212,7 +229,7 @@ public class AdminTabUIHandler<U extends AdminTabUI> {
if (tripResult.isImported()) {
- String message = sendLogResultMessage(importI18nKey, programDecorator, program, trip, tripResult.getImportTime());
+ String message = sendLogResultMessage(importI18nKey, sourceLabel, programDecorator, program, trip, tripResult.getImportTime());
if (log.isInfoEnabled()) {
log.info(message);
}
@@ -222,12 +239,13 @@ public class AdminTabUIHandler<U extends AdminTabUI> {
}
protected void logDeleteResult(String deleteI18nKey,
+ String sourceLabel,
DeleteTripResult tripResult,
ReferentialReferenceDecorator programDecorator,
ProgramReference program,
DataDtoReference trip) {
- String message = sendLogResultMessage(deleteI18nKey, programDecorator, program, trip, tripResult.getTime());
+ String message = sendLogResultMessage(deleteI18nKey, sourceLabel, programDecorator, program, trip, tripResult.getTime());
if (log.isInfoEnabled()) {
log.info(message);
}
@@ -235,7 +253,7 @@ public class AdminTabUIHandler<U extends AdminTabUI> {
}
protected String sendLogResultMessage(String i18nKey,
- ReferentialReferenceDecorator programDecorator,
+ String sourceLabel, ReferentialReferenceDecorator programDecorator,
ProgramReference program,
DataDtoReference trip,
long time) {
@@ -244,9 +262,60 @@ public class AdminTabUIHandler<U extends AdminTabUI> {
String programStr = programDecorator.toString(program);
String tripStr = decoratorService.getDataReferenceDecorator(trip.getReferenceType()).toString(trip);
String timeStr = StringUtil.convertTime(time);
- String message = StringUtils.leftPad(timeStr, 20) + " - " + t(i18nKey, programStr, tripStr);
+ String message = StringUtils.leftPad(timeStr, 20) + " - " + t(i18nKey, sourceLabel, programStr, tripStr);
sendMessage(message);
return message;
}
+ protected WizardState prepareCopy(ProgressModel progressModel, ObserveSwingDataSource centralSource, String centralSourceLabel, ObserveSwingDataSource targetSource, String targetSourceLabel, Collection<String> idsToCopy) {
+
+ progressModel.incrementsCurrentStep();
+
+ ReferentialService targetReferentialService = targetSource.getReferentialService();
+ ImmutableSetStringMap targetSourceReferential = targetReferentialService.getReferentialIds();
+ MissingReferentialRequest missingReferentialRequest = MissingReferentialRequest.of(targetSourceReferential, idsToCopy.toArray(new String[0]));
+ MissingReferentialResult missingReferentialResult = centralSource.getReferentialService().computeMissingReferential(missingReferentialRequest);
+
+ progressModel.incrementsCurrentStep();
+
+ if (missingReferentialResult == null) {
+ progressModel.incrementsCurrentStep();
+ return WizardState.SUCCESSED;
+ }
+
+ // there is some referential to add to target source
+
+ String message = t("observe.message.show.usage.for.missingReferentials2", centralSourceLabel, targetSourceLabel);
+
+ ImmutableSetDtoMap<ReferentialDtoReference> usages = centralSource.getReferentialMap(missingReferentialResult.getMissingIds());
+ UsageForDisplayUI usagesUI = UsageForDisplayUI.build(message, usages);
+
+ int response = UIHelper.askUser(null,
+ t("observe.title.can.not.export.data2", targetSourceLabel),
+ usagesUI,
+ JOptionPane.WARNING_MESSAGE,
+ new Object[]{
+ t("observe.choice.confirm.insert"),
+ t("observe.choice.cancel")},
+ 0);
+
+ if (response != 0) {
+ return WizardState.CANCELED;
+ }
+
+ log.info(String.format("Base «%s» - Insertion des référentiels manquants.", targetSourceLabel));
+
+ for (Class<? extends ReferentialDtoReference> key : usages.referentialReferenceTypes()) {
+ Set<? extends ReferentialDtoReference> references = usages.get(key);
+ String type = t(ObserveI18nDecoratorHelper.getTypePluralI18nKey(key));
+ sendMessage(t("observe.actions.exportData.message.add.missing.referentials2", targetSourceLabel, references.size(), type));
+ Decorator decorator = decoratorService.getReferenceDecorator(key);
+ for (DtoReference reference : references) {
+ sendMessage(t("observe.actions.exportData.message.add.missing.referential", decorator.toString(reference)));
+ }
+ }
+ progressModel.incrementsCurrentStep();
+ targetReferentialService.insertMissingReferential(missingReferentialResult.getSqlCode());
+ return WizardState.SUCCESSED;
+ }
}
=====================================
client/src/main/java/fr/ird/observe/client/ui/admin/export/ExportModel.java
=====================================
@@ -61,7 +61,6 @@ public class ExportModel extends AdminActionModel {
protected ObserveSwingDataSource centralSource;
- protected boolean insertMissingReferentials;
private final ProgressModel progressModel = new ProgressModel();
public ExportModel() {
@@ -129,15 +128,6 @@ public class ExportModel extends AdminActionModel {
}
- public boolean isInsertMissingReferentials() {
- return insertMissingReferentials;
- }
-
- public void setInsertMissingReferentials(boolean insertMissingReferentials) {
- this.insertMissingReferentials = insertMissingReferentials;
- firePropertyChange("insertMissingReferential", null, insertMissingReferentials);
- }
-
public boolean validate(AdminUIModel uiModel) {
return uiModel.validate(AdminStep.SELECT_DATA) && uiModel.getStepState(step) == WizardState.SUCCESSED;
}
=====================================
client/src/main/java/fr/ird/observe/client/ui/admin/export/ExportUI.jaxx
=====================================
@@ -64,9 +64,6 @@ public void updateState(WizardState newState) {
<JPanel id='NEED_FIX_content'>
- <JCheckBox id="insertMissingReferentials" constraints='BorderLayout.NORTH'
- onStateChanged='getStepModel().setInsertMissingReferentials(((JCheckBox)event.getSource()).isSelected())'/>
-
<!-- la liste des trips -->
<JScrollPane id='tripPane' constraints='BorderLayout.CENTER'>
<JTable id='trips'/>
=====================================
client/src/main/java/fr/ird/observe/client/ui/admin/export/ExportUI.jcss
=====================================
@@ -46,8 +46,3 @@
columnHeaderView:{trips.getTableHeader()};
verticalScrollBarPolicy:{JScrollPane.VERTICAL_SCROLLBAR_AS_NEEDED};
}
-
-#insertMissingReferentials {
- text:"observe.action.export.requiredInsertMissingReferentials";
- selected:{stepModel.isInsertMissingReferentials()};
-}
=====================================
client/src/main/java/fr/ird/observe/client/ui/admin/export/ExportUIHandler.java
=====================================
@@ -6,15 +6,15 @@
* %%
* 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
+ * 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
+ *
+ * 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%
@@ -27,46 +27,35 @@ import fr.ird.observe.client.ui.ObserveKeyStrokes;
import fr.ird.observe.client.ui.admin.AdminStep;
import fr.ird.observe.client.ui.admin.AdminTabUIHandler;
import fr.ird.observe.client.ui.admin.AdminUIModel;
+import fr.ird.observe.client.ui.admin.config.ConfigModel;
import fr.ird.observe.client.ui.admin.config.ConfigUI;
-import fr.ird.observe.client.ui.content.ref.usage.UsageForDisplayUI;
import fr.ird.observe.client.ui.tree.selection.SelectionTreeModel;
import fr.ird.observe.client.ui.util.ProgressModel;
import fr.ird.observe.client.ui.util.UIHelper;
import fr.ird.observe.dto.data.longline.TripLonglineReference;
import fr.ird.observe.dto.data.seine.TripSeineReference;
import fr.ird.observe.dto.decoration.DecoratorService;
-import fr.ird.observe.dto.decoration.ObserveI18nDecoratorHelper;
import fr.ird.observe.dto.decoration.decorators.DataReferenceDecorator;
import fr.ird.observe.dto.decoration.decorators.ReferentialReferenceDecorator;
-import fr.ird.observe.dto.reference.DtoReference;
-import fr.ird.observe.dto.reference.ReferentialDtoReference;
import fr.ird.observe.dto.referential.ProgramReference;
import fr.ird.observe.services.service.data.ExportTripRequest;
import fr.ird.observe.services.service.data.ExportTripResult;
import fr.ird.observe.services.service.data.ImportTripRequest;
import fr.ird.observe.services.service.data.ImportTripResult;
import fr.ird.observe.services.service.data.TripManagementService;
-import fr.ird.observe.services.service.referential.MissingReferentialRequest;
-import fr.ird.observe.services.service.referential.MissingReferentialResult;
-import fr.ird.observe.services.service.referential.ReferentialService;
-import fr.ird.observe.spi.map.ImmutableSetDtoMap;
-import fr.ird.observe.spi.map.ImmutableSetStringMap;
import org.apache.commons.collections4.CollectionUtils;
import org.apache.logging.log4j.LogManager;
import org.apache.logging.log4j.Logger;
-import org.nuiton.decorator.Decorator;
import org.nuiton.jaxx.runtime.spi.UIHandler;
import org.nuiton.jaxx.runtime.swing.editor.MyDefaultCellEditor;
import org.nuiton.jaxx.runtime.swing.wizard.ext.WizardState;
-import javax.swing.JOptionPane;
import javax.swing.JTable;
import javax.swing.table.DefaultTableCellRenderer;
import java.awt.event.MouseAdapter;
import java.awt.event.MouseEvent;
import java.util.Date;
import java.util.List;
-import java.util.Set;
import java.util.stream.Collectors;
import static org.nuiton.i18n.I18n.n;
@@ -157,18 +146,14 @@ public class ExportUIHandler extends AdminTabUIHandler<ExportUI> implements UIHa
}
}
- public void doPrepareAction() {
-
+ void doPrepareAction() {
addAdminWorker(ui.getPrepareAction().getToolTipText(), this::doPrepareAction0);
}
public void doStartAction() {
-
int[] rows = ui.getTripsModel().getSelected();
ui.getModel().getExportModel().setExportDataSelectedIndex(rows);
-
addAdminWorker(ui.getStartAction().getToolTipText(), this::doStartAction0);
-
}
private WizardState doPrepareAction0() throws Exception {
@@ -232,8 +217,9 @@ public class ExportUIHandler extends AdminTabUIHandler<ExportUI> implements UIHa
AdminUIModel model = ui.getModel();
ExportModel stepModel = model.getExportModel();
-
- boolean insertMissingReferentials = stepModel.isInsertMissingReferentials();
+ ConfigModel configModel = model.getConfigModel();
+ String sourceSourceLabel = configModel.getLocalSourceModel().getLabelWithUrl().substring(configModel.getLocalSourceModel().getLabel().length());
+ String centralSourceLabel = configModel.getCentralSourceModel().getLabelWithUrl().substring(configModel.getCentralSourceModel().getLabel().length());
// on filtre les marées sélectionnées pour export
List<TripEntry> tripEntries = stepModel.getSelectedTrips();
@@ -243,10 +229,7 @@ public class ExportUIHandler extends AdminTabUIHandler<ExportUI> implements UIHa
DecoratorService decoratorService = getDecoratorService();
ReferentialReferenceDecorator<ProgramReference> programDecorator = decoratorService.getReferentialReferenceDecorator(ProgramReference.class);
- int stepCount = 2 + 2 * tripEntries.size();
- if (insertMissingReferentials) {
- stepCount++;
- }
+ int stepCount = 4 + 2 * tripEntries.size();
ProgressModel progressModel = stepModel.getProgressModel();
progressModel.setStepsCount(stepCount);
@@ -261,71 +244,11 @@ public class ExportUIHandler extends AdminTabUIHandler<ExportUI> implements UIHa
TripManagementService centralTripManagementService = centralDataSource.getTripManagementService();
- ReferentialService centralReferentialService = centralDataSource.getReferentialService();
-
- // chargement du référentiel de la base centrale
- if (log.isInfoEnabled()) {
- log.info("Chargement du réferentiel de la base centrale.");
- }
- ImmutableSetStringMap centralSourceReferential = centralReferentialService.getReferentialIds();
-
List<String> tripIds = tripEntries.stream().map(TripEntry::getTripId).collect(Collectors.toList());
- // génération du code sql pour les référentiels manquants
- if (log.isInfoEnabled()) {
- log.info("Chargement de l'enveloppe de référentiels pour les " + tripIds.size() + " marée(s).");
- }
- MissingReferentialRequest missingReferentialRequest = MissingReferentialRequest.of(centralSourceReferential, tripIds.toArray(new String[0]));
- MissingReferentialResult result =
- localDataSource.getReferentialService().computeMissingReferential(missingReferentialRequest);
-
- if (!insertMissingReferentials && result != null) {
-
- // l'export n'est pas possible
- UIHelper.displayWarning(t("observe.title.can.not.export.data"), t("observe.actions.exportData.error.missingReferentialsId"));
- sendMessage(t("observe.actions.exportData.error.missingReferentialsId"));
- return WizardState.CANCELED;
- }
-
- if (insertMissingReferentials && result != null) {
-
- String message = t("observe.message.show.usage.for.missingReferentials");
-
- ImmutableSetDtoMap<ReferentialDtoReference> usages = localDataSource.getReferentialMap(result.getMissingIds());
- UsageForDisplayUI usagesUI = UsageForDisplayUI.build(message, usages);
-
- int reponse = UIHelper.askUser(null,
- t("observe.title.can.not.export.data"),
- usagesUI,
- JOptionPane.WARNING_MESSAGE,
- new Object[]{
- t("observe.choice.confirm.insert"),
- t("observe.choice.cancel")},
- 0);
-
- if (reponse != 0) {
-
- return WizardState.CANCELED;
- }
-
- // insertion des référentiels manquants dans la base centrale
- if (log.isInfoEnabled()) {
- log.info("Insertion dans la base centrale des référentiels manquants.");
- }
-
- for (Class<? extends ReferentialDtoReference> key : usages.referentialReferenceTypes()) {
- Set<? extends ReferentialDtoReference> references = usages.get(key);
- String type = t(ObserveI18nDecoratorHelper.getTypePluralI18nKey(key));
- sendMessage(t("observe.actions.exportData.message.add.missing.referentials", type, references.size()));
- Decorator decorator = decoratorService.getReferenceDecorator(key);
- for (DtoReference reference : references) {
- sendMessage(t("observe.actions.exportData.message.add.missing.referential", decorator.toString(reference)));
- }
- }
-
- progressModel.incrementsCurrentStep();
- centralReferentialService.insertMissingReferential(result.getSqlCode());
-
+ WizardState result = prepareCopy(progressModel, localDataSource, sourceSourceLabel, centralDataSource, centralSourceLabel, tripIds);
+ if (WizardState.CANCELED.equals(result)) {
+ return result;
}
for (TripEntry tripEntry : tripEntries) {
@@ -333,7 +256,8 @@ public class ExportUIHandler extends AdminTabUIHandler<ExportUI> implements UIHa
progressModel.incrementsCurrentStep();
ExportTripRequest exportTripRequest = new ExportTripRequest(false, tripEntry.getProgramId(), tripEntry.getTripId());
ExportTripResult exportTripResult = localTripManagementService.exportTrip(exportTripRequest);
- logExportResult(n("observe.actions.exportData.message.result.export.trip"),
+ logExportResult(n("observe.actions.synchro.data.result.export.trip"),
+ sourceSourceLabel,
exportTripResult,
programDecorator,
tripEntry.getProgram(),
@@ -342,8 +266,9 @@ public class ExportUIHandler extends AdminTabUIHandler<ExportUI> implements UIHa
progressModel.incrementsCurrentStep();
ImportTripRequest importTripRequest = new ImportTripRequest(exportTripResult);
ImportTripResult importTripResult = centralTripManagementService.importTrip(importTripRequest);
- logImportResult(n("observe.actions.exportData.message.result.import.trip"),
- n("observe.actions.exportData.message.result.delete.trip"),
+ logImportResult(n("observe.actions.synchro.data.result.import.trip"),
+ n("observe.actions.synchro.data.result.delete.trip"),
+ centralSourceLabel,
importTripResult,
programDecorator,
tripEntry.getProgram(),
=====================================
client/src/main/java/fr/ird/observe/client/ui/admin/synchronize/data/DataSynchroModel.java
=====================================
@@ -64,7 +64,7 @@ public class DataSynchroModel extends AdminActionModel {
/** les données sélectionnées sur le panneau de droite. */
protected SelectionTreeModel rightSelectionDataModel;
- protected boolean insertMissingReferentials;
+
protected final DefaultListModel<DataSynchronizeTaskSupport> tasks;
private final ProgressModel progressModel = new ProgressModel();
@@ -131,14 +131,6 @@ public class DataSynchroModel extends AdminActionModel {
return rightSelectionDataModel;
}
- public boolean isInsertMissingReferentials() {
- return insertMissingReferentials;
- }
-
- public void setInsertMissingReferentials(boolean insertMissingReferentials) {
- this.insertMissingReferentials = insertMissingReferentials;
- }
-
public void populateLeftSelectionModel() {
populateSelectionModel(leftSource, leftSelectionDataModel, LEFT_SELECTION_MODEL_CHANGED_PROPERTY_NAME);
}
=====================================
client/src/main/java/fr/ird/observe/client/ui/admin/synchronize/data/DataSynchroUI.jaxx
=====================================
@@ -49,9 +49,6 @@
</Table>
</JPanel>
<JPanel id='NEED_FIX_content'>
- <JCheckBox id="insertMissingReferentials" constraints='BorderLayout.NORTH'
- onStateChanged='getStepModel().setInsertMissingReferentials(((JCheckBox)event.getSource()).isSelected())'/>
-
<JSplitPane id="contentSplitPane" constraints='BorderLayout.CENTER'>
<Table id='contentNorth' fill="both" weighty="1">
<row>
=====================================
client/src/main/java/fr/ird/observe/client/ui/admin/synchronize/data/DataSynchroUI.jcss
=====================================
@@ -45,11 +45,6 @@
mnemonic:Q;
}
-#insertMissingReferentials {
- text:"observe.action.export.requiredInsertMissingReferentials";
- selected:{stepModel.isInsertMissingReferentials()};
-}
-
#leftTree {
minimumSize:{UIHelper.newMinDimension()};
font-size:11;
=====================================
client/src/main/java/fr/ird/observe/client/ui/admin/synchronize/data/DataSynchroUIHandler.java
=====================================
@@ -33,17 +33,12 @@ import fr.ird.observe.client.ui.admin.synchronize.data.task.CopyToRightDataSynch
import fr.ird.observe.client.ui.admin.synchronize.data.task.DataSynchronizeTaskSupport;
import fr.ird.observe.client.ui.admin.synchronize.data.task.DeleteFromLeftDataSynchronizeTask;
import fr.ird.observe.client.ui.admin.synchronize.data.task.DeleteFromRightDataSynchronizeTask;
-import fr.ird.observe.client.ui.content.ref.usage.UsageForDisplayUI;
import fr.ird.observe.client.ui.tree.selection.SelectionTree;
import fr.ird.observe.client.ui.tree.selection.SelectionTreeModel;
import fr.ird.observe.client.ui.util.ProgressModel;
-import fr.ird.observe.client.ui.util.UIHelper;
import fr.ird.observe.dto.decoration.DecoratorService;
-import fr.ird.observe.dto.decoration.ObserveI18nDecoratorHelper;
import fr.ird.observe.dto.decoration.decorators.ReferentialReferenceDecorator;
import fr.ird.observe.dto.reference.DataDtoReference;
-import fr.ird.observe.dto.reference.DtoReference;
-import fr.ird.observe.dto.reference.ReferentialDtoReference;
import fr.ird.observe.dto.referential.ProgramReference;
import fr.ird.observe.services.service.data.DeleteTripRequest;
import fr.ird.observe.services.service.data.DeleteTripResult;
@@ -52,19 +47,12 @@ import fr.ird.observe.services.service.data.ExportTripResult;
import fr.ird.observe.services.service.data.ImportTripRequest;
import fr.ird.observe.services.service.data.ImportTripResult;
import fr.ird.observe.services.service.data.TripManagementService;
-import fr.ird.observe.services.service.referential.MissingReferentialRequest;
-import fr.ird.observe.services.service.referential.MissingReferentialResult;
-import fr.ird.observe.services.service.referential.ReferentialService;
-import fr.ird.observe.spi.map.ImmutableSetDtoMap;
-import fr.ird.observe.spi.map.ImmutableSetStringMap;
import org.apache.logging.log4j.LogManager;
import org.apache.logging.log4j.Logger;
-import org.nuiton.decorator.Decorator;
import org.nuiton.jaxx.runtime.spi.UIHandler;
import org.nuiton.jaxx.runtime.swing.wizard.ext.WizardState;
import javax.swing.DefaultListModel;
-import javax.swing.JOptionPane;
import javax.swing.border.TitledBorder;
import java.awt.Color;
import java.util.LinkedHashSet;
@@ -84,6 +72,8 @@ import static org.nuiton.i18n.I18n.t;
public class DataSynchroUIHandler extends AdminTabUIHandler<DataSynchroUI> implements UIHandler<DataSynchroUI> {
private static final Logger log = LogManager.getLogger(DataSynchroUIHandler.class);
+ private String leftSourceLabel;
+ private String rightSourceLabel;
@Override
public void afterInit(DataSynchroUI ui) {
@@ -143,7 +133,7 @@ public class DataSynchroUIHandler extends AdminTabUIHandler<DataSynchroUI> imple
addAdminWorker(getUi().getStartAction().getToolTipText(), this::doStartAction0);
}
- public void addCopyToLeftTasks() {
+ void addCopyToLeftTasks() {
SelectionTreeModel rightSelectionDataModel = getStepModel().getRightSelectionDataModel();
SelectionTreeModel leftSelectionDataModel = getStepModel().getLeftSelectionDataModel();
Map<ProgramReference, List<DataDtoReference<?, ?>>> selectedDataByProgram = rightSelectionDataModel.getSelectedDataByProgram();
@@ -160,7 +150,7 @@ public class DataSynchroUIHandler extends AdminTabUIHandler<DataSynchroUI> imple
}
}
- public void addCopyToRightTasks() {
+ void addCopyToRightTasks() {
SelectionTreeModel leftSelectionDataModel = getStepModel().getLeftSelectionDataModel();
SelectionTreeModel rightSelectionDataModel = getStepModel().getRightSelectionDataModel();
Map<ProgramReference, List<DataDtoReference<?, ?>>> selectedDataByProgram = leftSelectionDataModel.getSelectedDataByProgram();
@@ -177,7 +167,7 @@ public class DataSynchroUIHandler extends AdminTabUIHandler<DataSynchroUI> imple
}
}
- public void addDeleteFromLeftTasks() {
+ void addDeleteFromLeftTasks() {
SelectionTreeModel selectionDataModel = getStepModel().getLeftSelectionDataModel();
Map<ProgramReference, List<DataDtoReference<?, ?>>> selectedDataByProgram = selectionDataModel.getSelectedDataByProgram();
selectionDataModel.removeAllSelectedData();
@@ -189,7 +179,7 @@ public class DataSynchroUIHandler extends AdminTabUIHandler<DataSynchroUI> imple
}
}
- public void addDeleteFromRightTasks() {
+ void addDeleteFromRightTasks() {
SelectionTreeModel selectionDataModel = getStepModel().getRightSelectionDataModel();
Map<ProgramReference, List<DataDtoReference<?, ?>>> selectedDataByProgram = selectionDataModel.getSelectedDataByProgram();
selectionDataModel.removeAllSelectedData();
@@ -201,7 +191,24 @@ public class DataSynchroUIHandler extends AdminTabUIHandler<DataSynchroUI> imple
}
}
- public void doExecuteAction() {
+ public String getLeftSourceLabel() {
+ if (leftSourceLabel == null) {
+ ConfigModel configModel = getModel().getConfigModel();
+ leftSourceLabel = configModel.getLocalSourceModel().getLabelWithUrl().substring(configModel.getLocalSourceModel().getLabel().length());
+ }
+ return leftSourceLabel;
+ }
+
+ public String getRightSourceLabel() {
+ if (rightSourceLabel == null) {
+ ConfigModel configModel = getModel().getConfigModel();
+ rightSourceLabel = configModel.getCentralSourceModel().getLabelWithUrl().substring(configModel.getCentralSourceModel().getLabel().length());
+ }
+ return rightSourceLabel;
+ }
+
+ void doExecuteAction() {
+ leftSourceLabel = rightSourceLabel = null;
addAdminWorker(getUi().getStartAction().getToolTipText(), this::doExecuteAction0);
}
@@ -211,6 +218,9 @@ public class DataSynchroUIHandler extends AdminTabUIHandler<DataSynchroUI> imple
DataSynchroModel stepModel = getStepModel();
ConfigUI configUI = (ConfigUI) parentUI.getStepUI(AdminStep.CONFIG);
+ String leftSourceLabel = getLeftSourceLabel();
+ String rightSourceLabel = getRightSourceLabel();
+
ConfigModel configModel = getModel().getConfigModel();
ObserveSwingDataSource leftSource = configModel.getSafeLocalSource(true);
@@ -220,10 +230,9 @@ public class DataSynchroUIHandler extends AdminTabUIHandler<DataSynchroUI> imple
stepModel.setRightSource(rightSource);
stepModel.populateLeftSelectionModel();
- String leftLabelWithUrl = configModel.getLocalSourceModel().getLabelWithUrl();
- sendMessage(t("observe.actions.synchro.data.message.data.loaded", leftLabelWithUrl));
+ sendMessage(t("observe.actions.synchro.data.message.data.loaded", leftSourceLabel));
- TitledBorder leftBorder = new TitledBorder(leftLabelWithUrl);
+ TitledBorder leftBorder = new TitledBorder(leftSourceLabel);
boolean leftCanWriteData = configModel.getLocalSourceModel().getDataSourceInformation().canWriteData();
leftBorder.setTitleColor(leftCanWriteData ? Color.GREEN : Color.RED);
tabUI.getLeftTreePane().setBorder(leftBorder);
@@ -234,10 +243,9 @@ public class DataSynchroUIHandler extends AdminTabUIHandler<DataSynchroUI> imple
configUI.getLocalSourceConfig().setBorder(leftBorder);
stepModel.populateRightSelectionModel();
- String rightLabelWithUrl = configModel.getCentralSourceModel().getLabelWithUrl();
- sendMessage(t("observe.actions.synchro.data.message.data.loaded", rightLabelWithUrl));
+ sendMessage(t("observe.actions.synchro.data.message.data.loaded", rightSourceLabel));
- TitledBorder rightBorder = new TitledBorder(rightLabelWithUrl);
+ TitledBorder rightBorder = new TitledBorder(rightSourceLabel);
boolean rightCanWriteData = configModel.getCentralSourceModel().getDataSourceInformation().canWriteData();
rightBorder.setTitleColor(rightCanWriteData ? Color.GREEN : Color.RED);
tabUI.getRightTreePane().setBorder(rightBorder);
@@ -254,9 +262,11 @@ public class DataSynchroUIHandler extends AdminTabUIHandler<DataSynchroUI> imple
private WizardState doExecuteAction0() {
ObserveSwingDataSource leftSource = getStepModel().getLeftSource();
-
ObserveSwingDataSource rightSource = getStepModel().getRightSource();
+ String leftSourceLabel = getLeftSourceLabel();
+ String rightSourceLabel = getRightSourceLabel();
+
DefaultListModel<DataSynchronizeTaskSupport> tasks = getStepModel().getTasks();
int size = tasks.size();
@@ -289,131 +299,19 @@ public class DataSynchroUIHandler extends AdminTabUIHandler<DataSynchroUI> imple
progressModel.setStepsCount(stepsCount);
DecoratorService decoratorService = getDecoratorService();
- boolean insertMissingReferentials = getStepModel().isInsertMissingReferentials();
if (copyToLeft) {
-
// generate add missing referential to left
-
- progressModel.incrementsCurrentStep();
-
- ReferentialService leftReferentialService = leftSource.getReferentialService();
- ImmutableSetStringMap leftSourceReferential = leftReferentialService.getReferentialIds();
- MissingReferentialRequest leftMissingReferentialRequest = MissingReferentialRequest.of(leftSourceReferential, idsToCopyToLeft.toArray(new String[0]));
- MissingReferentialResult leftMissingReferentialResult =
- rightSource.getReferentialService().computeMissingReferential(leftMissingReferentialRequest);
-
- progressModel.incrementsCurrentStep();
-
- if (!insertMissingReferentials && leftMissingReferentialResult != null) {
-
- // l'export n'est pas possible
- UIHelper.displayWarning(t("observe.title.can.not.export.data.left"), t("observe.actions.exportData.error.missingReferentialsId.left"));
- sendMessage(t("observe.actions.exportData.error.missingReferentialsId.left"));
- return WizardState.CANCELED;
- }
-
- if (leftMissingReferentialResult == null) {
- progressModel.incrementsCurrentStep();
- } else {
-
- // there is some referential to add to left source
-
- String message = t("observe.message.show.usage.for.missingReferentials.left");
-
- ImmutableSetDtoMap<ReferentialDtoReference> usages = rightSource.getReferentialMap(leftMissingReferentialResult.getMissingIds());
- UsageForDisplayUI usagesUI = UsageForDisplayUI.build(message, usages);
-
- int reponse = UIHelper.askUser(null,
- t("observe.title.can.not.export.data.left"),
- usagesUI,
- JOptionPane.WARNING_MESSAGE,
- new Object[]{
- t("observe.choice.confirm.insert"),
- t("observe.choice.cancel")},
- 0);
-
- if (reponse != 0) {
-
- return WizardState.CANCELED;
- }
-
- // insertion des référentiels manquants dans la base centrale
- log.info("Insertion dans la base de gauche des référentiels manquants.");
-
- for (Class<? extends ReferentialDtoReference> key : usages.referentialReferenceTypes()) {
- Set<? extends ReferentialDtoReference> references = usages.get(key);
- String type = t(ObserveI18nDecoratorHelper.getTypePluralI18nKey(key));
- sendMessage(t("observe.actions.exportData.message.add.missing.referentials.left", references.size(), type));
- Decorator decorator = decoratorService.getReferenceDecorator(key);
- for (DtoReference reference : references) {
- sendMessage(t("observe.actions.exportData.message.add.missing.referential", decorator.toString(reference)));
- }
- }
- progressModel.incrementsCurrentStep();
- leftReferentialService.insertMissingReferential(leftMissingReferentialResult.getSqlCode());
+ WizardState result = prepareCopy(progressModel, rightSource, rightSourceLabel, leftSource, leftSourceLabel, idsToCopyToLeft);
+ if (WizardState.CANCELED.equals(result)) {
+ return result;
}
}
if (copyToRight) {
-
// generate add missing referential to right
-
- progressModel.incrementsCurrentStep();
-
- ReferentialService rightReferentialService = rightSource.getReferentialService();
- ImmutableSetStringMap rightSourceReferential = rightReferentialService.getReferentialIds();
- MissingReferentialRequest rightMissingReferentialRequest = MissingReferentialRequest.of(rightSourceReferential, idsToCopyToRight.toArray(new String[0]));
- MissingReferentialResult rightMissingReferentialResult =
- leftSource.getReferentialService().computeMissingReferential(rightMissingReferentialRequest);
-
- progressModel.incrementsCurrentStep();
-
- if (!insertMissingReferentials && rightMissingReferentialResult != null) {
-
- // l'export n'est pas possible
- UIHelper.displayWarning(t("observe.title.can.not.export.data.right"), t("observe.actions.exportData.error.missingReferentialsId.right"));
- sendMessage(t("observe.actions.exportData.error.missingReferentialsId.right"));
- return WizardState.CANCELED;
- }
-
- if (rightMissingReferentialResult == null) {
- progressModel.incrementsCurrentStep();
- } else {
-
- // there is some referential to add to left source
-
- String message = t("observe.message.show.usage.for.missingReferentials.right");
-
- ImmutableSetDtoMap<ReferentialDtoReference> usages = leftSource.getReferentialMap(rightMissingReferentialResult.getMissingIds());
- UsageForDisplayUI usagesUI = UsageForDisplayUI.build(message, usages);
-
- int reponse = UIHelper.askUser(null,
- t("observe.title.can.not.export.data.right"),
- usagesUI,
- JOptionPane.WARNING_MESSAGE,
- new Object[]{
- t("observe.choice.confirm.insert"),
- t("observe.choice.cancel")},
- 0);
-
- if (reponse != 0) {
-
- return WizardState.CANCELED;
- }
-
- log.info("Insertion dans la base de droite des référentiels manquants.");
-
- for (Class<? extends ReferentialDtoReference> key : usages.referentialReferenceTypes()) {
- Set<? extends ReferentialDtoReference> references = usages.get(key);
- String type = t(ObserveI18nDecoratorHelper.getTypePluralI18nKey(key));
- sendMessage(t("observe.actions.exportData.message.add.missing.referentials.right", references.size(), type));
- Decorator decorator = decoratorService.getReferenceDecorator(key);
- for (DtoReference reference : references) {
- sendMessage(t("observe.actions.exportData.message.add.missing.referential", decorator.toString(reference)));
- }
- }
- progressModel.incrementsCurrentStep();
- rightReferentialService.insertMissingReferential(rightMissingReferentialResult.getSqlCode());
+ WizardState result = prepareCopy(progressModel, leftSource, leftSourceLabel, rightSource, rightSourceLabel, idsToCopyToRight);
+ if (WizardState.CANCELED.equals(result)) {
+ return result;
}
}
@@ -427,105 +325,34 @@ public class DataSynchroUIHandler extends AdminTabUIHandler<DataSynchroUI> imple
DataSynchronizeTaskSupport task = tasks.getElementAt(i);
ProgramReference program = task.getProgram();
- String programId = program.getId();
- String programStr = programDecorator.toString(program);
DataDtoReference trip = task.getTrip();
- String tripId = trip.getId();
- String tripStr = decoratorService.getDataReferenceDecorator(trip.getReferenceType()).toString(trip);
progressModel.incrementsCurrentStep();
if (task instanceof DeleteFromLeftDataSynchronizeTask) {
-
- sendMessage(t("observe.actions.synchro.data.prepare.deleteFromLeftTask", programStr, tripStr));
-
- DeleteTripRequest deleteTripRequest = new DeleteTripRequest(programId, tripId);
- DeleteTripResult deleteTripResult = leftTripManagementService.deleteTrip(deleteTripRequest);
- logDeleteResult(n("observe.actions.synchro.data.result.delete.left.trip"),
- deleteTripResult,
- programDecorator,
- program,
- trip);
- if (leftSource.isLocal()) {
- leftSource.setModified(true);
- }
+ executeDeleteTask(programDecorator, program, trip,
+ leftSource, leftSourceLabel, leftTripManagementService);
continue;
-
}
if (task instanceof DeleteFromRightDataSynchronizeTask) {
-
- sendMessage(t("observe.actions.synchro.data.prepare.deleteFromRightTask", programStr, tripStr));
-
- DeleteTripRequest deleteTripRequest = new DeleteTripRequest(programId, tripId);
- DeleteTripResult deleteTripResult = rightTripManagementService.deleteTrip(deleteTripRequest);
- logDeleteResult(n("observe.actions.synchro.data.result.delete.right.trip"),
- deleteTripResult,
- programDecorator,
- program,
- trip);
- if (rightSource.isLocal()) {
- rightSource.setModified(true);
- }
+ executeDeleteTask(programDecorator, program, trip,
+ rightSource, rightSourceLabel, rightTripManagementService);
continue;
-
}
if (task instanceof CopyToLeftDataSynchronizeTask) {
-
- sendMessage(t("observe.actions.synchro.data.prepare.copyToLeftTask", programStr, tripStr));
-
- ExportTripRequest exportTripRequest = new ExportTripRequest(!leftSource.isLocal(), programId, tripId);
- ExportTripResult exportTripResult = rightTripManagementService.exportTrip(exportTripRequest);
- logExportResult(n("observe.actions.synchro.data.result.export.right.trip"),
- exportTripResult,
- programDecorator,
- program,
- trip);
-
- progressModel.incrementsCurrentStep();
- ImportTripRequest importTripRequest = new ImportTripRequest(exportTripResult);
- ImportTripResult importTripResult = leftTripManagementService.importTrip(importTripRequest);
- logImportResult(n("observe.actions.synchro.data.result.import.left.trip"),
- n("observe.actions.synchro.data.result.delete.left.trip"),
- importTripResult,
- programDecorator,
- program,
- trip);
-
- if (leftSource.isLocal()) {
- leftSource.setModified(true);
- }
+ executeCopyTask(progressModel, programDecorator, program, trip,
+ rightSource, rightSourceLabel, rightTripManagementService,
+ leftSource, leftSourceLabel, leftTripManagementService);
continue;
-
}
if (task instanceof CopyToRightDataSynchronizeTask) {
-
- sendMessage(t("observe.actions.synchro.data.prepare.copyToRightTask", programStr, tripStr));
-
- ExportTripRequest exportTripRequest = new ExportTripRequest(!rightSource.isLocal(), programId, tripId);
- ExportTripResult exportTripResult = leftTripManagementService.exportTrip(exportTripRequest);
- logExportResult(n("observe.actions.synchro.data.result.export.left.trip"),
- exportTripResult,
- programDecorator,
- program,
- trip);
-
- progressModel.incrementsCurrentStep();
- ImportTripRequest importTripRequest = new ImportTripRequest(exportTripResult);
- ImportTripResult importTripResult = rightTripManagementService.importTrip(importTripRequest);
- logImportResult(n("observe.actions.synchro.data.result.import.right.trip"),
- n("observe.actions.synchro.data.result.delete.right.trip"),
- importTripResult,
- programDecorator,
- program,
- trip);
- if (rightSource.isLocal()) {
- rightSource.setModified(true);
- }
-
+ executeCopyTask(progressModel, programDecorator, program, trip,
+ leftSource, leftSourceLabel, leftTripManagementService,
+ rightSource, rightSourceLabel, rightTripManagementService);
}
}
@@ -534,4 +361,71 @@ public class DataSynchroUIHandler extends AdminTabUIHandler<DataSynchroUI> imple
}
+ private void executeDeleteTask(ReferentialReferenceDecorator<ProgramReference> programDecorator,
+ ProgramReference program, DataDtoReference trip,
+ ObserveSwingDataSource targetSource, String targetSourceLabel, TripManagementService targetTripManagementService) {
+
+ String programId = program.getId();
+ String programStr = programDecorator.toString(program);
+
+ String tripId = trip.getId();
+ @SuppressWarnings("unchecked")
+ String tripStr = decoratorService.getDataReferenceDecorator(trip.getReferenceType()).toString(trip);
+
+
+ sendMessage(t("observe.actions.synchro.data.prepare.deleteTask", targetSourceLabel, programStr, tripStr));
+
+ DeleteTripRequest deleteTripRequest = new DeleteTripRequest(programId, tripId);
+ DeleteTripResult deleteTripResult = targetTripManagementService.deleteTrip(deleteTripRequest);
+ logDeleteResult(n("observe.actions.synchro.data.result.delete.trip"),
+ targetSourceLabel,
+ deleteTripResult,
+ programDecorator,
+ program,
+ trip);
+ if (targetSource.isLocal()) {
+ targetSource.setModified(true);
+ }
+
+ }
+
+ private void executeCopyTask(ProgressModel progressModel,
+ ReferentialReferenceDecorator<ProgramReference> programDecorator,
+ ProgramReference program, DataDtoReference trip,
+ ObserveSwingDataSource centralSource, String centralSourceLabel, TripManagementService centralTripManagementService,
+ ObserveSwingDataSource targetSource, String targetSourceLabel, TripManagementService targetTripManagementService) {
+
+ String programId = program.getId();
+ String programStr = programDecorator.toString(program);
+ String tripId = trip.getId();
+ @SuppressWarnings("unchecked")
+ String tripStr = decoratorService.getDataReferenceDecorator(trip.getReferenceType()).toString(trip);
+
+ sendMessage(t("observe.actions.synchro.data.prepare.copyToTask", targetSourceLabel, programStr, tripStr));
+
+ ExportTripRequest exportTripRequest = new ExportTripRequest(!targetSource.isLocal(), programId, tripId);
+ ExportTripResult exportTripResult = centralTripManagementService.exportTrip(exportTripRequest);
+ logExportResult(n("observe.actions.synchro.data.result.export.trip"),
+ centralSourceLabel,
+ exportTripResult,
+ programDecorator,
+ program,
+ trip);
+
+ progressModel.incrementsCurrentStep();
+ ImportTripRequest importTripRequest = new ImportTripRequest(exportTripResult);
+ ImportTripResult importTripResult = targetTripManagementService.importTrip(importTripRequest);
+ logImportResult(n("observe.actions.synchro.data.result.import.trip"),
+ n("observe.actions.synchro.data.result.delete.trip"),
+ targetSourceLabel,
+ importTripResult,
+ programDecorator,
+ program,
+ trip);
+
+ if (targetSource.isLocal()) {
+ targetSource.setModified(true);
+ }
+ }
+
}
=====================================
client/src/main/resources/i18n/client_en_GB.properties
=====================================
@@ -155,8 +155,7 @@ observe.actions.exportData.error.missingReferentialsId.left=Can't export data, t
observe.actions.exportData.error.missingReferentialsId.right=Can't export data, there is some missing referentials in right source and you did not select insert option.
observe.actions.exportData.message.add.missing.referential=\t%s
observe.actions.exportData.message.add.missing.referentials=Insert %s missing referentials of type «%s»
-observe.actions.exportData.message.add.missing.referentials.left=Insert %s missing referentials of type «%s» in left source
-observe.actions.exportData.message.add.missing.referentials.right=Insert %s missing referentials of type «%s» in right source
+observe.actions.exportData.message.add.missing.referentials2=Database «%s» - Insert %s missing referentials of type «%s»
observe.actions.exportData.message.not.possible=Export is not possible (see above messages)
observe.actions.exportData.message.operation.needFix=Select data to export.
observe.actions.exportData.message.prepare.data=Prepare data to export...
@@ -206,17 +205,12 @@ observe.actions.synchro.data.deleteFromLeft.tip=Delete selected trip(s) from lef
observe.actions.synchro.data.deleteFromRight.tip=Delete selected trip(s) from right database
observe.actions.synchro.data.description=Advanced data management
observe.actions.synchro.data.launch.operation=Get data fro databases
-observe.actions.synchro.data.message.data.loaded=%s - Data loaded
-observe.actions.synchro.data.prepare.copyToLeftTask=Register operation copy to left database\: %s - %s
-observe.actions.synchro.data.prepare.copyToRightTask=Register operation copy to right database\: %s - %s
-observe.actions.synchro.data.prepare.deleteFromLeftTask=Register operation delete from left database\: %s - %s
-observe.actions.synchro.data.prepare.deleteFromRightTask=Register operation delete from right database\: %s - %s
-observe.actions.synchro.data.result.delete.left.trip=Trip %s - %s was removed from left database.
-observe.actions.synchro.data.result.delete.right.trip=Trip %s - %s was removed from right database.
-observe.actions.synchro.data.result.export.left.trip=Trip %s - %s was exported from left database.
-observe.actions.synchro.data.result.export.right.trip=Trip %s - %s was exported from right database.
-observe.actions.synchro.data.result.import.left.trip=Trip %s - %s was imported into left database.
-observe.actions.synchro.data.result.import.right.trip=Trip %s - %s was imported into right database.
+observe.actions.synchro.data.message.data.loaded=Database «%s» - Data loaded
+observe.actions.synchro.data.prepare.copyToTask=Database «%s» - Register operation copy to database\: %s - %s
+observe.actions.synchro.data.prepare.deleteTask=Database «%s» - Register operation delete from database\: %s - %s
+observe.actions.synchro.data.result.delete.trip=Database «%s» - Trip %s - %s was removed from database.
+observe.actions.synchro.data.result.export.trip=Database «%s» - Trip %s - %s was exported from database.
+observe.actions.synchro.data.result.import.trip=Database «%s» - Trip %s - %s was imported into database.
observe.actions.synchro.data.task.copyToLeft=Copy to left database\: <i>%s</i> - «<b>%s</b>»
observe.actions.synchro.data.task.copyToRight=Copy to right database\: <i>%s</i> - «<b>%s</b>»
observe.actions.synchro.data.task.deleteFromLeft=Delete from left database\: <i>%s</i> - «<b>%s</b>»
@@ -1316,8 +1310,7 @@ observe.message.show.usage.for.desactivated=Referential %1$s "%2$s" will be disa
observe.message.show.usage.for.desactivated2=Some data are using this referential, see following reference
observe.message.show.usage.for.desactivated3=Those data need to use another enabled referential to be saved.
observe.message.show.usage.for.missingReferentials=There is some referentials present in local source but not in centrale one.
-observe.message.show.usage.for.missingReferentials.left=There is some referentials present in right source but not in left one.
-observe.message.show.usage.for.missingReferentials.right=There is some referentials present in left source but not in right one.
+observe.message.show.usage.for.missingReferentials2=There is some referentials present in «%s» source but not in the «%s» one.
observe.message.show.usages=List of usage of referential %1$s\: '%2$s'
observe.message.table.editBean.modified=Current entry is modifed and valid.
observe.message.table.editBean.modified.but.invalid=Current entry is modified but not valid.
@@ -1473,8 +1466,7 @@ observe.storage.useServerStorage.description=Please configure connexion to remot
observe.title.about=About
observe.title.can.not.delete.referentiel=Impossible to delete a referentiel data...
observe.title.can.not.export.data=Could not export data
-observe.title.can.not.export.data.left=Could not export data to left source
-observe.title.can.not.export.data.right=Could not export data to right source
+observe.title.can.not.export.data2=Could not export data to «%s» source
observe.title.can.not.export.obstuna=Could not export obstuna data...
observe.title.choose.db.dump=Choose a database backup
observe.title.choose.db.dump.directory=Chhose directory of backup
=====================================
client/src/main/resources/i18n/client_es_ES.properties
=====================================
@@ -155,14 +155,13 @@ observe.actions.exportData.error.missingReferentialsId.left=Il existe des réfé
observe.actions.exportData.error.missingReferentialsId.right=Il existe des référentiels dans la base de droite non présente en base centrale, mais vous n'avez pas activé l'option d'insertion automatique. \#TODO
observe.actions.exportData.message.add.missing.referential=\t%s
observe.actions.exportData.message.add.missing.referentials=Insertion de %s référentiels de type «%s» \#TODO
-observe.actions.exportData.message.add.missing.referentials.left=Insertion de %s référentiels de type «%s» dans la base de gauche\#TODO
-observe.actions.exportData.message.add.missing.referentials.right=Insertion de %s référentiels de type «%s» dans la base de droite\#TODO
+observe.actions.exportData.message.add.missing.referentials2=Base «%s» - Insertion de %s référentiels de type «%s»\#TODO
observe.actions.exportData.message.not.possible=La exportación no es posible (vea el mensaje anterior).
observe.actions.exportData.message.operation.needFix=Seleccione las mareas a exportar.
observe.actions.exportData.message.prepare.data=Preparación de los datos a exportar...
-observe.actions.exportData.message.result.delete.trip=La marea %s - %s fue eliminada de la base central
-observe.actions.exportData.message.result.export.trip=La marea %s - %s fue exportada de la base locale
-observe.actions.exportData.message.result.import.trip=La marea %s - %s fue importada en la base central
+observe.actions.exportData.message.result.delete.trip=Base «%s» - La marea %s - %s fue eliminada.
+observe.actions.exportData.message.result.export.trip=Base «%s» - La marea %s - %s fue exportada.
+observe.actions.exportData.message.result.import.trip=Base «%s» - La marea %s - %s fue importada.
observe.actions.exportData.table.exist.label=E
observe.actions.exportData.table.exist.label.tip=Marea ya está presente en la base de datos remota
observe.actions.exportData.table.program.label=Programa
@@ -206,17 +205,12 @@ observe.actions.synchro.data.deleteFromLeft.tip=Eliminar la ou las mareas selecc
observe.actions.synchro.data.deleteFromRight.tip=Eliminar la ou las mareas seleccionada(s) de la base de la derecha
observe.actions.synchro.data.description=Gestión avanzada de los datos de los usuarios
observe.actions.synchro.data.launch.operation=Recuperar los datos de las fuentes de datos
-observe.actions.synchro.data.message.data.loaded=%s - Datos recuperadas.
-observe.actions.synchro.data.prepare.copyToLeftTask=Preparación de la copia en la base de la izquierda \: %s - %s
-observe.actions.synchro.data.prepare.copyToRightTask=Preparación de la copia en la base de la derecha \: %s - %s
-observe.actions.synchro.data.prepare.deleteFromLeftTask=Preparación de la eliminación de la base de la izquierda \: %s - %s
-observe.actions.synchro.data.prepare.deleteFromRightTask=Preparación de la eliminación de la base de la derecha \: %s - %s
-observe.actions.synchro.data.result.delete.left.trip=Eliminación de la marea %s - %s en la base de la izquierda realizada.
-observe.actions.synchro.data.result.delete.right.trip=Eliminación de la marea %s - %s en la base de la derecha realizada.
-observe.actions.synchro.data.result.export.left.trip=Exportación de la marea %s - %s desde la base de la izquierda realizada.
-observe.actions.synchro.data.result.export.right.trip=Exportación de la marea %s - %s desde la base de la derecha realizada.
-observe.actions.synchro.data.result.import.left.trip=Inserción de la marea %s - %s en la base de la izquierda realizada.
-observe.actions.synchro.data.result.import.right.trip=Inserción de la marea %s - %s en la base de la derecha realizada.
+observe.actions.synchro.data.message.data.loaded=Base «%s» - Datos recuperadas.
+observe.actions.synchro.data.prepare.copyToTask=Base «%s» - Preparación de la copia \: %s - %s
+observe.actions.synchro.data.prepare.deleteTask=Base «%s» - Preparación de la eliminación de la base \: %s - %s
+observe.actions.synchro.data.result.delete.trip=Base «%s» - Eliminación de la marea %s - %s en la base.
+observe.actions.synchro.data.result.export.trip=Base «%s» - Exportación de la marea %s - %s desde la base.
+observe.actions.synchro.data.result.import.trip=Base «%s» - Inserción de la marea %s - %s en la base.
observe.actions.synchro.data.task.copyToLeft=Copiar en la base de la izquierda \: <i>%s</i> - «<b>%s</b>»
observe.actions.synchro.data.task.copyToRight=Copiar en la base de la derecha \: <i>%s</i> - «<b>%s</b>»
observe.actions.synchro.data.task.deleteFromLeft=Eliminar en la base de la izquierda \: <i>%s</i> - «<b>%s</b>»
@@ -1316,8 +1310,7 @@ observe.message.show.usage.for.desactivated=El referencial %1$s "%2$s" se desact
observe.message.show.usage.for.desactivated2=Los objetos están usando actualmente las referencias que se enumeran a continuación..
observe.message.show.usage.for.desactivated3=Estos objetos deben usar otro referencial (no desactivado) para poder actualizarse.
observe.message.show.usage.for.missingReferentials=Il existe des référentiels présents dans la base locale mais non présents dans la base centrale. \#TODO
-observe.message.show.usage.for.missingReferentials.left=Il existe des référentiels présents dans la base de droite mais non présents dans la base de gauche.
-observe.message.show.usage.for.missingReferentials.right=Il existe des référentiels présents dans la base de gauche mais non présents dans la base droite.
+observe.message.show.usage.for.missingReferentials2=There is some referentials present in «%s» source but not in the «%s» one.
observe.message.show.usages=Listas de usos de referenciales %1$s \: '%2$s'
observe.message.table.editBean.modified=El registro actual se ha modificado y es válido.
observe.message.table.editBean.modified.but.invalid=El registro actual se ha modificado pero no es válido.
@@ -1473,8 +1466,7 @@ observe.storage.useServerStorage.description=Configure su conexión al servidor
observe.title.about=A proposito de ObServe...
observe.title.can.not.delete.referentiel=Impossible eliminar un referencial en proceso de utilización...
observe.title.can.not.export.data=Impossible d'exporter les données vers la base centrale... \#TODO
-observe.title.can.not.export.data.left=Impossible d'exporter les données vers la base de gauche... \#TODO
-observe.title.can.not.export.data.right=Impossible d'exporter les données vers la base de droite... \#TODO
+observe.title.can.not.export.data2=Impossible d'exporter les données vers la base «%s»... \#TODO
observe.title.can.not.export.obstuna=Impossible exportar los datos de obstuna...
observe.title.choose.db.dump=Seleccionar una copia de seguridad de base local
observe.title.choose.db.dump.directory=Seleccionar e directorio de destinación de la copia de seguridad
=====================================
client/src/main/resources/i18n/client_fr_FR.properties
=====================================
@@ -155,14 +155,13 @@ observe.actions.exportData.error.missingReferentialsId.left=Il existe des réfé
observe.actions.exportData.error.missingReferentialsId.right=Il existe des référentiels dans la base de droite non présente en base centrale, mais vous n'avez pas activé l'option d'insertion automatique.
observe.actions.exportData.message.add.missing.referential=\t%s
observe.actions.exportData.message.add.missing.referentials=Insertion de %s référentiels de type «%s»
-observe.actions.exportData.message.add.missing.referentials.left=Insertion de %s référentiels de type «%s» dans la base de gauche
-observe.actions.exportData.message.add.missing.referentials.right=Insertion de %s référentiels de type «%s» dans la base de droite
+observe.actions.exportData.message.add.missing.referentials2=Source «%s» - Insertion de %s référentiels de type «%s»
observe.actions.exportData.message.not.possible=L'opération d'export n'est pas possible (voir les messages précédents).
observe.actions.exportData.message.operation.needFix=Veuillez sélectionner les marées à exporter.
observe.actions.exportData.message.prepare.data=Préparation des données à exporter...
-observe.actions.exportData.message.result.delete.trip=La marée %s - %s a été supprimée de la base centrale
-observe.actions.exportData.message.result.export.trip=La marée %s - %s a été exportée depuis la base locale
-observe.actions.exportData.message.result.import.trip=La marée %s - %s a été importée dans la base centrale
+observe.actions.exportData.message.result.delete.trip=Source «%s» - La marée %s - %s a été supprimée de la base centrale
+observe.actions.exportData.message.result.export.trip=Source «%s» - La marée %s - %s a été exportée depuis la base locale
+observe.actions.exportData.message.result.import.trip=Source «%s» - La marée %s - %s a été importée dans la base centrale
observe.actions.exportData.table.exist.label=E
observe.actions.exportData.table.exist.label.tip=Marée déjà présente sur la base distante
observe.actions.exportData.table.program.label=Programme
@@ -206,17 +205,12 @@ observe.actions.synchro.data.deleteFromLeft.tip=Supprimer la ou les marées sél
observe.actions.synchro.data.deleteFromRight.tip=Supprimer la ou les marées sélectionnée(s) de la base de droite
observe.actions.synchro.data.description=Gestion avancée des données utilisateurs
observe.actions.synchro.data.launch.operation=Récupérer les données des sources de données
-observe.actions.synchro.data.message.data.loaded=%s - Données récupérées.
-observe.actions.synchro.data.prepare.copyToLeftTask=Préparation de la recopie vers la base de gauche \: %s - %s
-observe.actions.synchro.data.prepare.copyToRightTask=Préparation de la recopie vers la base de droite \: %s - %s
-observe.actions.synchro.data.prepare.deleteFromLeftTask=Préparation de la suppression de la base de gauche \: %s - %s
-observe.actions.synchro.data.prepare.deleteFromRightTask=Préparation de la suppression de la base de droite \: %s - %s
-observe.actions.synchro.data.result.delete.left.trip=Suppression de la marée %s - %s dans la base de gauche effectuée.
-observe.actions.synchro.data.result.delete.right.trip=Suppression de la marée %s - %s dans la base de droite effectuée.
-observe.actions.synchro.data.result.export.left.trip=Export de la marée %s - %s depuis la base de gauche effectuée.
-observe.actions.synchro.data.result.export.right.trip=Export de la marée %s - %s depuis la base de droite effectuée.
-observe.actions.synchro.data.result.import.left.trip=Insertion de la marée %s - %s dans la base de gauche effectuée.
-observe.actions.synchro.data.result.import.right.trip=Insertion de la marée %s - %s dans la base de droite effectuée.
+observe.actions.synchro.data.message.data.loaded=Source «%s» - Données récupérées.
+observe.actions.synchro.data.prepare.copyToTask=Source «%s» - Préparation de la recopie \: %s - %s
+observe.actions.synchro.data.prepare.deleteTask=Source «%s» - Préparation de la suppression \: %s - %s
+observe.actions.synchro.data.result.delete.trip=Source «%s» - Suppression de la marée %s - %s effectuée.
+observe.actions.synchro.data.result.export.trip=Source «%s» - Export de la marée %s - %s effectuée.
+observe.actions.synchro.data.result.import.trip=Source «%s» - Insertion de la marée %s - %s effectuée.
observe.actions.synchro.data.task.copyToLeft=Copier vers la base de gauche \: <i>%s</i> - «<b>%s</b>»
observe.actions.synchro.data.task.copyToRight=Copier vers la base de droite \: <i>%s</i> - «<b>%s</b>»
observe.actions.synchro.data.task.deleteFromLeft=Supprimer de la base de gauche \: <i>%s</i> - «<b>%s</b>»
@@ -1316,8 +1310,7 @@ observe.message.show.usage.for.desactivated=Le référentiel %1$s "%2$s" va êtr
observe.message.show.usage.for.desactivated2=Des objets utilisent actuellement cet entité dont les références sont citées plus bas.
observe.message.show.usage.for.desactivated3=Ces objets devront utiliser un autre référentiel (non désactivé) pour pouvoir être mis à jour.
observe.message.show.usage.for.missingReferentials=Il existe des référentiels présents dans la base locale mais non présents dans la base centrale.
-observe.message.show.usage.for.missingReferentials.left=Il existe des référentiels présents dans la base de droite mais non présents dans la base de gauche.
-observe.message.show.usage.for.missingReferentials.right=Il existe des référentiels présents dans la base de gauche mais non présents dans la base droite.
+observe.message.show.usage.for.missingReferentials2=Il existe des référentiels présents dans la base «%s» mais non présents dans la base «%s».
observe.message.show.usages=Listes des utilisations du référentiel %1$s \: '%2$s'
observe.message.table.editBean.modified=L'entrée en cours d'édition a été modifiée et est valide.
observe.message.table.editBean.modified.but.invalid=L'entrée en cours d'édition a été modifiée, mais n'est pas valide.
@@ -1473,8 +1466,7 @@ observe.storage.useServerStorage.description=Veuillez configurer votre connexion
observe.title.about=A propos d'ObServe...
observe.title.can.not.delete.referentiel=Impossible de supprimer un référentiel en cours d'utilisation...
observe.title.can.not.export.data=Impossible d'exporter les données vers la base centrale...
-observe.title.can.not.export.data.left=Impossible d'exporter les données vers la base de gauche...
-observe.title.can.not.export.data.right=Impossible d'exporter les données vers la base de droite...
+observe.title.can.not.export.data2=Impossible d'exporter les données vers la base «%s»...
observe.title.can.not.export.obstuna=Impossible d'exporter des données d'obstuna...
observe.title.choose.db.dump=Choisir une sauvegarder de base locale
observe.title.choose.db.dump.directory=Choisir le répertoire de destination de la sauvegarde
=====================================
dto/src/main/java/fr/ird/observe/dto/decoration/DecoratorService.java
=====================================
@@ -57,6 +57,7 @@ import fr.ird.observe.dto.data.longline.SizeMeasureDto;
import fr.ird.observe.dto.data.longline.SizeMeasureReference;
import fr.ird.observe.dto.data.longline.TdrDto;
import fr.ird.observe.dto.data.longline.TdrReference;
+import fr.ird.observe.dto.data.longline.TripLonglineActivityDto;
import fr.ird.observe.dto.data.longline.TripLonglineReference;
import fr.ird.observe.dto.data.longline.WeightMeasureDto;
import fr.ird.observe.dto.data.longline.WeightMeasureReference;
@@ -361,6 +362,8 @@ public class DecoratorService extends DecoratorProvider {
"${timeStamp}$td/%1$tm/%1$tY %1$tH:%1$tM##${vesselActivityLongline/label}$s",
"${timeStamp}$td/%1$tm/%1$tY %1$tH:%1$tM##${vesselActivityLonglineLabel}$s",
" - ");
+
+ registerObserveDecorator(TripLonglineActivityDto.class, "${timeStamp}$td/%1$tm/%1$tY %1$tH:%1$t", " - ");
}
@Override
View it on GitLab: https://gitlab.com/ultreiaio/ird-observe/compare/4f6ea307b1f060d966b99ef88f…
--
View it on GitLab: https://gitlab.com/ultreiaio/ird-observe/compare/4f6ea307b1f060d966b99ef88f…
You're receiving this email because of your account on gitlab.com.
1
0
[Git][ultreiaio/ird-observe][develop-7.x] 2 commits: Add more accelerator on referential nb synchro config ui
by Tony CHEMIT 20 Sep '18
by Tony CHEMIT 20 Sep '18
20 Sep '18
Tony CHEMIT pushed to branch develop-7.x at ultreiaio / ird-observe
Commits:
1fd32665 by Tony CHEMIT at 2018-09-20T18:28:57Z
Add more accelerator on referential nb synchro config ui
- - - - -
4f6ea307 by Tony CHEMIT at 2018-09-20T18:29:16Z
fix parameter order to generate update sql statement
- - - - -
3 changed files:
- client/src/main/java/fr/ird/observe/client/ui/ObserveKeyStrokes.java
- client/src/main/java/fr/ird/observe/client/ui/admin/synchronize/referential/ng/ReferentialSynchroUIHandler.java
- services-local/src/main/java/fr/ird/observe/services/local/service/actions/synchro/referential/sql/UpdateSqlStatementGenerator.java
Changes:
=====================================
client/src/main/java/fr/ird/observe/client/ui/ObserveKeyStrokes.java
=====================================
@@ -68,6 +68,10 @@ public abstract class ObserveKeyStrokes {
public static final KeyStroke KEY_STROKE_SHOW_EMPTY_PROGRAM = KeyStroke.getKeyStroke("ctrl pressed F5");
public static final KeyStroke KEY_STROKE_CONFIGURE_LOCAL_SOURCE = KeyStroke.getKeyStroke("ctrl pressed L");
public static final KeyStroke KEY_STROKE_CONFIGURE_REMOTE_SOURCE = KeyStroke.getKeyStroke("ctrl pressed R");
+ public static final KeyStroke KEY_STROKE_CONFIGURE_SYNCHRO_FROM_LEFT = KeyStroke.getKeyStroke("ctrl pressed A");
+ public static final KeyStroke KEY_STROKE_CONFIGURE_SYNCHRO_FROM_RIGHT = KeyStroke.getKeyStroke("ctrl pressed B");
+ public static final KeyStroke KEY_STROKE_CONFIGURE_SYNCHRO_FROM_BOTH = KeyStroke.getKeyStroke("ctrl pressed C");
+
public static final KeyStroke KEY_STROKE_SAVE_TABLE_ENTRY = KeyStroke.getKeyStroke("ctrl pressed S");
public static final KeyStroke KEY_STROKE_PRESSED_ENTER = KeyStroke.getKeyStroke("pressed ENTER");
public static final KeyStroke KEY_STROKE_RESET_DATA = KeyStroke.getKeyStroke("pressed F7");
=====================================
client/src/main/java/fr/ird/observe/client/ui/admin/synchronize/referential/ng/ReferentialSynchroUIHandler.java
=====================================
@@ -36,17 +36,20 @@ import fr.ird.observe.services.configuration.ObserveDataSourceInformation;
import fr.ird.observe.services.service.actions.synchro.referential.diff.ReferentialSynchronizeDiffService;
import fr.ird.observe.services.service.actions.synchro.referential.diff.ReferentialSynchronizeDiffsEngine;
import org.apache.commons.lang3.tuple.Pair;
-import org.apache.logging.log4j.Logger;
import org.apache.logging.log4j.LogManager;
+import org.apache.logging.log4j.Logger;
import org.nuiton.jaxx.runtime.context.JAXXInitialContext;
import org.nuiton.jaxx.runtime.spi.UIHandler;
import org.nuiton.jaxx.runtime.swing.wizard.ext.WizardState;
+import javax.swing.AbstractAction;
+import javax.swing.JComponent;
import javax.swing.JScrollPane;
import javax.swing.JTree;
import javax.swing.border.TitledBorder;
import javax.swing.event.TreeSelectionListener;
import java.awt.Color;
+import java.awt.event.ActionEvent;
import java.util.Optional;
import static org.nuiton.i18n.I18n.t;
@@ -75,7 +78,7 @@ public class ReferentialSynchroUIHandler extends AdminTabUIHandler<ReferentialSy
@Override
public void afterInit(ReferentialSynchroUI ui) {
- super.afterInit(this.ui);
+
ConfigUI configUI = (ConfigUI) parentUI.getStepUI(AdminStep.CONFIG);
JAXXInitialContext tx = new JAXXInitialContext().add(configUI).add(this);
@@ -84,6 +87,33 @@ public class ReferentialSynchroUIHandler extends AdminTabUIHandler<ReferentialSy
configUI.getExtraConfig().add(extraConfig);
+ configUI.getInputMap(JComponent.WHEN_IN_FOCUSED_WINDOW).put(ObserveKeyStrokes.KEY_STROKE_CONFIGURE_SYNCHRO_FROM_LEFT, "fromLeft");
+ configUI.getInputMap(JComponent.WHEN_IN_FOCUSED_WINDOW).put(ObserveKeyStrokes.KEY_STROKE_CONFIGURE_SYNCHRO_FROM_RIGHT, "fromRight");
+ configUI.getInputMap(JComponent.WHEN_IN_FOCUSED_WINDOW).put(ObserveKeyStrokes.KEY_STROKE_CONFIGURE_SYNCHRO_FROM_BOTH, "fromBoth");
+ configUI.getActionMap().put("fromLeft", new AbstractAction() {
+ @Override
+ public void actionPerformed(ActionEvent e) {
+ extraConfig.getLEFT_TO_RIGHT().doClick();
+ }
+ });
+ configUI.getActionMap().put("fromRight", new AbstractAction() {
+ @Override
+ public void actionPerformed(ActionEvent e) {
+ extraConfig.getRIGHT_TO_LEFT().doClick();
+ }
+ });
+ configUI.getActionMap().put("fromBoth", new AbstractAction() {
+ @Override
+ public void actionPerformed(ActionEvent e) {
+ extraConfig.getBOTH().doClick();
+ }
+ });
+ ObserveKeyStrokes.addKeyStroke(extraConfig.getLEFT_TO_RIGHT(), ObserveKeyStrokes.KEY_STROKE_CONFIGURE_SYNCHRO_FROM_LEFT);
+ ObserveKeyStrokes.addKeyStroke(extraConfig.getRIGHT_TO_LEFT(), ObserveKeyStrokes.KEY_STROKE_CONFIGURE_SYNCHRO_FROM_RIGHT);
+ ObserveKeyStrokes.addKeyStroke(extraConfig.getBOTH(), ObserveKeyStrokes.KEY_STROKE_CONFIGURE_SYNCHRO_FROM_BOTH);
+
+ super.afterInit(this.ui);
+
ObserveKeyStrokes.addKeyStrokeFromMnemonic(ui.getStartAction());
ObserveKeyStrokes.addKeyStrokeFromMnemonic(ui.getApplyAction());
}
=====================================
services-local/src/main/java/fr/ird/observe/services/local/service/actions/synchro/referential/sql/UpdateSqlStatementGenerator.java
=====================================
@@ -152,7 +152,7 @@ public class UpdateSqlStatementGenerator<D extends ReferentialDto> {
}
}
- String updateSql = TopiaSqlStatements.generateUpdateStatement(metadataEntity, parameters.substring(2), referentialDto.getId());
+ String updateSql = TopiaSqlStatements.generateUpdateStatement(metadataEntity, referentialDto.getId(), parameters.substring(2));
result.add(updateSql);
String id = referentialDto.getId();
View it on GitLab: https://gitlab.com/ultreiaio/ird-observe/compare/ee5c5ef04a1ecb2e2ad68cc9ed…
--
View it on GitLab: https://gitlab.com/ultreiaio/ird-observe/compare/ee5c5ef04a1ecb2e2ad68cc9ed…
You're receiving this email because of your account on gitlab.com.
1
0
[Git][ultreiaio/ird-observe][develop-7.x] 2 commits: improve logs (validators are now warns a lot too much :()
by Tony CHEMIT 20 Sep '18
by Tony CHEMIT 20 Sep '18
20 Sep '18
Tony CHEMIT pushed to branch develop-7.x at ultreiaio / ird-observe
Commits:
699e9f79 by Tony CHEMIT at 2018-09-20T15:57:42Z
improve logs (validators are now warns a lot too much :()
- - - - -
ee5c5ef0 by Tony CHEMIT at 2018-09-20T16:28:44Z
[LL] Après migration l'UI v7 n'affiche plus qu'une seule des captures de chaque opération de pêche - Closes #1068
- - - - -
6 changed files:
- client-configuration/src/main/resources/log4j2.xml
- client-configuration/src/main/resources/observe-log4j2.xml
- persistence/src/main/java/fr/ird/observe/persistence/migration/DataSourceMigrationForVersion_6_0.java
- persistence/src/main/java/fr/ird/observe/persistence/migration/DataSourceMigrationForVersion_7_0.java
- server-configuration/src/main/resources/log4j2.xml
- server-configuration/src/main/resources/observeweb-log4j2.xml
Changes:
=====================================
client-configuration/src/main/resources/log4j2.xml
=====================================
@@ -53,6 +53,10 @@
<AppenderRef ref="console"/>
<AppenderRef ref="File"/>
</Logger>
+ <Logger name="org.nuiton.jaxx.validator.swing.SwingValidator" level="error" additivity="false">
+ <AppenderRef ref="console"/>
+ <AppenderRef ref="File"/>
+ </Logger>
<Logger name="fr.ird.observe.client.validators" level="warn" additivity="false">
<AppenderRef ref="console"/>
<AppenderRef ref="File"/>
=====================================
client-configuration/src/main/resources/observe-log4j2.xml
=====================================
@@ -53,6 +53,10 @@
<AppenderRef ref="console"/>
<AppenderRef ref="File"/>
</Logger>
+ <Logger name="org.nuiton.jaxx.validator.swing.SwingValidator" level="error" additivity="false">
+ <AppenderRef ref="console"/>
+ <AppenderRef ref="File"/>
+ </Logger>
<Logger name="fr.ird.observe.client.validators" level="warn" additivity="false">
<AppenderRef ref="console"/>
<AppenderRef ref="File"/>
=====================================
persistence/src/main/java/fr/ird/observe/persistence/migration/DataSourceMigrationForVersion_6_0.java
=====================================
@@ -62,6 +62,8 @@ public class DataSourceMigrationForVersion_6_0 extends MigrationVersionResource
executor.addScript("01", "evol_8374_delete_sonarUsed");
executor.addScript("02", "evol_7886_catch_add_set_idx");
+ migrateIdx(executor, "observe_longline", "catch", "set");
+
executor.addScript("04", "evol_6832_branchlineComposition_add_tracelineLength");
executor.addScript("05", "evol_6999_nonTargetCatch_add_well");
executor.addScript("06", "evol_8375_setSeine_add_booleans");
=====================================
persistence/src/main/java/fr/ird/observe/persistence/migration/DataSourceMigrationForVersion_7_0.java
=====================================
@@ -23,18 +23,10 @@ package fr.ird.observe.persistence.migration;
*/
import com.google.auto.service.AutoService;
-import org.apache.commons.lang3.tuple.Pair;
-import org.nuiton.topia.persistence.support.TopiaSqlQuery;
-import org.nuiton.topia.service.migration.resources.MigrationVersionResourceExecutor;
import org.nuiton.topia.service.migration.resources.MigrationVersionResource;
+import org.nuiton.topia.service.migration.resources.MigrationVersionResourceExecutor;
import org.nuiton.version.Versions;
-import java.sql.Connection;
-import java.sql.PreparedStatement;
-import java.sql.ResultSet;
-import java.sql.SQLException;
-import java.util.List;
-
/**
* Created on 27/10/16.
*
@@ -56,47 +48,11 @@ public class DataSourceMigrationForVersion_7_0 extends MigrationVersionResource
executor.addScript("03", "add_order_on_seine_catches");
executor.addScript("04", "add_order_on_seine_samples");
- migrateIdx(executor, "nonTargetCatch", "set");
- migrateIdx(executor, "targetCatch", "set");
- migrateIdx(executor, "targetLength", "targetSample");
- migrateIdx(executor, "nonTargetLength", "nonTargetSample");
-
- }
-
- private void migrateIdx(MigrationVersionResourceExecutor executor, String mainTable, String field) {
- List<Pair<String, String>> result = executor.findMultipleResult(new MigrateIdxSqlQuery(mainTable, field));
- String currentId = null;
- int position = 0;
- for (Pair<String, String> pair : result) {
- String parentId = pair.getLeft();
- if (!parentId.equals(currentId)) {
- position = 0;
- currentId = parentId;
- }
- String id = pair.getRight();
- executor.writeSql(String.format("UPDATE observe_seine.%s SET %s_idx = %d WHERE topiaId = '%s';", mainTable, field, position++, id));
- }
+ migrateIdx(executor, "observe_seine", "nonTargetCatch", "set");
+ migrateIdx(executor, "observe_seine", "targetCatch", "set");
+ migrateIdx(executor, "observe_seine", "targetLength", "targetSample");
+ migrateIdx(executor, "observe_seine", "nonTargetLength", "nonTargetSample");
}
- private static class MigrateIdxSqlQuery extends TopiaSqlQuery<Pair<String, String>> {
-
- private final String mainTable;
- private final String field;
-
- private MigrateIdxSqlQuery(String mainTable, String field) {
- this.mainTable = mainTable;
- this.field = field;
- }
-
- @Override
- public PreparedStatement prepareQuery(Connection connection) throws SQLException {
- return connection.prepareStatement(String.format("select %s, topiaId FROM observe_seine.%s order by %s, topiaCreateDate", field, mainTable, field));
- }
-
- @Override
- public Pair<String, String> prepareResult(ResultSet resultSet) throws SQLException {
- return Pair.of(resultSet.getString(1), resultSet.getString(2));
- }
- }
}
=====================================
server-configuration/src/main/resources/log4j2.xml
=====================================
@@ -37,6 +37,10 @@
<Logger name="org.nuiton.topia" level="info" additivity="false">
<AppenderRef ref="console"/>
</Logger>
+ <Logger name="org.nuiton.jaxx.validator.swing.SwingValidator" level="error" additivity="false">
+ <AppenderRef ref="console"/>
+ <AppenderRef ref="File"/>
+ </Logger>
<Logger name="fr.ird.observe.client.validators" level="warn" additivity="false">
<AppenderRef ref="console"/>
</Logger>
=====================================
server-configuration/src/main/resources/observeweb-log4j2.xml
=====================================
@@ -50,6 +50,10 @@
<AppenderRef ref="console"/>
<AppenderRef ref="File"/>
</Logger>
+ <Logger name="org.nuiton.jaxx.validator.swing.SwingValidator" level="error" additivity="false">
+ <AppenderRef ref="console"/>
+ <AppenderRef ref="File"/>
+ </Logger>
<Logger name="fr.ird.observe.client.validators" level="warn" additivity="false">
<AppenderRef ref="console"/>
<AppenderRef ref="File"/>
View it on GitLab: https://gitlab.com/ultreiaio/ird-observe/compare/f193d8a5c69e4b51ec9fcfa0b3…
--
View it on GitLab: https://gitlab.com/ultreiaio/ird-observe/compare/f193d8a5c69e4b51ec9fcfa0b3…
You're receiving this email because of your account on gitlab.com.
1
0
[Git][ultreiaio/ird-observe][develop-7.x] 3 commits: remove EntityMap class
by Tony CHEMIT 20 Sep '18
by Tony CHEMIT 20 Sep '18
20 Sep '18
Tony CHEMIT pushed to branch develop-7.x at ultreiaio / ird-observe
Commits:
556f5d2a by Tony CHEMIT at 2018-09-19T14:46:06Z
remove EntityMap class
- - - - -
1b0f5e65 by Tony CHEMIT at 2018-09-20T15:33:43Z
Use topia-extension usage support to compute usages (see #1066)
- - - - -
f193d8a5 by Tony CHEMIT at 2018-09-20T15:35:33Z
use new topia metadata model feature to generate clean sql statements (See #1065)
- - - - -
15 changed files:
- − persistence/src/main/java/fr/ird/observe/entities/EntityMap.java
- persistence/src/main/java/fr/ird/observe/persistence/ObserveTopiaApplicationContext.java
- pom.xml
- services-local/src/main/java/fr/ird/observe/services/local/service/actions/synchro/referential/legacy/UnidirectionalReferentialSynchronizeLocalServiceLocal.java
- services-local/src/main/java/fr/ird/observe/services/local/service/actions/synchro/referential/ng/ReferentialSynchronizeSqlsRequestBuilder.java
- services-local/src/main/java/fr/ird/observe/services/local/service/actions/synchro/referential/sql/DeleteSqlStatementGenerator.java
- services-local/src/main/java/fr/ird/observe/services/local/service/actions/synchro/referential/sql/DesactivateSqlStatementGenerator.java → services-local/src/main/java/fr/ird/observe/services/local/service/actions/synchro/referential/sql/DisableSqlStatementGenerator.java
- services-local/src/main/java/fr/ird/observe/services/local/service/actions/synchro/referential/sql/InsertSqlStatementGenerator.java
- services-local/src/main/java/fr/ird/observe/services/local/service/actions/synchro/referential/sql/InsertSqlWithCascadeStatementGenerator.java
- services-local/src/main/java/fr/ird/observe/services/local/service/actions/synchro/referential/sql/ReplaceSqlStatementGenerator.java
- services-local/src/main/java/fr/ird/observe/services/local/service/actions/synchro/referential/sql/UpdateSqlStatementGenerator.java
- services-local/src/main/java/fr/ird/observe/services/local/service/actions/synchro/referential/sql/UpdateSqlWithCascadeStatementGenerator.java
- services-local/src/main/java/fr/ird/observe/services/local/service/referential/ReferentialServiceLocal.java
- services/pom.xml
- services/src/main/java/fr/ird/observe/services/service/actions/synchro/referential/ng/ReferentialSynchronizeSqlsRequest.java
Changes:
=====================================
persistence/src/main/java/fr/ird/observe/entities/EntityMap.java deleted
=====================================
@@ -1,45 +0,0 @@
-/*
- * #%L
- * ObServe :: Persistence
- * %%
- * Copyright (C) 2008 - 2018 IRD, Code Lutin, Ultreia.io
- * %%
- * This program is free software: you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as
- * published by the Free Software Foundation, either version 3 of the
- * License, or (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public
- * License along with this program. If not, see
- * <http://www.gnu.org/licenses/gpl-3.0.html>.
- * #L%
- */
-package fr.ird.observe.entities;
-
-import org.nuiton.topia.persistence.TopiaEntity;
-
-import java.util.HashMap;
-import java.util.List;
-import java.util.Map;
-
-/**
- * A Dictionary of entities
- *
- * @author Tony Chemit - dev(a)tchemit.fr
- * @since 1.4
- */
-public class EntityMap extends HashMap<Class<? extends TopiaEntity>, List<? extends TopiaEntity>> {
- private static final long serialVersionUID = 1L;
-
- public EntityMap() {
- }
-
- public EntityMap(Map<? extends Class<? extends TopiaEntity>, ? extends List<? extends TopiaEntity>> m) {
- super(m);
- }
-}
=====================================
persistence/src/main/java/fr/ird/observe/persistence/ObserveTopiaApplicationContext.java
=====================================
@@ -10,12 +10,12 @@ package fr.ird.observe.persistence;
* 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>.
@@ -24,19 +24,22 @@ package fr.ird.observe.persistence;
import com.google.common.collect.ImmutableSet;
import fr.ird.observe.entities.referentiel.ObserveReferentialEntity;
-import org.apache.logging.log4j.Logger;
import org.apache.logging.log4j.LogManager;
+import org.apache.logging.log4j.Logger;
import org.hibernate.HibernateException;
import org.hibernate.tool.hbm2ddl.SchemaExport;
import org.hibernate.tool.schema.TargetType;
+import org.nuiton.topia.persistence.TopiaEntity;
import org.nuiton.topia.persistence.TopiaException;
import org.nuiton.topia.persistence.internal.support.TopiaMetadataModelSupportImpl;
+import org.nuiton.topia.persistence.internal.support.TopiaUsageSupportImpl;
import org.nuiton.topia.persistence.jdbc.JdbcHelper;
import org.nuiton.topia.persistence.metadata.TopiaMetadataEntity;
import org.nuiton.topia.persistence.metadata.TopiaMetadataModel;
import org.nuiton.topia.persistence.script.SqlScriptReader;
import org.nuiton.topia.persistence.script.TopiaSqlScript;
import org.nuiton.topia.persistence.support.TopiaMetadataModelSupport;
+import org.nuiton.topia.persistence.support.TopiaUsageSupport;
import org.nuiton.topia.service.migration.TopiaMigrationService;
import org.nuiton.topia.service.script.TopiaSqlScriptGeneratorService;
import org.nuiton.topia.service.script.table.TopiaSqlTable;
@@ -45,13 +48,16 @@ import org.nuiton.topia.service.script.table.TopiaSqlTablesFactory;
import java.util.EnumSet;
import java.util.LinkedHashSet;
+import java.util.List;
+import java.util.Map;
import java.util.Objects;
import java.util.Set;
import java.util.UUID;
+import java.util.function.Predicate;
import java.util.stream.Collectors;
import java.util.stream.Stream;
-public class ObserveTopiaApplicationContext extends AbstractObserveTopiaApplicationContext implements TopiaMetadataModelSupport {
+public class ObserveTopiaApplicationContext extends AbstractObserveTopiaApplicationContext {
static final String MIGRATION_SERVICE_NAME = "migration";
static final String SQL_SCRIPT_GENERATOR_BATCH_SERVICE_NAME = "sqlScriptGenerator";
@@ -65,6 +71,7 @@ public class ObserveTopiaApplicationContext extends AbstractObserveTopiaApplicat
protected final String authenticationToken;
private final TopiaMetadataModelSupport topiaMetadataModelSupport;
private final TopiaSqlTablesFactory topiaSqlTablesFactory;
+ private final TopiaUsageSupport topiaUsageSupport;
/**
* Mise à {@code true} quand au moins une connection a été effectuée.
*/
@@ -78,6 +85,7 @@ public class ObserveTopiaApplicationContext extends AbstractObserveTopiaApplicat
this.authenticationToken = UUID.randomUUID().toString();
this.topiaMetadataModelSupport = new TopiaMetadataModelSupportImpl("fr.ird.observe.persistence", "Observe");
this.topiaSqlTablesFactory = new TopiaSqlTablesFactory(getMetadataModel(), this);
+ this.topiaUsageSupport = new TopiaUsageSupportImpl(topiaMetadataModelSupport, this);
}
@Override
@@ -108,6 +116,22 @@ public class ObserveTopiaApplicationContext extends AbstractObserveTopiaApplicat
return getServices(TopiaSqlScriptGeneratorService.class).get(SQL_SCRIPT_GENERATOR_BATCH_SERVICE_NAME);
}
+ public Map<Class<? extends TopiaEntity>, List<? extends TopiaEntity>> findReverseCompositions(ObserveTopiaPersistenceContext topiaPersistenceContext, TopiaEntity entity, Predicate<Class<? extends TopiaEntity>> entityTypeFilter) {
+ return topiaUsageSupport.findReverseCompositions(topiaPersistenceContext, entity, entityTypeFilter);
+ }
+
+ public Map<Class<? extends TopiaEntity>, List<? extends TopiaEntity>> findReverseAssociations(ObserveTopiaPersistenceContext topiaPersistenceContext, TopiaEntity entity, Predicate<Class<? extends TopiaEntity>> entityTypeFilter) {
+ return topiaUsageSupport.findReverseAssociations(topiaPersistenceContext, entity, entityTypeFilter);
+ }
+
+ public Map<Class<? extends TopiaEntity>, Long> countReverseCompositions(ObserveTopiaPersistenceContext topiaPersistenceContext, TopiaEntity entity, Predicate<Class<? extends TopiaEntity>> entityTypeFilter) {
+ return topiaUsageSupport.countReverseCompositions(topiaPersistenceContext, entity, entityTypeFilter);
+ }
+
+ public Map<Class<? extends TopiaEntity>, Long> countReverseAssociations(ObserveTopiaPersistenceContext topiaPersistenceContext, TopiaEntity entity, Predicate<Class<? extends TopiaEntity>> entityTypeFilter) {
+ return topiaUsageSupport.countReverseAssociations(topiaPersistenceContext, entity, entityTypeFilter);
+ }
+
@Override
public void createSchema() {
try {
@@ -206,7 +230,6 @@ public class ObserveTopiaApplicationContext extends AbstractObserveTopiaApplicat
return authenticationToken;
}
- @Override
public TopiaMetadataModel getMetadataModel() {
return topiaMetadataModelSupport.getMetadataModel();
}
@@ -269,7 +292,7 @@ public class ObserveTopiaApplicationContext extends AbstractObserveTopiaApplicat
basketTable.getFromClause(),
basketTable.getWhereClauseAlias(),
ImmutableSet.of(" INNER JOIN observe_longline.set set ON set.topiaId = activity.set",
- " INNER JOIN observe_longline.basket basket ON basket.set = set.topiaId"
+ " INNER JOIN observe_longline.basket basket ON basket.set = set.topiaId"
),
null);
@@ -285,8 +308,8 @@ public class ObserveTopiaApplicationContext extends AbstractObserveTopiaApplicat
branchlineTable.getFromClause(),
branchlineTable.getWhereClauseAlias(),
ImmutableSet.of(" INNER JOIN observe_longline.set set ON set.topiaId = activity.set",
- " INNER JOIN observe_longline.basket basket ON basket.set = set.topiaId",
- " INNER JOIN observe_longline.branchline branchline ON branchline.basket = basket.topiaId"
+ " INNER JOIN observe_longline.basket basket ON basket.set = set.topiaId",
+ " INNER JOIN observe_longline.branchline branchline ON branchline.basket = basket.topiaId"
),
null);
@@ -312,6 +335,7 @@ public class ObserveTopiaApplicationContext extends AbstractObserveTopiaApplicat
return referentialTables = topiaSqlTablesFactory.newReplicateEntityTables(new TripReplicateTablesPredicate(), entityEnum);
}
+
private static class TripReplicateTablesPredicate implements TopiaSqlTablesFactory.TopiaSqlTablesPredicate {
protected final Set<String> sections = ImmutableSet.of(
=====================================
pom.xml
=====================================
@@ -162,7 +162,7 @@
<lib.version.h2>1.4.196</lib.version.h2>
<!--<lib.version.nuiton.topia>3.6-SNAPSHOT</lib.version.nuiton.topia>-->
<!--<lib.version.java4all.eugene>3.0-alpha-21</lib.version.java4all.eugene>-->
- <!--<lib.version.java4all.topia>1.1.8-SNAPSHOT</lib.version.java4all.topia>-->
+ <lib.version.java4all.topia>1.1.8-SNAPSHOT</lib.version.java4all.topia>
<!-- license header configuration -->
<license.licenseName>gpl_v3</license.licenseName>
<license.organizationName>IRD, Code Lutin, Ultreia.io</license.organizationName>
=====================================
services-local/src/main/java/fr/ird/observe/services/local/service/actions/synchro/referential/legacy/UnidirectionalReferentialSynchronizeLocalServiceLocal.java
=====================================
@@ -10,12 +10,12 @@ package fr.ird.observe.services.local.service.actions.synchro.referential.legacy
* 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>.
@@ -44,8 +44,6 @@ import fr.ird.observe.services.service.actions.synchro.referential.legacy.Unidir
import fr.ird.observe.spi.DbModelHelper;
import fr.ird.observe.spi.context.ReferentialDtoEntityContext;
import fr.ird.observe.spi.context.ReferentialReferenceEntityContext;
-import org.apache.logging.log4j.LogManager;
-import org.apache.logging.log4j.Logger;
import org.nuiton.topia.persistence.TopiaDao;
import org.nuiton.topia.persistence.TopiaEntity;
import org.nuiton.topia.persistence.metadata.TopiaMetadataEntity;
@@ -65,9 +63,6 @@ import java.util.Set;
*/
public class UnidirectionalReferentialSynchronizeLocalServiceLocal extends ObserveServiceLocal implements UnidirectionalReferentialSynchronizeLocalService {
- /** Logger. */
- private static final Logger log = LogManager.getLogger(UnidirectionalReferentialSynchronizeLocalServiceLocal.class);
-
private LastUpdateDateService lastUpdateDateService;
@Override
@@ -79,9 +74,6 @@ public class UnidirectionalReferentialSynchronizeLocalServiceLocal extends Obser
@Override
public <D extends ReferentialDto> ImmutableSet<String> filterIdsUsedInLocalSource(Class<D> dtoType, ImmutableSet<String> ids) {
- if (log.isTraceEnabled()) {
- log.trace("filterIdsUsedInLocalSource(" + dtoType + ", " + ids + ")");
- }
Class<? extends ObserveReferentialEntity> entityType = DbModelHelper.fromReferentialDto(dtoType).toEntityType();
Set<String> result = new LinkedHashSet<>();
for (String id : ids) {
@@ -107,10 +99,6 @@ public class UnidirectionalReferentialSynchronizeLocalServiceLocal extends Obser
@Override
public <D extends ReferentialDto> ImmutableSet<String> generateSqlRequests(UnidirectionalReferentialSynchronizeRequest<D> request) {
- if (log.isTraceEnabled()) {
- log.trace("generateSqlRequests(" + request + ")");
- }
-
Set<String> result = new LinkedHashSet<>();
Class<D> dtoType = request.getReferentialName();
@@ -122,7 +110,7 @@ public class UnidirectionalReferentialSynchronizeLocalServiceLocal extends Obser
TopiaMetadataEntity metadataEntity = metadataModel.getEntity(referentielName);
if (request.withReferentialToAdd()) {
- InsertSqlStatementGenerator<D> sqlStatementGenerator = new InsertSqlStatementGenerator<>(metadataEntity, dtoType);
+ InsertSqlStatementGenerator<D> sqlStatementGenerator = new InsertSqlStatementGenerator<>(metadataModel, metadataEntity, dtoType);
ImmutableSet<D> referentialToAdd = request.getReferentialToAdd();
if (ObjectMaterialDto.class.equals(dtoType)) {
@@ -139,55 +127,40 @@ public class UnidirectionalReferentialSynchronizeLocalServiceLocal extends Obser
if (request.withReferentialToUpdate()) {
- UpdateSqlStatementGenerator<D> sqlStatementGenerator = new UpdateSqlStatementGenerator<>(metadataEntity, dtoType);
+ UpdateSqlStatementGenerator<D> sqlStatementGenerator = new UpdateSqlStatementGenerator<>(metadataModel, metadataEntity, dtoType);
for (D referentialDto : request.getReferentialToUpdate()) {
ImmutableList<String> sql = sqlStatementGenerator.generateSql(referentialDto);
result.addAll(sql);
}
-
}
-
if (request.withReferentialToReplace()) {
- ReplaceSqlStatementGenerator sqlStatementGenerator = new ReplaceSqlStatementGenerator(metadataModel, referentielName);
+ ReplaceSqlStatementGenerator sqlStatementGenerator = new ReplaceSqlStatementGenerator(metadataModel, metadataEntity);
for (Map.Entry<String, String> entry : request.getReferentialToReplace().entrySet()) {
ImmutableList<String> sql = sqlStatementGenerator.generateSqls(entry.getKey(), entry.getValue());
result.addAll(sql);
}
-
}
if (request.withReferentialToRemove()) {
- DeleteSqlStatementGenerator sqlStatementGenerator = new DeleteSqlStatementGenerator(metadataEntity);
+ DeleteSqlStatementGenerator sqlStatementGenerator = new DeleteSqlStatementGenerator(metadataModel, metadataEntity);
for (String id : request.getReferentialToRemove()) {
List<String> sql = sqlStatementGenerator.generateSql(id);
result.addAll(sql);
}
-
}
-
-
return ImmutableSet.copyOf(result);
-
}
@Override
public void applySqlRequests(ImmutableSet<String> sqlRequests) {
-
- if (log.isTraceEnabled()) {
- log.trace("applySqlRequests(" + sqlRequests + ")");
- }
-
TopiaSqlWork applySqlWork = new ApplySqlRequestWork(sqlRequests);
getTopiaPersistenceContext().getSqlSupport().doSqlWork(applySqlWork);
-
}
@Override
public void updateLastUpdateDates() {
-
lastUpdateDateService.updateReferentialLastUpdateDates();
-
}
private <E extends ObserveReferentialEntity> int countUsage0(Class<E> entityType, String id) {
=====================================
services-local/src/main/java/fr/ird/observe/services/local/service/actions/synchro/referential/ng/ReferentialSynchronizeSqlsRequestBuilder.java
=====================================
@@ -10,12 +10,12 @@ package fr.ird.observe.services.local.service.actions.synchro.referential.ng;
* 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>.
@@ -31,7 +31,7 @@ import fr.ird.observe.dto.referential.ReferentialLocale;
import fr.ird.observe.entities.referentiel.ObserveReferentialEntity;
import fr.ird.observe.persistence.ObserveEntityEnum;
import fr.ird.observe.services.local.service.actions.synchro.referential.sql.DeleteSqlStatementGenerator;
-import fr.ird.observe.services.local.service.actions.synchro.referential.sql.DesactivateSqlStatementGenerator;
+import fr.ird.observe.services.local.service.actions.synchro.referential.sql.DisableSqlStatementGenerator;
import fr.ird.observe.services.local.service.actions.synchro.referential.sql.InsertSqlStatementGenerator;
import fr.ird.observe.services.local.service.actions.synchro.referential.sql.InsertSqlWithCascadeStatementGenerator;
import fr.ird.observe.services.local.service.actions.synchro.referential.sql.ReplaceSqlStatementGenerator;
@@ -153,7 +153,7 @@ public class ReferentialSynchronizeSqlsRequestBuilder {
List<E> insertEntities = loadEntities(entityType, tasks);
if (metadata.withEntities()) {
- InsertSqlWithCascadeStatementGenerator<D> insertGenerator = new InsertSqlWithCascadeStatementGenerator<D>(metadata, dtoType, request.getIdsOnlyExistingOnThisSide()) {
+ InsertSqlWithCascadeStatementGenerator<D> insertGenerator = new InsertSqlWithCascadeStatementGenerator<D>(metadataModel, metadata, dtoType, request.getIdsOnlyExistingOnThisSide()) {
@Override
protected <DD extends ReferentialDto> ImmutableList<String> insertMissingReferential(Class<DD> referentialType, String id) {
@@ -166,9 +166,7 @@ public class ReferentialSynchronizeSqlsRequestBuilder {
D referential = binder.toDto(referentialLocale, entity);
ImmutableList<String> sqls = insertGenerator.generateSql(referential);
- if (log.isInfoEnabled()) {
- log.info("Insert referential: " + referenceType.getName() + " / " + referential.getId() + " -- " + sqls);
- }
+ log.info("Insert referential: " + referenceType.getName() + " / " + referential.getId() + " -- " + sqls);
for (String sql : sqls) {
resultBuilder.addInsertStatement(sql);
}
@@ -176,14 +174,12 @@ public class ReferentialSynchronizeSqlsRequestBuilder {
} else {
- InsertSqlStatementGenerator<D> insertGenerator = new InsertSqlStatementGenerator<>(metadata, dtoType);
+ InsertSqlStatementGenerator<D> insertGenerator = new InsertSqlStatementGenerator<>(metadataModel, metadata, dtoType);
for (E entity : insertEntities) {
D referential = binder.toDto(referentialLocale, entity);
ImmutableList<String> sqls = insertGenerator.generateSql(referential);
- if (log.isInfoEnabled()) {
- log.info("Insert referential: " + referenceType.getName() + " / " + referential.getId() + " -- " + sqls);
- }
+ log.info("Insert referential: " + referenceType.getName() + " / " + referential.getId() + " -- " + sqls);
for (String sql : sqls) {
resultBuilder.addInsertStatement(sql);
}
@@ -201,7 +197,7 @@ public class ReferentialSynchronizeSqlsRequestBuilder {
if (metadata.withEntities()) {
- UpdateSqlWithCascadeStatementGenerator<D> updateGenerator = new UpdateSqlWithCascadeStatementGenerator<D>(metadata, dtoType, request.getIdsOnlyExistingOnThisSide()) {
+ UpdateSqlWithCascadeStatementGenerator<D> updateGenerator = new UpdateSqlWithCascadeStatementGenerator<D>(metadataModel, metadata, dtoType, request.getIdsOnlyExistingOnThisSide()) {
@Override
protected <DD extends ReferentialDto> ImmutableList<String> insertMissingReferential(Class<DD> referentialType, String id) {
@@ -212,9 +208,7 @@ public class ReferentialSynchronizeSqlsRequestBuilder {
D referential = binder.toDto(referentialLocale, entity);
ImmutableList<String> sqls = updateGenerator.generateSql(referential);
- if (log.isInfoEnabled()) {
- log.info("Update referential: " + referenceType.getName() + " / " + referential.getId() + " -- " + sqls);
- }
+ log.info("Update referential: " + referenceType.getName() + " / " + referential.getId() + " -- " + sqls);
for (String sql : sqls) {
resultBuilder.addUpdateStatement(sql);
}
@@ -222,14 +216,12 @@ public class ReferentialSynchronizeSqlsRequestBuilder {
} else {
- UpdateSqlStatementGenerator<D> updateGenerator = new UpdateSqlStatementGenerator<>(metadata, dtoType);
+ UpdateSqlStatementGenerator<D> updateGenerator = new UpdateSqlStatementGenerator<>(metadataModel, metadata, dtoType);
for (E entity : updateEntities) {
D referential = binder.toDto(referentialLocale, entity);
ImmutableList<String> sqls = updateGenerator.generateSql(referential);
- if (log.isInfoEnabled()) {
- log.info("Update referential: " + referenceType.getName() + " / " + referential.getId() + " -- " + sqls);
- }
+ log.info("Update referential: " + referenceType.getName() + " / " + referential.getId() + " -- " + sqls);
for (String sql : sqls) {
resultBuilder.addUpdateStatement(sql);
}
@@ -244,15 +236,13 @@ public class ReferentialSynchronizeSqlsRequestBuilder {
TopiaMetadataEntity metadata = metadataModel.getEntity(referentialName);
Class<E> entityType = binder.getEntityType();
- UpdateSqlStatementGenerator<D> updateGenerator = new UpdateSqlStatementGenerator<>(metadata, binder.getDtoType());
+ UpdateSqlStatementGenerator<D> updateGenerator = new UpdateSqlStatementGenerator<>(metadataModel, metadata, binder.getDtoType());
List<E> updateEntities = loadEntities(entityType, tasks);
for (E entity : updateEntities) {
D referential = binder.toDto(referentialLocale, entity);
ImmutableList<String> sqls = updateGenerator.generateSql(referential);
- if (log.isInfoEnabled()) {
- log.info("Revert referential: " + referenceType.getName() + " / " + referential.getId() + " -- " + sqls);
- }
+ log.info("Revert referential: " + referenceType.getName() + " / " + referential.getId() + " -- " + sqls);
for (String sql : sqls) {
resultBuilder.addUpdateStatement(sql);
}
@@ -264,8 +254,8 @@ public class ReferentialSynchronizeSqlsRequestBuilder {
TopiaMetadataEntity metadata = metadataModel.getEntity(referentialName);
- ReplaceSqlStatementGenerator replaceGenerator = new ReplaceSqlStatementGenerator(metadataModel, referentialName);
- DeleteSqlStatementGenerator deleteGenerator = new DeleteSqlStatementGenerator(metadata);
+ ReplaceSqlStatementGenerator replaceGenerator = new ReplaceSqlStatementGenerator(metadataModel, metadata);
+ DeleteSqlStatementGenerator deleteGenerator = new DeleteSqlStatementGenerator(metadataModel, metadata);
for (ReferentialSynchronizeTask<R> task : tasks) {
@@ -291,8 +281,8 @@ public class ReferentialSynchronizeSqlsRequestBuilder {
TopiaMetadataEntity metadata = metadataModel.getEntity(referentialName);
- ReplaceSqlStatementGenerator replaceGenerator = new ReplaceSqlStatementGenerator(metadataModel, referentialName);
- DesactivateSqlStatementGenerator desactivateGenerator = new DesactivateSqlStatementGenerator(metadata);
+ ReplaceSqlStatementGenerator replaceGenerator = new ReplaceSqlStatementGenerator(metadataModel, metadata);
+ DisableSqlStatementGenerator desactivateGenerator = new DisableSqlStatementGenerator(metadata);
for (ReferentialSynchronizeTask<R> task : tasks) {
String referentialId = task.getReferentialId();
@@ -305,9 +295,7 @@ public class ReferentialSynchronizeSqlsRequestBuilder {
}
String sql = desactivateGenerator.generateSql(referentialId);
- if (log.isInfoEnabled()) {
- log.info("Desactivate referential: " + type.getName() + " / " + referentialId + " -- " + sql);
- }
+ log.info("Desactivate referential: " + type.getName() + " / " + referentialId + " -- " + sql);
resultBuilder.addDesactivateStatement(sql);
}
@@ -320,7 +308,7 @@ public class ReferentialSynchronizeSqlsRequestBuilder {
String referentialName = ObserveEntityEnum.valueOf(entityType).name();
TopiaMetadataEntity metadata = metadataModel.getEntity(referentialName);
- InsertSqlStatementGenerator<D> insertGenerator = new InsertSqlStatementGenerator<>(metadata, dtoType);
+ InsertSqlStatementGenerator<D> insertGenerator = new InsertSqlStatementGenerator<>(metadataModel, metadata, dtoType);
D referential = service.loadEntityToReferentialDto(binder, id);
return insertGenerator.generateSql(referential);
=====================================
services-local/src/main/java/fr/ird/observe/services/local/service/actions/synchro/referential/sql/DeleteSqlStatementGenerator.java
=====================================
@@ -23,16 +23,14 @@ package fr.ird.observe.services.local.service.actions.synchro.referential.sql;
*/
import com.google.common.collect.ImmutableList;
-import fr.ird.observe.services.local.service.actions.synchro.referential.sql.UpdateSqlStatementGenerator.ManyToManyAssociationStruct;
-import org.apache.logging.log4j.LogManager;
-import org.apache.logging.log4j.Logger;
+import org.nuiton.topia.persistence.metadata.TopiaMetadataAssociation;
import org.nuiton.topia.persistence.metadata.TopiaMetadataEntity;
+import org.nuiton.topia.persistence.metadata.TopiaMetadataModel;
+import org.nuiton.topia.service.script.TopiaSqlStatements;
-import java.util.LinkedHashSet;
import java.util.List;
-import java.util.Map;
-
-import static fr.ird.observe.services.local.service.actions.synchro.referential.sql.UpdateSqlStatementGenerator.MANY_TO_MANY_ASSOCIATION_DELETE_STATEMENT;
+import java.util.Objects;
+import java.util.Set;
/**
* Pour générer une requète sql de suppression à partir d'un référentiel donné.
@@ -43,56 +41,23 @@ import static fr.ird.observe.services.local.service.actions.synchro.referential.
*/
public class DeleteSqlStatementGenerator {
- /** Logger. */
- private static final Logger log = LogManager.getLogger(DeleteSqlStatementGenerator.class);
-
- private static final String DELETE_STATEMENT = "DELETE FROM %s.%s WHERE topiaId = '%s';\n";
- private static final String DELETE_ASSOCIATION_STATEMENT = "DELETE FROM %s.%s WHERE %s = '%s';\n";
-
- private final String schemaName;
- private final String tableName;
- private final LinkedHashSet<ManyToManyAssociationStruct> manyToManyAssociations;
+ private final Set<TopiaMetadataAssociation> associations;
+ private final TopiaMetadataEntity metadataEntity;
- public DeleteSqlStatementGenerator(TopiaMetadataEntity metadataEntity) {
- this.schemaName = metadataEntity.getDbSchemaName();
- this.tableName = metadataEntity.getDbTableName();
- Map<String, String> manyToManyAssociationsMap = metadataEntity.getManyToManyAssociations();
- this.manyToManyAssociations = new LinkedHashSet<>();
- for (Map.Entry<String, String> entry : manyToManyAssociationsMap.entrySet()) {
- String propertyName = entry.getKey();
- String dbColumnName = metadataEntity.getDbColumnName(propertyName);
- String tableName = metadataEntity.getBdManyToManyAssociationTableName(propertyName);
- ManyToManyAssociationStruct manyToManyAssociation = new ManyToManyAssociationStruct(propertyName, dbColumnName, tableName);
- manyToManyAssociations.add(manyToManyAssociation);
- }
+ public DeleteSqlStatementGenerator(TopiaMetadataModel topiaMetadataModel, TopiaMetadataEntity metadataEntity) {
+ this.metadataEntity = Objects.requireNonNull(metadataEntity);
+ this.associations = topiaMetadataModel.getReverseAssociations(metadataEntity);
}
public List<String> generateSql(String id) {
ImmutableList.Builder<String> result = ImmutableList.builder();
- String sql = String.format(DELETE_STATEMENT, schemaName, tableName, id);
- if (log.isDebugEnabled()) {
- log.debug("sql: " + sql);
- }
+ String sql = TopiaSqlStatements.generateDeleteStatement(metadataEntity, id);
result.add(sql);
- for (ManyToManyAssociationStruct manyToManyAssociation : manyToManyAssociations) {
- generateManyToManyAssociationSql(id, manyToManyAssociation, result);
+ for (TopiaMetadataAssociation association : associations) {
+ String sql2 = TopiaSqlStatements.generateAssociationDeleteStatement(association, id);
+ result.add(TopiaSqlStatements.boxAssociationStatement(sql2));
}
return result.build();
}
- private void generateManyToManyAssociationSql(String referentialDtoId, ManyToManyAssociationStruct manyToManyAssociation, ImmutableList.Builder<String> result) {
-
- String manyToManyAssociationTableName = manyToManyAssociation.tableName;
-
- // On commence toujours par supprimer toutes les anciennes associations, elles seront ré-ajoutées juste après
- String deleteSql = String.format(MANY_TO_MANY_ASSOCIATION_DELETE_STATEMENT,
- schemaName,
- manyToManyAssociationTableName,
- tableName,
- referentialDtoId);
- result.add(deleteSql);
- if (log.isDebugEnabled()) {
- log.debug("sql: " + deleteSql);
- }
- }
}
=====================================
services-local/src/main/java/fr/ird/observe/services/local/service/actions/synchro/referential/sql/DesactivateSqlStatementGenerator.java → services-local/src/main/java/fr/ird/observe/services/local/service/actions/synchro/referential/sql/DisableSqlStatementGenerator.java
=====================================
@@ -10,21 +10,22 @@ package fr.ird.observe.services.local.service.actions.synchro.referential.sql;
* it under the terms of the GNU General Public License as
* published by the Free Software Foundation, either version 3 of the
* License, or (at your option) any later version.
- *
+ *
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
- *
+ *
* You should have received a copy of the GNU General Public
* License along with this program. If not, see
* <http://www.gnu.org/licenses/gpl-3.0.html>.
* #L%
*/
-import org.apache.logging.log4j.Logger;
-import org.apache.logging.log4j.LogManager;
import org.nuiton.topia.persistence.metadata.TopiaMetadataEntity;
+import org.nuiton.topia.service.script.TopiaSqlStatements;
+
+import java.util.Objects;
/**
* Pour générer une requète sql de désactivation d'un référentiel donné.
@@ -33,35 +34,16 @@ import org.nuiton.topia.persistence.metadata.TopiaMetadataEntity;
* @author Tony Chemit - dev(a)tchemit.fr
* @since 5.0
*/
-public class DesactivateSqlStatementGenerator {
+public class DisableSqlStatementGenerator {
- /** Logger. */
- private static final Logger log = LogManager.getLogger(DesactivateSqlStatementGenerator.class);
+ private final TopiaMetadataEntity metadataEntity;
- private static final String UPDATE_STATEMENT = "UPDATE %s.%s SET enabled = false, topiaVersion = topiaVersion + 1 WHERE topiaId ='%s';\n";
-
- private final String schemaName;
- private final String tableName;
-
- public DesactivateSqlStatementGenerator(TopiaMetadataEntity metadataEntity) {
- this.schemaName = metadataEntity.getDbSchemaName();
- this.tableName = metadataEntity.getDbTableName();
+ public DisableSqlStatementGenerator(TopiaMetadataEntity metadataEntity) {
+ this.metadataEntity = Objects.requireNonNull(metadataEntity);
}
public String generateSql(String sourceId) {
-
- StringBuilder result = new StringBuilder();
-
- String sql = String.format(UPDATE_STATEMENT, schemaName, tableName, sourceId);
- result.append(sql);
-
- if (log.isDebugEnabled()) {
- log.debug("sql: " + sql);
- }
-
- return result.toString();
-
+ return TopiaSqlStatements.generateUpdateStatement(metadataEntity, sourceId, "enabled = false, topiaVersion = topiaVersion + 1");
}
-
}
=====================================
services-local/src/main/java/fr/ird/observe/services/local/service/actions/synchro/referential/sql/InsertSqlStatementGenerator.java
=====================================
@@ -10,12 +10,12 @@ package fr.ird.observe.services.local.service.actions.synchro.referential.sql;
* 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>.
@@ -25,13 +25,12 @@ package fr.ird.observe.services.local.service.actions.synchro.referential.sql;
import com.google.common.collect.ImmutableList;
import fr.ird.observe.dto.reference.ReferentialDtoReference;
import fr.ird.observe.dto.referential.ReferentialDto;
-import fr.ird.observe.persistence.ObserveEntityEnum;
-import fr.ird.observe.spi.DbModelHelper;
-import org.apache.commons.collections4.CollectionUtils;
-import org.apache.logging.log4j.LogManager;
-import org.apache.logging.log4j.Logger;
import org.nuiton.topia.persistence.TopiaEntity;
+import org.nuiton.topia.persistence.metadata.TopiaMetadataAssociation;
+import org.nuiton.topia.persistence.metadata.TopiaMetadataComposition;
import org.nuiton.topia.persistence.metadata.TopiaMetadataEntity;
+import org.nuiton.topia.persistence.metadata.TopiaMetadataModel;
+import org.nuiton.topia.service.script.TopiaSqlStatements;
import org.nuiton.util.beans.Binder;
import org.nuiton.util.beans.BinderFactory;
@@ -42,6 +41,7 @@ import java.util.LinkedHashSet;
import java.util.LinkedList;
import java.util.List;
import java.util.Map;
+import java.util.Objects;
import java.util.Set;
/**
@@ -53,49 +53,31 @@ import java.util.Set;
*/
public class InsertSqlStatementGenerator<D extends ReferentialDto> {
- /** Logger. */
- private static final Logger log = LogManager.getLogger(InsertSqlStatementGenerator.class);
-
- private static final String INSERT_STATEMENT = "INSERT INTO %s.%s(%s) VALUES (%s);\n";
- // We use a special prefix because those requests must be applied after all simple insert requests
- public static final String MANY_TO_MANY_ASSOCIATION_INSERT_STATEMENT = "$$_INSERT INTO %s.%s(%s, %s) VALUES ('%s', '%s');\n";
-
+ private final TopiaMetadataEntity metadataEntity;
+ private final Set<TopiaMetadataComposition> compositions;
+ private final Set<TopiaMetadataAssociation> associations;
private final Set<String> columnNames;
- private final String schemaName;
- private final String tableName;
private final Binder<D, D> binder;
private final String[] simplePropertyNames;
- private final String[] manyToOneAssociationNames;
- private final Set<ManyToManyAssociationStruct> manyToManyAssociations;
+
private final Set<String> primitiveBooleanPropertyNames;
private final Set<String> primitiveIntegerPropertyNames;
private final Set<String> primitiveLongPropertyNames;
private final Set<String> primitiveFloatPropertyNames;
- public InsertSqlStatementGenerator(TopiaMetadataEntity metadataEntity, Class<D> dtoType) {
- this.schemaName = metadataEntity.getDbSchemaName();
- this.tableName = metadataEntity.getDbTableName();
+ public InsertSqlStatementGenerator(TopiaMetadataModel topiaMetadataModel, TopiaMetadataEntity metadataEntity, Class<D> dtoType) {
+ this.metadataEntity = Objects.requireNonNull(metadataEntity);
+ this.compositions = topiaMetadataModel.getCompositions(this.metadataEntity);
+ this.associations = topiaMetadataModel.getAssociations(this.metadataEntity);
+
Set<String> propertyNamesSet = metadataEntity.getProperties().keySet();
this.simplePropertyNames = propertyNamesSet.toArray(new String[0]);
this.primitiveBooleanPropertyNames = metadataEntity.getPrimitivePropertyNames("boolean");
this.primitiveIntegerPropertyNames = metadataEntity.getPrimitivePropertyNames("int");
this.primitiveLongPropertyNames = metadataEntity.getPrimitivePropertyNames("long");
this.primitiveFloatPropertyNames = metadataEntity.getPrimitivePropertyNames("float");
- Set<String> manyToOneAssociationNamesSet = metadataEntity.getManyToOneAssociations().keySet();
- this.manyToOneAssociationNames = manyToOneAssociationNamesSet.toArray(new String[0]);
-
- Map<String, String> manyToManyAssociationsMap = metadataEntity.getManyToManyAssociations();
- this.manyToManyAssociations = new LinkedHashSet<>();
- for (Map.Entry<String, String> entry : manyToManyAssociationsMap.entrySet()) {
- String propertyName = entry.getKey();
- String dbColumnName = metadataEntity.getDbColumnName(propertyName);
- String tableName = metadataEntity.getBdManyToManyAssociationTableName(propertyName);
- String typeName = entry.getValue();
- ObserveEntityEnum entityEnum = ObserveEntityEnum.valueOf(typeName);
- Class<? extends ReferentialDto> referentialype = DbModelHelper.fromReferentialEntity(entityEnum).toDtoType();
- ManyToManyAssociationStruct manyToManyAssociation = new ManyToManyAssociationStruct(propertyName, dbColumnName, tableName, referentialype);
- manyToManyAssociations.add(manyToManyAssociation);
- }
+
+ String[] manyToOneAssociationNames = compositions.stream().map(TopiaMetadataComposition::getTargetDbName).toArray(String[]::new);
this.columnNames = computeColumnNames(metadataEntity, simplePropertyNames, manyToOneAssociationNames);
this.binder = BinderFactory.newBinder(dtoType);
}
@@ -151,76 +133,46 @@ public class InsertSqlStatementGenerator<D extends ReferentialDto> {
addOtherTypeParameter(parameterValue, parameters);
}
- Map<String, Object> manyToOneParameters = binder.obtainProperties(referentialDto, true, true, manyToOneAssociationNames);
- for (String manyToOneAssociationName : manyToOneAssociationNames) {
- Object parameterValue = manyToOneParameters.get(manyToOneAssociationName);
- if (parameterValue == null) {
+ for (TopiaMetadataComposition composition : compositions) {
+ Object compositionValue = binder.obtainSourceProperty(referentialDto, composition.getTargetPropertyName());
+ if (compositionValue == null) {
addNullParameter(parameters);
continue;
}
- if (parameterValue instanceof ReferentialDto) {
- addReferentialDtoParameter((ReferentialDto) parameterValue, parameters, result);
+ if (compositionValue instanceof ReferentialDto) {
+ addReferentialDtoParameter((ReferentialDto) compositionValue, parameters, result);
continue;
}
- if (parameterValue instanceof ReferentialDtoReference) {
- addReferentialReferenceParameter((ReferentialDtoReference) parameterValue, parameters, result);
+ if (compositionValue instanceof ReferentialDtoReference) {
+ addReferentialReferenceParameter((ReferentialDtoReference) compositionValue, parameters, result);
}
}
+ String insertSql = TopiaSqlStatements.generateInsertStatement(metadataEntity,
+ String.join(",", columnNames),
+ String.join(",", parameters));
+ result.add(insertSql);
- result.add(String.format(INSERT_STATEMENT,
- schemaName,
- tableName,
- String.join(",", columnNames),
- String.join(",", parameters)));
+ String id = referentialDto.getId();
+ for (TopiaMetadataAssociation association : associations) {
- if (log.isDebugEnabled()) {
- log.debug("sql: " + result);
- }
- for (ManyToManyAssociationStruct manyToManyAssociation : manyToManyAssociations) {
- generateNmAssociationSql(referentialDto, manyToManyAssociation, result);
+ Collection<ReferentialDtoReference<?, ?>> associationValues = binder.obtainSourceProperty(referentialDto, association.getTargetPropertyName());
+ for (ReferentialDtoReference<?, ?> associationValue : associationValues) {
+ String insertAssocationSql = TopiaSqlStatements.generateAssociationInsertStatement(association, id, associationValue.getId());
+ result.add(TopiaSqlStatements.boxAssociationStatement(insertAssocationSql));
+ }
}
-
return result.build();
}
- private void generateNmAssociationSql(D referentialDto, ManyToManyAssociationStruct manyToManyAssociationStruct, ImmutableList.Builder<String> result) {
-
- Collection<ReferentialDtoReference<?, ?>> manyToManyAssociationValues = binder.obtainSourceProperty(referentialDto, manyToManyAssociationStruct.propertyName);
- if (CollectionUtils.isNotEmpty(manyToManyAssociationValues)) {
-
- String nmAssociationTableName = manyToManyAssociationStruct.tableName;
- String nmAssociationDbColumnName = manyToManyAssociationStruct.dbColumnName;
- String referentialDtoId = referentialDto.getId();
-
- for (ReferentialDtoReference<?, ?> nmAssociationValue : manyToManyAssociationValues) {
-
- addMnAssociation(nmAssociationTableName, nmAssociationDbColumnName, referentialDtoId, manyToManyAssociationStruct.type, nmAssociationValue.getId(), result);
-
- }
- }
- }
-
- <DD extends ReferentialDto> void addMnAssociation(String nmAssociationTableName,
- String nmAssociationDbColumnName,
- String referentialDtoId,
- Class<DD> associationType,
- String associationId,
- ImmutableList.Builder<String> builder) {
-
- String sql = String.format(MANY_TO_MANY_ASSOCIATION_INSERT_STATEMENT,
- schemaName,
- nmAssociationTableName,
- this.tableName,
- nmAssociationDbColumnName,
- referentialDtoId,
- associationId);
- if (log.isDebugEnabled()) {
- log.debug("sql: " + sql);
- }
- builder.add(sql);
+ <DD extends ReferentialDto, RR extends ReferentialDtoReference<DD, RR>> void addAssociation(TopiaMetadataAssociation association,
+ String sourceId,
+ RR associationValue,
+ ImmutableList.Builder<String> builder) {
+ String insertAssocationSql = TopiaSqlStatements.generateAssociationInsertStatement(association, sourceId, associationValue.getId());
+ builder.add(TopiaSqlStatements.boxAssociationStatement(insertAssocationSql));
}
private Set<String> computeColumnNames(TopiaMetadataEntity metadataEntity,
@@ -288,32 +240,4 @@ public class InsertSqlStatementGenerator<D extends ReferentialDto> {
addStringParameter(parameter.getId(), parameters);
}
- /**
- * Pour décrire une association nm.
- */
- private static class ManyToManyAssociationStruct {
-
- /**
- * Le nom de la propriété dans l'objet.
- */
- private final String propertyName;
- /**
- * Le nom de la colonne de l'association dans la table d'association.
- */
- private final String dbColumnName;
- /**
- * Le nom de la table d'association.
- */
- private final String tableName;
-
- private final Class<? extends ReferentialDto> type;
-
- private ManyToManyAssociationStruct(String propertyName, String dbColumnName, String tableName, Class<? extends ReferentialDto> type) {
- this.propertyName = propertyName;
- this.dbColumnName = dbColumnName;
- this.tableName = tableName;
- this.type = type;
- }
-
- }
}
=====================================
services-local/src/main/java/fr/ird/observe/services/local/service/actions/synchro/referential/sql/InsertSqlWithCascadeStatementGenerator.java
=====================================
@@ -10,12 +10,12 @@ package fr.ird.observe.services.local.service.actions.synchro.referential.sql;
* 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>.
@@ -26,7 +26,9 @@ import com.google.common.collect.ImmutableList;
import com.google.common.collect.Multimap;
import fr.ird.observe.dto.reference.ReferentialDtoReference;
import fr.ird.observe.dto.referential.ReferentialDto;
+import org.nuiton.topia.persistence.metadata.TopiaMetadataAssociation;
import org.nuiton.topia.persistence.metadata.TopiaMetadataEntity;
+import org.nuiton.topia.persistence.metadata.TopiaMetadataModel;
import java.util.List;
@@ -43,16 +45,19 @@ public abstract class InsertSqlWithCascadeStatementGenerator<D extends Referenti
private final InsertSqlStatementGenerator<D> delegateGenerator;
private final Multimap<Class<? extends ReferentialDtoReference>, String> idsOnlyExistingOnThisSide;
- protected InsertSqlWithCascadeStatementGenerator(TopiaMetadataEntity metadataEntity,
+ protected InsertSqlWithCascadeStatementGenerator(TopiaMetadataModel topiaMetadataModel, TopiaMetadataEntity metadataEntity,
Class<D> dtoType,
Multimap<Class<? extends ReferentialDtoReference>, String> idsOnlyExistingOnThisSide) {
this.idsOnlyExistingOnThisSide = idsOnlyExistingOnThisSide;
- this.delegateGenerator = new InsertSqlStatementGenerator<D>(metadataEntity, dtoType) {
+ this.delegateGenerator = new InsertSqlStatementGenerator<D>(topiaMetadataModel, metadataEntity, dtoType) {
@Override
- protected <DD extends ReferentialDto> void addMnAssociation(String nmAssociationTableName, String nmAssociationDbColumnName, String referentialDtoId, Class<DD> associationType, String associationId, ImmutableList.Builder<String> builder) {
- super.addMnAssociation(nmAssociationTableName, nmAssociationDbColumnName, referentialDtoId, associationType, associationId, builder);
- addMissingReferentialIfNecessary(associationType, associationId, builder);
+ <DD extends ReferentialDto, RR extends ReferentialDtoReference<DD, RR>> void addAssociation(TopiaMetadataAssociation association,
+ String sourceId,
+ RR associationValue,
+ ImmutableList.Builder<String> builder) {
+ super.addAssociation(association, sourceId, associationValue, builder);
+ addMissingReferentialIfNecessary(associationValue.getDtoType(), associationValue.getId(), builder);
}
@Override
=====================================
services-local/src/main/java/fr/ird/observe/services/local/service/actions/synchro/referential/sql/ReplaceSqlStatementGenerator.java
=====================================
@@ -10,12 +10,12 @@ package fr.ird.observe.services.local.service.actions.synchro.referential.sql;
* 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>.
@@ -23,17 +23,25 @@ package fr.ird.observe.services.local.service.actions.synchro.referential.sql;
*/
import com.google.common.collect.ImmutableList;
+import fr.ird.observe.entities.referentiel.ObserveReferentialEntity;
+import fr.ird.observe.persistence.ObserveEntityEnum;
import org.apache.logging.log4j.LogManager;
import org.apache.logging.log4j.Logger;
+import org.nuiton.topia.persistence.TopiaEntity;
+import org.nuiton.topia.persistence.metadata.TopiaMetadataAssociation;
+import org.nuiton.topia.persistence.metadata.TopiaMetadataComposition;
import org.nuiton.topia.persistence.metadata.TopiaMetadataEntity;
import org.nuiton.topia.persistence.metadata.TopiaMetadataModel;
+import org.nuiton.topia.service.script.TopiaSqlStatements;
-import java.util.LinkedHashSet;
+import java.util.Objects;
import java.util.Set;
-import java.util.stream.Collectors;
/**
* Pour générer une requète sql de remplacement à partir d'un référentiel donné.
+ * <p>
+ * À noter que l'on ne traite pas ici les remplacements d'association sur des types référentiel.
+ * <p>
* Created on 04/07/16.
*
* @author Tony Chemit - dev(a)tchemit.fr
@@ -44,118 +52,36 @@ public class ReplaceSqlStatementGenerator {
/** Logger. */
private static final Logger log = LogManager.getLogger(ReplaceSqlStatementGenerator.class);
- private static final String MANY_TO_ONE_ASSOCIATION_UPDATE_STATEMENT = "UPDATE %s.%s SET %s = '%s', topiaVersion = topiaVersion + 1 WHERE %s = '%s';\n";
- private static final String MANY_TO_MANY_ASSOCIATION_UPDATE_STATEMENT = "UPDATE %s.%s SET %s = '%s' WHERE %s = '%s';\n";
-
/**
* Informations pour remplacer dans une relation many-to-one.
*/
- private final Set<ReplacementStruct> manyToOneAssociationReplacements;
+ private final Set<TopiaMetadataComposition> compositions;
/**
* Informations pour remplacer dans une relation many-to-many.
*/
- private final Set<ReplacementStruct> manyToManyAssociationReplacements;
+ private final Set<TopiaMetadataAssociation> associations;
- public ReplaceSqlStatementGenerator(TopiaMetadataModel topiaMetadataModel, String referentialName) {
- this.manyToOneAssociationReplacements = computeManyToOneAssociationReplacements(referentialName, topiaMetadataModel);
- this.manyToManyAssociationReplacements = computeManyToManyAssociationReplacements(referentialName, topiaMetadataModel);
+ public ReplaceSqlStatementGenerator(TopiaMetadataModel topiaMetadataModel, TopiaMetadataEntity metadataEntity) {
+ this.compositions = Objects.requireNonNull(topiaMetadataModel).getReverseCompositions(Objects.requireNonNull(metadataEntity));
+ this.associations = topiaMetadataModel.getReverseAssociations(metadataEntity);
}
public ImmutableList<String> generateSqls(String sourceId, String replacementId) {
-
ImmutableList.Builder<String> builder = ImmutableList.builder();
-
- for (ReplacementStruct replacementStruct : manyToOneAssociationReplacements) {
-
- String sql = generateSqlStatement(MANY_TO_ONE_ASSOCIATION_UPDATE_STATEMENT, sourceId, replacementId, replacementStruct);
+ for (TopiaMetadataComposition replacementStruct : compositions) {
+ String sql = TopiaSqlStatements.generateCompositionUpdateStatement(replacementStruct, sourceId, replacementId);
builder.add(sql);
-
}
-
- for (ReplacementStruct replacementStruct : manyToManyAssociationReplacements) {
-
- String sql = generateSqlStatement(MANY_TO_MANY_ASSOCIATION_UPDATE_STATEMENT, sourceId, replacementId, replacementStruct);
+ for (TopiaMetadataAssociation replacementStruct : associations) {
+ Class<? extends TopiaEntity> entityType = ObserveEntityEnum.valueOf(replacementStruct.getOwner().getType()).getContract();
+ if (ObserveReferentialEntity.class.isAssignableFrom(entityType)) {
+ // do not update referentials associations (see https://gitlab.com/ultreiaio/ird-observe/issues/1065)
+ continue;
+ }
+ String sql = TopiaSqlStatements.generateAssociationUpdateStatement(replacementStruct, sourceId, replacementId);
builder.add(sql);
}
-
return builder.build();
-
- }
-
- private Set<ReplacementStruct> computeManyToOneAssociationReplacements(String referentialName, TopiaMetadataModel topiaMetadataModel) {
-
- Set<ReplacementStruct> result = new LinkedHashSet<>();
-
- for (TopiaMetadataEntity metadataEntity : topiaMetadataModel) {
-
- result.addAll(metadataEntity.getManyToOneAssociations().entrySet().stream()
- .filter(entry -> entry.getValue().equals(referentialName))
- .map(entry -> new ReplacementStruct(metadataEntity.getDbSchemaName(),
- metadataEntity.getDbTableName(),
- metadataEntity.getDbColumnName(entry.getKey())))
- .collect(Collectors.toList()));
-
- }
-
- return result;
-
- }
-
- private Set<ReplacementStruct> computeManyToManyAssociationReplacements(String referentialName, TopiaMetadataModel topiaMetadataModel) {
-
- Set<ReplacementStruct> result = new LinkedHashSet<>();
-
- for (TopiaMetadataEntity metadataEntity : topiaMetadataModel) {
-
- result.addAll(metadataEntity.getManyToManyAssociations().entrySet().stream()
- .filter(entry -> entry.getValue().equals(referentialName))
- .map(entry -> new ReplacementStruct(metadataEntity.getDbSchemaName(),
- metadataEntity.getBdManyToManyAssociationTableName(entry.getKey()),
- metadataEntity.getDbColumnName(entry.getKey())))
- .collect(Collectors.toList()));
-
- }
-
- return result;
-
- }
-
- private String generateSqlStatement(String sqlPattern, String sourceId, String replacementId, ReplacementStruct replacementStruct) {
-
- String sql = String.format(sqlPattern,
- replacementStruct.schemaName,
- replacementStruct.tableName,
- replacementStruct.columnName,
- replacementId,
- replacementStruct.columnName,
- sourceId);
- if (log.isDebugEnabled()) {
- log.debug("sql: " + sql);
- }
- return sql;
-
- }
-
- private static class ReplacementStruct {
-
- private final String schemaName;
- private final String tableName;
- private final String columnName;
-
- private ReplacementStruct(String schemaName, String tableName, String columnName) {
- this.schemaName = schemaName;
- this.tableName = tableName;
- this.columnName = columnName;
- }
-
- @Override
- public String toString() {
- return "ReplacementStruct{" +
- "schemaName='" + schemaName + '\'' +
- ", tableName='" + tableName + '\'' +
- ", columnName='" + columnName + '\'' +
- '}';
- }
}
}
=====================================
services-local/src/main/java/fr/ird/observe/services/local/service/actions/synchro/referential/sql/UpdateSqlStatementGenerator.java
=====================================
@@ -10,12 +10,12 @@ package fr.ird.observe.services.local.service.actions.synchro.referential.sql;
* 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>.
@@ -25,24 +25,23 @@ package fr.ird.observe.services.local.service.actions.synchro.referential.sql;
import com.google.common.collect.ImmutableList;
import fr.ird.observe.dto.reference.ReferentialDtoReference;
import fr.ird.observe.dto.referential.ReferentialDto;
-import org.apache.commons.collections4.CollectionUtils;
-import org.apache.logging.log4j.LogManager;
-import org.apache.logging.log4j.Logger;
import org.nuiton.topia.persistence.TopiaEntity;
+import org.nuiton.topia.persistence.metadata.TopiaMetadataAssociation;
+import org.nuiton.topia.persistence.metadata.TopiaMetadataComposition;
import org.nuiton.topia.persistence.metadata.TopiaMetadataEntity;
+import org.nuiton.topia.persistence.metadata.TopiaMetadataModel;
+import org.nuiton.topia.service.script.TopiaSqlStatements;
import org.nuiton.util.beans.Binder;
import org.nuiton.util.beans.BinderFactory;
import java.sql.Timestamp;
import java.util.Collection;
import java.util.Date;
-import java.util.LinkedHashSet;
import java.util.Map;
+import java.util.Objects;
import java.util.Set;
import java.util.TreeMap;
-import static fr.ird.observe.services.local.service.actions.synchro.referential.sql.InsertSqlStatementGenerator.MANY_TO_MANY_ASSOCIATION_INSERT_STATEMENT;
-
/**
* Pour générer une requète sql de mise à jour à partir d'un référentiel donné.
* <p>
@@ -52,49 +51,32 @@ import static fr.ird.observe.services.local.service.actions.synchro.referential.
*/
public class UpdateSqlStatementGenerator<D extends ReferentialDto> {
- /** Logger. */
- private static final Logger log = LogManager.getLogger(UpdateSqlStatementGenerator.class);
-
- private static final String UPDATE_STATEMENT = "UPDATE %s.%s SET %s WHERE topiaId ='%s';\n";
- // We use a special prefix because those requests must be applied before all simple insert requests
- static final String MANY_TO_MANY_ASSOCIATION_DELETE_STATEMENT = "$$_DELETE FROM %s.%s WHERE %s = '%s';\n";
-
private final Map<String, String> columnNames;
- private final String schemaName;
- private final String tableName;
private final Binder<D, D> binder;
private final String[] simplePropertyNames;
- private final String[] manyToOneAssociationNames;
- private final Set<ManyToManyAssociationStruct> manyToManyAssociations;
+ private final TopiaMetadataEntity metadataEntity;
+ private final Set<TopiaMetadataComposition> compositions;
+ private final Set<TopiaMetadataAssociation> associations;
private final Set<String> primitiveBooleanPropertyNames;
private final Set<String> primitiveIntegerPropertyNames;
private final Set<String> primitiveLongPropertyNames;
private final Set<String> primitiveFloatPropertyNames;
- public UpdateSqlStatementGenerator(TopiaMetadataEntity metadataEntity, Class<D> dtoType) {
- this.schemaName = metadataEntity.getDbSchemaName();
- this.tableName = metadataEntity.getDbTableName();
+ public UpdateSqlStatementGenerator(TopiaMetadataModel topiaMetadataModel, TopiaMetadataEntity metadataEntity, Class<D> dtoType) {
+ this.metadataEntity = Objects.requireNonNull(metadataEntity);
+ this.compositions = topiaMetadataModel.getCompositions(metadataEntity);
+ this.associations = topiaMetadataModel.getAssociations(metadataEntity);
- Set<String> simplePropertyNamesSet = metadataEntity.getProperties().keySet();
+ Set<String> simplePropertyNamesSet = this.metadataEntity.getProperties().keySet();
this.simplePropertyNames = simplePropertyNamesSet.toArray(new String[0]);
- this.primitiveBooleanPropertyNames = metadataEntity.getPrimitivePropertyNames("boolean");
- this.primitiveIntegerPropertyNames = metadataEntity.getPrimitivePropertyNames("int");
- this.primitiveLongPropertyNames = metadataEntity.getPrimitivePropertyNames("long");
- this.primitiveFloatPropertyNames = metadataEntity.getPrimitivePropertyNames("float");
-
- Set<String> manyToOneAssociationNamesSet = metadataEntity.getManyToOneAssociations().keySet();
- this.manyToOneAssociationNames = manyToOneAssociationNamesSet.toArray(new String[0]);
-
- Map<String, String> manyToManyAssociationsMap = metadataEntity.getManyToManyAssociations();
- this.manyToManyAssociations = new LinkedHashSet<>();
- for (Map.Entry<String, String> entry : manyToManyAssociationsMap.entrySet()) {
- String propertyName = entry.getKey();
- String dbColumnName = metadataEntity.getDbColumnName(propertyName);
- String tableName = metadataEntity.getBdManyToManyAssociationTableName(propertyName);
- ManyToManyAssociationStruct manyToManyAssociation = new ManyToManyAssociationStruct(propertyName, dbColumnName, tableName);
- manyToManyAssociations.add(manyToManyAssociation);
- }
- this.columnNames = computeColumnNames(metadataEntity, simplePropertyNames, manyToOneAssociationNames);
+ this.primitiveBooleanPropertyNames = this.metadataEntity.getPrimitivePropertyNames("boolean");
+ this.primitiveIntegerPropertyNames = this.metadataEntity.getPrimitivePropertyNames("int");
+ this.primitiveLongPropertyNames = this.metadataEntity.getPrimitivePropertyNames("long");
+ this.primitiveFloatPropertyNames = this.metadataEntity.getPrimitivePropertyNames("float");
+
+ String[] manyToOneAssociationNames = compositions.stream().map(TopiaMetadataComposition::getTargetDbName).toArray(String[]::new);
+
+ this.columnNames = computeColumnNames(this.metadataEntity, simplePropertyNames, manyToOneAssociationNames);
this.binder = BinderFactory.newBinder(dtoType);
}
@@ -148,121 +130,54 @@ public class UpdateSqlStatementGenerator<D extends ReferentialDto> {
addEnumParameter(columnName, (Enum) simplePropertyValue, parameters);
continue;
}
-
addOtherTypeParameter(columnName, simplePropertyValue, parameters);
-
}
-
}
ImmutableList.Builder<String> result = ImmutableList.builder();
- if (manyToOneAssociationNames.length > 0) {
-
- Map<String, Object> manyToOneAssociations = binder.obtainProperties(referentialDto, true, manyToOneAssociationNames);
- for (Map.Entry<String, Object> entry : manyToOneAssociations.entrySet()) {
-
- String manyToOneAssociationName = entry.getKey();
- String columnName = columnNames.get(manyToOneAssociationName);
- Object manyToOneAssociationValue = entry.getValue();
-
- if (manyToOneAssociationValue == null) {
- addNullParameter(columnName, parameters);
- continue;
- }
- if (manyToOneAssociationValue instanceof ReferentialDto) {
- addReferentialDtoParameter(columnName, (ReferentialDto) manyToOneAssociationValue, parameters, result);
- continue;
- }
- if (manyToOneAssociationValue instanceof ReferentialDtoReference) {
- addReferentialReferenceParameter(columnName, (ReferentialDtoReference) manyToOneAssociationValue, parameters, result);
- }
-
+ for (TopiaMetadataComposition composition : compositions) {
+ Object compositionValue = binder.obtainSourceProperty(referentialDto, composition.getTargetPropertyName());
+ String columnName = composition.getTargetDbName();
+ if (compositionValue == null) {
+ addNullParameter(columnName, parameters);
+ continue;
+ }
+ if (compositionValue instanceof ReferentialDto) {
+ addReferentialDtoParameter(columnName, (ReferentialDto) compositionValue, parameters, result);
+ continue;
+ }
+ if (compositionValue instanceof ReferentialDtoReference) {
+ addReferentialReferenceParameter(columnName, (ReferentialDtoReference) compositionValue, parameters, result);
}
-
- }
-
-
- String sql = String.format(UPDATE_STATEMENT,
- schemaName,
- tableName,
- parameters.substring(2),
- referentialDto.getId());
- result.add(sql);
- if (log.isDebugEnabled()) {
- log.debug("sql: " + sql);
- }
-
- for (ManyToManyAssociationStruct manyToManyAssociation : manyToManyAssociations) {
- generateManyToManyAssociationSql(referentialDto, manyToManyAssociation, result);
- }
-
- return result.build();
-
- }
-
- private void generateManyToManyAssociationSql(D referentialDto, ManyToManyAssociationStruct manyToManyAssociation, ImmutableList.Builder<String> result) {
-
- String referentialDtoId = referentialDto.getId();
- String manyToManyAssociationTableName = manyToManyAssociation.tableName;
-
- // On commence toujours par supprimer toutes les anciennes associations, elles seront ré-ajoutées juste après
- String deleteSql = String.format(MANY_TO_MANY_ASSOCIATION_DELETE_STATEMENT,
- schemaName,
- manyToManyAssociationTableName,
- tableName,
- referentialDtoId);
- result.add(deleteSql);
- if (log.isDebugEnabled()) {
- log.debug("sql: " + deleteSql);
}
- Collection<ReferentialDtoReference<?, ?>> manyToManyAssociationValues = binder.obtainSourceProperty(referentialDto, manyToManyAssociation.propertyName);
- if (CollectionUtils.isNotEmpty(manyToManyAssociationValues)) {
-
-
- String manyToManyAssociationDbColumnName = manyToManyAssociation.dbColumnName;
+ String updateSql = TopiaSqlStatements.generateUpdateStatement(metadataEntity, parameters.substring(2), referentialDto.getId());
+ result.add(updateSql);
+ String id = referentialDto.getId();
+ for (TopiaMetadataAssociation association : associations) {
+ // On commence toujours par supprimer toutes les anciennes associations, elles seront ré-ajoutées juste après
+ String deleteSql = TopiaSqlStatements.generateAssociationDeleteStatement(association, id);
+ result.add(TopiaSqlStatements.boxAssociationStatement(deleteSql));
- for (ReferentialDtoReference<?, ?> manyToManyAssociationValue : manyToManyAssociationValues) {
-
- addMnAssociation(
- manyToManyAssociationTableName,
- manyToManyAssociationDbColumnName,
- referentialDtoId,
- manyToManyAssociationValue.getDtoType(),
- manyToManyAssociationValue.getId(),
- result
- );
+ Collection<ReferentialDtoReference<?, ?>> associationValues = binder.obtainSourceProperty(referentialDto, association.getTargetPropertyName());
+ for (ReferentialDtoReference associationValue : associationValues) {
+ addAssociation(association, id, associationValue, result);
}
}
-
+ return result.build();
}
- protected <DD extends ReferentialDto> void addMnAssociation(String nmAssociationTableName,
- String nmAssociationDbColumnName,
- String referentialDtoId,
- Class<DD> associationType,
- String associationId,
- ImmutableList.Builder<String> builder) {
-
- String sql = String.format(MANY_TO_MANY_ASSOCIATION_INSERT_STATEMENT,
- schemaName,
- nmAssociationTableName,
- this.tableName,
- nmAssociationDbColumnName,
- referentialDtoId,
- associationId);
- if (log.isDebugEnabled()) {
- log.debug("sql: " + sql);
- }
- builder.add(sql);
-
+ <DD extends ReferentialDto, RR extends ReferentialDtoReference<DD, RR>> void addAssociation(TopiaMetadataAssociation association,
+ String sourceId,
+ RR associationValue,
+ ImmutableList.Builder<String> builder) {
+ String insertSql = TopiaSqlStatements.generateAssociationInsertStatement(association, sourceId, associationValue.getId());
+ builder.add(TopiaSqlStatements.boxAssociationStatement(insertSql));
}
- private Map<String, String> computeColumnNames(TopiaMetadataEntity metadataEntity,
- String[] simplePropertyNames,
- String[] compositionPropertyNames) {
+ private Map<String, String> computeColumnNames(TopiaMetadataEntity metadataEntity, String[] simplePropertyNames, String[] compositionPropertyNames) {
Map<String, String> columnNames = new TreeMap<>();
for (String propertyName : simplePropertyNames) {
@@ -326,29 +241,4 @@ public class UpdateSqlStatementGenerator<D extends ReferentialDto> {
addParameter0(columnName, "" + (parameter == null ? 0f : parameter), parameters);
}
- /**
- * Pour décrire une association nm.
- */
- static class ManyToManyAssociationStruct {
-
- /**
- * Le nom de la propriété dans l'objet.
- */
- private final String propertyName;
- /**
- * Le nom de la colonne de l'association dans la table d'association.
- */
- private final String dbColumnName;
- /**
- * Le nom de la table d'association.
- */
- final String tableName;
-
- ManyToManyAssociationStruct(String propertyName, String dbColumnName, String tableName) {
- this.propertyName = propertyName;
- this.dbColumnName = dbColumnName;
- this.tableName = tableName;
- }
-
- }
}
=====================================
services-local/src/main/java/fr/ird/observe/services/local/service/actions/synchro/referential/sql/UpdateSqlWithCascadeStatementGenerator.java
=====================================
@@ -10,12 +10,12 @@ package fr.ird.observe.services.local.service.actions.synchro.referential.sql;
* 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>.
@@ -26,7 +26,9 @@ import com.google.common.collect.ImmutableList;
import com.google.common.collect.Multimap;
import fr.ird.observe.dto.reference.ReferentialDtoReference;
import fr.ird.observe.dto.referential.ReferentialDto;
+import org.nuiton.topia.persistence.metadata.TopiaMetadataAssociation;
import org.nuiton.topia.persistence.metadata.TopiaMetadataEntity;
+import org.nuiton.topia.persistence.metadata.TopiaMetadataModel;
/**
* Pour générer une requète sql d'ajout à partir d'un référentiel donné et aussi tous les inserts manquants.
@@ -41,17 +43,20 @@ public abstract class UpdateSqlWithCascadeStatementGenerator<D extends Referenti
private final UpdateSqlStatementGenerator<D> delegateGenerator;
private final Multimap<Class<? extends ReferentialDtoReference>, String> idsOnlyExistingOnThisSide;
- protected UpdateSqlWithCascadeStatementGenerator(TopiaMetadataEntity metadataEntity,
+ protected UpdateSqlWithCascadeStatementGenerator(TopiaMetadataModel topiaMetadataModel,
+ TopiaMetadataEntity metadataEntity,
Class<D> dtoType,
Multimap<Class<? extends ReferentialDtoReference>, String> idsOnlyExistingOnThisSide) {
this.idsOnlyExistingOnThisSide = idsOnlyExistingOnThisSide;
- this.delegateGenerator = new UpdateSqlStatementGenerator<D>(metadataEntity, dtoType) {
+ this.delegateGenerator = new UpdateSqlStatementGenerator<D>(topiaMetadataModel, metadataEntity, dtoType) {
- @Override
- protected <DD extends ReferentialDto> void addMnAssociation(String nmAssociationTableName, String nmAssociationDbColumnName, String referentialDtoId, Class<DD> associationType, String associationId, ImmutableList.Builder<String> result) {
- super.addMnAssociation(nmAssociationTableName, nmAssociationDbColumnName, referentialDtoId, associationType, associationId, result);
- addMissingReferentialIfNecessary(associationType, associationId, result);
+ <DD extends ReferentialDto, RR extends ReferentialDtoReference<DD, RR>> void addAssociation(TopiaMetadataAssociation association,
+ String sourceId,
+ RR associationValue,
+ ImmutableList.Builder<String> builder) {
+ super.addAssociation(association, sourceId, associationValue, builder);
+ addMissingReferentialIfNecessary(associationValue.getDtoType(), associationValue.getId(), builder);
}
@Override
=====================================
services-local/src/main/java/fr/ird/observe/services/local/service/referential/ReferentialServiceLocal.java
=====================================
@@ -28,6 +28,7 @@ import fr.ird.observe.binder.data.DataEntityReferenceBinderSupport;
import fr.ird.observe.binder.referential.ReferentialEntityDtoBinderSupport;
import fr.ird.observe.binder.referential.ReferentialEntityReferenceBinderSupport;
import fr.ird.observe.dto.IdDto;
+import fr.ird.observe.dto.IdHelper;
import fr.ird.observe.dto.data.DataDto;
import fr.ird.observe.dto.form.Form;
import fr.ird.observe.dto.form.FormDefinition;
@@ -42,7 +43,6 @@ import fr.ird.observe.dto.referential.SpeciesDto;
import fr.ird.observe.dto.referential.SpeciesGroupDto;
import fr.ird.observe.dto.referential.seine.ObservedSystemReference;
import fr.ird.observe.dto.result.SaveResultDto;
-import fr.ird.observe.entities.EntityMap;
import fr.ird.observe.entities.ObserveDataEntity;
import fr.ird.observe.entities.longline.TripLongline;
import fr.ird.observe.entities.referentiel.ObserveReferentialEntity;
@@ -75,6 +75,7 @@ import org.apache.logging.log4j.LogManager;
import org.apache.logging.log4j.Logger;
import org.nuiton.topia.persistence.TopiaDao;
import org.nuiton.topia.persistence.TopiaEntity;
+import org.nuiton.topia.persistence.metadata.TopiaMetadataEntity;
import org.nuiton.topia.persistence.metadata.TopiaMetadataModel;
import org.nuiton.topia.persistence.script.SqlScriptConsumer;
import org.nuiton.topia.persistence.script.TopiaSqlScript;
@@ -86,6 +87,7 @@ import java.util.Collections;
import java.util.Date;
import java.util.LinkedHashSet;
import java.util.List;
+import java.util.Map;
import java.util.Objects;
import java.util.Optional;
import java.util.Set;
@@ -205,8 +207,8 @@ public class ReferentialServiceLocal extends ObserveServiceLocal implements Refe
ObserveEntityEnum entityEnum = ObserveEntityEnum.valueOf(entityType);
TopiaMetadataModel metadataModel = serviceContext.getTopiaApplicationContext().getMetadataModel();
-
- ReplaceSqlStatementGenerator generator = new ReplaceSqlStatementGenerator(metadataModel, entityEnum.name());
+ TopiaMetadataEntity metadataEntity = Objects.requireNonNull(metadataModel.getEntity(entityEnum.name()));
+ ReplaceSqlStatementGenerator generator = new ReplaceSqlStatementGenerator(metadataModel, metadataEntity);
ImmutableList<String> sql = generator.generateSqls(idToReplace, replaceId);
@@ -218,16 +220,22 @@ public class ReferentialServiceLocal extends ObserveServiceLocal implements Refe
public <D extends ReferentialDto> ImmutableSetDtoMap<DtoReference> findAllUsages(D bean) {
ReferentialDtoEntityContext<D, ?, ?> spi = DbModelHelper.fromReferentialDto(bean);
- Class<ObserveReferentialEntity> entityType = spi.toEntityType();
-
ObserveReferentialEntity entity = loadEntity(spi.toDtoType(), bean.getId());
- TopiaDao<ObserveReferentialEntity> dao = getTopiaPersistenceContext().getDao(entityType);
- EntityMap allUsages = new EntityMap(dao.findAllUsages(entity));
+ Map<Class<? extends TopiaEntity>, List<? extends TopiaEntity>> compositions = serviceContext.getTopiaApplicationContext().findReverseCompositions(getTopiaPersistenceContext(), entity, e -> true);
+ Map<Class<? extends TopiaEntity>, List<? extends TopiaEntity>> associations = serviceContext.getTopiaApplicationContext().findReverseAssociations(getTopiaPersistenceContext(), entity, IdHelper::isData);
ImmutableSetDtoMap.Builder<DtoReference> result = ImmutableSetDtoMap.builder();
- for (Class<? extends TopiaEntity> type : allUsages.keySet()) {
- List<? extends TopiaEntity> entities = allUsages.get(type);
+
+ buildUsageResult(compositions, result);
+ buildUsageResult(associations, result);
+ return result.build();
+ }
+
+ private void buildUsageResult(Map<Class<? extends TopiaEntity>, List<? extends TopiaEntity>> compositions, ImmutableSetDtoMap.Builder<DtoReference> result) {
+ for (Map.Entry<Class<? extends TopiaEntity>, List<? extends TopiaEntity>> entry : compositions.entrySet()) {
+ Class<? extends TopiaEntity> type = entry.getKey();
+ List<? extends TopiaEntity> entities = entry.getValue();
if (ObserveReferentialEntity.class.isAssignableFrom(type)) {
//noinspection unchecked
addAllReferentialUsage(DbModelHelper.fromReferentialEntity((Class) type), (List) entities, result);
@@ -236,7 +244,6 @@ public class ReferentialServiceLocal extends ObserveServiceLocal implements Refe
adddAllDataUsage(DbModelHelper.fromDataEntity((Class) type), (List) entities, result);
}
}
- return result.build();
}
private <D extends ReferentialDto, R extends ReferentialDtoReference<D, R>, E extends ObserveReferentialEntity> ReferentialDtoReferenceSet<R> getReferenceSet0(ReferentialReferenceEntityContext<D, R, E> spi, Date lastUpdateDate) {
=====================================
services/pom.xml
=====================================
@@ -153,6 +153,10 @@
<groupId>junit</groupId>
<artifactId>junit</artifactId>
</dependency>
+ <dependency>
+ <groupId>io.ultreia.java4all.topia</groupId>
+ <artifactId>service-script</artifactId>
+ </dependency>
</dependencies>
=====================================
services/src/main/java/fr/ird/observe/services/service/actions/synchro/referential/ng/ReferentialSynchronizeSqlsRequest.java
=====================================
@@ -25,6 +25,7 @@ package fr.ird.observe.services.service.actions.synchro.referential.ng;
import fr.ird.observe.dto.ObserveDto;
import org.apache.logging.log4j.LogManager;
import org.apache.logging.log4j.Logger;
+import org.nuiton.topia.service.script.TopiaSqlStatements;
/**
* Created on 08/08/16.
@@ -34,7 +35,6 @@ import org.apache.logging.log4j.Logger;
*/
public class ReferentialSynchronizeSqlsRequest implements ObserveDto {
- /** Logger. */
private static final Logger log = LogManager.getLogger(ReferentialSynchronizeSqlsRequest.class);
private final byte[] insertAssociationSqlCode;
@@ -105,11 +105,9 @@ public class ReferentialSynchronizeSqlsRequest implements ObserveDto {
}
public Builder addInsertStatement(String sql) {
- if (log.isInfoEnabled()) {
- log.info("Add add sql: " + sql);
- }
- if (sql.startsWith("$$_INSERT")) {
- addAssociationTasksBuilder.append(sql.substring(3));
+ log.info("Add add sql: " + sql);
+ if (sql.startsWith(TopiaSqlStatements.ASSOCIATION_STATEMENT_PREFIX)) {
+ addAssociationTasksBuilder.append(TopiaSqlStatements.unboxAssociationStatement(sql));
} else {
addTasksBuilder.append(sql);
}
@@ -117,20 +115,15 @@ public class ReferentialSynchronizeSqlsRequest implements ObserveDto {
}
public Builder addUpdateStatement(String sql) {
- if (log.isInfoEnabled()) {
- log.info("Add update sql: " + sql);
- }
+ log.info("Add update sql: " + sql);
updateTasksBuilder.append(sql);
return this;
}
public Builder addDeleteStatement(String sql) {
-
- if (log.isInfoEnabled()) {
- log.info("Add delete sql: " + sql);
- }
- if (sql.startsWith("$$_DELETE")) {
- deleteAssociationTasksBuilder.append(sql.substring(3));
+ log.info("Add delete sql: " + sql);
+ if (sql.startsWith(TopiaSqlStatements.ASSOCIATION_STATEMENT_PREFIX)) {
+ deleteAssociationTasksBuilder.append(TopiaSqlStatements.unboxAssociationStatement(sql));
} else {
deleteTasksBuilder.append(sql);
}
@@ -138,10 +131,7 @@ public class ReferentialSynchronizeSqlsRequest implements ObserveDto {
}
public Builder addDesactivateStatement(String sql) {
-
- if (log.isInfoEnabled()) {
- log.info("Add desactivate sql: " + sql);
- }
+ log.info("Add desactivate sql: " + sql);
desactivateTasksBuilder.append(sql);
return this;
}
View it on GitLab: https://gitlab.com/ultreiaio/ird-observe/compare/bc64ef42537b8b9768425ba88b…
--
View it on GitLab: https://gitlab.com/ultreiaio/ird-observe/compare/bc64ef42537b8b9768425ba88b…
You're receiving this email because of your account on gitlab.com.
1
0
[Git][ultreiaio/ird-observe][develop-7.x] 2 commits: [SYNCHRO] La synchro avancée d'une marée nécessitant une référence absente dans…
by Tony CHEMIT 19 Sep '18
by Tony CHEMIT 19 Sep '18
19 Sep '18
Tony CHEMIT pushed to branch develop-7.x at ultreiaio / ird-observe
Commits:
8ef8691f by Tony CHEMIT at 2018-09-19T06:59:13Z
[SYNCHRO] La synchro avancée d'une marée nécessitant une référence absente dans la base cible provoque une exception - Closes #1064
- - - - -
bc64ef42 by Tony CHEMIT at 2018-09-19T06:59:15Z
L'UI de remplacement de code de référentiel dépasse parfois les limites de l'écran - Closes #1059
- - - - -
23 changed files:
- client/src/main/java/fr/ird/observe/client/db/ObserveSwingDataSource.java
- client/src/main/java/fr/ird/observe/client/ui/admin/export/ExportUIHandler.java
- client/src/main/java/fr/ird/observe/client/ui/admin/synchronize/data/DataSynchroModel.java
- client/src/main/java/fr/ird/observe/client/ui/admin/synchronize/data/DataSynchroUI.jaxx
- client/src/main/java/fr/ird/observe/client/ui/admin/synchronize/data/DataSynchroUI.jcss
- client/src/main/java/fr/ird/observe/client/ui/admin/synchronize/data/DataSynchroUIHandler.java
- client/src/main/java/fr/ird/observe/client/ui/content/ref/ContentReferenceUIHandler.java
- client/src/main/java/fr/ird/observe/client/ui/content/ref/usage/UsageForDeleteUI.jaxx
- client/src/main/java/fr/ird/observe/client/ui/content/ref/usage/UsageForDesactivateUI.jaxx
- client/src/main/java/fr/ird/observe/client/ui/content/ref/usage/UsageForDisplayUI.jaxx
- client/src/main/java/fr/ird/observe/client/ui/util/UIHelper.java
- client/src/main/resources/i18n/client_en_GB.properties
- client/src/main/resources/i18n/client_es_ES.properties
- client/src/main/resources/i18n/client_fr_FR.properties
- pom.xml
- server/src/main/java/fr/ird/observe/server/ObserveWebApplicationListener.java
- + server/src/main/java/fr/ird/observe/server/injector/TopiaSqlScriptInjector.java
- services-client/src/main/java/fr/ird/observe/services/client/ObserveRequestBuilder.java
- services-local/src/main/java/fr/ird/observe/services/local/service/referential/ReferentialServiceLocal.java
- services-local/src/main/java/fr/ird/observe/services/local/service/referential/ReferentialShellBuilder.java
- services/src/main/java/fr/ird/observe/services/service/referential/MissingReferentialRequest.java
- services/src/main/java/fr/ird/observe/services/service/referential/MissingReferentialResult.java
- services/src/main/java/fr/ird/observe/services/service/referential/ReferentialService.java
Changes:
=====================================
client/src/main/java/fr/ird/observe/client/db/ObserveSwingDataSource.java
=====================================
@@ -99,8 +99,9 @@ import fr.ird.observe.services.service.referential.ReferentialService;
import fr.ird.observe.services.service.sql.SqlScriptProducerService;
import fr.ird.observe.spi.map.ImmutableDtoMap;
import fr.ird.observe.spi.map.ImmutableSetDtoMap;
-import org.apache.logging.log4j.Logger;
+import fr.ird.observe.spi.map.ImmutableSetStringMap;
import org.apache.logging.log4j.LogManager;
+import org.apache.logging.log4j.Logger;
import org.jdesktop.beans.AbstractSerializableBean;
import org.nuiton.version.Version;
@@ -561,7 +562,7 @@ public class ObserveSwingDataSource extends AbstractSerializableBean implements
return ObserveServiceMainFactory.get().newService(observeServiceInitializer, serviceType);
}
- public ImmutableSetDtoMap<ReferentialDtoReference> getReferentialMap(ImmutableSetDtoMap<String> referentialIds) {
+ public ImmutableSetDtoMap<ReferentialDtoReference> getReferentialMap(ImmutableSetStringMap referentialIds) {
ImmutableSetDtoMap.Builder<ReferentialDtoReference> result = ImmutableSetDtoMap.builder();
for (Class<? extends ReferentialDtoReference> dtoType : referentialIds.referentialReferenceTypes()) {
=====================================
client/src/main/java/fr/ird/observe/client/ui/admin/export/ExportUIHandler.java
=====================================
@@ -50,9 +50,10 @@ import fr.ird.observe.services.service.referential.MissingReferentialRequest;
import fr.ird.observe.services.service.referential.MissingReferentialResult;
import fr.ird.observe.services.service.referential.ReferentialService;
import fr.ird.observe.spi.map.ImmutableSetDtoMap;
+import fr.ird.observe.spi.map.ImmutableSetStringMap;
import org.apache.commons.collections4.CollectionUtils;
-import org.apache.logging.log4j.Logger;
import org.apache.logging.log4j.LogManager;
+import org.apache.logging.log4j.Logger;
import org.nuiton.decorator.Decorator;
import org.nuiton.jaxx.runtime.spi.UIHandler;
import org.nuiton.jaxx.runtime.swing.editor.MyDefaultCellEditor;
@@ -266,7 +267,7 @@ public class ExportUIHandler extends AdminTabUIHandler<ExportUI> implements UIHa
if (log.isInfoEnabled()) {
log.info("Chargement du réferentiel de la base centrale.");
}
- ImmutableSetDtoMap<String> centralSourceReferential = centralReferentialService.getReferentialIds();
+ ImmutableSetStringMap centralSourceReferential = centralReferentialService.getReferentialIds();
List<String> tripIds = tripEntries.stream().map(TripEntry::getTripId).collect(Collectors.toList());
=====================================
client/src/main/java/fr/ird/observe/client/ui/admin/synchronize/data/DataSynchroModel.java
=====================================
@@ -30,8 +30,8 @@ import fr.ird.observe.client.ui.admin.config.ConfigUI;
import fr.ird.observe.client.ui.admin.synchronize.data.task.DataSynchronizeTaskSupport;
import fr.ird.observe.client.ui.tree.selection.SelectionTreeModel;
import fr.ird.observe.client.ui.util.ProgressModel;
-import org.apache.logging.log4j.Logger;
import org.apache.logging.log4j.LogManager;
+import org.apache.logging.log4j.Logger;
import javax.swing.DefaultListModel;
import javax.swing.border.TitledBorder;
@@ -64,7 +64,7 @@ public class DataSynchroModel extends AdminActionModel {
/** les données sélectionnées sur le panneau de droite. */
protected SelectionTreeModel rightSelectionDataModel;
-
+ protected boolean insertMissingReferentials;
protected final DefaultListModel<DataSynchronizeTaskSupport> tasks;
private final ProgressModel progressModel = new ProgressModel();
@@ -131,6 +131,14 @@ public class DataSynchroModel extends AdminActionModel {
return rightSelectionDataModel;
}
+ public boolean isInsertMissingReferentials() {
+ return insertMissingReferentials;
+ }
+
+ public void setInsertMissingReferentials(boolean insertMissingReferentials) {
+ this.insertMissingReferentials = insertMissingReferentials;
+ }
+
public void populateLeftSelectionModel() {
populateSelectionModel(leftSource, leftSelectionDataModel, LEFT_SELECTION_MODEL_CHANGED_PROPERTY_NAME);
}
=====================================
client/src/main/java/fr/ird/observe/client/ui/admin/synchronize/data/DataSynchroUI.jaxx
=====================================
@@ -49,6 +49,9 @@
</Table>
</JPanel>
<JPanel id='NEED_FIX_content'>
+ <JCheckBox id="insertMissingReferentials" constraints='BorderLayout.NORTH'
+ onStateChanged='getStepModel().setInsertMissingReferentials(((JCheckBox)event.getSource()).isSelected())'/>
+
<JSplitPane id="contentSplitPane" constraints='BorderLayout.CENTER'>
<Table id='contentNorth' fill="both" weighty="1">
<row>
=====================================
client/src/main/java/fr/ird/observe/client/ui/admin/synchronize/data/DataSynchroUI.jcss
=====================================
@@ -45,6 +45,11 @@
mnemonic:Q;
}
+#insertMissingReferentials {
+ text:"observe.action.export.requiredInsertMissingReferentials";
+ selected:{stepModel.isInsertMissingReferentials()};
+}
+
#leftTree {
minimumSize:{UIHelper.newMinDimension()};
font-size:11;
=====================================
client/src/main/java/fr/ird/observe/client/ui/admin/synchronize/data/DataSynchroUIHandler.java
=====================================
@@ -10,12 +10,12 @@ package fr.ird.observe.client.ui.admin.synchronize.data;
* 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>.
@@ -33,12 +33,17 @@ import fr.ird.observe.client.ui.admin.synchronize.data.task.CopyToRightDataSynch
import fr.ird.observe.client.ui.admin.synchronize.data.task.DataSynchronizeTaskSupport;
import fr.ird.observe.client.ui.admin.synchronize.data.task.DeleteFromLeftDataSynchronizeTask;
import fr.ird.observe.client.ui.admin.synchronize.data.task.DeleteFromRightDataSynchronizeTask;
+import fr.ird.observe.client.ui.content.ref.usage.UsageForDisplayUI;
import fr.ird.observe.client.ui.tree.selection.SelectionTree;
import fr.ird.observe.client.ui.tree.selection.SelectionTreeModel;
import fr.ird.observe.client.ui.util.ProgressModel;
+import fr.ird.observe.client.ui.util.UIHelper;
import fr.ird.observe.dto.decoration.DecoratorService;
+import fr.ird.observe.dto.decoration.ObserveI18nDecoratorHelper;
import fr.ird.observe.dto.decoration.decorators.ReferentialReferenceDecorator;
import fr.ird.observe.dto.reference.DataDtoReference;
+import fr.ird.observe.dto.reference.DtoReference;
+import fr.ird.observe.dto.reference.ReferentialDtoReference;
import fr.ird.observe.dto.referential.ProgramReference;
import fr.ird.observe.services.service.data.DeleteTripRequest;
import fr.ird.observe.services.service.data.DeleteTripResult;
@@ -47,14 +52,25 @@ import fr.ird.observe.services.service.data.ExportTripResult;
import fr.ird.observe.services.service.data.ImportTripRequest;
import fr.ird.observe.services.service.data.ImportTripResult;
import fr.ird.observe.services.service.data.TripManagementService;
+import fr.ird.observe.services.service.referential.MissingReferentialRequest;
+import fr.ird.observe.services.service.referential.MissingReferentialResult;
+import fr.ird.observe.services.service.referential.ReferentialService;
+import fr.ird.observe.spi.map.ImmutableSetDtoMap;
+import fr.ird.observe.spi.map.ImmutableSetStringMap;
+import org.apache.logging.log4j.LogManager;
+import org.apache.logging.log4j.Logger;
+import org.nuiton.decorator.Decorator;
import org.nuiton.jaxx.runtime.spi.UIHandler;
import org.nuiton.jaxx.runtime.swing.wizard.ext.WizardState;
import javax.swing.DefaultListModel;
+import javax.swing.JOptionPane;
import javax.swing.border.TitledBorder;
import java.awt.Color;
+import java.util.LinkedHashSet;
import java.util.List;
import java.util.Map;
+import java.util.Set;
import static org.nuiton.i18n.I18n.n;
import static org.nuiton.i18n.I18n.t;
@@ -67,6 +83,8 @@ import static org.nuiton.i18n.I18n.t;
*/
public class DataSynchroUIHandler extends AdminTabUIHandler<DataSynchroUI> implements UIHandler<DataSynchroUI> {
+ private static final Logger log = LogManager.getLogger(DataSynchroUIHandler.class);
+
@Override
public void afterInit(DataSynchroUI ui) {
super.afterInit(this.ui);
@@ -122,13 +140,10 @@ public class DataSynchroUIHandler extends AdminTabUIHandler<DataSynchroUI> imple
}
public void doStartAction() {
-
addAdminWorker(getUi().getStartAction().getToolTipText(), this::doStartAction0);
-
}
public void addCopyToLeftTasks() {
-
SelectionTreeModel rightSelectionDataModel = getStepModel().getRightSelectionDataModel();
SelectionTreeModel leftSelectionDataModel = getStepModel().getLeftSelectionDataModel();
Map<ProgramReference, List<DataDtoReference<?, ?>>> selectedDataByProgram = rightSelectionDataModel.getSelectedDataByProgram();
@@ -138,17 +153,14 @@ public class DataSynchroUIHandler extends AdminTabUIHandler<DataSynchroUI> imple
for (DataDtoReference trip : entry.getValue()) {
boolean tripExistOnLeft = leftSelectionDataModel.containsData(program, trip);
getStepModel().addTask(new CopyToLeftDataSynchronizeTask(program, trip, tripExistOnLeft));
-
if (tripExistOnLeft) {
leftSelectionDataModel.removeTrip(program, trip);
}
}
}
-
}
public void addCopyToRightTasks() {
-
SelectionTreeModel leftSelectionDataModel = getStepModel().getLeftSelectionDataModel();
SelectionTreeModel rightSelectionDataModel = getStepModel().getRightSelectionDataModel();
Map<ProgramReference, List<DataDtoReference<?, ?>>> selectedDataByProgram = leftSelectionDataModel.getSelectedDataByProgram();
@@ -156,20 +168,16 @@ public class DataSynchroUIHandler extends AdminTabUIHandler<DataSynchroUI> imple
for (Map.Entry<ProgramReference, List<DataDtoReference<?, ?>>> entry : selectedDataByProgram.entrySet()) {
ProgramReference program = entry.getKey();
for (DataDtoReference trip : entry.getValue()) {
-
boolean tripExistOnRight = rightSelectionDataModel.containsData(program, trip);
getStepModel().addTask(new CopyToRightDataSynchronizeTask(program, trip, tripExistOnRight));
-
if (tripExistOnRight) {
rightSelectionDataModel.removeTrip(program, trip);
}
}
}
-
}
public void addDeleteFromLeftTasks() {
-
SelectionTreeModel selectionDataModel = getStepModel().getLeftSelectionDataModel();
Map<ProgramReference, List<DataDtoReference<?, ?>>> selectedDataByProgram = selectionDataModel.getSelectedDataByProgram();
selectionDataModel.removeAllSelectedData();
@@ -182,7 +190,6 @@ public class DataSynchroUIHandler extends AdminTabUIHandler<DataSynchroUI> imple
}
public void addDeleteFromRightTasks() {
-
SelectionTreeModel selectionDataModel = getStepModel().getRightSelectionDataModel();
Map<ProgramReference, List<DataDtoReference<?, ?>>> selectedDataByProgram = selectionDataModel.getSelectedDataByProgram();
selectionDataModel.removeAllSelectedData();
@@ -195,9 +202,7 @@ public class DataSynchroUIHandler extends AdminTabUIHandler<DataSynchroUI> imple
}
public void doExecuteAction() {
-
addAdminWorker(getUi().getStartAction().getToolTipText(), this::doExecuteAction0);
-
}
private WizardState doStartAction0() {
@@ -214,11 +219,11 @@ public class DataSynchroUIHandler extends AdminTabUIHandler<DataSynchroUI> imple
ObserveSwingDataSource rightSource = configModel.getSafeCentralSource(true);
stepModel.setRightSource(rightSource);
-// tabUI.getLeftTreePane().setBorder(new TitledBorder(configModel.getLocalSourceModel().getLabel()));
stepModel.populateLeftSelectionModel();
- sendMessage(t("observe.actions.synchro.referential.message.data.leftData.loaded"));
+ String leftLabelWithUrl = configModel.getLocalSourceModel().getLabelWithUrl();
+ sendMessage(t("observe.actions.synchro.data.message.data.loaded", leftLabelWithUrl));
- TitledBorder leftBorder = new TitledBorder(configModel.getLocalSourceModel().getLabelWithUrl());
+ TitledBorder leftBorder = new TitledBorder(leftLabelWithUrl);
boolean leftCanWriteData = configModel.getLocalSourceModel().getDataSourceInformation().canWriteData();
leftBorder.setTitleColor(leftCanWriteData ? Color.GREEN : Color.RED);
tabUI.getLeftTreePane().setBorder(leftBorder);
@@ -228,11 +233,11 @@ public class DataSynchroUIHandler extends AdminTabUIHandler<DataSynchroUI> imple
}
configUI.getLocalSourceConfig().setBorder(leftBorder);
-// tabUI.getRightTreePane().setBorder(new TitledBorder(configModel.getCentralSourceModel().getLabel()));
stepModel.populateRightSelectionModel();
- sendMessage(t("observe.actions.synchro.referential.message.data.rightData.loaded"));
+ String rightLabelWithUrl = configModel.getCentralSourceModel().getLabelWithUrl();
+ sendMessage(t("observe.actions.synchro.data.message.data.loaded", rightLabelWithUrl));
- TitledBorder rightBorder = new TitledBorder(configModel.getCentralSourceModel().getLabelWithUrl());
+ TitledBorder rightBorder = new TitledBorder(rightLabelWithUrl);
boolean rightCanWriteData = configModel.getCentralSourceModel().getDataSourceInformation().canWriteData();
rightBorder.setTitleColor(rightCanWriteData ? Color.GREEN : Color.RED);
tabUI.getRightTreePane().setBorder(rightBorder);
@@ -256,17 +261,162 @@ public class DataSynchroUIHandler extends AdminTabUIHandler<DataSynchroUI> imple
int size = tasks.size();
int stepsCount = 0;
+ Set<String> idsToCopyToLeft = new LinkedHashSet<>();
+ Set<String> idsToCopyToRight = new LinkedHashSet<>();
for (int i = 0; i < size; i++) {
+
DataSynchronizeTaskSupport task = tasks.getElementAt(i);
stepsCount++;
- if (task instanceof CopyToLeftDataSynchronizeTask || task instanceof CopyToRightDataSynchronizeTask) {
+ if (task instanceof CopyToLeftDataSynchronizeTask) {
stepsCount++;
+ idsToCopyToLeft.add(task.getTrip().getId());
}
+ if (task instanceof CopyToRightDataSynchronizeTask) {
+ stepsCount++;
+ idsToCopyToRight.add(task.getTrip().getId());
+ }
+ }
+ boolean copyToLeft = !idsToCopyToLeft.isEmpty();
+ if (copyToLeft) {
+ stepsCount += 3;
}
+ boolean copyToRight = !idsToCopyToRight.isEmpty();
+ if (copyToRight) {
+ stepsCount += 3;
+ }
+
ProgressModel progressModel = getStepModel().getProgressModel();
progressModel.setStepsCount(stepsCount);
DecoratorService decoratorService = getDecoratorService();
+ boolean insertMissingReferentials = getStepModel().isInsertMissingReferentials();
+ if (copyToLeft) {
+
+ // generate add missing referential to left
+
+ progressModel.incrementsCurrentStep();
+
+ ReferentialService leftReferentialService = leftSource.getReferentialService();
+ ImmutableSetStringMap leftSourceReferential = leftReferentialService.getReferentialIds();
+ MissingReferentialRequest leftMissingReferentialRequest = MissingReferentialRequest.of(leftSourceReferential, idsToCopyToLeft.toArray(new String[0]));
+ MissingReferentialResult leftMissingReferentialResult =
+ rightSource.getReferentialService().computeMissingReferential(leftMissingReferentialRequest);
+
+ progressModel.incrementsCurrentStep();
+
+ if (!insertMissingReferentials && leftMissingReferentialResult != null) {
+
+ // l'export n'est pas possible
+ UIHelper.displayWarning(t("observe.title.can.not.export.data.left"), t("observe.actions.exportData.error.missingReferentialsId.left"));
+ sendMessage(t("observe.actions.exportData.error.missingReferentialsId.left"));
+ return WizardState.CANCELED;
+ }
+
+ if (leftMissingReferentialResult == null) {
+ progressModel.incrementsCurrentStep();
+ } else {
+
+ // there is some referential to add to left source
+
+ String message = t("observe.message.show.usage.for.missingReferentials.left");
+
+ ImmutableSetDtoMap<ReferentialDtoReference> usages = rightSource.getReferentialMap(leftMissingReferentialResult.getMissingIds());
+ UsageForDisplayUI usagesUI = UsageForDisplayUI.build(message, usages);
+
+ int reponse = UIHelper.askUser(null,
+ t("observe.title.can.not.export.data.left"),
+ usagesUI,
+ JOptionPane.WARNING_MESSAGE,
+ new Object[]{
+ t("observe.choice.confirm.insert"),
+ t("observe.choice.cancel")},
+ 0);
+
+ if (reponse != 0) {
+
+ return WizardState.CANCELED;
+ }
+
+ // insertion des référentiels manquants dans la base centrale
+ log.info("Insertion dans la base de gauche des référentiels manquants.");
+
+ for (Class<? extends ReferentialDtoReference> key : usages.referentialReferenceTypes()) {
+ Set<? extends ReferentialDtoReference> references = usages.get(key);
+ String type = t(ObserveI18nDecoratorHelper.getTypePluralI18nKey(key));
+ sendMessage(t("observe.actions.exportData.message.add.missing.referentials.left", references.size(), type));
+ Decorator decorator = decoratorService.getReferenceDecorator(key);
+ for (DtoReference reference : references) {
+ sendMessage(t("observe.actions.exportData.message.add.missing.referential", decorator.toString(reference)));
+ }
+ }
+ progressModel.incrementsCurrentStep();
+ leftReferentialService.insertMissingReferential(leftMissingReferentialResult.getSqlCode());
+ }
+ }
+
+ if (copyToRight) {
+
+ // generate add missing referential to right
+
+ progressModel.incrementsCurrentStep();
+
+ ReferentialService rightReferentialService = rightSource.getReferentialService();
+ ImmutableSetStringMap rightSourceReferential = rightReferentialService.getReferentialIds();
+ MissingReferentialRequest rightMissingReferentialRequest = MissingReferentialRequest.of(rightSourceReferential, idsToCopyToRight.toArray(new String[0]));
+ MissingReferentialResult rightMissingReferentialResult =
+ leftSource.getReferentialService().computeMissingReferential(rightMissingReferentialRequest);
+
+ progressModel.incrementsCurrentStep();
+
+ if (!insertMissingReferentials && rightMissingReferentialResult != null) {
+
+ // l'export n'est pas possible
+ UIHelper.displayWarning(t("observe.title.can.not.export.data.right"), t("observe.actions.exportData.error.missingReferentialsId.right"));
+ sendMessage(t("observe.actions.exportData.error.missingReferentialsId.right"));
+ return WizardState.CANCELED;
+ }
+
+ if (rightMissingReferentialResult == null) {
+ progressModel.incrementsCurrentStep();
+ } else {
+
+ // there is some referential to add to left source
+
+ String message = t("observe.message.show.usage.for.missingReferentials.right");
+
+ ImmutableSetDtoMap<ReferentialDtoReference> usages = leftSource.getReferentialMap(rightMissingReferentialResult.getMissingIds());
+ UsageForDisplayUI usagesUI = UsageForDisplayUI.build(message, usages);
+
+ int reponse = UIHelper.askUser(null,
+ t("observe.title.can.not.export.data.right"),
+ usagesUI,
+ JOptionPane.WARNING_MESSAGE,
+ new Object[]{
+ t("observe.choice.confirm.insert"),
+ t("observe.choice.cancel")},
+ 0);
+
+ if (reponse != 0) {
+
+ return WizardState.CANCELED;
+ }
+
+ log.info("Insertion dans la base de droite des référentiels manquants.");
+
+ for (Class<? extends ReferentialDtoReference> key : usages.referentialReferenceTypes()) {
+ Set<? extends ReferentialDtoReference> references = usages.get(key);
+ String type = t(ObserveI18nDecoratorHelper.getTypePluralI18nKey(key));
+ sendMessage(t("observe.actions.exportData.message.add.missing.referentials.right", references.size(), type));
+ Decorator decorator = decoratorService.getReferenceDecorator(key);
+ for (DtoReference reference : references) {
+ sendMessage(t("observe.actions.exportData.message.add.missing.referential", decorator.toString(reference)));
+ }
+ }
+ progressModel.incrementsCurrentStep();
+ rightReferentialService.insertMissingReferential(rightMissingReferentialResult.getSqlCode());
+ }
+ }
+
ReferentialReferenceDecorator<ProgramReference> programDecorator = decoratorService.getReferentialReferenceDecorator(ProgramReference.class);
TripManagementService leftTripManagementService = leftSource.getTripManagementService();
@@ -383,4 +533,5 @@ public class DataSynchroUIHandler extends AdminTabUIHandler<DataSynchroUI> imple
return WizardState.SUCCESSED;
}
+
}
=====================================
client/src/main/java/fr/ird/observe/client/ui/content/ref/ContentReferenceUIHandler.java
=====================================
@@ -407,12 +407,14 @@ public class ContentReferenceUIHandler<D extends ReferentialDto, R extends Refer
UsageForDisplayUI<R> usagesUI = UsageForDisplayUI.build(message, usages);
- UIHelper.askUser(ui,
- t("observe.title.show.usage"),
- usagesUI,
- JOptionPane.INFORMATION_MESSAGE,
- new Object[]{t("observe.choice.quit")},
- 0);
+ Object[] options = {
+ t("observe.choice.quit")};
+ JOptionPane pane = new JOptionPane(usagesUI, JOptionPane.INFORMATION_MESSAGE,
+ JOptionPane.DEFAULT_OPTION, null,
+ options, options[0]);
+
+ UIHelper.askUser(pane, t("observe.title.show.usage"), options);
+
}
@Override
=====================================
client/src/main/java/fr/ird/observe/client/ui/content/ref/usage/UsageForDeleteUI.jaxx
=====================================
@@ -66,8 +66,16 @@ protected void finalize() throws Throwable {
<JLabel text="observe.message.show.usage.for.delete3"/>
</JPanel>
- <JPanel id="usages" border='{new TitledBorder(t("observe.usage.usageTitle"))}' constraints="BorderLayout.CENTER"
- layout="{new GridLayout(0, 1)}"/>
+ <Table fill="both" constraints="BorderLayout.CENTER">
+ <row>
+ <cell weighty="1" weightx="1">
+ <JScrollPane verticalScrollBarPolicy='{JScrollPane.VERTICAL_SCROLLBAR_AS_NEEDED}'>
+ <JPanel id="usages" border='{new TitledBorder(t("observe.usage.usageTitle"))}'
+ layout="{new GridLayout(0, 1)}"/>
+ </JScrollPane>
+ </cell>
+ </row>
+ </Table>
<JPanel id="replacePanel" border='{new TitledBorder(t("observe.usage.replaceTitle"))}'
constraints="BorderLayout.SOUTH" layout="{new GridLayout(0, 1)}">
=====================================
client/src/main/java/fr/ird/observe/client/ui/content/ref/usage/UsageForDesactivateUI.jaxx
=====================================
@@ -66,8 +66,16 @@ protected void finalize() throws Throwable {
<JLabel text="observe.message.show.usage.for.desactivated3"/>
</JPanel>
- <JPanel id="usages" border='{new TitledBorder(t("observe.usage.usageTitle"))}' constraints="BorderLayout.CENTER"
- layout="{new GridLayout(0, 1)}"/>
+ <Table fill="both" constraints="BorderLayout.CENTER">
+ <row>
+ <cell weighty="1" weightx="1">
+ <JScrollPane verticalScrollBarPolicy='{JScrollPane.VERTICAL_SCROLLBAR_AS_NEEDED}'>
+ <JPanel id="usages" border='{new TitledBorder(t("observe.usage.usageTitle"))}'
+ layout="{new GridLayout(0, 1)}"/>
+ </JScrollPane>
+ </cell>
+ </row>
+ </Table>
<JPanel id="replacePanel"
constraints="BorderLayout.SOUTH" layout="{new BorderLayout()}">
=====================================
client/src/main/java/fr/ird/observe/client/ui/content/ref/usage/UsageForDisplayUI.jaxx
=====================================
@@ -56,7 +56,15 @@ protected void finalize() throws Throwable {
<JLabel id="message" constraints="BorderLayout.NORTH"/>
- <JPanel id="usages" border='{new TitledBorder(t("observe.usage.usageTitle"))}' constraints="BorderLayout.CENTER"
- layout="{new GridLayout(0, 1)}"/>
+ <Table fill="both" constraints="BorderLayout.CENTER">
+ <row>
+ <cell weighty="1" weightx="1">
+ <JScrollPane verticalScrollBarPolicy='{JScrollPane.VERTICAL_SCROLLBAR_AS_NEEDED}'>
+ <JPanel id="usages" border='{new TitledBorder(t("observe.usage.usageTitle"))}'
+ layout="{new GridLayout(0, 1)}"/>
+ </JScrollPane>
+ </cell>
+ </row>
+ </Table>
</JPanel>
=====================================
client/src/main/java/fr/ird/observe/client/ui/util/UIHelper.java
=====================================
@@ -37,8 +37,8 @@ import fr.ird.observe.dto.reference.ReferentialDtoReference;
import fr.ird.observe.services.security.InvalidAuthenticationTokenException;
import org.apache.commons.beanutils.PropertyUtils;
import org.apache.commons.io.FileUtils;
-import org.apache.logging.log4j.Logger;
import org.apache.logging.log4j.LogManager;
+import org.apache.logging.log4j.Logger;
import org.jdesktop.swingx.painter.Painter;
import org.nuiton.decorator.Decorator;
import org.nuiton.jaxx.runtime.JAXXObject;
@@ -185,10 +185,9 @@ public class UIHelper extends SwingUtil {
contentPane.setLayout(new BorderLayout());
contentPane.add(pane, BorderLayout.CENTER);
- dialog.setResizable(false);
dialog.pack();
- dialog.setLocationRelativeTo(mainUI);
+ SwingUtil.center(mainUI, dialog);
final PropertyChangeListener listener = event -> {
// Let the defaultCloseOperation handle the closing
=====================================
client/src/main/resources/i18n/client_en_GB.properties
=====================================
@@ -151,8 +151,12 @@ observe.actions.consolidate.title.tip=Consolidate observed data
observe.actions.exportData=Export data
observe.actions.exportData.description=Export data
observe.actions.exportData.error.missingReferentialsId=Can't export data, there is some missing referentials in central source and you did not select insert option.
+observe.actions.exportData.error.missingReferentialsId.left=Can't export data, there is some missing referentials in left source and you did not select insert option.
+observe.actions.exportData.error.missingReferentialsId.right=Can't export data, there is some missing referentials in right source and you did not select insert option.
observe.actions.exportData.message.add.missing.referential=\t%s
observe.actions.exportData.message.add.missing.referentials=Insert %s missing referentials of type «%s»
+observe.actions.exportData.message.add.missing.referentials.left=Insert %s missing referentials of type «%s» in left source
+observe.actions.exportData.message.add.missing.referentials.right=Insert %s missing referentials of type «%s» in right source
observe.actions.exportData.message.not.possible=Export is not possible (see above messages)
observe.actions.exportData.message.operation.needFix=Select data to export.
observe.actions.exportData.message.prepare.data=Prepare data to export...
@@ -202,6 +206,7 @@ observe.actions.synchro.data.deleteFromLeft.tip=Delete selected trip(s) from lef
observe.actions.synchro.data.deleteFromRight.tip=Delete selected trip(s) from right database
observe.actions.synchro.data.description=Advanced data management
observe.actions.synchro.data.launch.operation=Get data fro databases
+observe.actions.synchro.data.message.data.loaded=%s - Data loaded
observe.actions.synchro.data.prepare.copyToLeftTask=Register operation copy to left database\: %s - %s
observe.actions.synchro.data.prepare.copyToRightTask=Register operation copy to right database\: %s - %s
observe.actions.synchro.data.prepare.deleteFromLeftTask=Register operation delete from left database\: %s - %s
@@ -242,8 +247,6 @@ observe.actions.synchro.referential.legacy.launch.operation=Synchronize referent
observe.actions.synchro.referential.legacy.tip=Synchronize objectOperation on local database
observe.actions.synchro.referential.message.apply.done=Referential updated at 1$td/%1$tm/%1$tY à %1$tH\:%1$tM\:%1$tS
observe.actions.synchro.referential.message.build.diff=Build differential of referential from %1$s
-observe.actions.synchro.referential.message.data.leftData.loaded=Left referential panel loaded
-observe.actions.synchro.referential.message.data.rightData.loaded=Right referential panel loaded
observe.actions.synchro.referential.message.need.save.for.synchro.operation=Referential update has modified some local data.
observe.actions.synchro.referential.message.need.save.for.validation.operation=Validation operation has modified some local data.
observe.actions.synchro.referential.message.no.local.modification=No data modified, save is not required.
@@ -1313,6 +1316,8 @@ observe.message.show.usage.for.desactivated=Referential %1$s "%2$s" will be disa
observe.message.show.usage.for.desactivated2=Some data are using this referential, see following reference
observe.message.show.usage.for.desactivated3=Those data need to use another enabled referential to be saved.
observe.message.show.usage.for.missingReferentials=There is some referentials present in local source but not in centrale one.
+observe.message.show.usage.for.missingReferentials.left=There is some referentials present in right source but not in left one.
+observe.message.show.usage.for.missingReferentials.right=There is some referentials present in left source but not in right one.
observe.message.show.usages=List of usage of referential %1$s\: '%2$s'
observe.message.table.editBean.modified=Current entry is modifed and valid.
observe.message.table.editBean.modified.but.invalid=Current entry is modified but not valid.
@@ -1468,6 +1473,8 @@ observe.storage.useServerStorage.description=Please configure connexion to remot
observe.title.about=About
observe.title.can.not.delete.referentiel=Impossible to delete a referentiel data...
observe.title.can.not.export.data=Could not export data
+observe.title.can.not.export.data.left=Could not export data to left source
+observe.title.can.not.export.data.right=Could not export data to right source
observe.title.can.not.export.obstuna=Could not export obstuna data...
observe.title.choose.db.dump=Choose a database backup
observe.title.choose.db.dump.directory=Chhose directory of backup
=====================================
client/src/main/resources/i18n/client_es_ES.properties
=====================================
@@ -151,8 +151,12 @@ observe.actions.consolidate.title.tip=Consolidar los datos observados
observe.actions.exportData=Exportar los datos observados
observe.actions.exportData.description=Exportar los datos observados en la base central
observe.actions.exportData.error.missingReferentialsId=Il existe des référentiels dans la base locale non présente en base centrale, mais vous n'avez pas activé l'option d'insertion automatique. \#TODO
+observe.actions.exportData.error.missingReferentialsId.left=Il existe des référentiels dans la base de gauche non présente en base centrale, mais vous n'avez pas activé l'option d'insertion automatique. \#TODO
+observe.actions.exportData.error.missingReferentialsId.right=Il existe des référentiels dans la base de droite non présente en base centrale, mais vous n'avez pas activé l'option d'insertion automatique. \#TODO
observe.actions.exportData.message.add.missing.referential=\t%s
observe.actions.exportData.message.add.missing.referentials=Insertion de %s référentiels de type «%s» \#TODO
+observe.actions.exportData.message.add.missing.referentials.left=Insertion de %s référentiels de type «%s» dans la base de gauche\#TODO
+observe.actions.exportData.message.add.missing.referentials.right=Insertion de %s référentiels de type «%s» dans la base de droite\#TODO
observe.actions.exportData.message.not.possible=La exportación no es posible (vea el mensaje anterior).
observe.actions.exportData.message.operation.needFix=Seleccione las mareas a exportar.
observe.actions.exportData.message.prepare.data=Preparación de los datos a exportar...
@@ -202,6 +206,7 @@ observe.actions.synchro.data.deleteFromLeft.tip=Eliminar la ou las mareas selecc
observe.actions.synchro.data.deleteFromRight.tip=Eliminar la ou las mareas seleccionada(s) de la base de la derecha
observe.actions.synchro.data.description=Gestión avanzada de los datos de los usuarios
observe.actions.synchro.data.launch.operation=Recuperar los datos de las fuentes de datos
+observe.actions.synchro.data.message.data.loaded=%s - Datos recuperadas.
observe.actions.synchro.data.prepare.copyToLeftTask=Preparación de la copia en la base de la izquierda \: %s - %s
observe.actions.synchro.data.prepare.copyToRightTask=Preparación de la copia en la base de la derecha \: %s - %s
observe.actions.synchro.data.prepare.deleteFromLeftTask=Preparación de la eliminación de la base de la izquierda \: %s - %s
@@ -242,8 +247,6 @@ observe.actions.synchro.referential.legacy.launch.operation=Calcular el diferenc
observe.actions.synchro.referential.legacy.tip=Operación de actualización del referencial de la base local
observe.actions.synchro.referential.message.apply.done=Referencial actualizado el %1$td/%1$tm/%1$tY a %1$tH\:%1$tM\:%1$tS
observe.actions.synchro.referential.message.build.diff=Construcción del diferencial de referenciales desde\: %1$s
-observe.actions.synchro.referential.message.data.leftData.loaded=Datos del pannel de la izquierda recuperadas.
-observe.actions.synchro.referential.message.data.rightData.loaded=Datos del pannel de la derecha recuperadas.
observe.actions.synchro.referential.message.need.save.for.synchro.operation=La operación de sincronización de referenciales ha generado cambios
observe.actions.synchro.referential.message.need.save.for.validation.operation=la operación de validación de datos ha generado modificaciones.
observe.actions.synchro.referential.message.no.local.modification=No se han modificado datos en la base local, no es necesario guardar.
@@ -1313,6 +1316,8 @@ observe.message.show.usage.for.desactivated=El referencial %1$s "%2$s" se desact
observe.message.show.usage.for.desactivated2=Los objetos están usando actualmente las referencias que se enumeran a continuación..
observe.message.show.usage.for.desactivated3=Estos objetos deben usar otro referencial (no desactivado) para poder actualizarse.
observe.message.show.usage.for.missingReferentials=Il existe des référentiels présents dans la base locale mais non présents dans la base centrale. \#TODO
+observe.message.show.usage.for.missingReferentials.left=Il existe des référentiels présents dans la base de droite mais non présents dans la base de gauche.
+observe.message.show.usage.for.missingReferentials.right=Il existe des référentiels présents dans la base de gauche mais non présents dans la base droite.
observe.message.show.usages=Listas de usos de referenciales %1$s \: '%2$s'
observe.message.table.editBean.modified=El registro actual se ha modificado y es válido.
observe.message.table.editBean.modified.but.invalid=El registro actual se ha modificado pero no es válido.
@@ -1468,6 +1473,8 @@ observe.storage.useServerStorage.description=Configure su conexión al servidor
observe.title.about=A proposito de ObServe...
observe.title.can.not.delete.referentiel=Impossible eliminar un referencial en proceso de utilización...
observe.title.can.not.export.data=Impossible d'exporter les données vers la base centrale... \#TODO
+observe.title.can.not.export.data.left=Impossible d'exporter les données vers la base de gauche... \#TODO
+observe.title.can.not.export.data.right=Impossible d'exporter les données vers la base de droite... \#TODO
observe.title.can.not.export.obstuna=Impossible exportar los datos de obstuna...
observe.title.choose.db.dump=Seleccionar una copia de seguridad de base local
observe.title.choose.db.dump.directory=Seleccionar e directorio de destinación de la copia de seguridad
=====================================
client/src/main/resources/i18n/client_fr_FR.properties
=====================================
@@ -151,8 +151,12 @@ observe.actions.consolidate.title.tip=Consolider les données observateur
observe.actions.exportData=Exporter les données observateurs
observe.actions.exportData.description=Exporter les données observateurs vers la base centrale
observe.actions.exportData.error.missingReferentialsId=Il existe des référentiels dans la base locale non présente en base centrale, mais vous n'avez pas activé l'option d'insertion automatique.
+observe.actions.exportData.error.missingReferentialsId.left=Il existe des référentiels dans la base de gauche non présente en base centrale, mais vous n'avez pas activé l'option d'insertion automatique.
+observe.actions.exportData.error.missingReferentialsId.right=Il existe des référentiels dans la base de droite non présente en base centrale, mais vous n'avez pas activé l'option d'insertion automatique.
observe.actions.exportData.message.add.missing.referential=\t%s
observe.actions.exportData.message.add.missing.referentials=Insertion de %s référentiels de type «%s»
+observe.actions.exportData.message.add.missing.referentials.left=Insertion de %s référentiels de type «%s» dans la base de gauche
+observe.actions.exportData.message.add.missing.referentials.right=Insertion de %s référentiels de type «%s» dans la base de droite
observe.actions.exportData.message.not.possible=L'opération d'export n'est pas possible (voir les messages précédents).
observe.actions.exportData.message.operation.needFix=Veuillez sélectionner les marées à exporter.
observe.actions.exportData.message.prepare.data=Préparation des données à exporter...
@@ -202,6 +206,7 @@ observe.actions.synchro.data.deleteFromLeft.tip=Supprimer la ou les marées sél
observe.actions.synchro.data.deleteFromRight.tip=Supprimer la ou les marées sélectionnée(s) de la base de droite
observe.actions.synchro.data.description=Gestion avancée des données utilisateurs
observe.actions.synchro.data.launch.operation=Récupérer les données des sources de données
+observe.actions.synchro.data.message.data.loaded=%s - Données récupérées.
observe.actions.synchro.data.prepare.copyToLeftTask=Préparation de la recopie vers la base de gauche \: %s - %s
observe.actions.synchro.data.prepare.copyToRightTask=Préparation de la recopie vers la base de droite \: %s - %s
observe.actions.synchro.data.prepare.deleteFromLeftTask=Préparation de la suppression de la base de gauche \: %s - %s
@@ -242,8 +247,6 @@ observe.actions.synchro.referential.legacy.launch.operation=Calculer le différe
observe.actions.synchro.referential.legacy.tip=Opération de mise à jour du référentiel de la base locale
observe.actions.synchro.referential.message.apply.done=Référentiel mis à jour le %1$td/%1$tm/%1$tY à %1$tH\:%1$tM\:%1$tS
observe.actions.synchro.referential.message.build.diff=Construction du différentiel de référentiel depuis %1$s
-observe.actions.synchro.referential.message.data.leftData.loaded=Données du panneau gauche récupérées.
-observe.actions.synchro.referential.message.data.rightData.loaded=Données du panneau droit récupérées.
observe.actions.synchro.referential.message.need.save.for.synchro.operation=L'opération de synchronisation du référentiel a engendrée des modifications.
observe.actions.synchro.referential.message.need.save.for.validation.operation=L'opération de validation des données a engendrée des modifications.
observe.actions.synchro.referential.message.no.local.modification=Aucune donnée de la base locale n'a été modifiée
@@ -1313,6 +1316,8 @@ observe.message.show.usage.for.desactivated=Le référentiel %1$s "%2$s" va êtr
observe.message.show.usage.for.desactivated2=Des objets utilisent actuellement cet entité dont les références sont citées plus bas.
observe.message.show.usage.for.desactivated3=Ces objets devront utiliser un autre référentiel (non désactivé) pour pouvoir être mis à jour.
observe.message.show.usage.for.missingReferentials=Il existe des référentiels présents dans la base locale mais non présents dans la base centrale.
+observe.message.show.usage.for.missingReferentials.left=Il existe des référentiels présents dans la base de droite mais non présents dans la base de gauche.
+observe.message.show.usage.for.missingReferentials.right=Il existe des référentiels présents dans la base de gauche mais non présents dans la base droite.
observe.message.show.usages=Listes des utilisations du référentiel %1$s \: '%2$s'
observe.message.table.editBean.modified=L'entrée en cours d'édition a été modifiée et est valide.
observe.message.table.editBean.modified.but.invalid=L'entrée en cours d'édition a été modifiée, mais n'est pas valide.
@@ -1468,6 +1473,8 @@ observe.storage.useServerStorage.description=Veuillez configurer votre connexion
observe.title.about=A propos d'ObServe...
observe.title.can.not.delete.referentiel=Impossible de supprimer un référentiel en cours d'utilisation...
observe.title.can.not.export.data=Impossible d'exporter les données vers la base centrale...
+observe.title.can.not.export.data.left=Impossible d'exporter les données vers la base de gauche...
+observe.title.can.not.export.data.right=Impossible d'exporter les données vers la base de droite...
observe.title.can.not.export.obstuna=Impossible d'exporter des données d'obstuna...
observe.title.choose.db.dump=Choisir une sauvegarder de base locale
observe.title.choose.db.dump.directory=Choisir le répertoire de destination de la sauvegarde
=====================================
pom.xml
=====================================
@@ -26,7 +26,7 @@
<parent>
<groupId>io.ultreia.maven</groupId>
<artifactId>pom</artifactId>
- <version>2018.56</version>
+ <version>2018.57</version>
</parent>
<groupId>fr.ird.observe</groupId>
@@ -162,7 +162,7 @@
<lib.version.h2>1.4.196</lib.version.h2>
<!--<lib.version.nuiton.topia>3.6-SNAPSHOT</lib.version.nuiton.topia>-->
<!--<lib.version.java4all.eugene>3.0-alpha-21</lib.version.java4all.eugene>-->
- <lib.version.java4all.topia>1.1.7-SNAPSHOT</lib.version.java4all.topia>
+ <!--<lib.version.java4all.topia>1.1.8-SNAPSHOT</lib.version.java4all.topia>-->
<!-- license header configuration -->
<license.licenseName>gpl_v3</license.licenseName>
<license.organizationName>IRD, Code Lutin, Ultreia.io</license.organizationName>
=====================================
server/src/main/java/fr/ird/observe/server/ObserveWebApplicationListener.java
=====================================
@@ -32,11 +32,11 @@ import fr.ird.observe.server.injector.ObserveDataSourceConfigurationInjector;
import fr.ird.observe.server.injector.ObserveDtoInjector;
import fr.ird.observe.server.injector.ObserveReferenceSetRequestInjector;
import fr.ird.observe.server.injector.SqlScriptProducerRequestInjector;
+import fr.ird.observe.server.injector.TopiaSqlScriptInjector;
import io.ultreia.java4all.http.HRequestBuilder;
-import org.apache.commons.io.IOUtils;
import org.apache.commons.lang3.StringUtils;
-import org.apache.logging.log4j.Logger;
import org.apache.logging.log4j.LogManager;
+import org.apache.logging.log4j.Logger;
import org.debux.webmotion.server.WebMotionServerListener;
import org.debux.webmotion.server.call.ServerContext;
import org.debux.webmotion.server.mapping.Mapping;
@@ -80,6 +80,7 @@ public class ObserveWebApplicationListener implements WebMotionServerListener {
context.addInjector(new DateInjector(HRequestBuilder.DATE_PATTERN));
context.addInjector(new SqlScriptProducerRequestInjector(gson));
context.addInjector(new ImmutableSetInjector(gson));
+ context.addInjector(new TopiaSqlScriptInjector(gson));
context.addConverter(new ObserveDtoConverter(gson), ObserveDbUserDto.class);
context.getServletContext().setAttribute(ObserveWebApplicationContext.APPLICATION_CONTEXT_PARAMETER, applicationContext);
=====================================
server/src/main/java/fr/ird/observe/server/injector/TopiaSqlScriptInjector.java
=====================================
@@ -0,0 +1,63 @@
+package fr.ird.observe.server.injector;
+
+/*-
+ * #%L
+ * ObServe :: Server
+ * %%
+ * Copyright (C) 2008 - 2018 IRD, Code Lutin, Ultreia.io
+ * %%
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as
+ * published by the Free Software Foundation, either version 3 of the
+ * License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public
+ * License along with this program. If not, see
+ * <http://www.gnu.org/licenses/gpl-3.0.html>.
+ * #L%
+ */
+
+import com.google.gson.Gson;
+import org.apache.logging.log4j.LogManager;
+import org.apache.logging.log4j.Logger;
+import org.debux.webmotion.server.call.Call;
+import org.debux.webmotion.server.handler.ExecutorParametersInjectorHandler;
+import org.debux.webmotion.server.mapping.Mapping;
+import org.nuiton.topia.persistence.script.TopiaSqlScript;
+
+import java.lang.reflect.Type;
+import java.util.Objects;
+
+/**
+ * @author Tony Chemit - dev(a)tchemit.fr
+ */
+public class TopiaSqlScriptInjector implements ExecutorParametersInjectorHandler.Injector {
+
+ /** Logger. */
+ private static final Logger log = LogManager.getLogger(TopiaSqlScriptInjector.class);
+
+ protected final Gson gson;
+
+ public TopiaSqlScriptInjector(Gson gson) {
+ this.gson = gson;
+ }
+
+ @Override
+ public Object getValue(Mapping mapping, Call call, String name, Class<?> type, Type generic) {
+ TopiaSqlScript topiaSqlScript = null;
+ if (type.equals(TopiaSqlScript.class)) {
+ Call.ParameterTree parameterTree = call.getParameterTree().getObject().get(name);
+ Objects.requireNonNull(parameterTree, "Le paramètre " + name + " n'as pas été trouvé, recompiler (parameter)!");
+ String gsonContent = ((String[]) parameterTree.getValue())[0];
+ topiaSqlScript = gson.fromJson(gsonContent, TopiaSqlScript.class);
+ log.info("Inject topiaSqlScript: " + topiaSqlScript);
+ }
+ return topiaSqlScript;
+ }
+
+}
=====================================
services-client/src/main/java/fr/ird/observe/services/client/ObserveRequestBuilder.java
=====================================
@@ -24,6 +24,7 @@ package fr.ird.observe.services.client;
import fr.ird.observe.services.configuration.rest.ObserveDataSourceConfigurationRestConstants;
import io.ultreia.java4all.http.HRequestBuilder;
+import org.nuiton.topia.persistence.script.TopiaSqlScript;
import java.util.Objects;
import java.util.concurrent.TimeUnit;
@@ -72,4 +73,9 @@ public class ObserveRequestBuilder extends HRequestBuilder {
addAuthTokenSupplier(serviceContext.getAuthTokenSupplier());
}
}
+
+ public ObserveRequestBuilder addParameter(String parameterName, TopiaSqlScript value) {
+ super.addParameter(parameterName, serviceContext.getResponseBuilder().getGson().get().toJson(value));
+ return this;
+ }
}
=====================================
services-local/src/main/java/fr/ird/observe/services/local/service/referential/ReferentialServiceLocal.java
=====================================
@@ -70,6 +70,7 @@ import fr.ird.observe.spi.context.ReferentialEntityContext;
import fr.ird.observe.spi.context.ReferentialReferenceEntityContext;
import fr.ird.observe.spi.map.ImmutableDtoMap;
import fr.ird.observe.spi.map.ImmutableSetDtoMap;
+import fr.ird.observe.spi.map.ImmutableSetStringMap;
import org.apache.logging.log4j.LogManager;
import org.apache.logging.log4j.Logger;
import org.nuiton.topia.persistence.TopiaDao;
@@ -276,9 +277,9 @@ public class ReferentialServiceLocal extends ObserveServiceLocal implements Refe
}
@Override
- public ImmutableSetDtoMap<String> getReferentialIds() {
+ public ImmutableSetStringMap getReferentialIds() {
- ImmutableSetDtoMap.Builder<String> result = ImmutableSetDtoMap.builder();
+ ImmutableSetStringMap.Builder result = ImmutableSetStringMap.builder();
for (Class<? extends ReferentialDto> dtoType : DtoModelClasses.REFERENTIAL_TYPES) {
getReferentialIds0(dtoType, result);
@@ -286,7 +287,7 @@ public class ReferentialServiceLocal extends ObserveServiceLocal implements Refe
return result.build();
}
- private <D extends ReferentialDto, R extends ReferentialDtoReference<D, R>, E extends ObserveReferentialEntity> void getReferentialIds0(Class<D> dtoType, ImmutableSetDtoMap.Builder<String> result) {
+ private <D extends ReferentialDto, R extends ReferentialDtoReference<D, R>, E extends ObserveReferentialEntity> void getReferentialIds0(Class<D> dtoType, ImmutableSetStringMap.Builder result) {
ReferentialDtoEntityContext<D, R, E> typeContext = DbModelHelper.fromReferentialDto(dtoType);
ReferentialEntityReferenceBinderSupport<D, R, E> binder = typeContext.toEntityReferenceBinder();
TopiaDao<E> dao = getTopiaPersistenceContext().getDao(binder.getEntityType());
@@ -312,7 +313,7 @@ public class ReferentialServiceLocal extends ObserveServiceLocal implements Refe
}
}
- ImmutableSetDtoMap<String> missingReferentialIds = referentialShellBuilder.build();
+ ImmutableSetStringMap missingReferentialIds = referentialShellBuilder.build();
if (missingReferentialIds.isEmpty()) {
return null;
=====================================
services-local/src/main/java/fr/ird/observe/services/local/service/referential/ReferentialShellBuilder.java
=====================================
@@ -10,12 +10,12 @@ package fr.ird.observe.services.local.service.referential;
* 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>.
@@ -24,7 +24,7 @@ package fr.ird.observe.services.local.service.referential;
import fr.ird.observe.entities.referentiel.ObserveReferentialEntity;
import fr.ird.observe.spi.DbModelHelper;
-import fr.ird.observe.spi.map.ImmutableSetDtoMap;
+import fr.ird.observe.spi.map.ImmutableSetStringMap;
import org.nuiton.topia.persistence.TopiaEntity;
import org.nuiton.topia.persistence.TopiaEntityVisitor;
@@ -39,35 +39,35 @@ import java.util.TreeSet;
*/
public class ReferentialShellBuilder {
- public static ReferentialShellBuilder builder(ImmutableSetDtoMap<String> incomingReferentialIds) {
- return new ReferentialShellBuilder(incomingReferentialIds);
+ private final GetEntityReferentialShellVisitor visitor;
+
+ private ReferentialShellBuilder(ImmutableSetStringMap incomingReferentialIds) {
+ visitor = new GetEntityReferentialShellVisitor(incomingReferentialIds);
}
- private final GetEntityReferentialShellVisitor visitor;
+ public static ReferentialShellBuilder builder(ImmutableSetStringMap incomingReferentialIds) {
+ return new ReferentialShellBuilder(incomingReferentialIds);
+ }
void scan(TopiaEntity entity) {
entity.accept(visitor);
}
- public ImmutableSetDtoMap<String> build() {
+ public ImmutableSetStringMap build() {
return visitor.missingReferentialIds.build();
}
- private ReferentialShellBuilder(ImmutableSetDtoMap<String> incomingReferentialIds) {
- visitor = new GetEntityReferentialShellVisitor(incomingReferentialIds);
- }
-
private static class GetEntityReferentialShellVisitor implements TopiaEntityVisitor {
private final Set<String> hitIds;
- private final ImmutableSetDtoMap<String> incomingReferentialIds;
- private final ImmutableSetDtoMap.Builder<String> missingReferentialIds;
+ private final ImmutableSetStringMap incomingReferentialIds;
+ private final ImmutableSetStringMap.Builder missingReferentialIds;
- GetEntityReferentialShellVisitor(ImmutableSetDtoMap<String> incomingReferentialIds) {
+ GetEntityReferentialShellVisitor(ImmutableSetStringMap incomingReferentialIds) {
this.incomingReferentialIds = incomingReferentialIds;
this.hitIds = new TreeSet<>();
- this.missingReferentialIds = ImmutableSetDtoMap.builder();
+ this.missingReferentialIds = ImmutableSetStringMap.builder();
}
@Override
=====================================
services/src/main/java/fr/ird/observe/services/service/referential/MissingReferentialRequest.java
=====================================
@@ -23,7 +23,7 @@ package fr.ird.observe.services.service.referential;
*/
import fr.ird.observe.dto.ObserveDto;
-import fr.ird.observe.spi.map.ImmutableSetDtoMap;
+import fr.ird.observe.spi.map.ImmutableSetStringMap;
/**
* Created on 07/11/16.
@@ -33,19 +33,19 @@ import fr.ird.observe.spi.map.ImmutableSetDtoMap;
*/
public class MissingReferentialRequest implements ObserveDto {
- private final ImmutableSetDtoMap<String> centralSourceReferential;
+ private final ImmutableSetStringMap centralSourceReferential;
private final String[] tripIds;
- public static MissingReferentialRequest of(ImmutableSetDtoMap<String> centralSourceReferential, String... tripIds) {
+ public static MissingReferentialRequest of(ImmutableSetStringMap centralSourceReferential, String... tripIds) {
return new MissingReferentialRequest(centralSourceReferential, tripIds);
}
- private MissingReferentialRequest(ImmutableSetDtoMap<String> centralSourceReferential, String... tripIds) {
+ private MissingReferentialRequest(ImmutableSetStringMap centralSourceReferential, String... tripIds) {
this.centralSourceReferential = centralSourceReferential;
this.tripIds = tripIds;
}
- public ImmutableSetDtoMap<String> getCentralSourceReferential() {
+ public ImmutableSetStringMap getCentralSourceReferential() {
return centralSourceReferential;
}
=====================================
services/src/main/java/fr/ird/observe/services/service/referential/MissingReferentialResult.java
=====================================
@@ -23,8 +23,8 @@ package fr.ird.observe.services.service.referential;
*/
import fr.ird.observe.dto.ObserveDto;
+import fr.ird.observe.spi.map.ImmutableSetStringMap;
import org.nuiton.topia.persistence.script.TopiaSqlScript;
-import fr.ird.observe.spi.map.ImmutableSetDtoMap;
/**
* Created on 07/11/16.
@@ -34,19 +34,19 @@ import fr.ird.observe.spi.map.ImmutableSetDtoMap;
*/
public class MissingReferentialResult implements ObserveDto {
- private final ImmutableSetDtoMap<String> missingIds;
+ private final ImmutableSetStringMap missingIds;
private final TopiaSqlScript sqlCode;
- private MissingReferentialResult(ImmutableSetDtoMap<String> missingIds, TopiaSqlScript sqlCode) {
+ private MissingReferentialResult(ImmutableSetStringMap missingIds, TopiaSqlScript sqlCode) {
this.missingIds = missingIds;
this.sqlCode = sqlCode;
}
- public static MissingReferentialResult of(ImmutableSetDtoMap<String> missingReferentialIds, TopiaSqlScript sqlCode) {
+ public static MissingReferentialResult of(ImmutableSetStringMap missingReferentialIds, TopiaSqlScript sqlCode) {
return new MissingReferentialResult(missingReferentialIds, sqlCode);
}
- public ImmutableSetDtoMap<String> getMissingIds() {
+ public ImmutableSetStringMap getMissingIds() {
return missingIds;
}
=====================================
services/src/main/java/fr/ird/observe/services/service/referential/ReferentialService.java
=====================================
@@ -40,6 +40,7 @@ import fr.ird.observe.services.spi.Write;
import fr.ird.observe.services.spi.WriteDataPermission;
import fr.ird.observe.services.spi.WriteReferentialPermission;
import fr.ird.observe.spi.map.ImmutableSetDtoMap;
+import fr.ird.observe.spi.map.ImmutableSetStringMap;
import io.ultreia.java4all.http.spi.Delete;
import io.ultreia.java4all.http.spi.Get;
import io.ultreia.java4all.http.spi.Nullable;
@@ -119,7 +120,7 @@ public interface ReferentialService extends ObserveService {
@ReadReferentialPermission
@Post
- ImmutableSetDtoMap<String> getReferentialIds();
+ ImmutableSetStringMap getReferentialIds();
@ReadReferentialPermission
View it on GitLab: https://gitlab.com/ultreiaio/ird-observe/compare/6e5f9f038c1654a674819b3b62…
--
View it on GitLab: https://gitlab.com/ultreiaio/ird-observe/compare/6e5f9f038c1654a674819b3b62…
You're receiving this email because of your account on gitlab.com.
1
0
[Git][ultreiaio/ird-observe][develop-7.x] L'UI de remplacement de code de référentiel dépasse parfois les limites de l'écran - Closes #1059
by Tony CHEMIT 19 Sep '18
by Tony CHEMIT 19 Sep '18
19 Sep '18
Tony CHEMIT pushed to branch develop-7.x at ultreiaio / ird-observe
Commits:
6e5f9f03 by Tony CHEMIT at 2018-09-19T06:12:41Z
L'UI de remplacement de code de référentiel dépasse parfois les limites de l'écran - Closes #1059
- - - - -
5 changed files:
- client/src/main/java/fr/ird/observe/client/ui/content/ref/ContentReferenceUIHandler.java
- client/src/main/java/fr/ird/observe/client/ui/content/ref/usage/UsageForDeleteUI.jaxx
- client/src/main/java/fr/ird/observe/client/ui/content/ref/usage/UsageForDesactivateUI.jaxx
- client/src/main/java/fr/ird/observe/client/ui/content/ref/usage/UsageForDisplayUI.jaxx
- client/src/main/java/fr/ird/observe/client/ui/util/UIHelper.java
Changes:
=====================================
client/src/main/java/fr/ird/observe/client/ui/content/ref/ContentReferenceUIHandler.java
=====================================
@@ -407,12 +407,14 @@ public class ContentReferenceUIHandler<D extends ReferentialDto, R extends Refer
UsageForDisplayUI<R> usagesUI = UsageForDisplayUI.build(message, usages);
- UIHelper.askUser(ui,
- t("observe.title.show.usage"),
- usagesUI,
- JOptionPane.INFORMATION_MESSAGE,
- new Object[]{t("observe.choice.quit")},
- 0);
+ Object[] options = {
+ t("observe.choice.quit")};
+ JOptionPane pane = new JOptionPane(usagesUI, JOptionPane.INFORMATION_MESSAGE,
+ JOptionPane.DEFAULT_OPTION, null,
+ options, options[0]);
+
+ UIHelper.askUser(pane, t("observe.title.show.usage"), options);
+
}
@Override
=====================================
client/src/main/java/fr/ird/observe/client/ui/content/ref/usage/UsageForDeleteUI.jaxx
=====================================
@@ -66,8 +66,16 @@ protected void finalize() throws Throwable {
<JLabel text="observe.message.show.usage.for.delete3"/>
</JPanel>
- <JPanel id="usages" border='{new TitledBorder(t("observe.usage.usageTitle"))}' constraints="BorderLayout.CENTER"
- layout="{new GridLayout(0, 1)}"/>
+ <Table fill="both" constraints="BorderLayout.CENTER">
+ <row>
+ <cell weighty="1" weightx="1">
+ <JScrollPane verticalScrollBarPolicy='{JScrollPane.VERTICAL_SCROLLBAR_AS_NEEDED}'>
+ <JPanel id="usages" border='{new TitledBorder(t("observe.usage.usageTitle"))}'
+ layout="{new GridLayout(0, 1)}"/>
+ </JScrollPane>
+ </cell>
+ </row>
+ </Table>
<JPanel id="replacePanel" border='{new TitledBorder(t("observe.usage.replaceTitle"))}'
constraints="BorderLayout.SOUTH" layout="{new GridLayout(0, 1)}">
=====================================
client/src/main/java/fr/ird/observe/client/ui/content/ref/usage/UsageForDesactivateUI.jaxx
=====================================
@@ -66,8 +66,16 @@ protected void finalize() throws Throwable {
<JLabel text="observe.message.show.usage.for.desactivated3"/>
</JPanel>
- <JPanel id="usages" border='{new TitledBorder(t("observe.usage.usageTitle"))}' constraints="BorderLayout.CENTER"
- layout="{new GridLayout(0, 1)}"/>
+ <Table fill="both" constraints="BorderLayout.CENTER">
+ <row>
+ <cell weighty="1" weightx="1">
+ <JScrollPane verticalScrollBarPolicy='{JScrollPane.VERTICAL_SCROLLBAR_AS_NEEDED}'>
+ <JPanel id="usages" border='{new TitledBorder(t("observe.usage.usageTitle"))}'
+ layout="{new GridLayout(0, 1)}"/>
+ </JScrollPane>
+ </cell>
+ </row>
+ </Table>
<JPanel id="replacePanel"
constraints="BorderLayout.SOUTH" layout="{new BorderLayout()}">
=====================================
client/src/main/java/fr/ird/observe/client/ui/content/ref/usage/UsageForDisplayUI.jaxx
=====================================
@@ -56,7 +56,15 @@ protected void finalize() throws Throwable {
<JLabel id="message" constraints="BorderLayout.NORTH"/>
- <JPanel id="usages" border='{new TitledBorder(t("observe.usage.usageTitle"))}' constraints="BorderLayout.CENTER"
- layout="{new GridLayout(0, 1)}"/>
+ <Table fill="both" constraints="BorderLayout.CENTER">
+ <row>
+ <cell weighty="1" weightx="1">
+ <JScrollPane verticalScrollBarPolicy='{JScrollPane.VERTICAL_SCROLLBAR_AS_NEEDED}'>
+ <JPanel id="usages" border='{new TitledBorder(t("observe.usage.usageTitle"))}'
+ layout="{new GridLayout(0, 1)}"/>
+ </JScrollPane>
+ </cell>
+ </row>
+ </Table>
</JPanel>
=====================================
client/src/main/java/fr/ird/observe/client/ui/util/UIHelper.java
=====================================
@@ -37,8 +37,8 @@ import fr.ird.observe.dto.reference.ReferentialDtoReference;
import fr.ird.observe.services.security.InvalidAuthenticationTokenException;
import org.apache.commons.beanutils.PropertyUtils;
import org.apache.commons.io.FileUtils;
-import org.apache.logging.log4j.Logger;
import org.apache.logging.log4j.LogManager;
+import org.apache.logging.log4j.Logger;
import org.jdesktop.swingx.painter.Painter;
import org.nuiton.decorator.Decorator;
import org.nuiton.jaxx.runtime.JAXXObject;
@@ -185,10 +185,9 @@ public class UIHelper extends SwingUtil {
contentPane.setLayout(new BorderLayout());
contentPane.add(pane, BorderLayout.CENTER);
- dialog.setResizable(false);
dialog.pack();
- dialog.setLocationRelativeTo(mainUI);
+ SwingUtil.center(mainUI, dialog);
final PropertyChangeListener listener = event -> {
// Let the defaultCloseOperation handle the closing
View it on GitLab: https://gitlab.com/ultreiaio/ird-observe/commit/6e5f9f038c1654a674819b3b62b…
--
View it on GitLab: https://gitlab.com/ultreiaio/ird-observe/commit/6e5f9f038c1654a674819b3b62b…
You're receiving this email because of your account on gitlab.com.
1
0
[Git][ultreiaio/ird-observe][develop-7.x] L'UI de remplacement de code de référentiel dépasse parfois les limites de l'écran - Closes #1059
by Tony CHEMIT 19 Sep '18
by Tony CHEMIT 19 Sep '18
19 Sep '18
Tony CHEMIT pushed to branch develop-7.x at ultreiaio / ird-observe
Commits:
1b3d9f3a by Tony CHEMIT at 2018-09-19T05:51:41Z
L'UI de remplacement de code de référentiel dépasse parfois les limites de l'écran - Closes #1059
- - - - -
2 changed files:
- client/src/main/java/fr/ird/observe/client/ui/content/ref/ContentReferenceUIHandler.java
- client/src/main/java/fr/ird/observe/client/ui/util/UIHelper.java
Changes:
=====================================
client/src/main/java/fr/ird/observe/client/ui/content/ref/ContentReferenceUIHandler.java
=====================================
@@ -407,12 +407,14 @@ public class ContentReferenceUIHandler<D extends ReferentialDto, R extends Refer
UsageForDisplayUI<R> usagesUI = UsageForDisplayUI.build(message, usages);
- UIHelper.askUser(ui,
- t("observe.title.show.usage"),
- usagesUI,
- JOptionPane.INFORMATION_MESSAGE,
- new Object[]{t("observe.choice.quit")},
- 0);
+ Object[] options = {
+ t("observe.choice.quit")};
+ JOptionPane pane = new JOptionPane(usagesUI, JOptionPane.INFORMATION_MESSAGE,
+ JOptionPane.DEFAULT_OPTION, null,
+ options, options[0]);
+
+ UIHelper.askUser(pane, t("observe.title.show.usage"), options);
+
}
@Override
=====================================
client/src/main/java/fr/ird/observe/client/ui/util/UIHelper.java
=====================================
@@ -37,8 +37,8 @@ import fr.ird.observe.dto.reference.ReferentialDtoReference;
import fr.ird.observe.services.security.InvalidAuthenticationTokenException;
import org.apache.commons.beanutils.PropertyUtils;
import org.apache.commons.io.FileUtils;
-import org.apache.logging.log4j.Logger;
import org.apache.logging.log4j.LogManager;
+import org.apache.logging.log4j.Logger;
import org.jdesktop.swingx.painter.Painter;
import org.nuiton.decorator.Decorator;
import org.nuiton.jaxx.runtime.JAXXObject;
@@ -185,10 +185,9 @@ public class UIHelper extends SwingUtil {
contentPane.setLayout(new BorderLayout());
contentPane.add(pane, BorderLayout.CENTER);
- dialog.setResizable(false);
dialog.pack();
- dialog.setLocationRelativeTo(mainUI);
+ SwingUtil.center(mainUI, dialog);
final PropertyChangeListener listener = event -> {
// Let the defaultCloseOperation handle the closing
View it on GitLab: https://gitlab.com/ultreiaio/ird-observe/commit/1b3d9f3a008b08118ab70da86c7…
--
View it on GitLab: https://gitlab.com/ultreiaio/ird-observe/commit/1b3d9f3a008b08118ab70da86c7…
You're receiving this email because of your account on gitlab.com.
1
0
[Git][ultreiaio/ird-observe][develop-7.x] 3 commits: Only remove program node if it is enabled (otherwise it is not in navigation tree)
by Tony CHEMIT 19 Sep '18
by Tony CHEMIT 19 Sep '18
19 Sep '18
Tony CHEMIT pushed to branch develop-7.x at ultreiaio / ird-observe
Commits:
9e6160fe by Tony CHEMIT at 2018-09-19T04:51:49Z
Only remove program node if it is enabled (otherwise it is not in navigation tree)
- - - - -
295ce509 by Tony CHEMIT at 2018-09-19T04:51:51Z
[SYNCHRO] Problème avec la synchro avancée d'un programme - Closes #1063
- - - - -
a5fffee9 by Tony CHEMIT at 2018-09-19T04:51:51Z
[SYNCHRO] La synchro avancée d'une marée nécessitant une référence absente dans la base cible provoque une exception - Closes #1064
- - - - -
20 changed files:
- client/src/main/java/fr/ird/observe/client/db/ObserveSwingDataSource.java
- client/src/main/java/fr/ird/observe/client/ui/admin/export/ExportUIHandler.java
- client/src/main/java/fr/ird/observe/client/ui/admin/synchronize/data/DataSynchroModel.java
- client/src/main/java/fr/ird/observe/client/ui/admin/synchronize/data/DataSynchroUI.jaxx
- client/src/main/java/fr/ird/observe/client/ui/admin/synchronize/data/DataSynchroUI.jcss
- client/src/main/java/fr/ird/observe/client/ui/admin/synchronize/data/DataSynchroUIHandler.java
- client/src/main/java/fr/ird/observe/client/ui/content/ref/ContentReferenceUIHandler.java
- client/src/main/resources/i18n/client_en_GB.properties
- client/src/main/resources/i18n/client_es_ES.properties
- client/src/main/resources/i18n/client_fr_FR.properties
- pom.xml
- server/src/main/java/fr/ird/observe/server/ObserveWebApplicationListener.java
- + server/src/main/java/fr/ird/observe/server/injector/TopiaSqlScriptInjector.java
- services-client/src/main/java/fr/ird/observe/services/client/ObserveRequestBuilder.java
- services-local/src/main/java/fr/ird/observe/services/local/service/actions/synchro/referential/ng/ReferentialSynchronizeSqlsRequestBuilder.java
- services-local/src/main/java/fr/ird/observe/services/local/service/referential/ReferentialServiceLocal.java
- services-local/src/main/java/fr/ird/observe/services/local/service/referential/ReferentialShellBuilder.java
- services/src/main/java/fr/ird/observe/services/service/referential/MissingReferentialRequest.java
- services/src/main/java/fr/ird/observe/services/service/referential/MissingReferentialResult.java
- services/src/main/java/fr/ird/observe/services/service/referential/ReferentialService.java
Changes:
=====================================
client/src/main/java/fr/ird/observe/client/db/ObserveSwingDataSource.java
=====================================
@@ -99,8 +99,9 @@ import fr.ird.observe.services.service.referential.ReferentialService;
import fr.ird.observe.services.service.sql.SqlScriptProducerService;
import fr.ird.observe.spi.map.ImmutableDtoMap;
import fr.ird.observe.spi.map.ImmutableSetDtoMap;
-import org.apache.logging.log4j.Logger;
+import fr.ird.observe.spi.map.ImmutableSetStringMap;
import org.apache.logging.log4j.LogManager;
+import org.apache.logging.log4j.Logger;
import org.jdesktop.beans.AbstractSerializableBean;
import org.nuiton.version.Version;
@@ -561,7 +562,7 @@ public class ObserveSwingDataSource extends AbstractSerializableBean implements
return ObserveServiceMainFactory.get().newService(observeServiceInitializer, serviceType);
}
- public ImmutableSetDtoMap<ReferentialDtoReference> getReferentialMap(ImmutableSetDtoMap<String> referentialIds) {
+ public ImmutableSetDtoMap<ReferentialDtoReference> getReferentialMap(ImmutableSetStringMap referentialIds) {
ImmutableSetDtoMap.Builder<ReferentialDtoReference> result = ImmutableSetDtoMap.builder();
for (Class<? extends ReferentialDtoReference> dtoType : referentialIds.referentialReferenceTypes()) {
=====================================
client/src/main/java/fr/ird/observe/client/ui/admin/export/ExportUIHandler.java
=====================================
@@ -50,9 +50,10 @@ import fr.ird.observe.services.service.referential.MissingReferentialRequest;
import fr.ird.observe.services.service.referential.MissingReferentialResult;
import fr.ird.observe.services.service.referential.ReferentialService;
import fr.ird.observe.spi.map.ImmutableSetDtoMap;
+import fr.ird.observe.spi.map.ImmutableSetStringMap;
import org.apache.commons.collections4.CollectionUtils;
-import org.apache.logging.log4j.Logger;
import org.apache.logging.log4j.LogManager;
+import org.apache.logging.log4j.Logger;
import org.nuiton.decorator.Decorator;
import org.nuiton.jaxx.runtime.spi.UIHandler;
import org.nuiton.jaxx.runtime.swing.editor.MyDefaultCellEditor;
@@ -266,7 +267,7 @@ public class ExportUIHandler extends AdminTabUIHandler<ExportUI> implements UIHa
if (log.isInfoEnabled()) {
log.info("Chargement du réferentiel de la base centrale.");
}
- ImmutableSetDtoMap<String> centralSourceReferential = centralReferentialService.getReferentialIds();
+ ImmutableSetStringMap centralSourceReferential = centralReferentialService.getReferentialIds();
List<String> tripIds = tripEntries.stream().map(TripEntry::getTripId).collect(Collectors.toList());
=====================================
client/src/main/java/fr/ird/observe/client/ui/admin/synchronize/data/DataSynchroModel.java
=====================================
@@ -30,8 +30,8 @@ import fr.ird.observe.client.ui.admin.config.ConfigUI;
import fr.ird.observe.client.ui.admin.synchronize.data.task.DataSynchronizeTaskSupport;
import fr.ird.observe.client.ui.tree.selection.SelectionTreeModel;
import fr.ird.observe.client.ui.util.ProgressModel;
-import org.apache.logging.log4j.Logger;
import org.apache.logging.log4j.LogManager;
+import org.apache.logging.log4j.Logger;
import javax.swing.DefaultListModel;
import javax.swing.border.TitledBorder;
@@ -64,7 +64,7 @@ public class DataSynchroModel extends AdminActionModel {
/** les données sélectionnées sur le panneau de droite. */
protected SelectionTreeModel rightSelectionDataModel;
-
+ protected boolean insertMissingReferentials;
protected final DefaultListModel<DataSynchronizeTaskSupport> tasks;
private final ProgressModel progressModel = new ProgressModel();
@@ -131,6 +131,14 @@ public class DataSynchroModel extends AdminActionModel {
return rightSelectionDataModel;
}
+ public boolean isInsertMissingReferentials() {
+ return insertMissingReferentials;
+ }
+
+ public void setInsertMissingReferentials(boolean insertMissingReferentials) {
+ this.insertMissingReferentials = insertMissingReferentials;
+ }
+
public void populateLeftSelectionModel() {
populateSelectionModel(leftSource, leftSelectionDataModel, LEFT_SELECTION_MODEL_CHANGED_PROPERTY_NAME);
}
=====================================
client/src/main/java/fr/ird/observe/client/ui/admin/synchronize/data/DataSynchroUI.jaxx
=====================================
@@ -49,6 +49,9 @@
</Table>
</JPanel>
<JPanel id='NEED_FIX_content'>
+ <JCheckBox id="insertMissingReferentials" constraints='BorderLayout.NORTH'
+ onStateChanged='getStepModel().setInsertMissingReferentials(((JCheckBox)event.getSource()).isSelected())'/>
+
<JSplitPane id="contentSplitPane" constraints='BorderLayout.CENTER'>
<Table id='contentNorth' fill="both" weighty="1">
<row>
=====================================
client/src/main/java/fr/ird/observe/client/ui/admin/synchronize/data/DataSynchroUI.jcss
=====================================
@@ -45,6 +45,11 @@
mnemonic:Q;
}
+#insertMissingReferentials {
+ text:"observe.action.export.requiredInsertMissingReferentials";
+ selected:{stepModel.isInsertMissingReferentials()};
+}
+
#leftTree {
minimumSize:{UIHelper.newMinDimension()};
font-size:11;
=====================================
client/src/main/java/fr/ird/observe/client/ui/admin/synchronize/data/DataSynchroUIHandler.java
=====================================
@@ -10,12 +10,12 @@ package fr.ird.observe.client.ui.admin.synchronize.data;
* 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>.
@@ -33,12 +33,17 @@ import fr.ird.observe.client.ui.admin.synchronize.data.task.CopyToRightDataSynch
import fr.ird.observe.client.ui.admin.synchronize.data.task.DataSynchronizeTaskSupport;
import fr.ird.observe.client.ui.admin.synchronize.data.task.DeleteFromLeftDataSynchronizeTask;
import fr.ird.observe.client.ui.admin.synchronize.data.task.DeleteFromRightDataSynchronizeTask;
+import fr.ird.observe.client.ui.content.ref.usage.UsageForDisplayUI;
import fr.ird.observe.client.ui.tree.selection.SelectionTree;
import fr.ird.observe.client.ui.tree.selection.SelectionTreeModel;
import fr.ird.observe.client.ui.util.ProgressModel;
+import fr.ird.observe.client.ui.util.UIHelper;
import fr.ird.observe.dto.decoration.DecoratorService;
+import fr.ird.observe.dto.decoration.ObserveI18nDecoratorHelper;
import fr.ird.observe.dto.decoration.decorators.ReferentialReferenceDecorator;
import fr.ird.observe.dto.reference.DataDtoReference;
+import fr.ird.observe.dto.reference.DtoReference;
+import fr.ird.observe.dto.reference.ReferentialDtoReference;
import fr.ird.observe.dto.referential.ProgramReference;
import fr.ird.observe.services.service.data.DeleteTripRequest;
import fr.ird.observe.services.service.data.DeleteTripResult;
@@ -47,14 +52,25 @@ import fr.ird.observe.services.service.data.ExportTripResult;
import fr.ird.observe.services.service.data.ImportTripRequest;
import fr.ird.observe.services.service.data.ImportTripResult;
import fr.ird.observe.services.service.data.TripManagementService;
+import fr.ird.observe.services.service.referential.MissingReferentialRequest;
+import fr.ird.observe.services.service.referential.MissingReferentialResult;
+import fr.ird.observe.services.service.referential.ReferentialService;
+import fr.ird.observe.spi.map.ImmutableSetDtoMap;
+import fr.ird.observe.spi.map.ImmutableSetStringMap;
+import org.apache.logging.log4j.LogManager;
+import org.apache.logging.log4j.Logger;
+import org.nuiton.decorator.Decorator;
import org.nuiton.jaxx.runtime.spi.UIHandler;
import org.nuiton.jaxx.runtime.swing.wizard.ext.WizardState;
import javax.swing.DefaultListModel;
+import javax.swing.JOptionPane;
import javax.swing.border.TitledBorder;
import java.awt.Color;
+import java.util.LinkedHashSet;
import java.util.List;
import java.util.Map;
+import java.util.Set;
import static org.nuiton.i18n.I18n.n;
import static org.nuiton.i18n.I18n.t;
@@ -67,6 +83,8 @@ import static org.nuiton.i18n.I18n.t;
*/
public class DataSynchroUIHandler extends AdminTabUIHandler<DataSynchroUI> implements UIHandler<DataSynchroUI> {
+ private static final Logger log = LogManager.getLogger(DataSynchroUIHandler.class);
+
@Override
public void afterInit(DataSynchroUI ui) {
super.afterInit(this.ui);
@@ -122,13 +140,10 @@ public class DataSynchroUIHandler extends AdminTabUIHandler<DataSynchroUI> imple
}
public void doStartAction() {
-
addAdminWorker(getUi().getStartAction().getToolTipText(), this::doStartAction0);
-
}
public void addCopyToLeftTasks() {
-
SelectionTreeModel rightSelectionDataModel = getStepModel().getRightSelectionDataModel();
SelectionTreeModel leftSelectionDataModel = getStepModel().getLeftSelectionDataModel();
Map<ProgramReference, List<DataDtoReference<?, ?>>> selectedDataByProgram = rightSelectionDataModel.getSelectedDataByProgram();
@@ -138,17 +153,14 @@ public class DataSynchroUIHandler extends AdminTabUIHandler<DataSynchroUI> imple
for (DataDtoReference trip : entry.getValue()) {
boolean tripExistOnLeft = leftSelectionDataModel.containsData(program, trip);
getStepModel().addTask(new CopyToLeftDataSynchronizeTask(program, trip, tripExistOnLeft));
-
if (tripExistOnLeft) {
leftSelectionDataModel.removeTrip(program, trip);
}
}
}
-
}
public void addCopyToRightTasks() {
-
SelectionTreeModel leftSelectionDataModel = getStepModel().getLeftSelectionDataModel();
SelectionTreeModel rightSelectionDataModel = getStepModel().getRightSelectionDataModel();
Map<ProgramReference, List<DataDtoReference<?, ?>>> selectedDataByProgram = leftSelectionDataModel.getSelectedDataByProgram();
@@ -156,20 +168,16 @@ public class DataSynchroUIHandler extends AdminTabUIHandler<DataSynchroUI> imple
for (Map.Entry<ProgramReference, List<DataDtoReference<?, ?>>> entry : selectedDataByProgram.entrySet()) {
ProgramReference program = entry.getKey();
for (DataDtoReference trip : entry.getValue()) {
-
boolean tripExistOnRight = rightSelectionDataModel.containsData(program, trip);
getStepModel().addTask(new CopyToRightDataSynchronizeTask(program, trip, tripExistOnRight));
-
if (tripExistOnRight) {
rightSelectionDataModel.removeTrip(program, trip);
}
}
}
-
}
public void addDeleteFromLeftTasks() {
-
SelectionTreeModel selectionDataModel = getStepModel().getLeftSelectionDataModel();
Map<ProgramReference, List<DataDtoReference<?, ?>>> selectedDataByProgram = selectionDataModel.getSelectedDataByProgram();
selectionDataModel.removeAllSelectedData();
@@ -182,7 +190,6 @@ public class DataSynchroUIHandler extends AdminTabUIHandler<DataSynchroUI> imple
}
public void addDeleteFromRightTasks() {
-
SelectionTreeModel selectionDataModel = getStepModel().getRightSelectionDataModel();
Map<ProgramReference, List<DataDtoReference<?, ?>>> selectedDataByProgram = selectionDataModel.getSelectedDataByProgram();
selectionDataModel.removeAllSelectedData();
@@ -195,9 +202,7 @@ public class DataSynchroUIHandler extends AdminTabUIHandler<DataSynchroUI> imple
}
public void doExecuteAction() {
-
addAdminWorker(getUi().getStartAction().getToolTipText(), this::doExecuteAction0);
-
}
private WizardState doStartAction0() {
@@ -214,11 +219,11 @@ public class DataSynchroUIHandler extends AdminTabUIHandler<DataSynchroUI> imple
ObserveSwingDataSource rightSource = configModel.getSafeCentralSource(true);
stepModel.setRightSource(rightSource);
-// tabUI.getLeftTreePane().setBorder(new TitledBorder(configModel.getLocalSourceModel().getLabel()));
stepModel.populateLeftSelectionModel();
- sendMessage(t("observe.actions.synchro.referential.message.data.leftData.loaded"));
+ String leftLabelWithUrl = configModel.getLocalSourceModel().getLabelWithUrl();
+ sendMessage(t("observe.actions.synchro.data.message.data.loaded", leftLabelWithUrl));
- TitledBorder leftBorder = new TitledBorder(configModel.getLocalSourceModel().getLabelWithUrl());
+ TitledBorder leftBorder = new TitledBorder(leftLabelWithUrl);
boolean leftCanWriteData = configModel.getLocalSourceModel().getDataSourceInformation().canWriteData();
leftBorder.setTitleColor(leftCanWriteData ? Color.GREEN : Color.RED);
tabUI.getLeftTreePane().setBorder(leftBorder);
@@ -228,11 +233,11 @@ public class DataSynchroUIHandler extends AdminTabUIHandler<DataSynchroUI> imple
}
configUI.getLocalSourceConfig().setBorder(leftBorder);
-// tabUI.getRightTreePane().setBorder(new TitledBorder(configModel.getCentralSourceModel().getLabel()));
stepModel.populateRightSelectionModel();
- sendMessage(t("observe.actions.synchro.referential.message.data.rightData.loaded"));
+ String rightLabelWithUrl = configModel.getCentralSourceModel().getLabelWithUrl();
+ sendMessage(t("observe.actions.synchro.data.message.data.loaded", rightLabelWithUrl));
- TitledBorder rightBorder = new TitledBorder(configModel.getCentralSourceModel().getLabelWithUrl());
+ TitledBorder rightBorder = new TitledBorder(rightLabelWithUrl);
boolean rightCanWriteData = configModel.getCentralSourceModel().getDataSourceInformation().canWriteData();
rightBorder.setTitleColor(rightCanWriteData ? Color.GREEN : Color.RED);
tabUI.getRightTreePane().setBorder(rightBorder);
@@ -256,17 +261,161 @@ public class DataSynchroUIHandler extends AdminTabUIHandler<DataSynchroUI> imple
int size = tasks.size();
int stepsCount = 0;
+ Set<String> idsToCopyToLeft = new LinkedHashSet<>();
+ Set<String> idsToCopyToRight = new LinkedHashSet<>();
for (int i = 0; i < size; i++) {
+
DataSynchronizeTaskSupport task = tasks.getElementAt(i);
stepsCount++;
- if (task instanceof CopyToLeftDataSynchronizeTask || task instanceof CopyToRightDataSynchronizeTask) {
+ if (task instanceof CopyToLeftDataSynchronizeTask) {
+ stepsCount++;
+ idsToCopyToLeft.add(task.getTrip().getId());
+ }
+ if (task instanceof CopyToRightDataSynchronizeTask) {
stepsCount++;
+ idsToCopyToRight.add(task.getTrip().getId());
}
}
+ boolean copyToLeft = !idsToCopyToLeft.isEmpty();
+ if (copyToLeft) {
+ stepsCount += 3;
+ }
+ boolean copyToRight = !idsToCopyToRight.isEmpty();
+ if (copyToRight) {
+ stepsCount += 3;
+ }
+
ProgressModel progressModel = getStepModel().getProgressModel();
progressModel.setStepsCount(stepsCount);
DecoratorService decoratorService = getDecoratorService();
+ boolean insertMissingReferentials = getStepModel().isInsertMissingReferentials();
+ if (copyToLeft) {
+
+ // generate add missing referential to left
+
+ progressModel.incrementsCurrentStep();
+
+ ReferentialService leftReferentialService = leftSource.getReferentialService();
+ ImmutableSetStringMap leftSourceReferential = leftReferentialService.getReferentialIds();
+ MissingReferentialRequest leftMissingReferentialRequest = MissingReferentialRequest.of(leftSourceReferential, idsToCopyToLeft.toArray(new String[0]));
+ MissingReferentialResult leftMissingReferentialResult =
+ rightSource.getReferentialService().computeMissingReferential(leftMissingReferentialRequest);
+
+ progressModel.incrementsCurrentStep();
+
+ if (!insertMissingReferentials && leftMissingReferentialResult != null) {
+
+ // l'export n'est pas possible
+ UIHelper.displayWarning(t("observe.title.can.not.export.data.left"), t("observe.actions.exportData.error.missingReferentialsId.left"));
+ sendMessage(t("observe.actions.exportData.error.missingReferentialsId.left"));
+ return WizardState.CANCELED;
+ }
+
+ if (leftMissingReferentialResult != null) {
+
+ // there is some referential to add to left source
+
+ String message = t("observe.message.show.usage.for.missingReferentials.left");
+
+ ImmutableSetDtoMap<ReferentialDtoReference> usages = rightSource.getReferentialMap(leftMissingReferentialResult.getMissingIds());
+ UsageForDisplayUI usagesUI = UsageForDisplayUI.build(message, usages);
+
+ int reponse = UIHelper.askUser(null,
+ t("observe.title.can.not.export.data.left"),
+ usagesUI,
+ JOptionPane.WARNING_MESSAGE,
+ new Object[]{
+ t("observe.choice.confirm.insert"),
+ t("observe.choice.cancel")},
+ 0);
+
+ if (reponse != 0) {
+
+ return WizardState.CANCELED;
+ }
+
+ // insertion des référentiels manquants dans la base centrale
+ log.info("Insertion dans la base de gauche des référentiels manquants.");
+
+ for (Class<? extends ReferentialDtoReference> key : usages.referentialReferenceTypes()) {
+ Set<? extends ReferentialDtoReference> references = usages.get(key);
+ String type = t(ObserveI18nDecoratorHelper.getTypePluralI18nKey(key));
+ sendMessage(t("observe.actions.exportData.message.add.missing.referentials.left", references.size(), type));
+ Decorator decorator = decoratorService.getReferenceDecorator(key);
+ for (DtoReference reference : references) {
+ sendMessage(t("observe.actions.exportData.message.add.missing.referential", decorator.toString(reference)));
+ }
+ }
+
+ progressModel.incrementsCurrentStep();
+
+ leftReferentialService.insertMissingReferential(leftMissingReferentialResult.getSqlCode());
+
+ }
+ }
+
+ if (copyToRight) {
+
+ // generate add missing referential to right
+
+ progressModel.incrementsCurrentStep();
+
+ ReferentialService rightReferentialService = rightSource.getReferentialService();
+ ImmutableSetStringMap rightSourceReferential = rightReferentialService.getReferentialIds();
+ MissingReferentialRequest rightMissingReferentialRequest = MissingReferentialRequest.of(rightSourceReferential, idsToCopyToRight.toArray(new String[0]));
+ MissingReferentialResult rightMissingReferentialResult =
+ leftSource.getReferentialService().computeMissingReferential(rightMissingReferentialRequest);
+
+ progressModel.incrementsCurrentStep();
+
+ if (!insertMissingReferentials && rightMissingReferentialResult != null) {
+
+ // l'export n'est pas possible
+ UIHelper.displayWarning(t("observe.title.can.not.export.data.right"), t("observe.actions.exportData.error.missingReferentialsId.right"));
+ sendMessage(t("observe.actions.exportData.error.missingReferentialsId.right"));
+ return WizardState.CANCELED;
+ }
+
+ if (rightMissingReferentialResult != null) {
+
+ // there is some referential to add to left source
+
+ String message = t("observe.message.show.usage.for.missingReferentials.right");
+
+ ImmutableSetDtoMap<ReferentialDtoReference> usages = leftSource.getReferentialMap(rightMissingReferentialResult.getMissingIds());
+ UsageForDisplayUI usagesUI = UsageForDisplayUI.build(message, usages);
+
+ int reponse = UIHelper.askUser(null,
+ t("observe.title.can.not.export.data.right"),
+ usagesUI,
+ JOptionPane.WARNING_MESSAGE,
+ new Object[]{
+ t("observe.choice.confirm.insert"),
+ t("observe.choice.cancel")},
+ 0);
+
+ if (reponse != 0) {
+
+ return WizardState.CANCELED;
+ }
+
+ log.info("Insertion dans la base de droite des référentiels manquants.");
+
+ for (Class<? extends ReferentialDtoReference> key : usages.referentialReferenceTypes()) {
+ Set<? extends ReferentialDtoReference> references = usages.get(key);
+ String type = t(ObserveI18nDecoratorHelper.getTypePluralI18nKey(key));
+ sendMessage(t("observe.actions.exportData.message.add.missing.referentials.right", references.size(), type));
+ Decorator decorator = decoratorService.getReferenceDecorator(key);
+ for (DtoReference reference : references) {
+ sendMessage(t("observe.actions.exportData.message.add.missing.referential", decorator.toString(reference)));
+ }
+ }
+ progressModel.incrementsCurrentStep();
+ rightReferentialService.insertMissingReferential(rightMissingReferentialResult.getSqlCode());
+ }
+ }
+
ReferentialReferenceDecorator<ProgramReference> programDecorator = decoratorService.getReferentialReferenceDecorator(ProgramReference.class);
TripManagementService leftTripManagementService = leftSource.getTripManagementService();
@@ -383,4 +532,5 @@ public class DataSynchroUIHandler extends AdminTabUIHandler<DataSynchroUI> imple
return WizardState.SUCCESSED;
}
+
}
=====================================
client/src/main/java/fr/ird/observe/client/ui/content/ref/ContentReferenceUIHandler.java
=====================================
@@ -31,6 +31,7 @@ import fr.ird.observe.client.ui.content.ref.usage.UsageForDeleteUI;
import fr.ird.observe.client.ui.content.ref.usage.UsageForDesactivateUI;
import fr.ird.observe.client.ui.content.ref.usage.UsageForDisplayUI;
import fr.ird.observe.client.ui.tree.navigation.NavigationTree;
+import fr.ird.observe.client.ui.tree.navigation.nodes.NavigationTreeNodeSupport;
import fr.ird.observe.client.ui.util.UIHelper;
import fr.ird.observe.client.validation.ClientValidationContext;
import fr.ird.observe.dto.decoration.DecoratorService;
@@ -125,47 +126,6 @@ public class ContentReferenceUIHandler<D extends ReferentialDto, R extends Refer
};
}
- @Override
- protected ObserveLayoutFocusTraversalPolicy<U> creatFocusTraversalPolicy() {
- return new ObserveLayoutFocusTraversalPolicy<U>() {
-
- @Override
- protected Component getFirstComponentForEdit(Container aContainer) {
- return getUi().getUri();
- }
-
- @Override
- protected Component getLastComponentForEdit(Container aContainer) {
- return getUi().getBackToList();
- }
-
- };
- }
-
- @Override
- public void beforeInit(U ui) {
- super.beforeInit(ui);
- uiInitializer = new ContentReferenceUIInitializer<>(ui);
- }
-
- @Override
- public void afterInit(U ui) {
-
- uiInitializer.initUI();
-
- ui.getViewLayout().addPropertyChangeListener(CardLayout2Ext.SELECTED_PROPERTY_NAME,
- evt -> SwingUtilities.invokeLater(revalidate));
-
- installFocusTraversalPolicy();
-
- ui.getModel().addPropertyChangeListener(ContentReferenceUIModel.PROPERTY_EDITING, e -> updateView((Boolean) e.getNewValue()));
- }
-
- @Override
- protected String updateTitle(String title) {
- return ui.getTypeI18nKey();
- }
-
private static <E extends ReferentialDto, R extends ReferentialDtoReference<E, R>> Pair<Boolean, R> showUsagesForDelete(E entity,
ImmutableSetDtoMap<DtoReference> usages,
List<R> referenceList) {
@@ -248,6 +208,47 @@ public class ContentReferenceUIHandler<D extends ReferentialDto, R extends Refer
return Pair.of(false, null);
}
+ @Override
+ protected ObserveLayoutFocusTraversalPolicy<U> creatFocusTraversalPolicy() {
+ return new ObserveLayoutFocusTraversalPolicy<U>() {
+
+ @Override
+ protected Component getFirstComponentForEdit(Container aContainer) {
+ return getUi().getUri();
+ }
+
+ @Override
+ protected Component getLastComponentForEdit(Container aContainer) {
+ return getUi().getBackToList();
+ }
+
+ };
+ }
+
+ @Override
+ public void beforeInit(U ui) {
+ super.beforeInit(ui);
+ uiInitializer = new ContentReferenceUIInitializer<>(ui);
+ }
+
+ @Override
+ public void afterInit(U ui) {
+
+ uiInitializer.initUI();
+
+ ui.getViewLayout().addPropertyChangeListener(CardLayout2Ext.SELECTED_PROPERTY_NAME,
+ evt -> SwingUtilities.invokeLater(revalidate));
+
+ installFocusTraversalPolicy();
+
+ ui.getModel().addPropertyChangeListener(ContentReferenceUIModel.PROPERTY_EDITING, e -> updateView((Boolean) e.getNewValue()));
+ }
+
+ @Override
+ protected String updateTitle(String title) {
+ return ui.getTypeI18nKey();
+ }
+
public void selectBean(R selectedReference) {
if (selectedReference == null) {
@@ -832,7 +833,10 @@ public class ContentReferenceUIHandler<D extends ReferentialDto, R extends Refer
// remove the program in tree
NavigationTree treeHelper = getNavigationTree();
- treeHelper.removeProgram(bean.getId());
+ NavigationTreeNodeSupport programNode = treeHelper.getProgramNode(bean.getId());
+ if (programNode != null) {
+ treeHelper.removeProgram(bean.getId());
+ }
}
// on met a jour le referentiel dans le cache et le model
=====================================
client/src/main/resources/i18n/client_en_GB.properties
=====================================
@@ -151,8 +151,12 @@ observe.actions.consolidate.title.tip=Consolidate observed data
observe.actions.exportData=Export data
observe.actions.exportData.description=Export data
observe.actions.exportData.error.missingReferentialsId=Can't export data, there is some missing referentials in central source and you did not select insert option.
+observe.actions.exportData.error.missingReferentialsId.left=Can't export data, there is some missing referentials in left source and you did not select insert option.
+observe.actions.exportData.error.missingReferentialsId.right=Can't export data, there is some missing referentials in right source and you did not select insert option.
observe.actions.exportData.message.add.missing.referential=\t%s
observe.actions.exportData.message.add.missing.referentials=Insert %s missing referentials of type «%s»
+observe.actions.exportData.message.add.missing.referentials.left=Insert %s missing referentials of type «%s» in left source
+observe.actions.exportData.message.add.missing.referentials.right=Insert %s missing referentials of type «%s» in right source
observe.actions.exportData.message.not.possible=Export is not possible (see above messages)
observe.actions.exportData.message.operation.needFix=Select data to export.
observe.actions.exportData.message.prepare.data=Prepare data to export...
@@ -202,6 +206,7 @@ observe.actions.synchro.data.deleteFromLeft.tip=Delete selected trip(s) from lef
observe.actions.synchro.data.deleteFromRight.tip=Delete selected trip(s) from right database
observe.actions.synchro.data.description=Advanced data management
observe.actions.synchro.data.launch.operation=Get data fro databases
+observe.actions.synchro.data.message.data.loaded=%s - Data loaded
observe.actions.synchro.data.prepare.copyToLeftTask=Register operation copy to left database\: %s - %s
observe.actions.synchro.data.prepare.copyToRightTask=Register operation copy to right database\: %s - %s
observe.actions.synchro.data.prepare.deleteFromLeftTask=Register operation delete from left database\: %s - %s
@@ -242,8 +247,6 @@ observe.actions.synchro.referential.legacy.launch.operation=Synchronize referent
observe.actions.synchro.referential.legacy.tip=Synchronize objectOperation on local database
observe.actions.synchro.referential.message.apply.done=Referential updated at 1$td/%1$tm/%1$tY à %1$tH\:%1$tM\:%1$tS
observe.actions.synchro.referential.message.build.diff=Build differential of referential from %1$s
-observe.actions.synchro.referential.message.data.leftData.loaded=Left referential panel loaded
-observe.actions.synchro.referential.message.data.rightData.loaded=Right referential panel loaded
observe.actions.synchro.referential.message.need.save.for.synchro.operation=Referential update has modified some local data.
observe.actions.synchro.referential.message.need.save.for.validation.operation=Validation operation has modified some local data.
observe.actions.synchro.referential.message.no.local.modification=No data modified, save is not required.
@@ -1313,6 +1316,8 @@ observe.message.show.usage.for.desactivated=Referential %1$s "%2$s" will be disa
observe.message.show.usage.for.desactivated2=Some data are using this referential, see following reference
observe.message.show.usage.for.desactivated3=Those data need to use another enabled referential to be saved.
observe.message.show.usage.for.missingReferentials=There is some referentials present in local source but not in centrale one.
+observe.message.show.usage.for.missingReferentials.left=There is some referentials present in right source but not in left one.
+observe.message.show.usage.for.missingReferentials.right=There is some referentials present in left source but not in right one.
observe.message.show.usages=List of usage of referential %1$s\: '%2$s'
observe.message.table.editBean.modified=Current entry is modifed and valid.
observe.message.table.editBean.modified.but.invalid=Current entry is modified but not valid.
@@ -1468,6 +1473,8 @@ observe.storage.useServerStorage.description=Please configure connexion to remot
observe.title.about=About
observe.title.can.not.delete.referentiel=Impossible to delete a referentiel data...
observe.title.can.not.export.data=Could not export data
+observe.title.can.not.export.data.left=Could not export data to left source
+observe.title.can.not.export.data.right=Could not export data to right source
observe.title.can.not.export.obstuna=Could not export obstuna data...
observe.title.choose.db.dump=Choose a database backup
observe.title.choose.db.dump.directory=Chhose directory of backup
=====================================
client/src/main/resources/i18n/client_es_ES.properties
=====================================
@@ -151,8 +151,12 @@ observe.actions.consolidate.title.tip=Consolidar los datos observados
observe.actions.exportData=Exportar los datos observados
observe.actions.exportData.description=Exportar los datos observados en la base central
observe.actions.exportData.error.missingReferentialsId=Il existe des référentiels dans la base locale non présente en base centrale, mais vous n'avez pas activé l'option d'insertion automatique. \#TODO
+observe.actions.exportData.error.missingReferentialsId.left=Il existe des référentiels dans la base de gauche non présente en base centrale, mais vous n'avez pas activé l'option d'insertion automatique. \#TODO
+observe.actions.exportData.error.missingReferentialsId.right=Il existe des référentiels dans la base de droite non présente en base centrale, mais vous n'avez pas activé l'option d'insertion automatique. \#TODO
observe.actions.exportData.message.add.missing.referential=\t%s
observe.actions.exportData.message.add.missing.referentials=Insertion de %s référentiels de type «%s» \#TODO
+observe.actions.exportData.message.add.missing.referentials.left=Insertion de %s référentiels de type «%s» dans la base de gauche\#TODO
+observe.actions.exportData.message.add.missing.referentials.right=Insertion de %s référentiels de type «%s» dans la base de droite\#TODO
observe.actions.exportData.message.not.possible=La exportación no es posible (vea el mensaje anterior).
observe.actions.exportData.message.operation.needFix=Seleccione las mareas a exportar.
observe.actions.exportData.message.prepare.data=Preparación de los datos a exportar...
@@ -202,6 +206,7 @@ observe.actions.synchro.data.deleteFromLeft.tip=Eliminar la ou las mareas selecc
observe.actions.synchro.data.deleteFromRight.tip=Eliminar la ou las mareas seleccionada(s) de la base de la derecha
observe.actions.synchro.data.description=Gestión avanzada de los datos de los usuarios
observe.actions.synchro.data.launch.operation=Recuperar los datos de las fuentes de datos
+observe.actions.synchro.data.message.data.loaded=%s - Datos recuperadas.
observe.actions.synchro.data.prepare.copyToLeftTask=Preparación de la copia en la base de la izquierda \: %s - %s
observe.actions.synchro.data.prepare.copyToRightTask=Preparación de la copia en la base de la derecha \: %s - %s
observe.actions.synchro.data.prepare.deleteFromLeftTask=Preparación de la eliminación de la base de la izquierda \: %s - %s
@@ -242,8 +247,6 @@ observe.actions.synchro.referential.legacy.launch.operation=Calcular el diferenc
observe.actions.synchro.referential.legacy.tip=Operación de actualización del referencial de la base local
observe.actions.synchro.referential.message.apply.done=Referencial actualizado el %1$td/%1$tm/%1$tY a %1$tH\:%1$tM\:%1$tS
observe.actions.synchro.referential.message.build.diff=Construcción del diferencial de referenciales desde\: %1$s
-observe.actions.synchro.referential.message.data.leftData.loaded=Datos del pannel de la izquierda recuperadas.
-observe.actions.synchro.referential.message.data.rightData.loaded=Datos del pannel de la derecha recuperadas.
observe.actions.synchro.referential.message.need.save.for.synchro.operation=La operación de sincronización de referenciales ha generado cambios
observe.actions.synchro.referential.message.need.save.for.validation.operation=la operación de validación de datos ha generado modificaciones.
observe.actions.synchro.referential.message.no.local.modification=No se han modificado datos en la base local, no es necesario guardar.
@@ -1313,6 +1316,8 @@ observe.message.show.usage.for.desactivated=El referencial %1$s "%2$s" se desact
observe.message.show.usage.for.desactivated2=Los objetos están usando actualmente las referencias que se enumeran a continuación..
observe.message.show.usage.for.desactivated3=Estos objetos deben usar otro referencial (no desactivado) para poder actualizarse.
observe.message.show.usage.for.missingReferentials=Il existe des référentiels présents dans la base locale mais non présents dans la base centrale. \#TODO
+observe.message.show.usage.for.missingReferentials.left=Il existe des référentiels présents dans la base de droite mais non présents dans la base de gauche.
+observe.message.show.usage.for.missingReferentials.right=Il existe des référentiels présents dans la base de gauche mais non présents dans la base droite.
observe.message.show.usages=Listas de usos de referenciales %1$s \: '%2$s'
observe.message.table.editBean.modified=El registro actual se ha modificado y es válido.
observe.message.table.editBean.modified.but.invalid=El registro actual se ha modificado pero no es válido.
@@ -1468,6 +1473,8 @@ observe.storage.useServerStorage.description=Configure su conexión al servidor
observe.title.about=A proposito de ObServe...
observe.title.can.not.delete.referentiel=Impossible eliminar un referencial en proceso de utilización...
observe.title.can.not.export.data=Impossible d'exporter les données vers la base centrale... \#TODO
+observe.title.can.not.export.data.left=Impossible d'exporter les données vers la base de gauche... \#TODO
+observe.title.can.not.export.data.right=Impossible d'exporter les données vers la base de droite... \#TODO
observe.title.can.not.export.obstuna=Impossible exportar los datos de obstuna...
observe.title.choose.db.dump=Seleccionar una copia de seguridad de base local
observe.title.choose.db.dump.directory=Seleccionar e directorio de destinación de la copia de seguridad
=====================================
client/src/main/resources/i18n/client_fr_FR.properties
=====================================
@@ -151,8 +151,12 @@ observe.actions.consolidate.title.tip=Consolider les données observateur
observe.actions.exportData=Exporter les données observateurs
observe.actions.exportData.description=Exporter les données observateurs vers la base centrale
observe.actions.exportData.error.missingReferentialsId=Il existe des référentiels dans la base locale non présente en base centrale, mais vous n'avez pas activé l'option d'insertion automatique.
+observe.actions.exportData.error.missingReferentialsId.left=Il existe des référentiels dans la base de gauche non présente en base centrale, mais vous n'avez pas activé l'option d'insertion automatique.
+observe.actions.exportData.error.missingReferentialsId.right=Il existe des référentiels dans la base de droite non présente en base centrale, mais vous n'avez pas activé l'option d'insertion automatique.
observe.actions.exportData.message.add.missing.referential=\t%s
observe.actions.exportData.message.add.missing.referentials=Insertion de %s référentiels de type «%s»
+observe.actions.exportData.message.add.missing.referentials.left=Insertion de %s référentiels de type «%s» dans la base de gauche
+observe.actions.exportData.message.add.missing.referentials.right=Insertion de %s référentiels de type «%s» dans la base de droite
observe.actions.exportData.message.not.possible=L'opération d'export n'est pas possible (voir les messages précédents).
observe.actions.exportData.message.operation.needFix=Veuillez sélectionner les marées à exporter.
observe.actions.exportData.message.prepare.data=Préparation des données à exporter...
@@ -202,6 +206,7 @@ observe.actions.synchro.data.deleteFromLeft.tip=Supprimer la ou les marées sél
observe.actions.synchro.data.deleteFromRight.tip=Supprimer la ou les marées sélectionnée(s) de la base de droite
observe.actions.synchro.data.description=Gestion avancée des données utilisateurs
observe.actions.synchro.data.launch.operation=Récupérer les données des sources de données
+observe.actions.synchro.data.message.data.loaded=%s - Données du panneau gauche récupérées.
observe.actions.synchro.data.prepare.copyToLeftTask=Préparation de la recopie vers la base de gauche \: %s - %s
observe.actions.synchro.data.prepare.copyToRightTask=Préparation de la recopie vers la base de droite \: %s - %s
observe.actions.synchro.data.prepare.deleteFromLeftTask=Préparation de la suppression de la base de gauche \: %s - %s
@@ -242,8 +247,6 @@ observe.actions.synchro.referential.legacy.launch.operation=Calculer le différe
observe.actions.synchro.referential.legacy.tip=Opération de mise à jour du référentiel de la base locale
observe.actions.synchro.referential.message.apply.done=Référentiel mis à jour le %1$td/%1$tm/%1$tY à %1$tH\:%1$tM\:%1$tS
observe.actions.synchro.referential.message.build.diff=Construction du différentiel de référentiel depuis %1$s
-observe.actions.synchro.referential.message.data.leftData.loaded=Données du panneau gauche récupérées.
-observe.actions.synchro.referential.message.data.rightData.loaded=Données du panneau droit récupérées.
observe.actions.synchro.referential.message.need.save.for.synchro.operation=L'opération de synchronisation du référentiel a engendrée des modifications.
observe.actions.synchro.referential.message.need.save.for.validation.operation=L'opération de validation des données a engendrée des modifications.
observe.actions.synchro.referential.message.no.local.modification=Aucune donnée de la base locale n'a été modifiée
@@ -1313,6 +1316,8 @@ observe.message.show.usage.for.desactivated=Le référentiel %1$s "%2$s" va êtr
observe.message.show.usage.for.desactivated2=Des objets utilisent actuellement cet entité dont les références sont citées plus bas.
observe.message.show.usage.for.desactivated3=Ces objets devront utiliser un autre référentiel (non désactivé) pour pouvoir être mis à jour.
observe.message.show.usage.for.missingReferentials=Il existe des référentiels présents dans la base locale mais non présents dans la base centrale.
+observe.message.show.usage.for.missingReferentials.left=Il existe des référentiels présents dans la base de droite mais non présents dans la base de gauche.
+observe.message.show.usage.for.missingReferentials.right=Il existe des référentiels présents dans la base de gauche mais non présents dans la base droite.
observe.message.show.usages=Listes des utilisations du référentiel %1$s \: '%2$s'
observe.message.table.editBean.modified=L'entrée en cours d'édition a été modifiée et est valide.
observe.message.table.editBean.modified.but.invalid=L'entrée en cours d'édition a été modifiée, mais n'est pas valide.
@@ -1468,6 +1473,8 @@ observe.storage.useServerStorage.description=Veuillez configurer votre connexion
observe.title.about=A propos d'ObServe...
observe.title.can.not.delete.referentiel=Impossible de supprimer un référentiel en cours d'utilisation...
observe.title.can.not.export.data=Impossible d'exporter les données vers la base centrale...
+observe.title.can.not.export.data.left=Impossible d'exporter les données vers la base de gauche...
+observe.title.can.not.export.data.right=Impossible d'exporter les données vers la base de droite...
observe.title.can.not.export.obstuna=Impossible d'exporter des données d'obstuna...
observe.title.choose.db.dump=Choisir une sauvegarder de base locale
observe.title.choose.db.dump.directory=Choisir le répertoire de destination de la sauvegarde
=====================================
pom.xml
=====================================
@@ -26,7 +26,7 @@
<parent>
<groupId>io.ultreia.maven</groupId>
<artifactId>pom</artifactId>
- <version>2018.56</version>
+ <version>2018.57</version>
</parent>
<groupId>fr.ird.observe</groupId>
@@ -162,7 +162,7 @@
<lib.version.h2>1.4.196</lib.version.h2>
<!--<lib.version.nuiton.topia>3.6-SNAPSHOT</lib.version.nuiton.topia>-->
<!--<lib.version.java4all.eugene>3.0-alpha-21</lib.version.java4all.eugene>-->
- <lib.version.java4all.topia>1.1.7-SNAPSHOT</lib.version.java4all.topia>
+ <!--<lib.version.java4all.topia>1.1.8-SNAPSHOT</lib.version.java4all.topia>-->
<!-- license header configuration -->
<license.licenseName>gpl_v3</license.licenseName>
<license.organizationName>IRD, Code Lutin, Ultreia.io</license.organizationName>
=====================================
server/src/main/java/fr/ird/observe/server/ObserveWebApplicationListener.java
=====================================
@@ -32,11 +32,11 @@ import fr.ird.observe.server.injector.ObserveDataSourceConfigurationInjector;
import fr.ird.observe.server.injector.ObserveDtoInjector;
import fr.ird.observe.server.injector.ObserveReferenceSetRequestInjector;
import fr.ird.observe.server.injector.SqlScriptProducerRequestInjector;
+import fr.ird.observe.server.injector.TopiaSqlScriptInjector;
import io.ultreia.java4all.http.HRequestBuilder;
-import org.apache.commons.io.IOUtils;
import org.apache.commons.lang3.StringUtils;
-import org.apache.logging.log4j.Logger;
import org.apache.logging.log4j.LogManager;
+import org.apache.logging.log4j.Logger;
import org.debux.webmotion.server.WebMotionServerListener;
import org.debux.webmotion.server.call.ServerContext;
import org.debux.webmotion.server.mapping.Mapping;
@@ -80,6 +80,7 @@ public class ObserveWebApplicationListener implements WebMotionServerListener {
context.addInjector(new DateInjector(HRequestBuilder.DATE_PATTERN));
context.addInjector(new SqlScriptProducerRequestInjector(gson));
context.addInjector(new ImmutableSetInjector(gson));
+ context.addInjector(new TopiaSqlScriptInjector(gson));
context.addConverter(new ObserveDtoConverter(gson), ObserveDbUserDto.class);
context.getServletContext().setAttribute(ObserveWebApplicationContext.APPLICATION_CONTEXT_PARAMETER, applicationContext);
=====================================
server/src/main/java/fr/ird/observe/server/injector/TopiaSqlScriptInjector.java
=====================================
@@ -0,0 +1,63 @@
+package fr.ird.observe.server.injector;
+
+/*-
+ * #%L
+ * ObServe :: Server
+ * %%
+ * Copyright (C) 2008 - 2018 IRD, Code Lutin, Ultreia.io
+ * %%
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as
+ * published by the Free Software Foundation, either version 3 of the
+ * License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public
+ * License along with this program. If not, see
+ * <http://www.gnu.org/licenses/gpl-3.0.html>.
+ * #L%
+ */
+
+import com.google.gson.Gson;
+import org.apache.logging.log4j.LogManager;
+import org.apache.logging.log4j.Logger;
+import org.debux.webmotion.server.call.Call;
+import org.debux.webmotion.server.handler.ExecutorParametersInjectorHandler;
+import org.debux.webmotion.server.mapping.Mapping;
+import org.nuiton.topia.persistence.script.TopiaSqlScript;
+
+import java.lang.reflect.Type;
+import java.util.Objects;
+
+/**
+ * @author Tony Chemit - dev(a)tchemit.fr
+ */
+public class TopiaSqlScriptInjector implements ExecutorParametersInjectorHandler.Injector {
+
+ /** Logger. */
+ private static final Logger log = LogManager.getLogger(TopiaSqlScriptInjector.class);
+
+ protected final Gson gson;
+
+ public TopiaSqlScriptInjector(Gson gson) {
+ this.gson = gson;
+ }
+
+ @Override
+ public Object getValue(Mapping mapping, Call call, String name, Class<?> type, Type generic) {
+ TopiaSqlScript topiaSqlScript = null;
+ if (type.equals(TopiaSqlScript.class)) {
+ Call.ParameterTree parameterTree = call.getParameterTree().getObject().get(name);
+ Objects.requireNonNull(parameterTree, "Le paramètre " + name + " n'as pas été trouvé, recompiler (parameter)!");
+ String gsonContent = ((String[]) parameterTree.getValue())[0];
+ topiaSqlScript = gson.fromJson(gsonContent, TopiaSqlScript.class);
+ log.info("Inject topiaSqlScript: " + topiaSqlScript);
+ }
+ return topiaSqlScript;
+ }
+
+}
=====================================
services-client/src/main/java/fr/ird/observe/services/client/ObserveRequestBuilder.java
=====================================
@@ -24,6 +24,7 @@ package fr.ird.observe.services.client;
import fr.ird.observe.services.configuration.rest.ObserveDataSourceConfigurationRestConstants;
import io.ultreia.java4all.http.HRequestBuilder;
+import org.nuiton.topia.persistence.script.TopiaSqlScript;
import java.util.Objects;
import java.util.concurrent.TimeUnit;
@@ -72,4 +73,9 @@ public class ObserveRequestBuilder extends HRequestBuilder {
addAuthTokenSupplier(serviceContext.getAuthTokenSupplier());
}
}
+
+ public ObserveRequestBuilder addParameter(String parameterName, TopiaSqlScript value) {
+ super.addParameter(parameterName, serviceContext.getResponseBuilder().getGson().get().toJson(value));
+ return this;
+ }
}
=====================================
services-local/src/main/java/fr/ird/observe/services/local/service/actions/synchro/referential/ng/ReferentialSynchronizeSqlsRequestBuilder.java
=====================================
@@ -157,7 +157,8 @@ public class ReferentialSynchronizeSqlsRequestBuilder {
@Override
protected <DD extends ReferentialDto> ImmutableList<String> insertMissingReferential(Class<DD> referentialType, String id) {
- return addExtraInsertStatement(id, binder);
+ ReferentialDtoEntityContext<DD, ?, ?> modelContext = DbModelHelper.fromReferentialDto(referentialType);
+ return addExtraInsertStatement(id, modelContext.toEntityBinder());
}
};
=====================================
services-local/src/main/java/fr/ird/observe/services/local/service/referential/ReferentialServiceLocal.java
=====================================
@@ -70,6 +70,7 @@ import fr.ird.observe.spi.context.ReferentialEntityContext;
import fr.ird.observe.spi.context.ReferentialReferenceEntityContext;
import fr.ird.observe.spi.map.ImmutableDtoMap;
import fr.ird.observe.spi.map.ImmutableSetDtoMap;
+import fr.ird.observe.spi.map.ImmutableSetStringMap;
import org.apache.logging.log4j.LogManager;
import org.apache.logging.log4j.Logger;
import org.nuiton.topia.persistence.TopiaDao;
@@ -276,9 +277,9 @@ public class ReferentialServiceLocal extends ObserveServiceLocal implements Refe
}
@Override
- public ImmutableSetDtoMap<String> getReferentialIds() {
+ public ImmutableSetStringMap getReferentialIds() {
- ImmutableSetDtoMap.Builder<String> result = ImmutableSetDtoMap.builder();
+ ImmutableSetStringMap.Builder result = ImmutableSetStringMap.builder();
for (Class<? extends ReferentialDto> dtoType : DtoModelClasses.REFERENTIAL_TYPES) {
getReferentialIds0(dtoType, result);
@@ -286,7 +287,7 @@ public class ReferentialServiceLocal extends ObserveServiceLocal implements Refe
return result.build();
}
- private <D extends ReferentialDto, R extends ReferentialDtoReference<D, R>, E extends ObserveReferentialEntity> void getReferentialIds0(Class<D> dtoType, ImmutableSetDtoMap.Builder<String> result) {
+ private <D extends ReferentialDto, R extends ReferentialDtoReference<D, R>, E extends ObserveReferentialEntity> void getReferentialIds0(Class<D> dtoType, ImmutableSetStringMap.Builder result) {
ReferentialDtoEntityContext<D, R, E> typeContext = DbModelHelper.fromReferentialDto(dtoType);
ReferentialEntityReferenceBinderSupport<D, R, E> binder = typeContext.toEntityReferenceBinder();
TopiaDao<E> dao = getTopiaPersistenceContext().getDao(binder.getEntityType());
@@ -312,7 +313,7 @@ public class ReferentialServiceLocal extends ObserveServiceLocal implements Refe
}
}
- ImmutableSetDtoMap<String> missingReferentialIds = referentialShellBuilder.build();
+ ImmutableSetStringMap missingReferentialIds = referentialShellBuilder.build();
if (missingReferentialIds.isEmpty()) {
return null;
=====================================
services-local/src/main/java/fr/ird/observe/services/local/service/referential/ReferentialShellBuilder.java
=====================================
@@ -10,12 +10,12 @@ package fr.ird.observe.services.local.service.referential;
* 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>.
@@ -24,7 +24,7 @@ package fr.ird.observe.services.local.service.referential;
import fr.ird.observe.entities.referentiel.ObserveReferentialEntity;
import fr.ird.observe.spi.DbModelHelper;
-import fr.ird.observe.spi.map.ImmutableSetDtoMap;
+import fr.ird.observe.spi.map.ImmutableSetStringMap;
import org.nuiton.topia.persistence.TopiaEntity;
import org.nuiton.topia.persistence.TopiaEntityVisitor;
@@ -39,35 +39,35 @@ import java.util.TreeSet;
*/
public class ReferentialShellBuilder {
- public static ReferentialShellBuilder builder(ImmutableSetDtoMap<String> incomingReferentialIds) {
- return new ReferentialShellBuilder(incomingReferentialIds);
+ private final GetEntityReferentialShellVisitor visitor;
+
+ private ReferentialShellBuilder(ImmutableSetStringMap incomingReferentialIds) {
+ visitor = new GetEntityReferentialShellVisitor(incomingReferentialIds);
}
- private final GetEntityReferentialShellVisitor visitor;
+ public static ReferentialShellBuilder builder(ImmutableSetStringMap incomingReferentialIds) {
+ return new ReferentialShellBuilder(incomingReferentialIds);
+ }
void scan(TopiaEntity entity) {
entity.accept(visitor);
}
- public ImmutableSetDtoMap<String> build() {
+ public ImmutableSetStringMap build() {
return visitor.missingReferentialIds.build();
}
- private ReferentialShellBuilder(ImmutableSetDtoMap<String> incomingReferentialIds) {
- visitor = new GetEntityReferentialShellVisitor(incomingReferentialIds);
- }
-
private static class GetEntityReferentialShellVisitor implements TopiaEntityVisitor {
private final Set<String> hitIds;
- private final ImmutableSetDtoMap<String> incomingReferentialIds;
- private final ImmutableSetDtoMap.Builder<String> missingReferentialIds;
+ private final ImmutableSetStringMap incomingReferentialIds;
+ private final ImmutableSetStringMap.Builder missingReferentialIds;
- GetEntityReferentialShellVisitor(ImmutableSetDtoMap<String> incomingReferentialIds) {
+ GetEntityReferentialShellVisitor(ImmutableSetStringMap incomingReferentialIds) {
this.incomingReferentialIds = incomingReferentialIds;
this.hitIds = new TreeSet<>();
- this.missingReferentialIds = ImmutableSetDtoMap.builder();
+ this.missingReferentialIds = ImmutableSetStringMap.builder();
}
@Override
=====================================
services/src/main/java/fr/ird/observe/services/service/referential/MissingReferentialRequest.java
=====================================
@@ -23,7 +23,7 @@ package fr.ird.observe.services.service.referential;
*/
import fr.ird.observe.dto.ObserveDto;
-import fr.ird.observe.spi.map.ImmutableSetDtoMap;
+import fr.ird.observe.spi.map.ImmutableSetStringMap;
/**
* Created on 07/11/16.
@@ -33,19 +33,19 @@ import fr.ird.observe.spi.map.ImmutableSetDtoMap;
*/
public class MissingReferentialRequest implements ObserveDto {
- private final ImmutableSetDtoMap<String> centralSourceReferential;
+ private final ImmutableSetStringMap centralSourceReferential;
private final String[] tripIds;
- public static MissingReferentialRequest of(ImmutableSetDtoMap<String> centralSourceReferential, String... tripIds) {
+ public static MissingReferentialRequest of(ImmutableSetStringMap centralSourceReferential, String... tripIds) {
return new MissingReferentialRequest(centralSourceReferential, tripIds);
}
- private MissingReferentialRequest(ImmutableSetDtoMap<String> centralSourceReferential, String... tripIds) {
+ private MissingReferentialRequest(ImmutableSetStringMap centralSourceReferential, String... tripIds) {
this.centralSourceReferential = centralSourceReferential;
this.tripIds = tripIds;
}
- public ImmutableSetDtoMap<String> getCentralSourceReferential() {
+ public ImmutableSetStringMap getCentralSourceReferential() {
return centralSourceReferential;
}
=====================================
services/src/main/java/fr/ird/observe/services/service/referential/MissingReferentialResult.java
=====================================
@@ -23,8 +23,8 @@ package fr.ird.observe.services.service.referential;
*/
import fr.ird.observe.dto.ObserveDto;
+import fr.ird.observe.spi.map.ImmutableSetStringMap;
import org.nuiton.topia.persistence.script.TopiaSqlScript;
-import fr.ird.observe.spi.map.ImmutableSetDtoMap;
/**
* Created on 07/11/16.
@@ -34,19 +34,19 @@ import fr.ird.observe.spi.map.ImmutableSetDtoMap;
*/
public class MissingReferentialResult implements ObserveDto {
- private final ImmutableSetDtoMap<String> missingIds;
+ private final ImmutableSetStringMap missingIds;
private final TopiaSqlScript sqlCode;
- private MissingReferentialResult(ImmutableSetDtoMap<String> missingIds, TopiaSqlScript sqlCode) {
+ private MissingReferentialResult(ImmutableSetStringMap missingIds, TopiaSqlScript sqlCode) {
this.missingIds = missingIds;
this.sqlCode = sqlCode;
}
- public static MissingReferentialResult of(ImmutableSetDtoMap<String> missingReferentialIds, TopiaSqlScript sqlCode) {
+ public static MissingReferentialResult of(ImmutableSetStringMap missingReferentialIds, TopiaSqlScript sqlCode) {
return new MissingReferentialResult(missingReferentialIds, sqlCode);
}
- public ImmutableSetDtoMap<String> getMissingIds() {
+ public ImmutableSetStringMap getMissingIds() {
return missingIds;
}
=====================================
services/src/main/java/fr/ird/observe/services/service/referential/ReferentialService.java
=====================================
@@ -40,6 +40,7 @@ import fr.ird.observe.services.spi.Write;
import fr.ird.observe.services.spi.WriteDataPermission;
import fr.ird.observe.services.spi.WriteReferentialPermission;
import fr.ird.observe.spi.map.ImmutableSetDtoMap;
+import fr.ird.observe.spi.map.ImmutableSetStringMap;
import io.ultreia.java4all.http.spi.Delete;
import io.ultreia.java4all.http.spi.Get;
import io.ultreia.java4all.http.spi.Nullable;
@@ -119,7 +120,7 @@ public interface ReferentialService extends ObserveService {
@ReadReferentialPermission
@Post
- ImmutableSetDtoMap<String> getReferentialIds();
+ ImmutableSetStringMap getReferentialIds();
@ReadReferentialPermission
View it on GitLab: https://gitlab.com/ultreiaio/ird-observe/compare/0fbe5ba18d9798f4825c6448c1…
--
View it on GitLab: https://gitlab.com/ultreiaio/ird-observe/compare/0fbe5ba18d9798f4825c6448c1…
You're receiving this email because of your account on gitlab.com.
1
0