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
January 2024
- 1 participants
- 82 discussions
[Git][ultreiaio/ird-observe] Pushed new branch release/9.3.0-RC-3
by Tony CHEMIT (@tchemit) 25 Jan '24
by Tony CHEMIT (@tchemit) 25 Jan '24
25 Jan '24
Tony CHEMIT pushed new branch release/9.3.0-RC-3 at ultreiaio / ird-observe
--
View it on GitLab: https://gitlab.com/ultreiaio/ird-observe/-/tree/release/9.3.0-RC-3
You're receiving this email because of your account on gitlab.com.
1
0
[Git][ultreiaio/ird-observe][develop] [jgitflow-maven-plugin]updating poms for 9.3.0-RC-4-SNAPSHOT development[skip ci]
by Tony CHEMIT (@tchemit) 25 Jan '24
by Tony CHEMIT (@tchemit) 25 Jan '24
25 Jan '24
Tony CHEMIT pushed to branch develop at ultreiaio / ird-observe
Commits:
505519fe by Tony Chemit at 2024-01-25T16:27:00+01:00
[jgitflow-maven-plugin]updating poms for 9.3.0-RC-4-SNAPSHOT development[skip ci]
- - - - -
30 changed files:
- client/configuration/pom.xml
- client/core/pom.xml
- client/datasource/actions/pom.xml
- client/datasource/editor/api-test/pom.xml
- client/datasource/editor/api/pom.xml
- client/datasource/editor/common/pom.xml
- client/datasource/editor/ll/pom.xml
- client/datasource/editor/pom.xml
- client/datasource/editor/ps/pom.xml
- client/datasource/editor/spi/pom.xml
- client/datasource/pom.xml
- client/pom.xml
- client/runner/pom.xml
- core/api/dto-consolidation/pom.xml
- core/api/dto-decoration/pom.xml
- core/api/dto-validation/pom.xml
- core/api/dto/pom.xml
- core/api/pom.xml
- core/api/services/pom.xml
- core/api/tree/pom.xml
- core/api/validation/pom.xml
- core/persistence/avdth/pom.xml
- core/persistence/consolidation/pom.xml
- core/persistence/decoration/pom.xml
- core/persistence/java/pom.xml
- core/persistence/migration/pom.xml
- core/persistence/pom.xml
- core/persistence/report/pom.xml
- core/persistence/resources/pom.xml
- core/persistence/test/pom.xml
The diff was not included because it is too large.
View it on GitLab: https://gitlab.com/ultreiaio/ird-observe/-/commit/505519feb02a3d780c400439c…
--
View it on GitLab: https://gitlab.com/ultreiaio/ird-observe/-/commit/505519feb02a3d780c400439c…
You're receiving this email because of your account on gitlab.com.
1
0
[Git][ultreiaio/ird-observe][develop-9.4.x] 2 commits: Revue de la validation du caractère obligatoire des coordonnées de l'activité - Closes #2663
by Tony CHEMIT (@tchemit) 25 Jan '24
by Tony CHEMIT (@tchemit) 25 Jan '24
25 Jan '24
Tony CHEMIT pushed to branch develop-9.4.x at ultreiaio / ird-observe
Commits:
7787c720 by Tony Chemit at 2024-01-25T16:26:13+01:00
Revue de la validation du caractère obligatoire des coordonnées de l'activité - Closes #2663
- - - - -
097e5e04 by Tony Chemit at 2024-01-25T16:26:25+01:00
[client-datasource-editor-api] Be able to launch after save action (even if the button is disabled)
- - - - -
22 changed files:
- client/datasource/editor/api/src/main/java/fr/ird/observe/client/datasource/editor/api/content/data/open/actions/SaveContentOpenableUIAdapter.java
- client/datasource/editor/ps/src/main/i18n/getters/jaxx.getter
- client/datasource/editor/ps/src/main/java/fr/ird/observe/client/datasource/editor/ps/data/logbook/ActivityUI.jaxx
- client/datasource/editor/ps/src/main/java/fr/ird/observe/client/datasource/editor/ps/data/logbook/ActivityUI.jcss
- client/datasource/editor/ps/src/main/java/fr/ird/observe/client/datasource/editor/ps/data/logbook/ActivityUIHandler.java
- core/api/dto-decoration/src/main/i18n/getters/labels.getter
- core/api/dto/src/main/java/fr/ird/observe/dto/data/ps/logbook/ActivityDto.java
- core/api/dto/src/main/java/fr/ird/observe/dto/referential/ps/common/VesselActivityReference.java
- core/api/validation/src/main/filtered-resources/META-INF/validators/validation.json
- core/api/validation/src/main/resources/fr/ird/observe/dto/data/ps/logbook/ActivityDto-create-error-validation.xml
- core/api/validation/src/main/resources/fr/ird/observe/dto/data/ps/logbook/ActivityDto-update-error-validation.xml
- core/persistence/java/src/main/java/fr/ird/observe/entities/data/ps/logbook/ActivityImpl.java
- core/persistence/java/src/main/java/fr/ird/observe/entities/data/ps/logbook/ActivitySpi.java
- core/persistence/resources/src/main/resources/fr/ird/observe/entities/data/ps/logbook/Activity/validation-create.json
- core/persistence/resources/src/main/resources/fr/ird/observe/entities/data/ps/logbook/Activity/validation-update.json
- core/services/i18n/src/main/i18n/translations/services_en_GB.properties
- core/services/i18n/src/main/i18n/translations/services_es_ES.properties
- core/services/i18n/src/main/i18n/translations/services_fr_FR.properties
- model/src/main/models/Observe/dto/21-data-ps-logbook.model
- model/src/main/models/Observe/dto/attribute/notNullIf.properties
- model/src/main/models/Observe/dto/class/i18nLabels.properties
- model/src/main/models/Observe/persistence/21-data-ps-logbook.model
Changes:
=====================================
client/datasource/editor/api/src/main/java/fr/ird/observe/client/datasource/editor/api/content/data/open/actions/SaveContentOpenableUIAdapter.java
=====================================
@@ -80,7 +80,13 @@ public class SaveContentOpenableUIAdapter<D extends OpenableDto, U extends Conte
if (notPersisted && predicate.test(bean)) {
// reload ui and do click
U newUi = dataSourceEditor.getModel().getTypedContent();
- SwingUtilities.invokeLater(() -> Objects.requireNonNull(buttonGetter).apply(newUi).doClick());
+ SwingUtilities.invokeLater(() -> {
+ AbstractButton button = Objects.requireNonNull(buttonGetter).apply(newUi);
+ if (!button.isEnabled()) {
+ button.setEnabled(true);
+ }
+ button.doClick();
+ });
return;
} else {
dataSourceEditor.getModel().resetFromPreviousUi(ui);
=====================================
client/datasource/editor/ps/src/main/i18n/getters/jaxx.getter
=====================================
@@ -158,6 +158,7 @@ observe.data.ps.logbook.Activity.physicalMeasurements
observe.data.ps.logbook.Activity.setCount
observe.data.ps.logbook.Activity.setMeasurements
observe.data.ps.logbook.Activity.setSuccessStatus
+observe.data.ps.logbook.Activity.skipMandatoryCoordinate
observe.data.ps.logbook.Activity.time
observe.data.ps.logbook.Activity.totalWeight
observe.data.ps.logbook.Activity.vmsDivergent
=====================================
client/datasource/editor/ps/src/main/java/fr/ird/observe/client/datasource/editor/ps/data/logbook/ActivityUI.jaxx
=====================================
@@ -95,7 +95,12 @@
</cell>
<cell fill="both" columns="2" weightx="1">
<JPanel layout="{new BorderLayout()}">
- <JLabel id='coordinateLabel' constraints='BorderLayout.NORTH' styleClass="center"/>
+ <JPanel id="coordinateHeader" layout="{new BorderLayout()}" constraints='BorderLayout.NORTH'>
+
+ <JLabel id='coordinateLabel' constraints='BorderLayout.NORTH' styleClass="center"/>
+ <JToggleButton id="skipMandatoryCoordinate" constraints='BorderLayout.CENTER' styleClass='bold'
+ onItemStateChanged="{getHandler().onSkipMandatoryCoordinateChanged(event);}"/>
+ </JPanel>
<CoordinatesEditor id='coordinate' constraints='BorderLayout.CENTER'/>
</JPanel>
</cell>
=====================================
client/datasource/editor/ps/src/main/java/fr/ird/observe/client/datasource/editor/ps/data/logbook/ActivityUI.jcss
=====================================
@@ -41,6 +41,11 @@
horizontalAlignment:{JLabel.CENTER};
}
+#skipMandatoryCoordinate {
+ i18nProperty:"";
+ selected:{bean.isSkipMandatoryCoordinate()};
+}
+
#previousFpaZone {
enabled:{bean.isChangedZoneOperation()};
}
=====================================
client/datasource/editor/ps/src/main/java/fr/ird/observe/client/datasource/editor/ps/data/logbook/ActivityUIHandler.java
=====================================
@@ -31,8 +31,10 @@ import fr.ird.observe.client.datasource.editor.ps.ObservePsKeyStrokes;
import fr.ird.observe.dto.data.ps.common.TripDto;
import fr.ird.observe.dto.data.ps.logbook.ActivityDto;
import fr.ird.observe.dto.data.ps.logbook.ActivityReference;
+import fr.ird.observe.dto.referential.ps.common.VesselActivityReference;
import io.ultreia.java4all.i18n.I18n;
+import java.awt.event.ItemEvent;
import java.beans.PropertyChangeListener;
import java.util.Objects;
@@ -49,11 +51,20 @@ class ActivityUIHandler extends GeneratedActivityUIHandler {
*/
private final PropertyChangeListener originalDataModifiedChanged;
private final PropertyChangeListener fpaZoneChangedChanged;
+ private final PropertyChangeListener vesselActivityChanged;
public ActivityUIHandler() {
originalDataModifiedChanged = evt -> onOriginalDataModifiedChanged((Boolean) evt.getNewValue());
fpaZoneChangedChanged = evt -> onFpaZoneChanged((Boolean) evt.getNewValue());
+ vesselActivityChanged = evt -> onVesselActivityChanged((VesselActivityReference) evt.getNewValue());
}
+
+ @Override
+ public void onInit(ActivityUI ui) {
+ super.onInit(ui);
+ ui.getCoordinateHeader().remove(ui.getSkipMandatoryCoordinate());
+ }
+
@Override
public void startEditUI() {
ActivityDto bean = getModel().getStates().getBean();
@@ -62,20 +73,27 @@ class ActivityUIHandler extends GeneratedActivityUIHandler {
// compute it
bean.setMaxNumberAuthorized(getModel().getSource().getParent().getChildCount());
}
+ if (getModel().getStates().isCreatingMode()) {
+ ui.getCoordinateHeader().add(ui.getSkipMandatoryCoordinate());
+ }
bean.removePropertyChangeListener(ActivityDto.PROPERTY_ORIGINAL_DATA_MODIFIED, originalDataModifiedChanged);
bean.removePropertyChangeListener(ActivityDto.PROPERTY_CHANGED_ZONE_OPERATION, fpaZoneChangedChanged);
+ bean.removePropertyChangeListener(ActivityDto.PROPERTY_VESSEL_ACTIVITY, vesselActivityChanged);
onOriginalDataModifiedChanged(bean.isOriginalDataModified());
onFpaZoneChanged(bean.isChangedZoneOperation());
+ onVesselActivityChanged(bean.getVesselActivity());
getModel().getStates().startEditUI();
super.startEditUI();
bean.addPropertyChangeListener(ActivityDto.PROPERTY_ORIGINAL_DATA_MODIFIED, originalDataModifiedChanged);
bean.addPropertyChangeListener(ActivityDto.PROPERTY_CHANGED_ZONE_OPERATION, fpaZoneChangedChanged);
+ bean.addPropertyChangeListener(ActivityDto.PROPERTY_VESSEL_ACTIVITY, vesselActivityChanged);
TripDto trip = getClientValidationContext().getCurrentPsCommonTrip();
getModel().getStates().setNumberEnabled(Objects.requireNonNull(trip.getActivitiesAcquisitionMode()).isByNumber());
}
@Override
public void stopEditUI() {
+ ui.getCoordinateHeader().remove(ui.getSkipMandatoryCoordinate());
getModel().getStates().stopEditUI();
super.stopEditUI();
}
@@ -85,7 +103,7 @@ class ActivityUIHandler extends GeneratedActivityUIHandler {
SaveAction.create(ui, ActivityDto.class)
.on(ui.getModel()::toSaveRequest)
.call((r, d) -> getOpenableService().save(r.getParentId(), d))
- .then(new SaveContentOpenableUIAdapter<>(d -> false, ui -> null) {
+ .then(new SaveContentOpenableUIAdapter<>(ActivityDto::isSkipMandatoryCoordinate, ActivityUI::getAddFloatingObject) {
@Override
protected void afterNodeUpdated(DataSourceEditor dataSourceEditor, ActivityUI ui, NavigationTree tree, ContentOpenableUINavigationNode node, boolean notPersisted, ActivityDto bean) {
@@ -114,6 +132,25 @@ class ActivityUIHandler extends GeneratedActivityUIHandler {
ui.getCopyFirstCoordinate());
}
+ private void onVesselActivityChanged(VesselActivityReference vesselActivity) {
+ if (!getModel().getStates().isCreatingMode()) {
+ return;
+ }
+
+ if (VesselActivityReference.isCoordinateRequiredForVesselActivity(vesselActivity)) {
+ ui.getSkipMandatoryCoordinate().setEnabled(false);
+ ui.getSkipMandatoryCoordinate().setSelected(false);
+ } else {
+ ui.getSkipMandatoryCoordinate().setEnabled(true);
+ }
+ }
+
+ void onSkipMandatoryCoordinateChanged(ItemEvent newValue) {
+ if (!getModel().getStates().isCreatingMode()) {
+ return;
+ }
+ ui.getBean().setSkipMandatoryCoordinate(newValue.getStateChange() == ItemEvent.SELECTED);
+ }
private void onOriginalDataModifiedChanged(Boolean newValue) {
=====================================
core/api/dto-decoration/src/main/i18n/getters/labels.getter
=====================================
@@ -920,6 +920,7 @@ observe.data.ps.logbook.Activity.physicalMeasurements
observe.data.ps.logbook.Activity.setCount
observe.data.ps.logbook.Activity.setMeasurements
observe.data.ps.logbook.Activity.setSuccessStatus
+observe.data.ps.logbook.Activity.skipMandatoryCoordinate
observe.data.ps.logbook.Activity.time
observe.data.ps.logbook.Activity.title
observe.data.ps.logbook.Activity.totalWeight
=====================================
core/api/dto/src/main/java/fr/ird/observe/dto/data/ps/logbook/ActivityDto.java
=====================================
@@ -37,6 +37,9 @@ import java.util.Date;
@GenerateJavaBeanDefinition
public class ActivityDto extends GeneratedActivityDto {
+ public boolean isCoordinateRequiredForVesselActivity() {
+ return VesselActivityReference.isCoordinateRequiredForVesselActivity(getVesselActivity());
+ }
@Override
public void setVesselActivity(VesselActivityReference vesselActivity) {
=====================================
core/api/dto/src/main/java/fr/ird/observe/dto/referential/ps/common/VesselActivityReference.java
=====================================
@@ -38,4 +38,7 @@ public class VesselActivityReference extends GeneratedVesselActivityReference {
return id != null && ProtectedIdsPs.PS_COMMON_VESSEL_ACTIVITY_ID_FOR_END_OF_SEARCHING.equals(id.getId());
}
+ public static boolean isCoordinateRequiredForVesselActivity(VesselActivityReference reference) {
+ return reference == null || reference.isAllowSet() || !reference.isAllowFad();
+ }
}
=====================================
core/api/validation/src/main/filtered-resources/META-INF/validators/validation.json
=====================================
@@ -10053,7 +10053,7 @@
"comments": [
"check latitude format",
"is latitude required ?",
- "latitude is mandatory except if !coordinateRequired"
+ "latitude is mandatory except if !coordinateRequiredForVesselActivity && (skipMandatoryCoordinate || !coordinateRequiredForFloatingObjects)"
]
},
{
@@ -10068,7 +10068,7 @@
"comments": [
"check longitude format",
"is longitude required ?",
- "longitude is mandatory except if !coordinateRequired"
+ "longitude is mandatory except if !coordinateRequiredForVesselActivity && (skipMandatoryCoordinate || !coordinateRequiredForFloatingObjects)"
]
},
{
@@ -10112,7 +10112,7 @@
"comments": [
"check quadrant (on quadrant)",
"is quadrant required ?",
- "quadrant is mandatory except if !coordinateRequired"
+ "quadrant is mandatory except if !coordinateRequiredForVesselActivity && (skipMandatoryCoordinate || !coordinateRequiredForFloatingObjects)"
]
},
{
@@ -10360,7 +10360,7 @@
"comments": [
"check latitude format",
"is latitude required ?",
- "latitude is mandatory except if !coordinateRequired"
+ "latitude is mandatory except if !coordinateRequiredForVesselActivity && (skipMandatoryCoordinate || !coordinateRequiredForFloatingObjects)"
]
},
{
@@ -10375,7 +10375,7 @@
"comments": [
"check longitude format",
"is longitude required ?",
- "longitude is mandatory except if !coordinateRequired"
+ "longitude is mandatory except if !coordinateRequiredForVesselActivity && (skipMandatoryCoordinate || !coordinateRequiredForFloatingObjects)"
]
},
{
@@ -10419,7 +10419,7 @@
"comments": [
"check quadrant (on quadrant)",
"is quadrant required ?",
- "quadrant is mandatory except if !coordinateRequired"
+ "quadrant is mandatory except if !coordinateRequiredForVesselActivity && (skipMandatoryCoordinate || !coordinateRequiredForFloatingObjects)"
]
},
{
=====================================
core/api/validation/src/main/resources/fr/ird/observe/dto/data/ps/logbook/ActivityDto-create-error-validation.xml
=====================================
@@ -107,9 +107,9 @@
</field>
<field name="latitude">
- <!-- latitude is mandatory except if !coordinateRequired -->
+ <!-- latitude is mandatory except if !coordinateRequiredForVesselActivity && (skipMandatoryCoordinate || !coordinateRequiredForFloatingObjects) -->
<field-validator type="mandatory" short-circuit="true">
- <param name="skip"><![CDATA[ !coordinateRequired ]]></param>
+ <param name="skip"><![CDATA[ !coordinateRequiredForVesselActivity && (skipMandatoryCoordinate || !coordinateRequiredForFloatingObjects) ]]></param>
<message>observe.Common.latitude.validation.required</message>
</field-validator>
@@ -139,9 +139,9 @@
</field>
<field name="longitude">
- <!-- longitude is mandatory except if !coordinateRequired -->
+ <!-- longitude is mandatory except if !coordinateRequiredForVesselActivity && (skipMandatoryCoordinate || !coordinateRequiredForFloatingObjects) -->
<field-validator type="mandatory" short-circuit="true">
- <param name="skip"><![CDATA[ !coordinateRequired ]]></param>
+ <param name="skip"><![CDATA[ !coordinateRequiredForVesselActivity && (skipMandatoryCoordinate || !coordinateRequiredForFloatingObjects) ]]></param>
<message>observe.Common.longitude.validation.required</message>
</field-validator>
@@ -231,9 +231,9 @@
</field>
<field name="quadrant">
- <!-- quadrant is mandatory except if !coordinateRequired -->
+ <!-- quadrant is mandatory except if !coordinateRequiredForVesselActivity && (skipMandatoryCoordinate || !coordinateRequiredForFloatingObjects) -->
<field-validator type="mandatory" short-circuit="true">
- <param name="skip"><![CDATA[ !coordinateRequired ]]></param>
+ <param name="skip"><![CDATA[ !coordinateRequiredForVesselActivity && (skipMandatoryCoordinate || !coordinateRequiredForFloatingObjects) ]]></param>
<message>observe.Common.quadrant.validation.required</message>
</field-validator>
=====================================
core/api/validation/src/main/resources/fr/ird/observe/dto/data/ps/logbook/ActivityDto-update-error-validation.xml
=====================================
@@ -107,9 +107,9 @@
</field>
<field name="latitude">
- <!-- latitude is mandatory except if !coordinateRequired -->
+ <!-- latitude is mandatory except if !coordinateRequiredForVesselActivity && (skipMandatoryCoordinate || !coordinateRequiredForFloatingObjects) -->
<field-validator type="mandatory" short-circuit="true">
- <param name="skip"><![CDATA[ !coordinateRequired ]]></param>
+ <param name="skip"><![CDATA[ !coordinateRequiredForVesselActivity && (skipMandatoryCoordinate || !coordinateRequiredForFloatingObjects) ]]></param>
<message>observe.Common.latitude.validation.required</message>
</field-validator>
@@ -139,9 +139,9 @@
</field>
<field name="longitude">
- <!-- longitude is mandatory except if !coordinateRequired -->
+ <!-- longitude is mandatory except if !coordinateRequiredForVesselActivity && (skipMandatoryCoordinate || !coordinateRequiredForFloatingObjects) -->
<field-validator type="mandatory" short-circuit="true">
- <param name="skip"><![CDATA[ !coordinateRequired ]]></param>
+ <param name="skip"><![CDATA[ !coordinateRequiredForVesselActivity && (skipMandatoryCoordinate || !coordinateRequiredForFloatingObjects) ]]></param>
<message>observe.Common.longitude.validation.required</message>
</field-validator>
@@ -231,9 +231,9 @@
</field>
<field name="quadrant">
- <!-- quadrant is mandatory except if !coordinateRequired -->
+ <!-- quadrant is mandatory except if !coordinateRequiredForVesselActivity && (skipMandatoryCoordinate || !coordinateRequiredForFloatingObjects) -->
<field-validator type="mandatory" short-circuit="true">
- <param name="skip"><![CDATA[ !coordinateRequired ]]></param>
+ <param name="skip"><![CDATA[ !coordinateRequiredForVesselActivity && (skipMandatoryCoordinate || !coordinateRequiredForFloatingObjects) ]]></param>
<message>observe.Common.quadrant.validation.required</message>
</field-validator>
=====================================
core/persistence/java/src/main/java/fr/ird/observe/entities/data/ps/logbook/ActivityImpl.java
=====================================
@@ -55,16 +55,7 @@ public class ActivityImpl extends ActivityAbstract {
* @return {@code true} if coordinate are required, {@code false} otherwise.
*/
@Override
- public boolean isCoordinateRequired() {
- if (getVesselActivity() == null) {
- return true;
- }
- if (getVesselActivity().isAllowSet()) {
- return true;
- }
- if (!getVesselActivity().isAllowFad()) {
- return true;
- }
+ public boolean isCoordinateRequiredForFloatingObjects() {
if (getFloatingObject() == null) {
return true;
}
=====================================
core/persistence/java/src/main/java/fr/ird/observe/entities/data/ps/logbook/ActivitySpi.java
=====================================
@@ -114,7 +114,7 @@ public class ActivitySpi extends GeneratedActivitySpi {
public void loadDtoForValidation(ServiceContext context, Route parent, Activity entity, ActivityDto dto) {
addRouteDate(parent, dto);
// See https://gitlab.com/ultreiaio/ird-observe/-/issues/2663
- dto.setCoordinateRequired(entity.isCoordinateRequired());
+ dto.setCoordinateRequiredForFloatingObjects(entity.isCoordinateRequiredForFloatingObjects());
}
@Override
=====================================
core/persistence/resources/src/main/resources/fr/ird/observe/entities/data/ps/logbook/Activity/validation-create.json
=====================================
@@ -55,7 +55,7 @@
"errors": [
"check latitude format",
"is latitude required ?",
- "latitude is mandatory except if !coordinateRequired"
+ "latitude is mandatory except if !coordinateRequiredForVesselActivity && (skipMandatoryCoordinate || !coordinateRequiredForFloatingObjects)"
]
},
"latitudeOriginal": {
@@ -68,7 +68,7 @@
"errors": [
"check longitude format",
"is longitude required ?",
- "longitude is mandatory except if !coordinateRequired"
+ "longitude is mandatory except if !coordinateRequiredForVesselActivity && (skipMandatoryCoordinate || !coordinateRequiredForFloatingObjects)"
]
},
"longitudeOriginal": {
@@ -115,7 +115,7 @@
"errors": [
"check quadrant (on quadrant)",
"is quadrant required ?",
- "quadrant is mandatory except if !coordinateRequired"
+ "quadrant is mandatory except if !coordinateRequiredForVesselActivity && (skipMandatoryCoordinate || !coordinateRequiredForFloatingObjects)"
]
},
"quadrantOriginal": {
=====================================
core/persistence/resources/src/main/resources/fr/ird/observe/entities/data/ps/logbook/Activity/validation-update.json
=====================================
@@ -60,7 +60,7 @@
"errors": [
"check latitude format",
"is latitude required ?",
- "latitude is mandatory except if !coordinateRequired"
+ "latitude is mandatory except if !coordinateRequiredForVesselActivity && (skipMandatoryCoordinate || !coordinateRequiredForFloatingObjects)"
]
},
"latitudeOriginal": {
@@ -73,7 +73,7 @@
"errors": [
"check longitude format",
"is longitude required ?",
- "longitude is mandatory except if !coordinateRequired"
+ "longitude is mandatory except if !coordinateRequiredForVesselActivity && (skipMandatoryCoordinate || !coordinateRequiredForFloatingObjects)"
]
},
"longitudeOriginal": {
@@ -120,7 +120,7 @@
"errors": [
"check quadrant (on quadrant)",
"is quadrant required ?",
- "quadrant is mandatory except if !coordinateRequired"
+ "quadrant is mandatory except if !coordinateRequiredForVesselActivity && (skipMandatoryCoordinate || !coordinateRequiredForFloatingObjects)"
]
},
"quadrantOriginal": {
=====================================
core/services/i18n/src/main/i18n/translations/services_en_GB.properties
=====================================
@@ -1118,6 +1118,7 @@ observe.data.ps.logbook.Activity.setCount.validation.required=Mandatory if set o
observe.data.ps.logbook.Activity.setMeasurements=Set measurements
observe.data.ps.logbook.Activity.setSuccessStatus=Success
observe.data.ps.logbook.Activity.setSuccessStatus.validation.required=Mandatory if successful set operation
+observe.data.ps.logbook.Activity.skipMandatoryCoordinate=A 'End of signal' or 'End of use' buoy operation is to be created on this activity
observe.data.ps.logbook.Activity.time=Observation time
observe.data.ps.logbook.Activity.time.validation.required=Mandatory if activities acquisition mode is timestamping
observe.data.ps.logbook.Activity.title=Activity
=====================================
core/services/i18n/src/main/i18n/translations/services_es_ES.properties
=====================================
@@ -1118,6 +1118,7 @@ observe.data.ps.logbook.Activity.setCount.validation.required=Mandatory if set o
observe.data.ps.logbook.Activity.setMeasurements=Fishing operation measurements
observe.data.ps.logbook.Activity.setSuccessStatus=Success \#TODO
observe.data.ps.logbook.Activity.setSuccessStatus.validation.required=Mandatory if successful set operation \#TODO
+observe.data.ps.logbook.Activity.skipMandatoryCoordinate=En esta actividad se debe crear una operación de boya de 'Fin de señal' o 'Fin de uso'
observe.data.ps.logbook.Activity.time=Hora de la observación
observe.data.ps.logbook.Activity.time.validation.required=Mandatory if activities acquisition mode is timestamping \#TODO
observe.data.ps.logbook.Activity.title=Actividad
=====================================
core/services/i18n/src/main/i18n/translations/services_fr_FR.properties
=====================================
@@ -1118,6 +1118,7 @@ observe.data.ps.logbook.Activity.setCount.validation.required=Obligatoire si op
observe.data.ps.logbook.Activity.setMeasurements=Paramètres de calée
observe.data.ps.logbook.Activity.setSuccessStatus=Succès
observe.data.ps.logbook.Activity.setSuccessStatus.validation.required=Obligatoire si opération de pêche réussie
+observe.data.ps.logbook.Activity.skipMandatoryCoordinate=Une opération balise 'Perte de signal' ou 'Fin d'utilisation' sera créée sur cette activité
observe.data.ps.logbook.Activity.time=Heure d'observation
observe.data.ps.logbook.Activity.time.validation.required=Obligatoire si le mode d'acquisition des activités est horodaté
observe.data.ps.logbook.Activity.title=Activité
=====================================
model/src/main/models/Observe/dto/21-data-ps-logbook.model
=====================================
@@ -35,7 +35,8 @@ setSuccessStatus {*:0..1} referential.ps.logbook.SetSuccessStatusReference
reasonForNullSet {*:0..1} referential.ps.common.ReasonForNullSetReference
observedSystem {*:*} referential.ps.common.ObservedSystemReference
maxNumberAuthorized Integer
-coordinateRequired boolean
+coordinateRequiredForFloatingObjects boolean
+skipMandatoryCoordinate boolean
data.ps.logbook.ActivityCatch > data.Container
catches {*} data.ps.logbook.Catch
=====================================
model/src/main/models/Observe/dto/attribute/notNullIf.properties
=====================================
@@ -42,9 +42,9 @@ data.ps.common.Trip.attribute.observationsProgram=!observationsEnabled
data.ps.common.Trip.attribute.observer=!observationsEnabled
data.ps.localmarket.Batch.attribute.count=countOrWeightValid
data.ps.localmarket.Batch.attribute.weight=countOrWeightValid
-data.ps.logbook.Activity.attribute.latitude=!coordinateRequired
-data.ps.logbook.Activity.attribute.longitude=!coordinateRequired
-data.ps.logbook.Activity.attribute.quadrant=!coordinateRequired
+data.ps.logbook.Activity.attribute.latitude=!coordinateRequiredForVesselActivity && (skipMandatoryCoordinate || !coordinateRequiredForFloatingObjects)
+data.ps.logbook.Activity.attribute.longitude=!coordinateRequiredForVesselActivity && (skipMandatoryCoordinate || !coordinateRequiredForFloatingObjects)
+data.ps.logbook.Activity.attribute.quadrant=!coordinateRequiredForVesselActivity && (skipMandatoryCoordinate || !coordinateRequiredForFloatingObjects)
data.ps.logbook.Activity.attribute.schoolType=!fishingSetEnabled || reasonForNoFishing != null
data.ps.logbook.Activity.attribute.setCount=!fishingSetEnabled
data.ps.logbook.Activity.attribute.setSuccessStatus=!fishingSetEnabled || reasonForNoFishing != null
=====================================
model/src/main/models/Observe/dto/class/i18nLabels.properties
=====================================
@@ -69,7 +69,7 @@ data.ps.localmarket.SampleSpeciesMeasure=count,sizeClass
data.ps.localmarket.Survey=number,batches.available,comment,date,surveyPart,generalTab,surveyPartTab,batches.available,batches.selected
data.ps.localmarket.SurveyPart=species
data.ps.localmarket.WellId=well
-data.ps.logbook.Activity=date,observedSystem.available,observedSystem.selected,comment,coordinate,coordinateOriginal,currentDirection,currentSpeed,dataQuality,floatingObjectEmpty,currentFpaZone,nextFpaZone,previousFpaZone,informationSource,latitude,latitudeOriginal,longitude,longitudeOriginal,number,observedSystem,originalDataModified,quadrant,quadrantOriginal,relatedObservedActivity,schoolType,seaSurfaceTemperature,setCount,time,totalWeight,vesselActivity,vmsDivergent,wind,windDirection,generalTab,measurementsTab,observedSystemTab,error.no.activity.6,physicalMeasurements,setMeasurements,reasonForNoFishing,setSuccessStatus,reasonForNullSet,latitude.validation.required,longitude.validation.required,quadrant.validation.required
+data.ps.logbook.Activity=date,observedSystem.available,observedSystem.selected,comment,coordinate,coordinateOriginal,currentDirection,currentSpeed,dataQuality,floatingObjectEmpty,currentFpaZone,nextFpaZone,previousFpaZone,informationSource,latitude,latitudeOriginal,longitude,longitudeOriginal,number,observedSystem,originalDataModified,quadrant,quadrantOriginal,relatedObservedActivity,schoolType,seaSurfaceTemperature,setCount,time,totalWeight,vesselActivity,vmsDivergent,wind,windDirection,generalTab,measurementsTab,observedSystemTab,error.no.activity.6,physicalMeasurements,setMeasurements,reasonForNoFishing,setSuccessStatus,reasonForNullSet,latitude.validation.required,longitude.validation.required,quadrant.validation.required,skipMandatoryCoordinate
data.ps.logbook.ActivityStub=date,comment,latitude,longitude,number,quadrant,seaSurfaceTemperature,time,vesselActivity
data.ps.logbook.Catch=comment,species,speciesFate,weight,weightCategory,weightMeasureMethod,well,weight.validation.required,weightMeasureMethod.validation.required
data.ps.logbook.FloatingObject=materialsValid,objectOperation,quadrant,supportVesselName,country,vessel,computedBiodegradable,computedNonEntangling,computedSimplifiedObjectType,computedValues,generalTab,buoysTab,materialsTab,notComputed,type.short,computedWhenArrivingBiodegradable,computedWhenLeavingBiodegradable,computedWhenArrivingNonEntangling,computedWhenLeavingNonEntangling,computedWhenArrivingSimplifiedObjectType,computedWhenLeavingSimplifiedObjectType
=====================================
model/src/main/models/Observe/persistence/21-data-ps-logbook.model
=====================================
@@ -33,7 +33,7 @@ reasonForNoFishing {*:0..1} referential.ps.common.ReasonForNoFishing
setSuccessStatus {*:0..1} referential.ps.logbook.SetSuccessStatus
reasonForNullSet {*:0..1} referential.ps.common.ReasonForNullSet
getDate() Date
-isCoordinateRequired() boolean
+isCoordinateRequiredForFloatingObjects() boolean
data.ps.logbook.Catch > data.DataEntity >> fr.ird.observe.dto.data.WellIdAware
comment String
View it on GitLab: https://gitlab.com/ultreiaio/ird-observe/-/compare/0e75fecd1c1be8bd3976a062…
--
View it on GitLab: https://gitlab.com/ultreiaio/ird-observe/-/compare/0e75fecd1c1be8bd3976a062…
You're receiving this email because of your account on gitlab.com.
1
0
[Git][ultreiaio/ird-observe][develop] Revue de la validation du caractère obligatoire des coordonnées de l'activité - Closes #2663
by Tony CHEMIT (@tchemit) 25 Jan '24
by Tony CHEMIT (@tchemit) 25 Jan '24
25 Jan '24
Tony CHEMIT pushed to branch develop at ultreiaio / ird-observe
Commits:
2d26bb4a by Tony Chemit at 2024-01-25T16:02:07+01:00
Revue de la validation du caractère obligatoire des coordonnées de l'activité - Closes #2663
- - - - -
21 changed files:
- client/datasource/editor/ps/src/main/i18n/getters/jaxx.getter
- client/datasource/editor/ps/src/main/java/fr/ird/observe/client/datasource/editor/ps/data/logbook/ActivityUI.jaxx
- client/datasource/editor/ps/src/main/java/fr/ird/observe/client/datasource/editor/ps/data/logbook/ActivityUI.jcss
- client/datasource/editor/ps/src/main/java/fr/ird/observe/client/datasource/editor/ps/data/logbook/ActivityUIHandler.java
- core/api/dto-decoration/src/main/i18n/getters/labels.getter
- core/api/dto/src/main/java/fr/ird/observe/dto/data/ps/logbook/ActivityDto.java
- core/api/dto/src/main/java/fr/ird/observe/dto/referential/ps/common/VesselActivityReference.java
- core/api/validation/src/main/filtered-resources/META-INF/validators/validation.json
- core/api/validation/src/main/resources/fr/ird/observe/dto/data/ps/logbook/ActivityDto-create-error-validation.xml
- core/api/validation/src/main/resources/fr/ird/observe/dto/data/ps/logbook/ActivityDto-update-error-validation.xml
- core/persistence/java/src/main/java/fr/ird/observe/entities/data/ps/logbook/ActivityImpl.java
- core/persistence/java/src/main/java/fr/ird/observe/entities/data/ps/logbook/ActivitySpi.java
- core/persistence/resources/src/main/resources/fr/ird/observe/entities/data/ps/logbook/Activity/validation-create.json
- core/persistence/resources/src/main/resources/fr/ird/observe/entities/data/ps/logbook/Activity/validation-update.json
- core/services/i18n/src/main/i18n/translations/services_en_GB.properties
- core/services/i18n/src/main/i18n/translations/services_es_ES.properties
- core/services/i18n/src/main/i18n/translations/services_fr_FR.properties
- model/src/main/models/Observe/dto/21-data-ps-logbook.model
- model/src/main/models/Observe/dto/attribute/notNullIf.properties
- model/src/main/models/Observe/dto/class/i18nLabels.properties
- model/src/main/models/Observe/persistence/21-data-ps-logbook.model
Changes:
=====================================
client/datasource/editor/ps/src/main/i18n/getters/jaxx.getter
=====================================
@@ -158,6 +158,7 @@ observe.data.ps.logbook.Activity.physicalMeasurements
observe.data.ps.logbook.Activity.setCount
observe.data.ps.logbook.Activity.setMeasurements
observe.data.ps.logbook.Activity.setSuccessStatus
+observe.data.ps.logbook.Activity.skipMandatoryCoordinate
observe.data.ps.logbook.Activity.time
observe.data.ps.logbook.Activity.totalWeight
observe.data.ps.logbook.Activity.vmsDivergent
=====================================
client/datasource/editor/ps/src/main/java/fr/ird/observe/client/datasource/editor/ps/data/logbook/ActivityUI.jaxx
=====================================
@@ -95,7 +95,12 @@
</cell>
<cell fill="both" columns="2" weightx="1">
<JPanel layout="{new BorderLayout()}">
- <JLabel id='coordinateLabel' constraints='BorderLayout.NORTH' styleClass="center"/>
+ <JPanel id="coordinateHeader" layout="{new BorderLayout()}" constraints='BorderLayout.NORTH'>
+
+ <JLabel id='coordinateLabel' constraints='BorderLayout.NORTH' styleClass="center"/>
+ <JToggleButton id="skipMandatoryCoordinate" constraints='BorderLayout.CENTER' styleClass='bold'
+ onItemStateChanged="{getHandler().onSkipMandatoryCoordinateChanged(event);}"/>
+ </JPanel>
<CoordinatesEditor id='coordinate' constraints='BorderLayout.CENTER'/>
</JPanel>
</cell>
=====================================
client/datasource/editor/ps/src/main/java/fr/ird/observe/client/datasource/editor/ps/data/logbook/ActivityUI.jcss
=====================================
@@ -41,6 +41,11 @@
horizontalAlignment:{JLabel.CENTER};
}
+#skipMandatoryCoordinate {
+ i18nProperty:"";
+ selected:{bean.isSkipMandatoryCoordinate()};
+}
+
#previousFpaZone {
enabled:{bean.isChangedZoneOperation()};
}
=====================================
client/datasource/editor/ps/src/main/java/fr/ird/observe/client/datasource/editor/ps/data/logbook/ActivityUIHandler.java
=====================================
@@ -31,8 +31,10 @@ import fr.ird.observe.client.datasource.editor.ps.ObservePsKeyStrokes;
import fr.ird.observe.dto.data.ps.common.TripDto;
import fr.ird.observe.dto.data.ps.logbook.ActivityDto;
import fr.ird.observe.dto.data.ps.logbook.ActivityReference;
+import fr.ird.observe.dto.referential.ps.common.VesselActivityReference;
import io.ultreia.java4all.i18n.I18n;
+import java.awt.event.ItemEvent;
import java.beans.PropertyChangeListener;
import java.util.Objects;
@@ -49,11 +51,20 @@ class ActivityUIHandler extends GeneratedActivityUIHandler {
*/
private final PropertyChangeListener originalDataModifiedChanged;
private final PropertyChangeListener fpaZoneChangedChanged;
+ private final PropertyChangeListener vesselActivityChanged;
public ActivityUIHandler() {
originalDataModifiedChanged = evt -> onOriginalDataModifiedChanged((Boolean) evt.getNewValue());
fpaZoneChangedChanged = evt -> onFpaZoneChanged((Boolean) evt.getNewValue());
+ vesselActivityChanged = evt -> onVesselActivityChanged((VesselActivityReference) evt.getNewValue());
}
+
+ @Override
+ public void onInit(ActivityUI ui) {
+ super.onInit(ui);
+ ui.getCoordinateHeader().remove(ui.getSkipMandatoryCoordinate());
+ }
+
@Override
public void startEditUI() {
ActivityDto bean = getModel().getStates().getBean();
@@ -62,20 +73,27 @@ class ActivityUIHandler extends GeneratedActivityUIHandler {
// compute it
bean.setMaxNumberAuthorized(getModel().getSource().getParent().getChildCount());
}
+ if (getModel().getStates().isCreatingMode()) {
+ ui.getCoordinateHeader().add(ui.getSkipMandatoryCoordinate());
+ }
bean.removePropertyChangeListener(ActivityDto.PROPERTY_ORIGINAL_DATA_MODIFIED, originalDataModifiedChanged);
bean.removePropertyChangeListener(ActivityDto.PROPERTY_CHANGED_ZONE_OPERATION, fpaZoneChangedChanged);
+ bean.removePropertyChangeListener(ActivityDto.PROPERTY_VESSEL_ACTIVITY, vesselActivityChanged);
onOriginalDataModifiedChanged(bean.isOriginalDataModified());
onFpaZoneChanged(bean.isChangedZoneOperation());
+ onVesselActivityChanged(bean.getVesselActivity());
getModel().getStates().startEditUI();
super.startEditUI();
bean.addPropertyChangeListener(ActivityDto.PROPERTY_ORIGINAL_DATA_MODIFIED, originalDataModifiedChanged);
bean.addPropertyChangeListener(ActivityDto.PROPERTY_CHANGED_ZONE_OPERATION, fpaZoneChangedChanged);
+ bean.addPropertyChangeListener(ActivityDto.PROPERTY_VESSEL_ACTIVITY, vesselActivityChanged);
TripDto trip = getClientValidationContext().getCurrentPsCommonTrip();
getModel().getStates().setNumberEnabled(Objects.requireNonNull(trip.getActivitiesAcquisitionMode()).isByNumber());
}
@Override
public void stopEditUI() {
+ ui.getCoordinateHeader().remove(ui.getSkipMandatoryCoordinate());
getModel().getStates().stopEditUI();
super.stopEditUI();
}
@@ -85,7 +103,7 @@ class ActivityUIHandler extends GeneratedActivityUIHandler {
SaveAction.create(ui, ActivityDto.class)
.on(ui.getModel()::toSaveRequest)
.call((r, d) -> getOpenableService().save(r.getParentId(), d))
- .then(new SaveContentOpenableUIAdapter<>(d -> false, ui -> null) {
+ .then(new SaveContentOpenableUIAdapter<>(ActivityDto::isSkipMandatoryCoordinate, ActivityUI::getAddFloatingObject) {
@Override
protected void afterNodeUpdated(DataSourceEditor dataSourceEditor, ActivityUI ui, NavigationTree tree, ContentOpenableUINavigationNode node, boolean notPersisted, ActivityDto bean) {
@@ -114,6 +132,25 @@ class ActivityUIHandler extends GeneratedActivityUIHandler {
ui.getCopyFirstCoordinate());
}
+ private void onVesselActivityChanged(VesselActivityReference vesselActivity) {
+ if (!getModel().getStates().isCreatingMode()) {
+ return;
+ }
+
+ if (VesselActivityReference.isCoordinateRequiredForVesselActivity(vesselActivity)) {
+ ui.getSkipMandatoryCoordinate().setEnabled(false);
+ ui.getSkipMandatoryCoordinate().setSelected(false);
+ } else {
+ ui.getSkipMandatoryCoordinate().setEnabled(true);
+ }
+ }
+
+ void onSkipMandatoryCoordinateChanged(ItemEvent newValue) {
+ if (!getModel().getStates().isCreatingMode()) {
+ return;
+ }
+ ui.getBean().setSkipMandatoryCoordinate(newValue.getStateChange() == ItemEvent.SELECTED);
+ }
private void onOriginalDataModifiedChanged(Boolean newValue) {
=====================================
core/api/dto-decoration/src/main/i18n/getters/labels.getter
=====================================
@@ -920,6 +920,7 @@ observe.data.ps.logbook.Activity.physicalMeasurements
observe.data.ps.logbook.Activity.setCount
observe.data.ps.logbook.Activity.setMeasurements
observe.data.ps.logbook.Activity.setSuccessStatus
+observe.data.ps.logbook.Activity.skipMandatoryCoordinate
observe.data.ps.logbook.Activity.time
observe.data.ps.logbook.Activity.title
observe.data.ps.logbook.Activity.totalWeight
=====================================
core/api/dto/src/main/java/fr/ird/observe/dto/data/ps/logbook/ActivityDto.java
=====================================
@@ -37,6 +37,9 @@ import java.util.Date;
@GenerateJavaBeanDefinition
public class ActivityDto extends GeneratedActivityDto {
+ public boolean isCoordinateRequiredForVesselActivity() {
+ return VesselActivityReference.isCoordinateRequiredForVesselActivity(getVesselActivity());
+ }
@Override
public void setVesselActivity(VesselActivityReference vesselActivity) {
=====================================
core/api/dto/src/main/java/fr/ird/observe/dto/referential/ps/common/VesselActivityReference.java
=====================================
@@ -38,4 +38,7 @@ public class VesselActivityReference extends GeneratedVesselActivityReference {
return id != null && ProtectedIdsPs.PS_COMMON_VESSEL_ACTIVITY_ID_FOR_END_OF_SEARCHING.equals(id.getId());
}
+ public static boolean isCoordinateRequiredForVesselActivity(VesselActivityReference reference) {
+ return reference == null || reference.isAllowSet() || !reference.isAllowFad();
+ }
}
=====================================
core/api/validation/src/main/filtered-resources/META-INF/validators/validation.json
=====================================
@@ -10053,7 +10053,7 @@
"comments": [
"check latitude format",
"is latitude required ?",
- "latitude is mandatory except if !coordinateRequired"
+ "latitude is mandatory except if !coordinateRequiredForVesselActivity && (skipMandatoryCoordinate || !coordinateRequiredForFloatingObjects)"
]
},
{
@@ -10068,7 +10068,7 @@
"comments": [
"check longitude format",
"is longitude required ?",
- "longitude is mandatory except if !coordinateRequired"
+ "longitude is mandatory except if !coordinateRequiredForVesselActivity && (skipMandatoryCoordinate || !coordinateRequiredForFloatingObjects)"
]
},
{
@@ -10112,7 +10112,7 @@
"comments": [
"check quadrant (on quadrant)",
"is quadrant required ?",
- "quadrant is mandatory except if !coordinateRequired"
+ "quadrant is mandatory except if !coordinateRequiredForVesselActivity && (skipMandatoryCoordinate || !coordinateRequiredForFloatingObjects)"
]
},
{
@@ -10360,7 +10360,7 @@
"comments": [
"check latitude format",
"is latitude required ?",
- "latitude is mandatory except if !coordinateRequired"
+ "latitude is mandatory except if !coordinateRequiredForVesselActivity && (skipMandatoryCoordinate || !coordinateRequiredForFloatingObjects)"
]
},
{
@@ -10375,7 +10375,7 @@
"comments": [
"check longitude format",
"is longitude required ?",
- "longitude is mandatory except if !coordinateRequired"
+ "longitude is mandatory except if !coordinateRequiredForVesselActivity && (skipMandatoryCoordinate || !coordinateRequiredForFloatingObjects)"
]
},
{
@@ -10419,7 +10419,7 @@
"comments": [
"check quadrant (on quadrant)",
"is quadrant required ?",
- "quadrant is mandatory except if !coordinateRequired"
+ "quadrant is mandatory except if !coordinateRequiredForVesselActivity && (skipMandatoryCoordinate || !coordinateRequiredForFloatingObjects)"
]
},
{
=====================================
core/api/validation/src/main/resources/fr/ird/observe/dto/data/ps/logbook/ActivityDto-create-error-validation.xml
=====================================
@@ -107,9 +107,9 @@
</field>
<field name="latitude">
- <!-- latitude is mandatory except if !coordinateRequired -->
+ <!-- latitude is mandatory except if !coordinateRequiredForVesselActivity && (skipMandatoryCoordinate || !coordinateRequiredForFloatingObjects) -->
<field-validator type="mandatory" short-circuit="true">
- <param name="skip"><![CDATA[ !coordinateRequired ]]></param>
+ <param name="skip"><![CDATA[ !coordinateRequiredForVesselActivity && (skipMandatoryCoordinate || !coordinateRequiredForFloatingObjects) ]]></param>
<message>observe.Common.latitude.validation.required</message>
</field-validator>
@@ -139,9 +139,9 @@
</field>
<field name="longitude">
- <!-- longitude is mandatory except if !coordinateRequired -->
+ <!-- longitude is mandatory except if !coordinateRequiredForVesselActivity && (skipMandatoryCoordinate || !coordinateRequiredForFloatingObjects) -->
<field-validator type="mandatory" short-circuit="true">
- <param name="skip"><![CDATA[ !coordinateRequired ]]></param>
+ <param name="skip"><![CDATA[ !coordinateRequiredForVesselActivity && (skipMandatoryCoordinate || !coordinateRequiredForFloatingObjects) ]]></param>
<message>observe.Common.longitude.validation.required</message>
</field-validator>
@@ -231,9 +231,9 @@
</field>
<field name="quadrant">
- <!-- quadrant is mandatory except if !coordinateRequired -->
+ <!-- quadrant is mandatory except if !coordinateRequiredForVesselActivity && (skipMandatoryCoordinate || !coordinateRequiredForFloatingObjects) -->
<field-validator type="mandatory" short-circuit="true">
- <param name="skip"><![CDATA[ !coordinateRequired ]]></param>
+ <param name="skip"><![CDATA[ !coordinateRequiredForVesselActivity && (skipMandatoryCoordinate || !coordinateRequiredForFloatingObjects) ]]></param>
<message>observe.Common.quadrant.validation.required</message>
</field-validator>
=====================================
core/api/validation/src/main/resources/fr/ird/observe/dto/data/ps/logbook/ActivityDto-update-error-validation.xml
=====================================
@@ -107,9 +107,9 @@
</field>
<field name="latitude">
- <!-- latitude is mandatory except if !coordinateRequired -->
+ <!-- latitude is mandatory except if !coordinateRequiredForVesselActivity && (skipMandatoryCoordinate || !coordinateRequiredForFloatingObjects) -->
<field-validator type="mandatory" short-circuit="true">
- <param name="skip"><![CDATA[ !coordinateRequired ]]></param>
+ <param name="skip"><![CDATA[ !coordinateRequiredForVesselActivity && (skipMandatoryCoordinate || !coordinateRequiredForFloatingObjects) ]]></param>
<message>observe.Common.latitude.validation.required</message>
</field-validator>
@@ -139,9 +139,9 @@
</field>
<field name="longitude">
- <!-- longitude is mandatory except if !coordinateRequired -->
+ <!-- longitude is mandatory except if !coordinateRequiredForVesselActivity && (skipMandatoryCoordinate || !coordinateRequiredForFloatingObjects) -->
<field-validator type="mandatory" short-circuit="true">
- <param name="skip"><![CDATA[ !coordinateRequired ]]></param>
+ <param name="skip"><![CDATA[ !coordinateRequiredForVesselActivity && (skipMandatoryCoordinate || !coordinateRequiredForFloatingObjects) ]]></param>
<message>observe.Common.longitude.validation.required</message>
</field-validator>
@@ -231,9 +231,9 @@
</field>
<field name="quadrant">
- <!-- quadrant is mandatory except if !coordinateRequired -->
+ <!-- quadrant is mandatory except if !coordinateRequiredForVesselActivity && (skipMandatoryCoordinate || !coordinateRequiredForFloatingObjects) -->
<field-validator type="mandatory" short-circuit="true">
- <param name="skip"><![CDATA[ !coordinateRequired ]]></param>
+ <param name="skip"><![CDATA[ !coordinateRequiredForVesselActivity && (skipMandatoryCoordinate || !coordinateRequiredForFloatingObjects) ]]></param>
<message>observe.Common.quadrant.validation.required</message>
</field-validator>
=====================================
core/persistence/java/src/main/java/fr/ird/observe/entities/data/ps/logbook/ActivityImpl.java
=====================================
@@ -55,16 +55,7 @@ public class ActivityImpl extends ActivityAbstract {
* @return {@code true} if coordinate are required, {@code false} otherwise.
*/
@Override
- public boolean isCoordinateRequired() {
- if (getVesselActivity() == null) {
- return true;
- }
- if (getVesselActivity().isAllowSet()) {
- return true;
- }
- if (!getVesselActivity().isAllowFad()) {
- return true;
- }
+ public boolean isCoordinateRequiredForFloatingObjects() {
if (getFloatingObject() == null) {
return true;
}
=====================================
core/persistence/java/src/main/java/fr/ird/observe/entities/data/ps/logbook/ActivitySpi.java
=====================================
@@ -114,7 +114,7 @@ public class ActivitySpi extends GeneratedActivitySpi {
public void loadDtoForValidation(ServiceContext context, Route parent, Activity entity, ActivityDto dto) {
addRouteDate(parent, dto);
// See https://gitlab.com/ultreiaio/ird-observe/-/issues/2663
- dto.setCoordinateRequired(entity.isCoordinateRequired());
+ dto.setCoordinateRequiredForFloatingObjects(entity.isCoordinateRequiredForFloatingObjects());
}
@Override
=====================================
core/persistence/resources/src/main/resources/fr/ird/observe/entities/data/ps/logbook/Activity/validation-create.json
=====================================
@@ -55,7 +55,7 @@
"errors": [
"check latitude format",
"is latitude required ?",
- "latitude is mandatory except if !coordinateRequired"
+ "latitude is mandatory except if !coordinateRequiredForVesselActivity && (skipMandatoryCoordinate || !coordinateRequiredForFloatingObjects)"
]
},
"latitudeOriginal": {
@@ -68,7 +68,7 @@
"errors": [
"check longitude format",
"is longitude required ?",
- "longitude is mandatory except if !coordinateRequired"
+ "longitude is mandatory except if !coordinateRequiredForVesselActivity && (skipMandatoryCoordinate || !coordinateRequiredForFloatingObjects)"
]
},
"longitudeOriginal": {
@@ -115,7 +115,7 @@
"errors": [
"check quadrant (on quadrant)",
"is quadrant required ?",
- "quadrant is mandatory except if !coordinateRequired"
+ "quadrant is mandatory except if !coordinateRequiredForVesselActivity && (skipMandatoryCoordinate || !coordinateRequiredForFloatingObjects)"
]
},
"quadrantOriginal": {
=====================================
core/persistence/resources/src/main/resources/fr/ird/observe/entities/data/ps/logbook/Activity/validation-update.json
=====================================
@@ -60,7 +60,7 @@
"errors": [
"check latitude format",
"is latitude required ?",
- "latitude is mandatory except if !coordinateRequired"
+ "latitude is mandatory except if !coordinateRequiredForVesselActivity && (skipMandatoryCoordinate || !coordinateRequiredForFloatingObjects)"
]
},
"latitudeOriginal": {
@@ -73,7 +73,7 @@
"errors": [
"check longitude format",
"is longitude required ?",
- "longitude is mandatory except if !coordinateRequired"
+ "longitude is mandatory except if !coordinateRequiredForVesselActivity && (skipMandatoryCoordinate || !coordinateRequiredForFloatingObjects)"
]
},
"longitudeOriginal": {
@@ -120,7 +120,7 @@
"errors": [
"check quadrant (on quadrant)",
"is quadrant required ?",
- "quadrant is mandatory except if !coordinateRequired"
+ "quadrant is mandatory except if !coordinateRequiredForVesselActivity && (skipMandatoryCoordinate || !coordinateRequiredForFloatingObjects)"
]
},
"quadrantOriginal": {
=====================================
core/services/i18n/src/main/i18n/translations/services_en_GB.properties
=====================================
@@ -1118,6 +1118,7 @@ observe.data.ps.logbook.Activity.setMeasurements=Set measurements
observe.data.ps.logbook.Activity.setStat=Count of fishing operation
observe.data.ps.logbook.Activity.setSuccessStatus=Success
observe.data.ps.logbook.Activity.setSuccessStatus.validation.required=Mandatory if successful set operation
+observe.data.ps.logbook.Activity.skipMandatoryCoordinate=A 'End of signal' or 'End of use' buoy operation is to be created on this activity
observe.data.ps.logbook.Activity.time=Observation time
observe.data.ps.logbook.Activity.time.validation.required=Mandatory if activities acquisition mode is timestamping
observe.data.ps.logbook.Activity.title=Activity
=====================================
core/services/i18n/src/main/i18n/translations/services_es_ES.properties
=====================================
@@ -1118,6 +1118,7 @@ observe.data.ps.logbook.Activity.setMeasurements=Fishing operation measurements
observe.data.ps.logbook.Activity.setStat=Count of fishing operation
observe.data.ps.logbook.Activity.setSuccessStatus=Success \#TODO
observe.data.ps.logbook.Activity.setSuccessStatus.validation.required=Mandatory if successful set operation \#TODO
+observe.data.ps.logbook.Activity.skipMandatoryCoordinate=En esta actividad se debe crear una operación de boya de 'Fin de señal' o 'Fin de uso'
observe.data.ps.logbook.Activity.time=Hora de la observación
observe.data.ps.logbook.Activity.time.validation.required=Mandatory if activities acquisition mode is timestamping \#TODO
observe.data.ps.logbook.Activity.title=Actividad
=====================================
core/services/i18n/src/main/i18n/translations/services_fr_FR.properties
=====================================
@@ -1118,6 +1118,7 @@ observe.data.ps.logbook.Activity.setMeasurements=Paramètres de calée
observe.data.ps.logbook.Activity.setStat=Nombre de calées
observe.data.ps.logbook.Activity.setSuccessStatus=Succès
observe.data.ps.logbook.Activity.setSuccessStatus.validation.required=Obligatoire si opération de pêche réussie
+observe.data.ps.logbook.Activity.skipMandatoryCoordinate=Une opération balise 'Perte de signal' ou 'Fin d'utilisation' sera créée sur cette activité
observe.data.ps.logbook.Activity.time=Heure d'observation
observe.data.ps.logbook.Activity.time.validation.required=Obligatoire si le mode d'acquisition des activités est horodaté
observe.data.ps.logbook.Activity.title=Activité
=====================================
model/src/main/models/Observe/dto/21-data-ps-logbook.model
=====================================
@@ -35,7 +35,8 @@ setSuccessStatus {*:0..1} referential.ps.logbook.SetSuccessStatusReference
reasonForNullSet {*:0..1} referential.ps.common.ReasonForNullSetReference
observedSystem {*:*} referential.ps.common.ObservedSystemReference
maxNumberAuthorized Integer
-coordinateRequired boolean
+coordinateRequiredForFloatingObjects boolean
+skipMandatoryCoordinate boolean
data.ps.logbook.ActivityCatch > data.Container
catches {*} data.ps.logbook.Catch
=====================================
model/src/main/models/Observe/dto/attribute/notNullIf.properties
=====================================
@@ -42,9 +42,9 @@ data.ps.common.Trip.attribute.observationsProgram=!observationsEnabled
data.ps.common.Trip.attribute.observer=!observationsEnabled
data.ps.localmarket.Batch.attribute.count=countOrWeightValid
data.ps.localmarket.Batch.attribute.weight=countOrWeightValid
-data.ps.logbook.Activity.attribute.latitude=!coordinateRequired
-data.ps.logbook.Activity.attribute.longitude=!coordinateRequired
-data.ps.logbook.Activity.attribute.quadrant=!coordinateRequired
+data.ps.logbook.Activity.attribute.latitude=!coordinateRequiredForVesselActivity && (skipMandatoryCoordinate || !coordinateRequiredForFloatingObjects)
+data.ps.logbook.Activity.attribute.longitude=!coordinateRequiredForVesselActivity && (skipMandatoryCoordinate || !coordinateRequiredForFloatingObjects)
+data.ps.logbook.Activity.attribute.quadrant=!coordinateRequiredForVesselActivity && (skipMandatoryCoordinate || !coordinateRequiredForFloatingObjects)
data.ps.logbook.Activity.attribute.schoolType=!setEnabled || reasonForNoFishing != null
data.ps.logbook.Activity.attribute.setCount=!setEnabled
data.ps.logbook.Activity.attribute.setSuccessStatus=!setEnabled || reasonForNoFishing != null
=====================================
model/src/main/models/Observe/dto/class/i18nLabels.properties
=====================================
@@ -69,7 +69,7 @@ data.ps.localmarket.SampleSpeciesMeasure=count,sizeClass
data.ps.localmarket.Survey=number,batches.available,comment,date,surveyPart,generalTab,surveyPartTab,batches.available,batches.selected
data.ps.localmarket.SurveyPart=species
data.ps.localmarket.WellId=well
-data.ps.logbook.Activity=date,observedSystem.available,observedSystem.selected,comment,coordinate,coordinateOriginal,currentDirection,currentSpeed,dataQuality,floatingObjectEmpty,currentFpaZone,nextFpaZone,previousFpaZone,informationSource,latitude,latitudeOriginal,longitude,longitudeOriginal,number,observedSystem,originalDataModified,quadrant,quadrantOriginal,relatedObservedActivity,schoolType,seaSurfaceTemperature,setCount,time,totalWeight,vesselActivity,vmsDivergent,wind,windDirection,generalTab,measurementsTab,observedSystemTab,error.no.activity.6,physicalMeasurements,setMeasurements,reasonForNoFishing,setSuccessStatus,reasonForNullSet,latitude.validation.required,longitude.validation.required,quadrant.validation.required
+data.ps.logbook.Activity=date,observedSystem.available,observedSystem.selected,comment,coordinate,coordinateOriginal,currentDirection,currentSpeed,dataQuality,floatingObjectEmpty,currentFpaZone,nextFpaZone,previousFpaZone,informationSource,latitude,latitudeOriginal,longitude,longitudeOriginal,number,observedSystem,originalDataModified,quadrant,quadrantOriginal,relatedObservedActivity,schoolType,seaSurfaceTemperature,setCount,time,totalWeight,vesselActivity,vmsDivergent,wind,windDirection,generalTab,measurementsTab,observedSystemTab,error.no.activity.6,physicalMeasurements,setMeasurements,reasonForNoFishing,setSuccessStatus,reasonForNullSet,latitude.validation.required,longitude.validation.required,quadrant.validation.required,skipMandatoryCoordinate
data.ps.logbook.ActivityStub=date,comment,latitude,longitude,number,quadrant,seaSurfaceTemperature,time,vesselActivity
data.ps.logbook.Catch=comment,species,speciesFate,weight,weightCategory,weightMeasureMethod,well,weight.validation.required,weightMeasureMethod.validation.required
data.ps.logbook.FloatingObject=materialsValid,objectOperation,quadrant,supportVesselName,country,vessel,computedBiodegradable,computedNonEntangling,computedSimplifiedObjectType,computedValues,generalTab,buoysTab,materialsTab,notComputed,type.short,computedWhenArrivingBiodegradable,computedWhenLeavingBiodegradable,computedWhenArrivingNonEntangling,computedWhenLeavingNonEntangling,computedWhenArrivingSimplifiedObjectType,computedWhenLeavingSimplifiedObjectType
=====================================
model/src/main/models/Observe/persistence/21-data-ps-logbook.model
=====================================
@@ -33,7 +33,7 @@ reasonForNoFishing {*:0..1} referential.ps.common.ReasonForNoFishing
setSuccessStatus {*:0..1} referential.ps.logbook.SetSuccessStatus
reasonForNullSet {*:0..1} referential.ps.common.ReasonForNullSet
getDate() Date
-isCoordinateRequired() boolean
+isCoordinateRequiredForFloatingObjects() boolean
data.ps.logbook.Catch > data.DataEntity >> fr.ird.observe.dto.data.WellIdAware
comment String
View it on GitLab: https://gitlab.com/ultreiaio/ird-observe/-/commit/2d26bb4ad8ab61e6147f5600c…
--
View it on GitLab: https://gitlab.com/ultreiaio/ird-observe/-/commit/2d26bb4ad8ab61e6147f5600c…
You're receiving this email because of your account on gitlab.com.
1
0
[Git][ultreiaio/ird-observe][develop] 2 commits: [client-datasource-editor-api] Be able to launch after save action (even if the button is disabled)
by Tony CHEMIT (@tchemit) 25 Jan '24
by Tony CHEMIT (@tchemit) 25 Jan '24
25 Jan '24
Tony CHEMIT pushed to branch develop at ultreiaio / ird-observe
Commits:
7d7d9912 by Tony Chemit at 2024-01-25T12:20:32+01:00
[client-datasource-editor-api] Be able to launch after save action (even if the button is disabled)
- - - - -
e44b7039 by Tony Chemit at 2024-01-25T13:49:46+01:00
Revue de la validation du caractère obligatoire des coordonnées de l'activité - Closes #2663
- - - - -
22 changed files:
- client/datasource/editor/api/src/main/java/fr/ird/observe/client/datasource/editor/api/content/data/open/actions/SaveContentOpenableUIAdapter.java
- client/datasource/editor/ps/src/main/i18n/getters/jaxx.getter
- client/datasource/editor/ps/src/main/java/fr/ird/observe/client/datasource/editor/ps/data/logbook/ActivityUI.jaxx
- client/datasource/editor/ps/src/main/java/fr/ird/observe/client/datasource/editor/ps/data/logbook/ActivityUI.jcss
- client/datasource/editor/ps/src/main/java/fr/ird/observe/client/datasource/editor/ps/data/logbook/ActivityUIHandler.java
- core/api/dto-decoration/src/main/i18n/getters/labels.getter
- core/api/dto/src/main/java/fr/ird/observe/dto/data/ps/logbook/ActivityDto.java
- core/api/dto/src/main/java/fr/ird/observe/dto/referential/ps/common/VesselActivityReference.java
- core/api/validation/src/main/filtered-resources/META-INF/validators/validation.json
- core/api/validation/src/main/resources/fr/ird/observe/dto/data/ps/logbook/ActivityDto-create-error-validation.xml
- core/api/validation/src/main/resources/fr/ird/observe/dto/data/ps/logbook/ActivityDto-update-error-validation.xml
- core/persistence/java/src/main/java/fr/ird/observe/entities/data/ps/logbook/ActivityImpl.java
- core/persistence/java/src/main/java/fr/ird/observe/entities/data/ps/logbook/ActivitySpi.java
- core/persistence/resources/src/main/resources/fr/ird/observe/entities/data/ps/logbook/Activity/validation-create.json
- core/persistence/resources/src/main/resources/fr/ird/observe/entities/data/ps/logbook/Activity/validation-update.json
- core/services/i18n/src/main/i18n/translations/services_en_GB.properties
- core/services/i18n/src/main/i18n/translations/services_es_ES.properties
- core/services/i18n/src/main/i18n/translations/services_fr_FR.properties
- model/src/main/models/Observe/dto/21-data-ps-logbook.model
- model/src/main/models/Observe/dto/attribute/notNullIf.properties
- model/src/main/models/Observe/dto/class/i18nLabels.properties
- model/src/main/models/Observe/persistence/21-data-ps-logbook.model
Changes:
=====================================
client/datasource/editor/api/src/main/java/fr/ird/observe/client/datasource/editor/api/content/data/open/actions/SaveContentOpenableUIAdapter.java
=====================================
@@ -80,7 +80,13 @@ public class SaveContentOpenableUIAdapter<D extends OpenableDto, U extends Conte
if (notPersisted && predicate.test(bean)) {
// reload ui and do click
U newUi = dataSourceEditor.getModel().getTypedContent();
- SwingUtilities.invokeLater(() -> Objects.requireNonNull(buttonGetter).apply(newUi).doClick());
+ SwingUtilities.invokeLater(() -> {
+ AbstractButton button = Objects.requireNonNull(buttonGetter).apply(newUi);
+ if (!button.isEnabled()) {
+ button.setEnabled(true);
+ }
+ button.doClick();
+ });
return;
} else {
dataSourceEditor.getModel().resetFromPreviousUi(ui);
=====================================
client/datasource/editor/ps/src/main/i18n/getters/jaxx.getter
=====================================
@@ -158,6 +158,7 @@ observe.data.ps.logbook.Activity.physicalMeasurements
observe.data.ps.logbook.Activity.setCount
observe.data.ps.logbook.Activity.setMeasurements
observe.data.ps.logbook.Activity.setSuccessStatus
+observe.data.ps.logbook.Activity.skipMandatoryCoordinate
observe.data.ps.logbook.Activity.time
observe.data.ps.logbook.Activity.totalWeight
observe.data.ps.logbook.Activity.vmsDivergent
=====================================
client/datasource/editor/ps/src/main/java/fr/ird/observe/client/datasource/editor/ps/data/logbook/ActivityUI.jaxx
=====================================
@@ -95,7 +95,11 @@
</cell>
<cell fill="both" columns="2" weightx="1">
<JPanel layout="{new BorderLayout()}">
- <JLabel id='coordinateLabel' constraints='BorderLayout.NORTH' styleClass="center"/>
+ <JPanel id="coordinateHeader" layout="{new BorderLayout()}" constraints='BorderLayout.NORTH'>
+
+ <JLabel id='coordinateLabel' constraints='BorderLayout.WEST' styleClass="center"/>
+ <JToggleButton id="skipMandatoryCoordinate" constraints='BorderLayout.CENTER' onItemStateChanged="{getHandler().onSkipMandatoryCoordinateChanged(event);}"/>
+ </JPanel>
<CoordinatesEditor id='coordinate' constraints='BorderLayout.CENTER'/>
</JPanel>
</cell>
=====================================
client/datasource/editor/ps/src/main/java/fr/ird/observe/client/datasource/editor/ps/data/logbook/ActivityUI.jcss
=====================================
@@ -41,6 +41,12 @@
horizontalAlignment:{JLabel.CENTER};
}
+#skipMandatoryCoordinate {
+ i18nProperty:"";
+ selected:{bean.isSkipMandatoryCoordinate()};
+ visible:{states.isCreatingMode()};
+}
+
#previousFpaZone {
enabled:{bean.isChangedZoneOperation()};
}
=====================================
client/datasource/editor/ps/src/main/java/fr/ird/observe/client/datasource/editor/ps/data/logbook/ActivityUIHandler.java
=====================================
@@ -31,8 +31,10 @@ import fr.ird.observe.client.datasource.editor.ps.ObservePsKeyStrokes;
import fr.ird.observe.dto.data.ps.common.TripDto;
import fr.ird.observe.dto.data.ps.logbook.ActivityDto;
import fr.ird.observe.dto.data.ps.logbook.ActivityReference;
+import fr.ird.observe.dto.referential.ps.common.VesselActivityReference;
import io.ultreia.java4all.i18n.I18n;
+import java.awt.event.ItemEvent;
import java.beans.PropertyChangeListener;
import java.util.Objects;
@@ -49,11 +51,14 @@ class ActivityUIHandler extends GeneratedActivityUIHandler {
*/
private final PropertyChangeListener originalDataModifiedChanged;
private final PropertyChangeListener fpaZoneChangedChanged;
+ private final PropertyChangeListener vesselActivityChanged;
public ActivityUIHandler() {
originalDataModifiedChanged = evt -> onOriginalDataModifiedChanged((Boolean) evt.getNewValue());
fpaZoneChangedChanged = evt -> onFpaZoneChanged((Boolean) evt.getNewValue());
+ vesselActivityChanged = evt -> onVesselActivityChanged((VesselActivityReference) evt.getNewValue());
}
+
@Override
public void startEditUI() {
ActivityDto bean = getModel().getStates().getBean();
@@ -64,12 +69,15 @@ class ActivityUIHandler extends GeneratedActivityUIHandler {
}
bean.removePropertyChangeListener(ActivityDto.PROPERTY_ORIGINAL_DATA_MODIFIED, originalDataModifiedChanged);
bean.removePropertyChangeListener(ActivityDto.PROPERTY_CHANGED_ZONE_OPERATION, fpaZoneChangedChanged);
+ bean.removePropertyChangeListener(ActivityDto.PROPERTY_VESSEL_ACTIVITY, vesselActivityChanged);
onOriginalDataModifiedChanged(bean.isOriginalDataModified());
onFpaZoneChanged(bean.isChangedZoneOperation());
+ onVesselActivityChanged(bean.getVesselActivity());
getModel().getStates().startEditUI();
super.startEditUI();
bean.addPropertyChangeListener(ActivityDto.PROPERTY_ORIGINAL_DATA_MODIFIED, originalDataModifiedChanged);
bean.addPropertyChangeListener(ActivityDto.PROPERTY_CHANGED_ZONE_OPERATION, fpaZoneChangedChanged);
+ bean.addPropertyChangeListener(ActivityDto.PROPERTY_VESSEL_ACTIVITY, vesselActivityChanged);
TripDto trip = getClientValidationContext().getCurrentPsCommonTrip();
getModel().getStates().setNumberEnabled(Objects.requireNonNull(trip.getActivitiesAcquisitionMode()).isByNumber());
}
@@ -85,7 +93,7 @@ class ActivityUIHandler extends GeneratedActivityUIHandler {
SaveAction.create(ui, ActivityDto.class)
.on(ui.getModel()::toSaveRequest)
.call((r, d) -> getOpenableService().save(r.getParentId(), d))
- .then(new SaveContentOpenableUIAdapter<>(d -> false, ui -> null) {
+ .then(new SaveContentOpenableUIAdapter<>(ActivityDto::isSkipMandatoryCoordinate, ActivityUI::getAddFloatingObject) {
@Override
protected void afterNodeUpdated(DataSourceEditor dataSourceEditor, ActivityUI ui, NavigationTree tree, ContentOpenableUINavigationNode node, boolean notPersisted, ActivityDto bean) {
@@ -114,6 +122,25 @@ class ActivityUIHandler extends GeneratedActivityUIHandler {
ui.getCopyFirstCoordinate());
}
+ private void onVesselActivityChanged(VesselActivityReference vesselActivity) {
+ if (!getModel().getStates().isCreatingMode()) {
+ return;
+ }
+
+ if (VesselActivityReference.isCoordinateRequiredForVesselActivity(vesselActivity)) {
+ ui.getSkipMandatoryCoordinate().setEnabled(false);
+ ui.getSkipMandatoryCoordinate().setSelected(false);
+ } else {
+ ui.getSkipMandatoryCoordinate().setEnabled(true);
+ }
+ }
+
+ void onSkipMandatoryCoordinateChanged(ItemEvent newValue) {
+ if (!getModel().getStates().isCreatingMode()) {
+ return;
+ }
+ ui.getBean().setSkipMandatoryCoordinate(newValue.getStateChange() == ItemEvent.SELECTED);
+ }
private void onOriginalDataModifiedChanged(Boolean newValue) {
=====================================
core/api/dto-decoration/src/main/i18n/getters/labels.getter
=====================================
@@ -920,6 +920,7 @@ observe.data.ps.logbook.Activity.physicalMeasurements
observe.data.ps.logbook.Activity.setCount
observe.data.ps.logbook.Activity.setMeasurements
observe.data.ps.logbook.Activity.setSuccessStatus
+observe.data.ps.logbook.Activity.skipMandatoryCoordinate
observe.data.ps.logbook.Activity.time
observe.data.ps.logbook.Activity.title
observe.data.ps.logbook.Activity.totalWeight
=====================================
core/api/dto/src/main/java/fr/ird/observe/dto/data/ps/logbook/ActivityDto.java
=====================================
@@ -37,6 +37,9 @@ import java.util.Date;
@GenerateJavaBeanDefinition
public class ActivityDto extends GeneratedActivityDto {
+ public boolean isCoordinateRequiredForVesselActivity() {
+ return VesselActivityReference.isCoordinateRequiredForVesselActivity(getVesselActivity());
+ }
@Override
public void setVesselActivity(VesselActivityReference vesselActivity) {
=====================================
core/api/dto/src/main/java/fr/ird/observe/dto/referential/ps/common/VesselActivityReference.java
=====================================
@@ -38,4 +38,7 @@ public class VesselActivityReference extends GeneratedVesselActivityReference {
return id != null && ProtectedIdsPs.PS_COMMON_VESSEL_ACTIVITY_ID_FOR_END_OF_SEARCHING.equals(id.getId());
}
+ public static boolean isCoordinateRequiredForVesselActivity(VesselActivityReference reference) {
+ return reference == null || reference.isAllowSet() || !reference.isAllowFad();
+ }
}
=====================================
core/api/validation/src/main/filtered-resources/META-INF/validators/validation.json
=====================================
@@ -10053,7 +10053,7 @@
"comments": [
"check latitude format",
"is latitude required ?",
- "latitude is mandatory except if !coordinateRequired"
+ "latitude is mandatory except if !coordinateRequiredForVesselActivity && (skipMandatoryCoordinate || !coordinateRequiredForFloatingObjects)"
]
},
{
@@ -10068,7 +10068,7 @@
"comments": [
"check longitude format",
"is longitude required ?",
- "longitude is mandatory except if !coordinateRequired"
+ "longitude is mandatory except if !coordinateRequiredForVesselActivity && (skipMandatoryCoordinate || !coordinateRequiredForFloatingObjects)"
]
},
{
@@ -10112,7 +10112,7 @@
"comments": [
"check quadrant (on quadrant)",
"is quadrant required ?",
- "quadrant is mandatory except if !coordinateRequired"
+ "quadrant is mandatory except if !coordinateRequiredForVesselActivity && (skipMandatoryCoordinate || !coordinateRequiredForFloatingObjects)"
]
},
{
@@ -10360,7 +10360,7 @@
"comments": [
"check latitude format",
"is latitude required ?",
- "latitude is mandatory except if !coordinateRequired"
+ "latitude is mandatory except if !coordinateRequiredForVesselActivity && (skipMandatoryCoordinate || !coordinateRequiredForFloatingObjects)"
]
},
{
@@ -10375,7 +10375,7 @@
"comments": [
"check longitude format",
"is longitude required ?",
- "longitude is mandatory except if !coordinateRequired"
+ "longitude is mandatory except if !coordinateRequiredForVesselActivity && (skipMandatoryCoordinate || !coordinateRequiredForFloatingObjects)"
]
},
{
@@ -10419,7 +10419,7 @@
"comments": [
"check quadrant (on quadrant)",
"is quadrant required ?",
- "quadrant is mandatory except if !coordinateRequired"
+ "quadrant is mandatory except if !coordinateRequiredForVesselActivity && (skipMandatoryCoordinate || !coordinateRequiredForFloatingObjects)"
]
},
{
=====================================
core/api/validation/src/main/resources/fr/ird/observe/dto/data/ps/logbook/ActivityDto-create-error-validation.xml
=====================================
@@ -107,9 +107,9 @@
</field>
<field name="latitude">
- <!-- latitude is mandatory except if !coordinateRequired -->
+ <!-- latitude is mandatory except if !coordinateRequiredForVesselActivity && (skipMandatoryCoordinate || !coordinateRequiredForFloatingObjects) -->
<field-validator type="mandatory" short-circuit="true">
- <param name="skip"><![CDATA[ !coordinateRequired ]]></param>
+ <param name="skip"><![CDATA[ !coordinateRequiredForVesselActivity && (skipMandatoryCoordinate || !coordinateRequiredForFloatingObjects) ]]></param>
<message>observe.Common.latitude.validation.required</message>
</field-validator>
@@ -139,9 +139,9 @@
</field>
<field name="longitude">
- <!-- longitude is mandatory except if !coordinateRequired -->
+ <!-- longitude is mandatory except if !coordinateRequiredForVesselActivity && (skipMandatoryCoordinate || !coordinateRequiredForFloatingObjects) -->
<field-validator type="mandatory" short-circuit="true">
- <param name="skip"><![CDATA[ !coordinateRequired ]]></param>
+ <param name="skip"><![CDATA[ !coordinateRequiredForVesselActivity && (skipMandatoryCoordinate || !coordinateRequiredForFloatingObjects) ]]></param>
<message>observe.Common.longitude.validation.required</message>
</field-validator>
@@ -231,9 +231,9 @@
</field>
<field name="quadrant">
- <!-- quadrant is mandatory except if !coordinateRequired -->
+ <!-- quadrant is mandatory except if !coordinateRequiredForVesselActivity && (skipMandatoryCoordinate || !coordinateRequiredForFloatingObjects) -->
<field-validator type="mandatory" short-circuit="true">
- <param name="skip"><![CDATA[ !coordinateRequired ]]></param>
+ <param name="skip"><![CDATA[ !coordinateRequiredForVesselActivity && (skipMandatoryCoordinate || !coordinateRequiredForFloatingObjects) ]]></param>
<message>observe.Common.quadrant.validation.required</message>
</field-validator>
=====================================
core/api/validation/src/main/resources/fr/ird/observe/dto/data/ps/logbook/ActivityDto-update-error-validation.xml
=====================================
@@ -107,9 +107,9 @@
</field>
<field name="latitude">
- <!-- latitude is mandatory except if !coordinateRequired -->
+ <!-- latitude is mandatory except if !coordinateRequiredForVesselActivity && (skipMandatoryCoordinate || !coordinateRequiredForFloatingObjects) -->
<field-validator type="mandatory" short-circuit="true">
- <param name="skip"><![CDATA[ !coordinateRequired ]]></param>
+ <param name="skip"><![CDATA[ !coordinateRequiredForVesselActivity && (skipMandatoryCoordinate || !coordinateRequiredForFloatingObjects) ]]></param>
<message>observe.Common.latitude.validation.required</message>
</field-validator>
@@ -139,9 +139,9 @@
</field>
<field name="longitude">
- <!-- longitude is mandatory except if !coordinateRequired -->
+ <!-- longitude is mandatory except if !coordinateRequiredForVesselActivity && (skipMandatoryCoordinate || !coordinateRequiredForFloatingObjects) -->
<field-validator type="mandatory" short-circuit="true">
- <param name="skip"><![CDATA[ !coordinateRequired ]]></param>
+ <param name="skip"><![CDATA[ !coordinateRequiredForVesselActivity && (skipMandatoryCoordinate || !coordinateRequiredForFloatingObjects) ]]></param>
<message>observe.Common.longitude.validation.required</message>
</field-validator>
@@ -231,9 +231,9 @@
</field>
<field name="quadrant">
- <!-- quadrant is mandatory except if !coordinateRequired -->
+ <!-- quadrant is mandatory except if !coordinateRequiredForVesselActivity && (skipMandatoryCoordinate || !coordinateRequiredForFloatingObjects) -->
<field-validator type="mandatory" short-circuit="true">
- <param name="skip"><![CDATA[ !coordinateRequired ]]></param>
+ <param name="skip"><![CDATA[ !coordinateRequiredForVesselActivity && (skipMandatoryCoordinate || !coordinateRequiredForFloatingObjects) ]]></param>
<message>observe.Common.quadrant.validation.required</message>
</field-validator>
=====================================
core/persistence/java/src/main/java/fr/ird/observe/entities/data/ps/logbook/ActivityImpl.java
=====================================
@@ -55,16 +55,7 @@ public class ActivityImpl extends ActivityAbstract {
* @return {@code true} if coordinate are required, {@code false} otherwise.
*/
@Override
- public boolean isCoordinateRequired() {
- if (getVesselActivity() == null) {
- return true;
- }
- if (getVesselActivity().isAllowSet()) {
- return true;
- }
- if (!getVesselActivity().isAllowFad()) {
- return true;
- }
+ public boolean isCoordinateRequiredForFloatingObjects() {
if (getFloatingObject() == null) {
return true;
}
=====================================
core/persistence/java/src/main/java/fr/ird/observe/entities/data/ps/logbook/ActivitySpi.java
=====================================
@@ -114,7 +114,7 @@ public class ActivitySpi extends GeneratedActivitySpi {
public void loadDtoForValidation(ServiceContext context, Route parent, Activity entity, ActivityDto dto) {
addRouteDate(parent, dto);
// See https://gitlab.com/ultreiaio/ird-observe/-/issues/2663
- dto.setCoordinateRequired(entity.isCoordinateRequired());
+ dto.setCoordinateRequiredForFloatingObjects(entity.isCoordinateRequiredForFloatingObjects());
}
@Override
=====================================
core/persistence/resources/src/main/resources/fr/ird/observe/entities/data/ps/logbook/Activity/validation-create.json
=====================================
@@ -55,7 +55,7 @@
"errors": [
"check latitude format",
"is latitude required ?",
- "latitude is mandatory except if !coordinateRequired"
+ "latitude is mandatory except if !coordinateRequiredForVesselActivity && (skipMandatoryCoordinate || !coordinateRequiredForFloatingObjects)"
]
},
"latitudeOriginal": {
@@ -68,7 +68,7 @@
"errors": [
"check longitude format",
"is longitude required ?",
- "longitude is mandatory except if !coordinateRequired"
+ "longitude is mandatory except if !coordinateRequiredForVesselActivity && (skipMandatoryCoordinate || !coordinateRequiredForFloatingObjects)"
]
},
"longitudeOriginal": {
@@ -115,7 +115,7 @@
"errors": [
"check quadrant (on quadrant)",
"is quadrant required ?",
- "quadrant is mandatory except if !coordinateRequired"
+ "quadrant is mandatory except if !coordinateRequiredForVesselActivity && (skipMandatoryCoordinate || !coordinateRequiredForFloatingObjects)"
]
},
"quadrantOriginal": {
=====================================
core/persistence/resources/src/main/resources/fr/ird/observe/entities/data/ps/logbook/Activity/validation-update.json
=====================================
@@ -60,7 +60,7 @@
"errors": [
"check latitude format",
"is latitude required ?",
- "latitude is mandatory except if !coordinateRequired"
+ "latitude is mandatory except if !coordinateRequiredForVesselActivity && (skipMandatoryCoordinate || !coordinateRequiredForFloatingObjects)"
]
},
"latitudeOriginal": {
@@ -73,7 +73,7 @@
"errors": [
"check longitude format",
"is longitude required ?",
- "longitude is mandatory except if !coordinateRequired"
+ "longitude is mandatory except if !coordinateRequiredForVesselActivity && (skipMandatoryCoordinate || !coordinateRequiredForFloatingObjects)"
]
},
"longitudeOriginal": {
@@ -120,7 +120,7 @@
"errors": [
"check quadrant (on quadrant)",
"is quadrant required ?",
- "quadrant is mandatory except if !coordinateRequired"
+ "quadrant is mandatory except if !coordinateRequiredForVesselActivity && (skipMandatoryCoordinate || !coordinateRequiredForFloatingObjects)"
]
},
"quadrantOriginal": {
=====================================
core/services/i18n/src/main/i18n/translations/services_en_GB.properties
=====================================
@@ -1118,6 +1118,7 @@ observe.data.ps.logbook.Activity.setMeasurements=Set measurements
observe.data.ps.logbook.Activity.setStat=Count of fishing operation
observe.data.ps.logbook.Activity.setSuccessStatus=Success
observe.data.ps.logbook.Activity.setSuccessStatus.validation.required=Mandatory if successful set operation
+observe.data.ps.logbook.Activity.skipMandatoryCoordinate=A 'End of signal' or 'End of use' buoy operation is to be created on this activity
observe.data.ps.logbook.Activity.time=Observation time
observe.data.ps.logbook.Activity.time.validation.required=Mandatory if activities acquisition mode is timestamping
observe.data.ps.logbook.Activity.title=Activity
=====================================
core/services/i18n/src/main/i18n/translations/services_es_ES.properties
=====================================
@@ -1118,6 +1118,7 @@ observe.data.ps.logbook.Activity.setMeasurements=Fishing operation measurements
observe.data.ps.logbook.Activity.setStat=Count of fishing operation
observe.data.ps.logbook.Activity.setSuccessStatus=Success \#TODO
observe.data.ps.logbook.Activity.setSuccessStatus.validation.required=Mandatory if successful set operation \#TODO
+observe.data.ps.logbook.Activity.skipMandatoryCoordinate=En esta actividad se debe crear una operación de boya de 'Fin de señal' o 'Fin de uso'
observe.data.ps.logbook.Activity.time=Hora de la observación
observe.data.ps.logbook.Activity.time.validation.required=Mandatory if activities acquisition mode is timestamping \#TODO
observe.data.ps.logbook.Activity.title=Actividad
=====================================
core/services/i18n/src/main/i18n/translations/services_fr_FR.properties
=====================================
@@ -1118,6 +1118,7 @@ observe.data.ps.logbook.Activity.setMeasurements=Paramètres de calée
observe.data.ps.logbook.Activity.setStat=Nombre de calées
observe.data.ps.logbook.Activity.setSuccessStatus=Succès
observe.data.ps.logbook.Activity.setSuccessStatus.validation.required=Obligatoire si opération de pêche réussie
+observe.data.ps.logbook.Activity.skipMandatoryCoordinate=Une opération balise 'Perte de signal' ou 'Fin d'utilisation' sera créée sur cette activité
observe.data.ps.logbook.Activity.time=Heure d'observation
observe.data.ps.logbook.Activity.time.validation.required=Obligatoire si le mode d'acquisition des activités est horodaté
observe.data.ps.logbook.Activity.title=Activité
=====================================
model/src/main/models/Observe/dto/21-data-ps-logbook.model
=====================================
@@ -35,7 +35,8 @@ setSuccessStatus {*:0..1} referential.ps.logbook.SetSuccessStatusReference
reasonForNullSet {*:0..1} referential.ps.common.ReasonForNullSetReference
observedSystem {*:*} referential.ps.common.ObservedSystemReference
maxNumberAuthorized Integer
-coordinateRequired boolean
+coordinateRequiredForFloatingObjects boolean
+skipMandatoryCoordinate boolean
data.ps.logbook.ActivityCatch > data.Container
catches {*} data.ps.logbook.Catch
=====================================
model/src/main/models/Observe/dto/attribute/notNullIf.properties
=====================================
@@ -42,9 +42,9 @@ data.ps.common.Trip.attribute.observationsProgram=!observationsEnabled
data.ps.common.Trip.attribute.observer=!observationsEnabled
data.ps.localmarket.Batch.attribute.count=countOrWeightValid
data.ps.localmarket.Batch.attribute.weight=countOrWeightValid
-data.ps.logbook.Activity.attribute.latitude=!coordinateRequired
-data.ps.logbook.Activity.attribute.longitude=!coordinateRequired
-data.ps.logbook.Activity.attribute.quadrant=!coordinateRequired
+data.ps.logbook.Activity.attribute.latitude=!coordinateRequiredForVesselActivity && (skipMandatoryCoordinate || !coordinateRequiredForFloatingObjects)
+data.ps.logbook.Activity.attribute.longitude=!coordinateRequiredForVesselActivity && (skipMandatoryCoordinate || !coordinateRequiredForFloatingObjects)
+data.ps.logbook.Activity.attribute.quadrant=!coordinateRequiredForVesselActivity && (skipMandatoryCoordinate || !coordinateRequiredForFloatingObjects)
data.ps.logbook.Activity.attribute.schoolType=!setEnabled || reasonForNoFishing != null
data.ps.logbook.Activity.attribute.setCount=!setEnabled
data.ps.logbook.Activity.attribute.setSuccessStatus=!setEnabled || reasonForNoFishing != null
=====================================
model/src/main/models/Observe/dto/class/i18nLabels.properties
=====================================
@@ -69,7 +69,7 @@ data.ps.localmarket.SampleSpeciesMeasure=count,sizeClass
data.ps.localmarket.Survey=number,batches.available,comment,date,surveyPart,generalTab,surveyPartTab,batches.available,batches.selected
data.ps.localmarket.SurveyPart=species
data.ps.localmarket.WellId=well
-data.ps.logbook.Activity=date,observedSystem.available,observedSystem.selected,comment,coordinate,coordinateOriginal,currentDirection,currentSpeed,dataQuality,floatingObjectEmpty,currentFpaZone,nextFpaZone,previousFpaZone,informationSource,latitude,latitudeOriginal,longitude,longitudeOriginal,number,observedSystem,originalDataModified,quadrant,quadrantOriginal,relatedObservedActivity,schoolType,seaSurfaceTemperature,setCount,time,totalWeight,vesselActivity,vmsDivergent,wind,windDirection,generalTab,measurementsTab,observedSystemTab,error.no.activity.6,physicalMeasurements,setMeasurements,reasonForNoFishing,setSuccessStatus,reasonForNullSet,latitude.validation.required,longitude.validation.required,quadrant.validation.required
+data.ps.logbook.Activity=date,observedSystem.available,observedSystem.selected,comment,coordinate,coordinateOriginal,currentDirection,currentSpeed,dataQuality,floatingObjectEmpty,currentFpaZone,nextFpaZone,previousFpaZone,informationSource,latitude,latitudeOriginal,longitude,longitudeOriginal,number,observedSystem,originalDataModified,quadrant,quadrantOriginal,relatedObservedActivity,schoolType,seaSurfaceTemperature,setCount,time,totalWeight,vesselActivity,vmsDivergent,wind,windDirection,generalTab,measurementsTab,observedSystemTab,error.no.activity.6,physicalMeasurements,setMeasurements,reasonForNoFishing,setSuccessStatus,reasonForNullSet,latitude.validation.required,longitude.validation.required,quadrant.validation.required,skipMandatoryCoordinate
data.ps.logbook.ActivityStub=date,comment,latitude,longitude,number,quadrant,seaSurfaceTemperature,time,vesselActivity
data.ps.logbook.Catch=comment,species,speciesFate,weight,weightCategory,weightMeasureMethod,well,weight.validation.required,weightMeasureMethod.validation.required
data.ps.logbook.FloatingObject=materialsValid,objectOperation,quadrant,supportVesselName,country,vessel,computedBiodegradable,computedNonEntangling,computedSimplifiedObjectType,computedValues,generalTab,buoysTab,materialsTab,notComputed,type.short,computedWhenArrivingBiodegradable,computedWhenLeavingBiodegradable,computedWhenArrivingNonEntangling,computedWhenLeavingNonEntangling,computedWhenArrivingSimplifiedObjectType,computedWhenLeavingSimplifiedObjectType
=====================================
model/src/main/models/Observe/persistence/21-data-ps-logbook.model
=====================================
@@ -33,7 +33,7 @@ reasonForNoFishing {*:0..1} referential.ps.common.ReasonForNoFishing
setSuccessStatus {*:0..1} referential.ps.logbook.SetSuccessStatus
reasonForNullSet {*:0..1} referential.ps.common.ReasonForNullSet
getDate() Date
-isCoordinateRequired() boolean
+isCoordinateRequiredForFloatingObjects() boolean
data.ps.logbook.Catch > data.DataEntity >> fr.ird.observe.dto.data.WellIdAware
comment String
View it on GitLab: https://gitlab.com/ultreiaio/ird-observe/-/compare/ee974f7a5a03cce6b4104095…
--
View it on GitLab: https://gitlab.com/ultreiaio/ird-observe/-/compare/ee974f7a5a03cce6b4104095…
You're receiving this email because of your account on gitlab.com.
1
0
[Git][ultreiaio/ird-observe][develop-9.4.x] 2 commits: use new Mojo check-services-types - See ultreiaio/http#61
by Tony CHEMIT (@tchemit) 25 Jan '24
by Tony CHEMIT (@tchemit) 25 Jan '24
25 Jan '24
Tony CHEMIT pushed to branch develop-9.4.x at ultreiaio / ird-observe
Commits:
802d4777 by Tony Chemit at 2024-01-25T08:11:12+01:00
use new Mojo check-services-types - See ultreiaio/http#61
- - - - -
0e75fecd by Tony Chemit at 2024-01-25T08:12:19+01:00
Remove DataSourceService.backup method
- - - - -
19 changed files:
- client/core/pom.xml
- client/core/src/main/java/fr/ird/observe/client/datasource/api/ObserveSwingDataSource.java
- client/core/src/main/java/fr/ird/observe/client/datasource/h2/backup/LocalDatabaseBackupTaskSupport.java
- client/datasource/editor/api/src/main/java/fr/ird/observe/client/datasource/editor/api/wizard/StorageBackupUILauncher.java
- core/api/services/pom.xml
- core/services/local/src/main/java/fr/ird/observe/services/local/service/DataSourceServiceLocalSupport.java
- core/services/local/src/test/java/fr/ird/observe/services/local/service/DataSourceServiceLocalReadTest.java
- core/services/test/pom.xml
- core/services/test/src/main/java/fr/ird/observe/services/service/DataSourceServiceFixtures.java
- pom.xml
- server/core/src/main/filtered-resources/META-INF/mapping-api-client.wm
- server/core/src/main/java/fr/ird/observe/server/controller/DataSourceServiceRestApi.java
- toolkit/api-services/pom.xml
- toolkit/api-services/src/main/java/fr/ird/observe/services/service/DataSourceService.java
- toolkit/api/src/main/java/fr/ird/observe/navigation/tree/io/ToolkitTreeNodeStates.java
- toolkit/persistence/src/main/java/org/nuiton/topia/persistence/TopiaApplicationContext.java
- toolkit/persistence/src/main/java/org/nuiton/topia/persistence/internal/AbstractTopiaApplicationContext.java
- toolkit/persistence/src/main/java/org/nuiton/topia/persistence/jdbc/JdbcHelperH2.java
- toolkit/plugin/src/main/java/fr/ird/observe/toolkit/maven/plugin/tck/MigrateTckDatabases.java
Changes:
=====================================
client/core/pom.xml
=====================================
@@ -79,6 +79,11 @@
<artifactId>toolkit-api-services</artifactId>
<version>${project.version}</version>
</dependency>
+ <dependency>
+ <groupId>${project.groupId}</groupId>
+ <artifactId>toolkit-persistence</artifactId>
+ <version>${project.version}</version>
+ </dependency>
<dependency>
<groupId>com.google.code.gson</groupId>
<artifactId>gson</artifactId>
=====================================
client/core/src/main/java/fr/ird/observe/client/datasource/api/ObserveSwingDataSource.java
=====================================
@@ -57,6 +57,7 @@ import fr.ird.observe.dto.data.ps.dcp.FloatingObjectPresetsStorage;
import fr.ird.observe.dto.reference.ReferentialDtoReference;
import fr.ird.observe.dto.reference.ReferentialDtoReferenceSet;
import fr.ird.observe.dto.referential.ReferentialDto;
+import fr.ird.observe.entities.ObserveTopiaConfigurationFactory;
import fr.ird.observe.navigation.id.IdAggregateModel;
import fr.ird.observe.navigation.id.IdModel;
import fr.ird.observe.navigation.id.IdNode;
@@ -80,6 +81,8 @@ import io.ultreia.java4all.util.Version;
import io.ultreia.java4all.util.sql.SqlScript;
import org.apache.logging.log4j.LogManager;
import org.apache.logging.log4j.Logger;
+import org.nuiton.topia.persistence.TopiaConfiguration;
+import org.nuiton.topia.persistence.jdbc.JdbcHelperH2;
import javax.swing.BoundedRangeModel;
import javax.swing.Icon;
@@ -715,4 +718,13 @@ public class ObserveSwingDataSource extends AbstractJavaBean implements ObserveS
}
return String.format("%s (%s)", getLabel(), txt);
}
+
+ public void backup(File file) {
+ if (!isLocal()) {
+ throw new IllegalStateException("Cant backup a none H2 database.");
+ }
+ TopiaConfiguration configuration = ObserveTopiaConfigurationFactory.create(getConfiguration());
+ JdbcHelperH2 jdbcHelperH2 = new JdbcHelperH2(configuration);
+ jdbcHelperH2.backup(file, true);
+ }
}
=====================================
client/core/src/main/java/fr/ird/observe/client/datasource/h2/backup/LocalDatabaseBackupTaskSupport.java
=====================================
@@ -81,7 +81,7 @@ public abstract class LocalDatabaseBackupTaskSupport implements Runnable {
ClientUIContextApplicationComponent.value().getBusyModel().addTask(startMessage + " - " + file);
ObserveSwingDataSource mainDataSource = dataSourcesManager.getMainDataSource();
try {
- mainDataSource.getDataSourceService().backup(file);
+ mainDataSource.backup(file);
} finally {
String endMessage = t("observe.ui.datasource.backup.done", new Date(), Strings.convertTime(System.nanoTime() - t0));
ClientUIContextApplicationComponent.value().setUiStatus(endMessage);
=====================================
client/datasource/editor/api/src/main/java/fr/ird/observe/client/datasource/editor/api/wizard/StorageBackupUILauncher.java
=====================================
@@ -127,7 +127,7 @@ public class StorageBackupUILauncher extends StorageUILauncher {
progressModel.setMaximum(1);
try {
log.info(String.format("Exporting to %s", backupFile));
- incomingSource.getDataSourceService().backup(backupFile);
+ incomingSource.backup(backupFile);
progressModel.increments();
} catch (Exception e) {
throw new ObserveSwingTechnicalException(e);
@@ -155,7 +155,7 @@ public class StorageBackupUILauncher extends StorageUILauncher {
// finally backup temporary storage
log.info(String.format("Exporting to %s", backupFile));
- targetSource.getDataSourceService().backup(backupFile);
+ targetSource.backup(backupFile);
progressModel.increments();
} catch (DatabaseNotFoundException | DatabaseConnexionNotAuthorizedException | BabModelVersionException |
IncompatibleDataSourceCreateConfigurationException |
=====================================
core/api/services/pom.xml
=====================================
@@ -161,5 +161,64 @@
</plugin>
</plugins>
</pluginManagement>
+ <plugins>
+ <plugin>
+ <groupId>io.ultreia.java4all.http</groupId>
+ <artifactId>http-maven-plugin</artifactId>
+ <dependencies>
+ <dependency>
+ <groupId>${project.groupId}</groupId>
+ <artifactId>core-api-dto</artifactId>
+ <version>${project.version}</version>
+ </dependency>
+ <dependency>
+ <groupId>${project.groupId}</groupId>
+ <artifactId>core-api-dto-consolidation</artifactId>
+ <version>${project.version}</version>
+ </dependency>
+ <dependency>
+ <groupId>${project.groupId}</groupId>
+ <artifactId>core-api-dto-validation</artifactId>
+ <version>${project.version}</version>
+ </dependency>
+ <dependency>
+ <groupId>${project.groupId}</groupId>
+ <artifactId>toolkit-api</artifactId>
+ <version>${project.version}</version>
+ </dependency>
+ <dependency>
+ <groupId>${project.groupId}</groupId>
+ <artifactId>toolkit-api-services</artifactId>
+ <version>${project.version}</version>
+ </dependency>
+ <dependency>
+ <groupId>${project.groupId}</groupId>
+ <artifactId>toolkit-api-validation</artifactId>
+ <version>${project.version}</version>
+ </dependency>
+ </dependencies>
+ <executions>
+ <execution>
+ <goals>
+ <goal>check-services-types</goal>
+ </goals>
+ <configuration>
+ <acceptedTypes>
+ <acceptedType>io.ultreia.java4all.util.Version</acceptedType>
+ <acceptedType>java.lang.Class</acceptedType>
+ <acceptedType>java.lang.String</acceptedType>
+ <acceptedType>java.util.List</acceptedType>
+ <acceptedType>java.util.Set</acceptedType>
+ <acceptedType>java.util.Map</acceptedType>
+ <acceptedType>java.util.Date</acceptedType>
+ </acceptedTypes>
+ <acceptedAssignableTypes>
+ <acceptedAssignableType>io.ultreia.java4all.util.json.JsonAware</acceptedAssignableType>
+ </acceptedAssignableTypes>
+ </configuration>
+ </execution>
+ </executions>
+ </plugin>
+ </plugins>
</build>
</project>
=====================================
core/services/local/src/main/java/fr/ird/observe/services/local/service/DataSourceServiceLocalSupport.java
=====================================
@@ -37,7 +37,6 @@ import io.ultreia.java4all.util.sql.SqlScript;
import org.apache.logging.log4j.LogManager;
import org.apache.logging.log4j.Logger;
-import java.io.File;
import java.util.Date;
import java.util.LinkedHashSet;
import java.util.Objects;
@@ -62,11 +61,6 @@ public class DataSourceServiceLocalSupport extends ObserveServiceLocal implement
});
}
- @Override
- public void backup(File backupFile) {
- getTopiaApplicationContext().backup(backupFile, true);
- }
-
@Override
public <D extends BusinessDto> boolean isIdValid(Class<D> type, String id) {
DtoEntityContext<D, ?, ?, ?> spi = ObservePersistenceBusinessProject.fromDto(type);
=====================================
core/services/local/src/test/java/fr/ird/observe/services/local/service/DataSourceServiceLocalReadTest.java
=====================================
@@ -36,16 +36,4 @@ public class DataSourceServiceLocalReadTest extends GeneratedDataSourceServiceLo
fixtures.setTemporaryDirectory(null);
}
}
-
- @Override
- public void backup() {
- fixtures.setTemporaryDirectory(localTestMethodResource.getTemporaryDirectoryRoot());
- fixtures.setDataSourceConnection(localTestMethodResource.getDataSourceConnection());
- try {
- super.backup();
- } finally {
- fixtures.setTemporaryDirectory(null);
- fixtures.setDataSourceConnection(null);
- }
- }
}
=====================================
core/services/test/pom.xml
=====================================
@@ -94,11 +94,6 @@
<artifactId>toolkit-api-validation</artifactId>
<version>${project.version}</version>
</dependency>
- <dependency>
- <groupId>${project.groupId}</groupId>
- <artifactId>toolkit-persistence</artifactId>
- <version>${project.version}</version>
- </dependency>
<dependency>
<groupId>com.google.code.gson</groupId>
<artifactId>gson</artifactId>
=====================================
core/services/test/src/main/java/fr/ird/observe/services/service/DataSourceServiceFixtures.java
=====================================
@@ -39,7 +39,6 @@ import io.ultreia.java4all.util.Version;
import io.ultreia.java4all.util.sql.SqlScript;
import org.junit.Assert;
-import java.io.File;
import java.nio.file.Path;
import java.util.Collections;
import java.util.Set;
@@ -57,23 +56,6 @@ public class DataSourceServiceFixtures extends GeneratedDataSourceServiceFixture
Assert.assertFalse(actual);
}
- @Override
- public void backup(ObserveServicesProvider servicesProvider, DataSourceService service) {
- if (testDirectory == null && (dataSourceConnection == null || !dataSourceConnection.isLocal())) {
- super.backup(servicesProvider, service);
- return;
- }
- File backupFile = testDirectory.resolve("backup-" + System.nanoTime() + ".sql.gz").toFile();
- Assert.assertFalse(backupFile.exists());
- service.backup(backupFile);
- Assert.assertTrue(backupFile.exists());
- Version dbVersion = servicesProvider.getAnonymousService().getModelVersion();
- ObserveDataSourceConfigurationTopiaH2 targetConfiguration = ObserveDataSourceConfigurationTopiaH2.createTemporaryConfiguration(testDirectory.toFile(), dbVersion);
- try (ObserveTopiaApplicationContext topiaApplicationContext = ObserveTopiaApplicationContextFactory.createContext(targetConfiguration)) {
- topiaApplicationContext.newJdbcHelperH2().restore(backupFile);
- }
- }
-
@Override
public void close(ObserveServicesProvider servicesProvider, DataSourceService service) {
// FIXME:Test Remove super method invocation and implements fixture
@@ -148,36 +130,36 @@ public class DataSourceServiceFixtures extends GeneratedDataSourceServiceFixture
protected void produceMoveSqlScript(DataSourceService service, boolean pg) {
String psObsRouteVariable = getVariableName(fr.ird.observe.dto.data.ps.observation.RouteDto.class);
String psObsRouteId = getVariable(psObsRouteVariable);
- String psObsRouteIdTarget = getVariable(psObsRouteVariable+".move");
+ String psObsRouteIdTarget = getVariable(psObsRouteVariable + ".move");
String psObsActivityVariable = getVariableName(fr.ird.observe.dto.data.ps.observation.ActivityDto.class);
String psObsActivityId = getVariable(psObsActivityVariable);
- String psObsActivityIdTarget = getVariable(psObsActivityVariable+".move");
+ String psObsActivityIdTarget = getVariable(psObsActivityVariable + ".move");
String psObsSetId = getVariable(getVariableName(FishingSetDto.class));
String psLogbookRouteVariable = getVariableName(fr.ird.observe.dto.data.ps.logbook.RouteDto.class);
String psLogbookRouteId = getVariable(psLogbookRouteVariable);
- String psLogbookRouteIdTarget = getVariable(psLogbookRouteVariable+".move");
+ String psLogbookRouteIdTarget = getVariable(psLogbookRouteVariable + ".move");
String psLogbookActivityId = getVariable(getVariableName(fr.ird.observe.dto.data.ps.logbook.ActivityDto.class));
String llObsActivityVariable = getVariableName(fr.ird.observe.dto.data.ll.observation.ActivityDto.class);
String llObsActivityId = getVariable(llObsActivityVariable);
- String llObsActivityIdTarget = getVariable(llObsActivityVariable+".move");
+ String llObsActivityIdTarget = getVariable(llObsActivityVariable + ".move");
String llObSetId = getVariable(getVariableName(fr.ird.observe.dto.data.ll.observation.FishingSetDto.class));
String llLogbookActivityVariable = getVariableName(fr.ird.observe.dto.data.ll.logbook.ActivityDto.class);
String llLogbookActivityId = getVariable(llLogbookActivityVariable);
- String llLogbookActivityIdTarget = getVariable(llLogbookActivityVariable+".move");
+ String llLogbookActivityIdTarget = getVariable(llLogbookActivityVariable + ".move");
String llLogbookFishingSetId = getVariable(getVariableName(fr.ird.observe.dto.data.ll.logbook.FishingSetDto.class));
String psCommTripVariable = getVariableName(fr.ird.observe.dto.data.ps.common.TripDto.class);
String psCommonTripId = getVariable(psCommTripVariable);
- String psCommonTripIdTarget = getVariable(psCommTripVariable +".move");
+ String psCommonTripIdTarget = getVariable(psCommTripVariable + ".move");
String llCommTripVariable = getVariableName(fr.ird.observe.dto.data.ll.common.TripDto.class);
String llCommonTripId = getVariable(llCommTripVariable);
- String llCommonTripIdTarget = getVariable(llCommTripVariable +".move");
+ String llCommonTripIdTarget = getVariable(llCommTripVariable + ".move");
testRequest(service, new ReplicateRequest(pg, psCommonTripId, psCommonTripIdTarget, "fr.ird.observe.entities.data.ps.observation.Route", psObsRouteId));
@@ -226,11 +208,11 @@ public class DataSourceServiceFixtures extends GeneratedDataSourceServiceFixture
this.testDirectory = testDirectory;
}
- public void setDataSourceConnection(ObserveDataSourceConnection dataSourceConnection) {
- this.dataSourceConnection = dataSourceConnection;
- }
-
public ObserveDataSourceConnection getDataSourceConnection() {
return dataSourceConnection;
}
+
+ public void setDataSourceConnection(ObserveDataSourceConnection dataSourceConnection) {
+ this.dataSourceConnection = dataSourceConnection;
+ }
}
=====================================
pom.xml
=====================================
@@ -23,7 +23,7 @@
<parent>
<groupId>io.ultreia.maven</groupId>
<artifactId>pom</artifactId>
- <version>2024.01</version>
+ <version>2024.03</version>
</parent>
<groupId>fr.ird.observe</groupId>
<artifactId>ird-observe</artifactId>
=====================================
server/core/src/main/filtered-resources/META-INF/mapping-api-client.wm
=====================================
@@ -29,7 +29,6 @@ GET /AnonymousService/getServerVersion Anon
GET /AnonymousService/getUsers AnonymousServiceRestApi.getUsers
GET /AnonymousService/migrateData AnonymousServiceRestApi.migrateData
GET /AnonymousService/open AnonymousServiceRestApi.open
-GET /DataSourceService/backup DataSourceServiceRestApi.backup
GET /DataSourceService/close DataSourceServiceRestApi.close
POST /DataSourceService/executeSqlScript DataSourceServiceRestApi.executeSqlScript
GET /DataSourceService/getLastUpdateDate DataSourceServiceRestApi.getLastUpdateDate
=====================================
server/core/src/main/java/fr/ird/observe/server/controller/DataSourceServiceRestApi.java
=====================================
@@ -28,7 +28,6 @@ import fr.ird.observe.server.security.ObserveWebUserSession;
import org.apache.logging.log4j.LogManager;
import org.apache.logging.log4j.Logger;
-import java.io.File;
import java.util.LinkedHashMap;
import java.util.Map;
@@ -57,8 +56,4 @@ public class DataSourceServiceRestApi extends GeneratedDataSourceServiceRestApi
result.put("credentials", session.getConnection().getDataSourceInformation().getCredentials());
return result;
}
-
- @Override
- public void backup(File backupFile) {
- }
}
=====================================
toolkit/api-services/pom.xml
=====================================
@@ -122,5 +122,54 @@
</plugin>
</plugins>
</pluginManagement>
+ <plugins>
+ <plugin>
+ <groupId>io.ultreia.java4all.http</groupId>
+ <artifactId>http-maven-plugin</artifactId>
+ <dependencies>
+ <dependency>
+ <groupId>${project.groupId}</groupId>
+ <artifactId>toolkit-api</artifactId>
+ <version>${project.version}</version>
+ </dependency>
+ <dependency>
+ <groupId>${project.groupId}</groupId>
+ <artifactId>toolkit-api-datasource</artifactId>
+ <version>${project.version}</version>
+ </dependency>
+ <dependency>
+ <groupId>${project.groupId}</groupId>
+ <artifactId>toolkit-api-decoration</artifactId>
+ <version>${project.version}</version>
+ </dependency>
+ <dependency>
+ <groupId>${project.groupId}</groupId>
+ <artifactId>toolkit-api-report</artifactId>
+ <version>${project.version}</version>
+ </dependency>
+ </dependencies>
+ <executions>
+ <execution>
+ <goals>
+ <goal>check-services-types</goal>
+ </goals>
+ <configuration>
+ <acceptedTypes>
+ <acceptedType>io.ultreia.java4all.util.Version</acceptedType>
+ <acceptedType>java.lang.Class</acceptedType>
+ <acceptedType>java.lang.String</acceptedType>
+ <acceptedType>java.util.List</acceptedType>
+ <acceptedType>java.util.Set</acceptedType>
+ <acceptedType>java.util.Map</acceptedType>
+ <acceptedType>java.util.Date</acceptedType>
+ </acceptedTypes>
+ <acceptedAssignableTypes>
+ <acceptedAssignableType>io.ultreia.java4all.util.json.JsonAware</acceptedAssignableType>
+ </acceptedAssignableTypes>
+ </configuration>
+ </execution>
+ </executions>
+ </plugin>
+ </plugins>
</build>
</project>
=====================================
toolkit/api-services/src/main/java/fr/ird/observe/services/service/DataSourceService.java
=====================================
@@ -34,7 +34,6 @@ import io.ultreia.java4all.http.spi.Service;
import io.ultreia.java4all.http.spi.Write;
import io.ultreia.java4all.util.sql.SqlScript;
-import java.io.File;
import java.util.Date;
import java.util.Set;
@@ -49,9 +48,6 @@ public interface DataSourceService extends ObserveService {
@Get
void close();
- @Get
- void backup(File backupFile);
-
@Get
@MethodCredential
<D extends BusinessDto> boolean isIdValid(Class<D> type, String id);
=====================================
toolkit/api/src/main/java/fr/ird/observe/navigation/tree/io/ToolkitTreeNodeStates.java
=====================================
@@ -22,6 +22,8 @@ package fr.ird.observe.navigation.tree.io;
* #L%
*/
+import io.ultreia.java4all.util.json.JsonAware;
+
import java.util.LinkedHashMap;
import java.util.Map;
import java.util.Objects;
@@ -37,7 +39,7 @@ import java.util.stream.Stream;
* @author Tony Chemit - dev(a)tchemit.fr
* @since 5.0.17
*/
-public class ToolkitTreeNodeStates {
+public class ToolkitTreeNodeStates implements JsonAware {
private final Map<String, Object> states = new LinkedHashMap<>();
=====================================
toolkit/persistence/src/main/java/org/nuiton/topia/persistence/TopiaApplicationContext.java
=====================================
@@ -40,7 +40,6 @@ import org.nuiton.topia.service.sql.TopiaSqlService;
import org.nuiton.topia.service.sql.blob.TopiaEntitySqlBlobIdsIterator;
import java.io.Closeable;
-import java.io.File;
import java.nio.file.Path;
import java.util.ArrayList;
import java.util.List;
@@ -121,8 +120,6 @@ public interface TopiaApplicationContext<K extends TopiaPersistenceContext> exte
getMigrationService().runSchemaMigration();
}
- void backup(File backupFile, boolean compress);
-
/**
* Get the list of entities (ToPIA or not) that Hibernate has to handle. By default it only contains ToPIA entities
* but you may override it to add any other Hibernate entity.
=====================================
toolkit/persistence/src/main/java/org/nuiton/topia/persistence/internal/AbstractTopiaApplicationContext.java
=====================================
@@ -53,7 +53,6 @@ import org.nuiton.topia.service.migration.TopiaMigrationService;
import org.nuiton.topia.service.sql.TopiaSqlService;
import org.nuiton.topia.service.sql.blob.TopiaEntitySqlBlobIdsIterator;
-import java.io.File;
import java.nio.file.Path;
import java.util.Arrays;
import java.util.LinkedHashSet;
@@ -248,17 +247,6 @@ public abstract class AbstractTopiaApplicationContext<K extends TopiaPersistence
return Objects.hash(authenticationToken);
}
- @Override
- public final void backup(File backupFile, boolean compress) {
- if (!getConfiguration().isH2Configuration()) {
- throw new IllegalStateException("Cant backup a none H2 database.");
- }
- try (K p = newPersistenceContext()) {
- String sqlScript = String.format("SCRIPT NOPASSWORDS NOSETTINGS BLOCKSIZE 2048 TO '%s' %s CHARSET 'UTF-8';", backupFile.getAbsolutePath(), compress ? "COMPRESSION GZIP" : "");
- p.getSqlSupport().executeSql(sqlScript);
- }
- }
-
@Override
public final void executeSqlStatements(SqlScript content) {
try {
=====================================
toolkit/persistence/src/main/java/org/nuiton/topia/persistence/jdbc/JdbcHelperH2.java
=====================================
@@ -78,7 +78,7 @@ public class JdbcHelperH2 extends JdbcHelper {
* @param compress if true then use gzip to compress file
*/
public void backup(File file, boolean compress) {
- String options = "";
+ String options = " BLOCKSIZE 2048 CHARSET 'UTF-8'";
if (compress) {
options += " COMPRESSION GZIP";
}
=====================================
toolkit/plugin/src/main/java/fr/ird/observe/toolkit/maven/plugin/tck/MigrateTckDatabases.java
=====================================
@@ -100,7 +100,7 @@ public class MigrateTckDatabases extends PersistenceRunner {
applicationContext.executeSqlStatements(SqlScript.of(backupFile));
Path checkBackupFile = getTemporaryPath().resolve("check-backup-" + backupFile.toFile().getName().replace(".sql.gz", "-check.sql"));
- applicationContext.backup(checkBackupFile.toFile(), false);
+ applicationContext.newJdbcHelperH2().backup(checkBackupFile.toFile(), false);
log.info(String.format("[%S] Check - backup to %s", tckDbName, checkBackupFile));
}
}
View it on GitLab: https://gitlab.com/ultreiaio/ird-observe/-/compare/3907e71338971494960ce842…
--
View it on GitLab: https://gitlab.com/ultreiaio/ird-observe/-/compare/3907e71338971494960ce842…
You're receiving this email because of your account on gitlab.com.
1
0
[Git][ultreiaio/ird-observe][develop] 2 commits: use new Mojo check-services-types - See ultreiaio/http#61
by Tony CHEMIT (@tchemit) 25 Jan '24
by Tony CHEMIT (@tchemit) 25 Jan '24
25 Jan '24
Tony CHEMIT pushed to branch develop at ultreiaio / ird-observe
Commits:
e231274d by Tony Chemit at 2024-01-25T08:02:39+01:00
use new Mojo check-services-types - See ultreiaio/http#61
- - - - -
ee974f7a by Tony Chemit at 2024-01-25T08:02:39+01:00
Remove DataSourceService.backup method
- - - - -
19 changed files:
- client/core/pom.xml
- client/core/src/main/java/fr/ird/observe/client/datasource/api/ObserveSwingDataSource.java
- client/core/src/main/java/fr/ird/observe/client/datasource/h2/backup/LocalDatabaseBackupTaskSupport.java
- client/datasource/editor/api/src/main/java/fr/ird/observe/client/datasource/editor/api/wizard/StorageBackupUILauncher.java
- core/api/services/pom.xml
- core/services/local/src/main/java/fr/ird/observe/services/local/service/DataSourceServiceLocalSupport.java
- core/services/local/src/test/java/fr/ird/observe/services/local/service/DataSourceServiceLocalReadTest.java
- core/services/test/pom.xml
- core/services/test/src/main/java/fr/ird/observe/services/service/DataSourceServiceFixtures.java
- pom.xml
- server/core/src/main/filtered-resources/META-INF/mapping-api-client.wm
- server/core/src/main/java/fr/ird/observe/server/controller/DataSourceServiceRestApi.java
- toolkit/api-services/pom.xml
- toolkit/api-services/src/main/java/fr/ird/observe/services/service/DataSourceService.java
- toolkit/api/src/main/java/fr/ird/observe/navigation/tree/io/ToolkitTreeNodeStates.java
- toolkit/persistence/src/main/java/org/nuiton/topia/persistence/TopiaApplicationContext.java
- toolkit/persistence/src/main/java/org/nuiton/topia/persistence/internal/AbstractTopiaApplicationContext.java
- toolkit/persistence/src/main/java/org/nuiton/topia/persistence/jdbc/JdbcHelperH2.java
- toolkit/plugin/src/main/java/fr/ird/observe/toolkit/maven/plugin/tck/MigrateTckDatabases.java
Changes:
=====================================
client/core/pom.xml
=====================================
@@ -79,6 +79,11 @@
<artifactId>toolkit-api-services</artifactId>
<version>${project.version}</version>
</dependency>
+ <dependency>
+ <groupId>${project.groupId}</groupId>
+ <artifactId>toolkit-persistence</artifactId>
+ <version>${project.version}</version>
+ </dependency>
<dependency>
<groupId>com.google.code.gson</groupId>
<artifactId>gson</artifactId>
=====================================
client/core/src/main/java/fr/ird/observe/client/datasource/api/ObserveSwingDataSource.java
=====================================
@@ -57,6 +57,7 @@ import fr.ird.observe.dto.data.ps.dcp.FloatingObjectPresetsStorage;
import fr.ird.observe.dto.reference.ReferentialDtoReference;
import fr.ird.observe.dto.reference.ReferentialDtoReferenceSet;
import fr.ird.observe.dto.referential.ReferentialDto;
+import fr.ird.observe.entities.ObserveTopiaConfigurationFactory;
import fr.ird.observe.navigation.id.IdAggregateModel;
import fr.ird.observe.navigation.id.IdModel;
import fr.ird.observe.navigation.id.IdNode;
@@ -80,6 +81,8 @@ import io.ultreia.java4all.util.Version;
import io.ultreia.java4all.util.sql.SqlScript;
import org.apache.logging.log4j.LogManager;
import org.apache.logging.log4j.Logger;
+import org.nuiton.topia.persistence.TopiaConfiguration;
+import org.nuiton.topia.persistence.jdbc.JdbcHelperH2;
import javax.swing.BoundedRangeModel;
import javax.swing.Icon;
@@ -715,4 +718,13 @@ public class ObserveSwingDataSource extends AbstractJavaBean implements ObserveS
}
return String.format("%s (%s)", getLabel(), txt);
}
+
+ public void backup(File file) {
+ if (!isLocal()) {
+ throw new IllegalStateException("Cant backup a none H2 database.");
+ }
+ TopiaConfiguration configuration = ObserveTopiaConfigurationFactory.create(getConfiguration());
+ JdbcHelperH2 jdbcHelperH2 = new JdbcHelperH2(configuration);
+ jdbcHelperH2.backup(file, true);
+ }
}
=====================================
client/core/src/main/java/fr/ird/observe/client/datasource/h2/backup/LocalDatabaseBackupTaskSupport.java
=====================================
@@ -81,7 +81,7 @@ public abstract class LocalDatabaseBackupTaskSupport implements Runnable {
ClientUIContextApplicationComponent.value().getBusyModel().addTask(startMessage + " - " + file);
ObserveSwingDataSource mainDataSource = dataSourcesManager.getMainDataSource();
try {
- mainDataSource.getDataSourceService().backup(file);
+ mainDataSource.backup(file);
} finally {
String endMessage = t("observe.ui.datasource.backup.done", new Date(), Strings.convertTime(System.nanoTime() - t0));
ClientUIContextApplicationComponent.value().setUiStatus(endMessage);
=====================================
client/datasource/editor/api/src/main/java/fr/ird/observe/client/datasource/editor/api/wizard/StorageBackupUILauncher.java
=====================================
@@ -127,7 +127,7 @@ public class StorageBackupUILauncher extends StorageUILauncher {
progressModel.setMaximum(1);
try {
log.info(String.format("Exporting to %s", backupFile));
- incomingSource.getDataSourceService().backup(backupFile);
+ incomingSource.backup(backupFile);
progressModel.increments();
} catch (Exception e) {
throw new ObserveSwingTechnicalException(e);
@@ -155,7 +155,7 @@ public class StorageBackupUILauncher extends StorageUILauncher {
// finally backup temporary storage
log.info(String.format("Exporting to %s", backupFile));
- targetSource.getDataSourceService().backup(backupFile);
+ targetSource.backup(backupFile);
progressModel.increments();
} catch (DatabaseNotFoundException | DatabaseConnexionNotAuthorizedException | BabModelVersionException |
IncompatibleDataSourceCreateConfigurationException |
=====================================
core/api/services/pom.xml
=====================================
@@ -161,5 +161,64 @@
</plugin>
</plugins>
</pluginManagement>
+ <plugins>
+ <plugin>
+ <groupId>io.ultreia.java4all.http</groupId>
+ <artifactId>http-maven-plugin</artifactId>
+ <dependencies>
+ <dependency>
+ <groupId>${project.groupId}</groupId>
+ <artifactId>core-api-dto</artifactId>
+ <version>${project.version}</version>
+ </dependency>
+ <dependency>
+ <groupId>${project.groupId}</groupId>
+ <artifactId>core-api-dto-consolidation</artifactId>
+ <version>${project.version}</version>
+ </dependency>
+ <dependency>
+ <groupId>${project.groupId}</groupId>
+ <artifactId>core-api-dto-validation</artifactId>
+ <version>${project.version}</version>
+ </dependency>
+ <dependency>
+ <groupId>${project.groupId}</groupId>
+ <artifactId>toolkit-api</artifactId>
+ <version>${project.version}</version>
+ </dependency>
+ <dependency>
+ <groupId>${project.groupId}</groupId>
+ <artifactId>toolkit-api-services</artifactId>
+ <version>${project.version}</version>
+ </dependency>
+ <dependency>
+ <groupId>${project.groupId}</groupId>
+ <artifactId>toolkit-api-validation</artifactId>
+ <version>${project.version}</version>
+ </dependency>
+ </dependencies>
+ <executions>
+ <execution>
+ <goals>
+ <goal>check-services-types</goal>
+ </goals>
+ <configuration>
+ <acceptedTypes>
+ <acceptedType>io.ultreia.java4all.util.Version</acceptedType>
+ <acceptedType>java.lang.Class</acceptedType>
+ <acceptedType>java.lang.String</acceptedType>
+ <acceptedType>java.util.List</acceptedType>
+ <acceptedType>java.util.Set</acceptedType>
+ <acceptedType>java.util.Map</acceptedType>
+ <acceptedType>java.util.Date</acceptedType>
+ </acceptedTypes>
+ <acceptedAssignableTypes>
+ <acceptedAssignableType>io.ultreia.java4all.util.json.JsonAware</acceptedAssignableType>
+ </acceptedAssignableTypes>
+ </configuration>
+ </execution>
+ </executions>
+ </plugin>
+ </plugins>
</build>
</project>
=====================================
core/services/local/src/main/java/fr/ird/observe/services/local/service/DataSourceServiceLocalSupport.java
=====================================
@@ -37,7 +37,6 @@ import io.ultreia.java4all.util.sql.SqlScript;
import org.apache.logging.log4j.LogManager;
import org.apache.logging.log4j.Logger;
-import java.io.File;
import java.util.Date;
import java.util.LinkedHashSet;
import java.util.Objects;
@@ -62,11 +61,6 @@ public class DataSourceServiceLocalSupport extends ObserveServiceLocal implement
});
}
- @Override
- public void backup(File backupFile) {
- getTopiaApplicationContext().backup(backupFile, true);
- }
-
@Override
public <D extends BusinessDto> boolean isIdValid(Class<D> type, String id) {
DtoEntityContext<D, ?, ?, ?> spi = ObservePersistenceBusinessProject.fromDto(type);
=====================================
core/services/local/src/test/java/fr/ird/observe/services/local/service/DataSourceServiceLocalReadTest.java
=====================================
@@ -36,16 +36,4 @@ public class DataSourceServiceLocalReadTest extends GeneratedDataSourceServiceLo
fixtures.setTemporaryDirectory(null);
}
}
-
- @Override
- public void backup() {
- fixtures.setTemporaryDirectory(localTestMethodResource.getTemporaryDirectoryRoot());
- fixtures.setDataSourceConnection(localTestMethodResource.getDataSourceConnection());
- try {
- super.backup();
- } finally {
- fixtures.setTemporaryDirectory(null);
- fixtures.setDataSourceConnection(null);
- }
- }
}
=====================================
core/services/test/pom.xml
=====================================
@@ -94,11 +94,6 @@
<artifactId>toolkit-api-validation</artifactId>
<version>${project.version}</version>
</dependency>
- <dependency>
- <groupId>${project.groupId}</groupId>
- <artifactId>toolkit-persistence</artifactId>
- <version>${project.version}</version>
- </dependency>
<dependency>
<groupId>com.google.code.gson</groupId>
<artifactId>gson</artifactId>
=====================================
core/services/test/src/main/java/fr/ird/observe/services/service/DataSourceServiceFixtures.java
=====================================
@@ -38,7 +38,6 @@ import io.ultreia.java4all.util.Version;
import io.ultreia.java4all.util.sql.SqlScript;
import org.junit.Assert;
-import java.io.File;
import java.nio.file.Path;
import java.util.Collections;
import java.util.Set;
@@ -56,23 +55,6 @@ public class DataSourceServiceFixtures extends GeneratedDataSourceServiceFixture
Assert.assertFalse(actual);
}
- @Override
- public void backup(ObserveServicesProvider servicesProvider, DataSourceService service) {
- if (testDirectory == null && (dataSourceConnection == null || !dataSourceConnection.isLocal())) {
- super.backup(servicesProvider, service);
- return;
- }
- File backupFile = testDirectory.resolve("backup-" + System.nanoTime() + ".sql.gz").toFile();
- Assert.assertFalse(backupFile.exists());
- service.backup(backupFile);
- Assert.assertTrue(backupFile.exists());
- Version dbVersion = servicesProvider.getAnonymousService().getModelVersion();
- ObserveDataSourceConfigurationTopiaH2 targetConfiguration = ObserveDataSourceConfigurationTopiaH2.createTemporaryConfiguration(testDirectory.toFile(), dbVersion);
- try (ObserveTopiaApplicationContext topiaApplicationContext = ObserveTopiaApplicationContextFactory.createContext(targetConfiguration)) {
- topiaApplicationContext.newJdbcHelperH2().restore(backupFile);
- }
- }
-
@Override
public void close(ObserveServicesProvider servicesProvider, DataSourceService service) {
// FIXME:Test Remove super method invocation and implements fixture
@@ -147,36 +129,36 @@ public class DataSourceServiceFixtures extends GeneratedDataSourceServiceFixture
protected void produceMoveSqlScript(DataSourceService service, boolean pg) {
String psObsRouteVariable = getVariableName(fr.ird.observe.dto.data.ps.observation.RouteDto.class);
String psObsRouteId = getVariable(psObsRouteVariable);
- String psObsRouteIdTarget = getVariable(psObsRouteVariable+".move");
+ String psObsRouteIdTarget = getVariable(psObsRouteVariable + ".move");
String psObsActivityVariable = getVariableName(fr.ird.observe.dto.data.ps.observation.ActivityDto.class);
String psObsActivityId = getVariable(psObsActivityVariable);
- String psObsActivityIdTarget = getVariable(psObsActivityVariable+".move");
+ String psObsActivityIdTarget = getVariable(psObsActivityVariable + ".move");
String psObsSetId = getVariable(getVariableName(fr.ird.observe.dto.data.ps.observation.SetDto.class));
String psLogbookRouteVariable = getVariableName(fr.ird.observe.dto.data.ps.logbook.RouteDto.class);
String psLogbookRouteId = getVariable(psLogbookRouteVariable);
- String psLogbookRouteIdTarget = getVariable(psLogbookRouteVariable+".move");
+ String psLogbookRouteIdTarget = getVariable(psLogbookRouteVariable + ".move");
String psLogbookActivityId = getVariable(getVariableName(fr.ird.observe.dto.data.ps.logbook.ActivityDto.class));
String llObsActivityVariable = getVariableName(fr.ird.observe.dto.data.ll.observation.ActivityDto.class);
String llObsActivityId = getVariable(llObsActivityVariable);
- String llObsActivityIdTarget = getVariable(llObsActivityVariable+".move");
+ String llObsActivityIdTarget = getVariable(llObsActivityVariable + ".move");
String llObSetId = getVariable(getVariableName(fr.ird.observe.dto.data.ll.observation.SetDto.class));
String llLogbookActivityVariable = getVariableName(fr.ird.observe.dto.data.ll.logbook.ActivityDto.class);
String llLogbookActivityId = getVariable(llLogbookActivityVariable);
- String llLogbookActivityIdTarget = getVariable(llLogbookActivityVariable+".move");
+ String llLogbookActivityIdTarget = getVariable(llLogbookActivityVariable + ".move");
String llLogbookSetId = getVariable(getVariableName(fr.ird.observe.dto.data.ll.logbook.SetDto.class));
String psCommTripVariable = getVariableName(fr.ird.observe.dto.data.ps.common.TripDto.class);
String psCommonTripId = getVariable(psCommTripVariable);
- String psCommonTripIdTarget = getVariable(psCommTripVariable +".move");
+ String psCommonTripIdTarget = getVariable(psCommTripVariable + ".move");
String llCommTripVariable = getVariableName(fr.ird.observe.dto.data.ll.common.TripDto.class);
String llCommonTripId = getVariable(llCommTripVariable);
- String llCommonTripIdTarget = getVariable(llCommTripVariable +".move");
+ String llCommonTripIdTarget = getVariable(llCommTripVariable + ".move");
testRequest(service, new ReplicateRequest(pg, psCommonTripId, psCommonTripIdTarget, "fr.ird.observe.entities.data.ps.observation.Route", psObsRouteId));
@@ -225,11 +207,11 @@ public class DataSourceServiceFixtures extends GeneratedDataSourceServiceFixture
this.testDirectory = testDirectory;
}
- public void setDataSourceConnection(ObserveDataSourceConnection dataSourceConnection) {
- this.dataSourceConnection = dataSourceConnection;
- }
-
public ObserveDataSourceConnection getDataSourceConnection() {
return dataSourceConnection;
}
+
+ public void setDataSourceConnection(ObserveDataSourceConnection dataSourceConnection) {
+ this.dataSourceConnection = dataSourceConnection;
+ }
}
=====================================
pom.xml
=====================================
@@ -23,7 +23,7 @@
<parent>
<groupId>io.ultreia.maven</groupId>
<artifactId>pom</artifactId>
- <version>2024.01</version>
+ <version>2024.03</version>
</parent>
<groupId>fr.ird.observe</groupId>
<artifactId>ird-observe</artifactId>
=====================================
server/core/src/main/filtered-resources/META-INF/mapping-api-client.wm
=====================================
@@ -29,7 +29,6 @@ GET /AnonymousService/getServerVersion Anon
GET /AnonymousService/getUsers AnonymousServiceRestApi.getUsers
GET /AnonymousService/migrateData AnonymousServiceRestApi.migrateData
GET /AnonymousService/open AnonymousServiceRestApi.open
-GET /DataSourceService/backup DataSourceServiceRestApi.backup
GET /DataSourceService/close DataSourceServiceRestApi.close
POST /DataSourceService/executeSqlScript DataSourceServiceRestApi.executeSqlScript
GET /DataSourceService/getLastUpdateDate DataSourceServiceRestApi.getLastUpdateDate
=====================================
server/core/src/main/java/fr/ird/observe/server/controller/DataSourceServiceRestApi.java
=====================================
@@ -28,7 +28,6 @@ import fr.ird.observe.server.security.ObserveWebUserSession;
import org.apache.logging.log4j.LogManager;
import org.apache.logging.log4j.Logger;
-import java.io.File;
import java.util.LinkedHashMap;
import java.util.Map;
@@ -57,8 +56,4 @@ public class DataSourceServiceRestApi extends GeneratedDataSourceServiceRestApi
result.put("credentials", session.getConnection().getDataSourceInformation().getCredentials());
return result;
}
-
- @Override
- public void backup(File backupFile) {
- }
}
=====================================
toolkit/api-services/pom.xml
=====================================
@@ -122,5 +122,54 @@
</plugin>
</plugins>
</pluginManagement>
+ <plugins>
+ <plugin>
+ <groupId>io.ultreia.java4all.http</groupId>
+ <artifactId>http-maven-plugin</artifactId>
+ <dependencies>
+ <dependency>
+ <groupId>${project.groupId}</groupId>
+ <artifactId>toolkit-api</artifactId>
+ <version>${project.version}</version>
+ </dependency>
+ <dependency>
+ <groupId>${project.groupId}</groupId>
+ <artifactId>toolkit-api-datasource</artifactId>
+ <version>${project.version}</version>
+ </dependency>
+ <dependency>
+ <groupId>${project.groupId}</groupId>
+ <artifactId>toolkit-api-decoration</artifactId>
+ <version>${project.version}</version>
+ </dependency>
+ <dependency>
+ <groupId>${project.groupId}</groupId>
+ <artifactId>toolkit-api-report</artifactId>
+ <version>${project.version}</version>
+ </dependency>
+ </dependencies>
+ <executions>
+ <execution>
+ <goals>
+ <goal>check-services-types</goal>
+ </goals>
+ <configuration>
+ <acceptedTypes>
+ <acceptedType>io.ultreia.java4all.util.Version</acceptedType>
+ <acceptedType>java.lang.Class</acceptedType>
+ <acceptedType>java.lang.String</acceptedType>
+ <acceptedType>java.util.List</acceptedType>
+ <acceptedType>java.util.Set</acceptedType>
+ <acceptedType>java.util.Map</acceptedType>
+ <acceptedType>java.util.Date</acceptedType>
+ </acceptedTypes>
+ <acceptedAssignableTypes>
+ <acceptedAssignableType>io.ultreia.java4all.util.json.JsonAware</acceptedAssignableType>
+ </acceptedAssignableTypes>
+ </configuration>
+ </execution>
+ </executions>
+ </plugin>
+ </plugins>
</build>
</project>
=====================================
toolkit/api-services/src/main/java/fr/ird/observe/services/service/DataSourceService.java
=====================================
@@ -34,7 +34,6 @@ import io.ultreia.java4all.http.spi.Service;
import io.ultreia.java4all.http.spi.Write;
import io.ultreia.java4all.util.sql.SqlScript;
-import java.io.File;
import java.util.Date;
import java.util.Set;
@@ -49,9 +48,6 @@ public interface DataSourceService extends ObserveService {
@Get
void close();
- @Get
- void backup(File backupFile);
-
@Get
@MethodCredential
<D extends BusinessDto> boolean isIdValid(Class<D> type, String id);
=====================================
toolkit/api/src/main/java/fr/ird/observe/navigation/tree/io/ToolkitTreeNodeStates.java
=====================================
@@ -22,6 +22,8 @@ package fr.ird.observe.navigation.tree.io;
* #L%
*/
+import io.ultreia.java4all.util.json.JsonAware;
+
import java.util.LinkedHashMap;
import java.util.Map;
import java.util.Objects;
@@ -37,7 +39,7 @@ import java.util.stream.Stream;
* @author Tony Chemit - dev(a)tchemit.fr
* @since 5.0.17
*/
-public class ToolkitTreeNodeStates {
+public class ToolkitTreeNodeStates implements JsonAware {
private final Map<String, Object> states = new LinkedHashMap<>();
=====================================
toolkit/persistence/src/main/java/org/nuiton/topia/persistence/TopiaApplicationContext.java
=====================================
@@ -40,7 +40,6 @@ import org.nuiton.topia.service.sql.TopiaSqlService;
import org.nuiton.topia.service.sql.blob.TopiaEntitySqlBlobIdsIterator;
import java.io.Closeable;
-import java.io.File;
import java.nio.file.Path;
import java.util.ArrayList;
import java.util.List;
@@ -121,8 +120,6 @@ public interface TopiaApplicationContext<K extends TopiaPersistenceContext> exte
getMigrationService().runSchemaMigration();
}
- void backup(File backupFile, boolean compress);
-
/**
* Get the list of entities (ToPIA or not) that Hibernate has to handle. By default it only contains ToPIA entities
* but you may override it to add any other Hibernate entity.
=====================================
toolkit/persistence/src/main/java/org/nuiton/topia/persistence/internal/AbstractTopiaApplicationContext.java
=====================================
@@ -53,7 +53,6 @@ import org.nuiton.topia.service.migration.TopiaMigrationService;
import org.nuiton.topia.service.sql.TopiaSqlService;
import org.nuiton.topia.service.sql.blob.TopiaEntitySqlBlobIdsIterator;
-import java.io.File;
import java.nio.file.Path;
import java.util.Arrays;
import java.util.LinkedHashSet;
@@ -248,17 +247,6 @@ public abstract class AbstractTopiaApplicationContext<K extends TopiaPersistence
return Objects.hash(authenticationToken);
}
- @Override
- public final void backup(File backupFile, boolean compress) {
- if (!getConfiguration().isH2Configuration()) {
- throw new IllegalStateException("Cant backup a none H2 database.");
- }
- try (K p = newPersistenceContext()) {
- String sqlScript = String.format("SCRIPT NOPASSWORDS NOSETTINGS BLOCKSIZE 2048 TO '%s' %s CHARSET 'UTF-8';", backupFile.getAbsolutePath(), compress ? "COMPRESSION GZIP" : "");
- p.getSqlSupport().executeSql(sqlScript);
- }
- }
-
@Override
public final void executeSqlStatements(SqlScript content) {
try {
=====================================
toolkit/persistence/src/main/java/org/nuiton/topia/persistence/jdbc/JdbcHelperH2.java
=====================================
@@ -78,7 +78,7 @@ public class JdbcHelperH2 extends JdbcHelper {
* @param compress if true then use gzip to compress file
*/
public void backup(File file, boolean compress) {
- String options = "";
+ String options = " BLOCKSIZE 2048 CHARSET 'UTF-8'";
if (compress) {
options += " COMPRESSION GZIP";
}
=====================================
toolkit/plugin/src/main/java/fr/ird/observe/toolkit/maven/plugin/tck/MigrateTckDatabases.java
=====================================
@@ -100,7 +100,7 @@ public class MigrateTckDatabases extends PersistenceRunner {
applicationContext.executeSqlStatements(SqlScript.of(backupFile));
Path checkBackupFile = getTemporaryPath().resolve("check-backup-" + backupFile.toFile().getName().replace(".sql.gz", "-check.sql"));
- applicationContext.backup(checkBackupFile.toFile(), false);
+ applicationContext.newJdbcHelperH2().backup(checkBackupFile.toFile(), false);
log.info(String.format("[%S] Check - backup to %s", tckDbName, checkBackupFile));
}
}
View it on GitLab: https://gitlab.com/ultreiaio/ird-observe/-/compare/b3c5cfac83a7a38fa218809a…
--
View it on GitLab: https://gitlab.com/ultreiaio/ird-observe/-/compare/b3c5cfac83a7a38fa218809a…
You're receiving this email because of your account on gitlab.com.
1
0
[Git][ultreiaio/ird-observe][develop-9.4.x] 5 commits: Remove migration (no more required) - See #2821
by Tony CHEMIT (@tchemit) 24 Jan '24
by Tony CHEMIT (@tchemit) 24 Jan '24
24 Jan '24
Tony CHEMIT pushed to branch develop-9.4.x at ultreiaio / ird-observe
Commits:
39f3aeda by Tony Chemit at 2024-01-24T15:25:30+01:00
Remove migration (no more required) - See #2821
- - - - -
ec74ecfa by Tony Chemit at 2024-01-24T15:25:30+01:00
Disable (and clear value) on country field if vessel is filled (and enable back country if vessel is not filled) - See #2821
- - - - -
38aab102 by Tony Chemit at 2024-01-24T15:25:30+01:00
[persistence-test] Improve performance by using read databases and never commit to them (wins 2.5 minutes :))
- - - - -
4094b928 by Tony Chemit at 2024-01-24T15:25:30+01:00
use new Mojo check-services-types - See ultreiaio/http#61
- - - - -
3907e713 by Tony Chemit at 2024-01-24T15:26:33+01:00
Remove DataSourceService.backup method
- - - - -
30 changed files:
- client/core/pom.xml
- client/core/src/main/java/fr/ird/observe/client/datasource/api/ObserveSwingDataSource.java
- client/core/src/main/java/fr/ird/observe/client/datasource/h2/backup/LocalDatabaseBackupTaskSupport.java
- client/datasource/editor/api/src/main/java/fr/ird/observe/client/datasource/editor/api/wizard/StorageBackupUILauncher.java
- client/datasource/editor/ps/src/main/java/fr/ird/observe/client/datasource/editor/ps/data/dcp/DcpUIAdapter.java
- client/datasource/editor/ps/src/main/java/fr/ird/observe/client/datasource/editor/ps/data/dcp/DcpUIModelStates.java
- + client/datasource/editor/ps/src/main/java/fr/ird/observe/client/datasource/editor/ps/data/dcp/TransmittingBuoyListener.java
- client/datasource/editor/ps/src/main/java/fr/ird/observe/client/datasource/editor/ps/data/logbook/FloatingObjectUI.jaxx
- client/datasource/editor/ps/src/main/java/fr/ird/observe/client/datasource/editor/ps/data/logbook/FloatingObjectUIModelStates.java
- client/datasource/editor/ps/src/main/java/fr/ird/observe/client/datasource/editor/ps/data/observation/FloatingObjectUI.jaxx
- client/datasource/editor/ps/src/main/java/fr/ird/observe/client/datasource/editor/ps/data/observation/FloatingObjectUIModelStates.java
- core/api/services/pom.xml
- core/persistence/migration/src/main/java/fr/ird/observe/spi/migration/v9/DataSourceMigrationForVersion_9_3.java
- − core/persistence/migration/src/main/resources/db/migration/v9/9.3/02_issue-2821-common.sql
- core/persistence/test/src/main/java/fr/ird/observe/persistence/test/ObservePersistenceFixtures.java
- core/persistence/test/src/test/java/fr/ird/observe/persistence/test/request/DeleteDataRequestTest.java
- core/persistence/test/src/test/java/fr/ird/observe/persistence/test/request/DeletePartialRequestTest.java
- core/persistence/test/src/test/java/fr/ird/observe/persistence/test/request/DeleteReferentialRequestTest.java
- core/persistence/test/src/test/java/fr/ird/observe/persistence/test/request/ReferentialExtraScriptsTest.java
- core/persistence/test/src/test/java/fr/ird/observe/persistence/test/request/ReplicatePartialRequestTest.java
- core/persistence/test/src/test/java/fr/ird/observe/persistence/test/request/ReplicateRequestTest.java
- core/services/local/src/main/java/fr/ird/observe/services/local/service/DataSourceServiceLocalSupport.java
- core/services/local/src/test/java/fr/ird/observe/services/local/service/DataSourceServiceLocalReadTest.java
- core/services/test/pom.xml
- core/services/test/src/main/java/fr/ird/observe/services/service/DataSourceServiceFixtures.java
- pom.xml
- server/core/src/main/filtered-resources/META-INF/mapping-api-client.wm
- server/core/src/main/java/fr/ird/observe/server/controller/DataSourceServiceRestApi.java
- toolkit/api-services/pom.xml
- toolkit/api-services/src/main/java/fr/ird/observe/services/service/DataSourceService.java
The diff was not included because it is too large.
View it on GitLab: https://gitlab.com/ultreiaio/ird-observe/-/compare/c48405fe7c36fb6eafe211c3…
--
View it on GitLab: https://gitlab.com/ultreiaio/ird-observe/-/compare/c48405fe7c36fb6eafe211c3…
You're receiving this email because of your account on gitlab.com.
1
0
[Git][ultreiaio/ird-observe][develop] 2 commits: use new Mojo check-services-types - See ultreiaio/http#61
by Tony CHEMIT (@tchemit) 24 Jan '24
by Tony CHEMIT (@tchemit) 24 Jan '24
24 Jan '24
Tony CHEMIT pushed to branch develop at ultreiaio / ird-observe
Commits:
ff2d9566 by Tony Chemit at 2024-01-24T14:14:24+01:00
use new Mojo check-services-types - See ultreiaio/http#61
- - - - -
b3c5cfac by Tony Chemit at 2024-01-24T15:17:47+01:00
Remove DataSourceService.backup method
- - - - -
19 changed files:
- client/core/pom.xml
- client/core/src/main/java/fr/ird/observe/client/datasource/api/ObserveSwingDataSource.java
- client/core/src/main/java/fr/ird/observe/client/datasource/h2/backup/LocalDatabaseBackupTaskSupport.java
- client/datasource/editor/api/src/main/java/fr/ird/observe/client/datasource/editor/api/wizard/StorageBackupUILauncher.java
- core/api/services/pom.xml
- core/services/local/src/main/java/fr/ird/observe/services/local/service/DataSourceServiceLocalSupport.java
- core/services/local/src/test/java/fr/ird/observe/services/local/service/DataSourceServiceLocalReadTest.java
- core/services/test/pom.xml
- core/services/test/src/main/java/fr/ird/observe/services/service/DataSourceServiceFixtures.java
- pom.xml
- server/core/src/main/filtered-resources/META-INF/mapping-api-client.wm
- server/core/src/main/java/fr/ird/observe/server/controller/DataSourceServiceRestApi.java
- toolkit/api-services/pom.xml
- toolkit/api-services/src/main/java/fr/ird/observe/services/service/DataSourceService.java
- toolkit/api/src/main/java/fr/ird/observe/navigation/tree/io/ToolkitTreeNodeStates.java
- toolkit/persistence/src/main/java/org/nuiton/topia/persistence/TopiaApplicationContext.java
- toolkit/persistence/src/main/java/org/nuiton/topia/persistence/internal/AbstractTopiaApplicationContext.java
- toolkit/persistence/src/main/java/org/nuiton/topia/persistence/jdbc/JdbcHelperH2.java
- toolkit/plugin/src/main/java/fr/ird/observe/toolkit/maven/plugin/tck/MigrateTckDatabases.java
Changes:
=====================================
client/core/pom.xml
=====================================
@@ -79,6 +79,11 @@
<artifactId>toolkit-api-services</artifactId>
<version>${project.version}</version>
</dependency>
+ <dependency>
+ <groupId>${project.groupId}</groupId>
+ <artifactId>toolkit-persistence</artifactId>
+ <version>${project.version}</version>
+ </dependency>
<dependency>
<groupId>com.google.code.gson</groupId>
<artifactId>gson</artifactId>
=====================================
client/core/src/main/java/fr/ird/observe/client/datasource/api/ObserveSwingDataSource.java
=====================================
@@ -57,6 +57,7 @@ import fr.ird.observe.dto.data.ps.dcp.FloatingObjectPresetsStorage;
import fr.ird.observe.dto.reference.ReferentialDtoReference;
import fr.ird.observe.dto.reference.ReferentialDtoReferenceSet;
import fr.ird.observe.dto.referential.ReferentialDto;
+import fr.ird.observe.entities.ObserveTopiaConfigurationFactory;
import fr.ird.observe.navigation.id.IdAggregateModel;
import fr.ird.observe.navigation.id.IdModel;
import fr.ird.observe.navigation.id.IdNode;
@@ -80,6 +81,8 @@ import io.ultreia.java4all.util.Version;
import io.ultreia.java4all.util.sql.SqlScript;
import org.apache.logging.log4j.LogManager;
import org.apache.logging.log4j.Logger;
+import org.nuiton.topia.persistence.TopiaConfiguration;
+import org.nuiton.topia.persistence.jdbc.JdbcHelperH2;
import javax.swing.BoundedRangeModel;
import javax.swing.Icon;
@@ -715,4 +718,13 @@ public class ObserveSwingDataSource extends AbstractJavaBean implements ObserveS
}
return String.format("%s (%s)", getLabel(), txt);
}
+
+ public void backup(File file) {
+ if (!isLocal()) {
+ throw new IllegalStateException("Cant backup a none H2 database.");
+ }
+ TopiaConfiguration configuration = ObserveTopiaConfigurationFactory.create(getConfiguration());
+ JdbcHelperH2 jdbcHelperH2 = new JdbcHelperH2(configuration);
+ jdbcHelperH2.backup(file, true);
+ }
}
=====================================
client/core/src/main/java/fr/ird/observe/client/datasource/h2/backup/LocalDatabaseBackupTaskSupport.java
=====================================
@@ -81,7 +81,7 @@ public abstract class LocalDatabaseBackupTaskSupport implements Runnable {
ClientUIContextApplicationComponent.value().getBusyModel().addTask(startMessage + " - " + file);
ObserveSwingDataSource mainDataSource = dataSourcesManager.getMainDataSource();
try {
- mainDataSource.getDataSourceService().backup(file);
+ mainDataSource.backup(file);
} finally {
String endMessage = t("observe.ui.datasource.backup.done", new Date(), Strings.convertTime(System.nanoTime() - t0));
ClientUIContextApplicationComponent.value().setUiStatus(endMessage);
=====================================
client/datasource/editor/api/src/main/java/fr/ird/observe/client/datasource/editor/api/wizard/StorageBackupUILauncher.java
=====================================
@@ -127,7 +127,7 @@ public class StorageBackupUILauncher extends StorageUILauncher {
progressModel.setMaximum(1);
try {
log.info(String.format("Exporting to %s", backupFile));
- incomingSource.getDataSourceService().backup(backupFile);
+ incomingSource.backup(backupFile);
progressModel.increments();
} catch (Exception e) {
throw new ObserveSwingTechnicalException(e);
@@ -155,7 +155,7 @@ public class StorageBackupUILauncher extends StorageUILauncher {
// finally backup temporary storage
log.info(String.format("Exporting to %s", backupFile));
- targetSource.getDataSourceService().backup(backupFile);
+ targetSource.backup(backupFile);
progressModel.increments();
} catch (DatabaseNotFoundException | DatabaseConnexionNotAuthorizedException | BabModelVersionException |
IncompatibleDataSourceCreateConfigurationException |
=====================================
core/api/services/pom.xml
=====================================
@@ -161,5 +161,71 @@
</plugin>
</plugins>
</pluginManagement>
+ <plugins>
+ <plugin>
+ <groupId>io.ultreia.java4all.http</groupId>
+ <artifactId>http-maven-plugin</artifactId>
+ <dependencies>
+ <dependency>
+ <groupId>${project.groupId}</groupId>
+ <artifactId>core-api-dto</artifactId>
+ <version>${project.version}</version>
+ </dependency>
+ <dependency>
+ <groupId>${project.groupId}</groupId>
+ <artifactId>core-api-dto-consolidation</artifactId>
+ <version>${project.version}</version>
+ </dependency>
+ <dependency>
+ <groupId>${project.groupId}</groupId>
+ <artifactId>core-api-dto-validation</artifactId>
+ <version>${project.version}</version>
+ </dependency>
+ <dependency>
+ <groupId>${project.groupId}</groupId>
+ <artifactId>toolkit-api</artifactId>
+ <version>${project.version}</version>
+ </dependency>
+ <dependency>
+ <groupId>${project.groupId}</groupId>
+ <artifactId>toolkit-api-services</artifactId>
+ <version>${project.version}</version>
+ </dependency>
+ <dependency>
+ <groupId>${project.groupId}</groupId>
+ <artifactId>toolkit-api-validation</artifactId>
+ <version>${project.version}</version>
+ </dependency>
+ </dependencies>
+ <executions>
+ <execution>
+ <goals>
+ <goal>check-services-types</goal>
+ </goals>
+ <configuration>
+ <acceptedTypes>
+ <acceptedType>io.ultreia.java4all.util.Version</acceptedType>
+ <acceptedType>java.io.File</acceptedType>
+ <acceptedType>java.lang.Class</acceptedType>
+ <acceptedType>java.lang.String</acceptedType>
+ <!-- <acceptedType>java.lang.Boolean</acceptedType>-->
+ <!-- <acceptedType>java.lang.Byte</acceptedType>-->
+ <!-- <acceptedType>java.lang.</acceptedType>-->
+ <!-- <acceptedType>java.lang.</acceptedType>-->
+ <!-- <acceptedType>java.lang.</acceptedType>-->
+ <!-- <acceptedType>java.lang.</acceptedType>-->
+ <acceptedType>java.util.List</acceptedType>
+ <acceptedType>java.util.Set</acceptedType>
+ <acceptedType>java.util.Map</acceptedType>
+ </acceptedTypes>
+ <acceptedAssignableTypes>
+ <acceptedAssignableType>java.util.Date</acceptedAssignableType>
+ <acceptedAssignableType>io.ultreia.java4all.util.json.JsonAware</acceptedAssignableType>
+ </acceptedAssignableTypes>
+ </configuration>
+ </execution>
+ </executions>
+ </plugin>
+ </plugins>
</build>
</project>
=====================================
core/services/local/src/main/java/fr/ird/observe/services/local/service/DataSourceServiceLocalSupport.java
=====================================
@@ -37,7 +37,6 @@ import io.ultreia.java4all.util.sql.SqlScript;
import org.apache.logging.log4j.LogManager;
import org.apache.logging.log4j.Logger;
-import java.io.File;
import java.util.Date;
import java.util.LinkedHashSet;
import java.util.Objects;
@@ -62,11 +61,6 @@ public class DataSourceServiceLocalSupport extends ObserveServiceLocal implement
});
}
- @Override
- public void backup(File backupFile) {
- getTopiaApplicationContext().backup(backupFile, true);
- }
-
@Override
public <D extends BusinessDto> boolean isIdValid(Class<D> type, String id) {
DtoEntityContext<D, ?, ?, ?> spi = ObservePersistenceBusinessProject.fromDto(type);
=====================================
core/services/local/src/test/java/fr/ird/observe/services/local/service/DataSourceServiceLocalReadTest.java
=====================================
@@ -36,16 +36,4 @@ public class DataSourceServiceLocalReadTest extends GeneratedDataSourceServiceLo
fixtures.setTemporaryDirectory(null);
}
}
-
- @Override
- public void backup() {
- fixtures.setTemporaryDirectory(localTestMethodResource.getTemporaryDirectoryRoot());
- fixtures.setDataSourceConnection(localTestMethodResource.getDataSourceConnection());
- try {
- super.backup();
- } finally {
- fixtures.setTemporaryDirectory(null);
- fixtures.setDataSourceConnection(null);
- }
- }
}
=====================================
core/services/test/pom.xml
=====================================
@@ -94,11 +94,6 @@
<artifactId>toolkit-api-validation</artifactId>
<version>${project.version}</version>
</dependency>
- <dependency>
- <groupId>${project.groupId}</groupId>
- <artifactId>toolkit-persistence</artifactId>
- <version>${project.version}</version>
- </dependency>
<dependency>
<groupId>com.google.code.gson</groupId>
<artifactId>gson</artifactId>
=====================================
core/services/test/src/main/java/fr/ird/observe/services/service/DataSourceServiceFixtures.java
=====================================
@@ -38,7 +38,6 @@ import io.ultreia.java4all.util.Version;
import io.ultreia.java4all.util.sql.SqlScript;
import org.junit.Assert;
-import java.io.File;
import java.nio.file.Path;
import java.util.Collections;
import java.util.Set;
@@ -56,23 +55,6 @@ public class DataSourceServiceFixtures extends GeneratedDataSourceServiceFixture
Assert.assertFalse(actual);
}
- @Override
- public void backup(ObserveServicesProvider servicesProvider, DataSourceService service) {
- if (testDirectory == null && (dataSourceConnection == null || !dataSourceConnection.isLocal())) {
- super.backup(servicesProvider, service);
- return;
- }
- File backupFile = testDirectory.resolve("backup-" + System.nanoTime() + ".sql.gz").toFile();
- Assert.assertFalse(backupFile.exists());
- service.backup(backupFile);
- Assert.assertTrue(backupFile.exists());
- Version dbVersion = servicesProvider.getAnonymousService().getModelVersion();
- ObserveDataSourceConfigurationTopiaH2 targetConfiguration = ObserveDataSourceConfigurationTopiaH2.createTemporaryConfiguration(testDirectory.toFile(), dbVersion);
- try (ObserveTopiaApplicationContext topiaApplicationContext = ObserveTopiaApplicationContextFactory.createContext(targetConfiguration)) {
- topiaApplicationContext.newJdbcHelperH2().restore(backupFile);
- }
- }
-
@Override
public void close(ObserveServicesProvider servicesProvider, DataSourceService service) {
// FIXME:Test Remove super method invocation and implements fixture
@@ -147,36 +129,36 @@ public class DataSourceServiceFixtures extends GeneratedDataSourceServiceFixture
protected void produceMoveSqlScript(DataSourceService service, boolean pg) {
String psObsRouteVariable = getVariableName(fr.ird.observe.dto.data.ps.observation.RouteDto.class);
String psObsRouteId = getVariable(psObsRouteVariable);
- String psObsRouteIdTarget = getVariable(psObsRouteVariable+".move");
+ String psObsRouteIdTarget = getVariable(psObsRouteVariable + ".move");
String psObsActivityVariable = getVariableName(fr.ird.observe.dto.data.ps.observation.ActivityDto.class);
String psObsActivityId = getVariable(psObsActivityVariable);
- String psObsActivityIdTarget = getVariable(psObsActivityVariable+".move");
+ String psObsActivityIdTarget = getVariable(psObsActivityVariable + ".move");
String psObsSetId = getVariable(getVariableName(fr.ird.observe.dto.data.ps.observation.SetDto.class));
String psLogbookRouteVariable = getVariableName(fr.ird.observe.dto.data.ps.logbook.RouteDto.class);
String psLogbookRouteId = getVariable(psLogbookRouteVariable);
- String psLogbookRouteIdTarget = getVariable(psLogbookRouteVariable+".move");
+ String psLogbookRouteIdTarget = getVariable(psLogbookRouteVariable + ".move");
String psLogbookActivityId = getVariable(getVariableName(fr.ird.observe.dto.data.ps.logbook.ActivityDto.class));
String llObsActivityVariable = getVariableName(fr.ird.observe.dto.data.ll.observation.ActivityDto.class);
String llObsActivityId = getVariable(llObsActivityVariable);
- String llObsActivityIdTarget = getVariable(llObsActivityVariable+".move");
+ String llObsActivityIdTarget = getVariable(llObsActivityVariable + ".move");
String llObSetId = getVariable(getVariableName(fr.ird.observe.dto.data.ll.observation.SetDto.class));
String llLogbookActivityVariable = getVariableName(fr.ird.observe.dto.data.ll.logbook.ActivityDto.class);
String llLogbookActivityId = getVariable(llLogbookActivityVariable);
- String llLogbookActivityIdTarget = getVariable(llLogbookActivityVariable+".move");
+ String llLogbookActivityIdTarget = getVariable(llLogbookActivityVariable + ".move");
String llLogbookSetId = getVariable(getVariableName(fr.ird.observe.dto.data.ll.logbook.SetDto.class));
String psCommTripVariable = getVariableName(fr.ird.observe.dto.data.ps.common.TripDto.class);
String psCommonTripId = getVariable(psCommTripVariable);
- String psCommonTripIdTarget = getVariable(psCommTripVariable +".move");
+ String psCommonTripIdTarget = getVariable(psCommTripVariable + ".move");
String llCommTripVariable = getVariableName(fr.ird.observe.dto.data.ll.common.TripDto.class);
String llCommonTripId = getVariable(llCommTripVariable);
- String llCommonTripIdTarget = getVariable(llCommTripVariable +".move");
+ String llCommonTripIdTarget = getVariable(llCommTripVariable + ".move");
testRequest(service, new ReplicateRequest(pg, psCommonTripId, psCommonTripIdTarget, "fr.ird.observe.entities.data.ps.observation.Route", psObsRouteId));
@@ -225,11 +207,11 @@ public class DataSourceServiceFixtures extends GeneratedDataSourceServiceFixture
this.testDirectory = testDirectory;
}
- public void setDataSourceConnection(ObserveDataSourceConnection dataSourceConnection) {
- this.dataSourceConnection = dataSourceConnection;
- }
-
public ObserveDataSourceConnection getDataSourceConnection() {
return dataSourceConnection;
}
+
+ public void setDataSourceConnection(ObserveDataSourceConnection dataSourceConnection) {
+ this.dataSourceConnection = dataSourceConnection;
+ }
}
=====================================
pom.xml
=====================================
@@ -23,7 +23,7 @@
<parent>
<groupId>io.ultreia.maven</groupId>
<artifactId>pom</artifactId>
- <version>2024.01</version>
+ <version>2024.03</version>
</parent>
<groupId>fr.ird.observe</groupId>
<artifactId>ird-observe</artifactId>
=====================================
server/core/src/main/filtered-resources/META-INF/mapping-api-client.wm
=====================================
@@ -29,7 +29,6 @@ GET /AnonymousService/getServerVersion Anon
GET /AnonymousService/getUsers AnonymousServiceRestApi.getUsers
GET /AnonymousService/migrateData AnonymousServiceRestApi.migrateData
GET /AnonymousService/open AnonymousServiceRestApi.open
-GET /DataSourceService/backup DataSourceServiceRestApi.backup
GET /DataSourceService/close DataSourceServiceRestApi.close
POST /DataSourceService/executeSqlScript DataSourceServiceRestApi.executeSqlScript
GET /DataSourceService/getLastUpdateDate DataSourceServiceRestApi.getLastUpdateDate
=====================================
server/core/src/main/java/fr/ird/observe/server/controller/DataSourceServiceRestApi.java
=====================================
@@ -28,7 +28,6 @@ import fr.ird.observe.server.security.ObserveWebUserSession;
import org.apache.logging.log4j.LogManager;
import org.apache.logging.log4j.Logger;
-import java.io.File;
import java.util.LinkedHashMap;
import java.util.Map;
@@ -57,8 +56,4 @@ public class DataSourceServiceRestApi extends GeneratedDataSourceServiceRestApi
result.put("credentials", session.getConnection().getDataSourceInformation().getCredentials());
return result;
}
-
- @Override
- public void backup(File backupFile) {
- }
}
=====================================
toolkit/api-services/pom.xml
=====================================
@@ -122,5 +122,54 @@
</plugin>
</plugins>
</pluginManagement>
+ <plugins>
+ <plugin>
+ <groupId>io.ultreia.java4all.http</groupId>
+ <artifactId>http-maven-plugin</artifactId>
+ <dependencies>
+ <dependency>
+ <groupId>${project.groupId}</groupId>
+ <artifactId>toolkit-api</artifactId>
+ <version>${project.version}</version>
+ </dependency>
+ <dependency>
+ <groupId>${project.groupId}</groupId>
+ <artifactId>toolkit-api-datasource</artifactId>
+ <version>${project.version}</version>
+ </dependency>
+ <dependency>
+ <groupId>${project.groupId}</groupId>
+ <artifactId>toolkit-api-decoration</artifactId>
+ <version>${project.version}</version>
+ </dependency>
+ <dependency>
+ <groupId>${project.groupId}</groupId>
+ <artifactId>toolkit-api-report</artifactId>
+ <version>${project.version}</version>
+ </dependency>
+ </dependencies>
+ <executions>
+ <execution>
+ <goals>
+ <goal>check-services-types</goal>
+ </goals>
+ <configuration>
+ <acceptedTypes>
+ <acceptedType>io.ultreia.java4all.util.Version</acceptedType>
+ <acceptedType>java.lang.Class</acceptedType>
+ <acceptedType>java.lang.String</acceptedType>
+ <acceptedType>java.util.List</acceptedType>
+ <acceptedType>java.util.Set</acceptedType>
+ <acceptedType>java.util.Map</acceptedType>
+ </acceptedTypes>
+ <acceptedAssignableTypes>
+ <acceptedAssignableType>java.util.Date</acceptedAssignableType>
+ <acceptedAssignableType>io.ultreia.java4all.util.json.JsonAware</acceptedAssignableType>
+ </acceptedAssignableTypes>
+ </configuration>
+ </execution>
+ </executions>
+ </plugin>
+ </plugins>
</build>
</project>
=====================================
toolkit/api-services/src/main/java/fr/ird/observe/services/service/DataSourceService.java
=====================================
@@ -34,7 +34,6 @@ import io.ultreia.java4all.http.spi.Service;
import io.ultreia.java4all.http.spi.Write;
import io.ultreia.java4all.util.sql.SqlScript;
-import java.io.File;
import java.util.Date;
import java.util.Set;
@@ -49,9 +48,6 @@ public interface DataSourceService extends ObserveService {
@Get
void close();
- @Get
- void backup(File backupFile);
-
@Get
@MethodCredential
<D extends BusinessDto> boolean isIdValid(Class<D> type, String id);
=====================================
toolkit/api/src/main/java/fr/ird/observe/navigation/tree/io/ToolkitTreeNodeStates.java
=====================================
@@ -22,6 +22,8 @@ package fr.ird.observe.navigation.tree.io;
* #L%
*/
+import io.ultreia.java4all.util.json.JsonAware;
+
import java.util.LinkedHashMap;
import java.util.Map;
import java.util.Objects;
@@ -37,7 +39,7 @@ import java.util.stream.Stream;
* @author Tony Chemit - dev(a)tchemit.fr
* @since 5.0.17
*/
-public class ToolkitTreeNodeStates {
+public class ToolkitTreeNodeStates implements JsonAware {
private final Map<String, Object> states = new LinkedHashMap<>();
=====================================
toolkit/persistence/src/main/java/org/nuiton/topia/persistence/TopiaApplicationContext.java
=====================================
@@ -40,7 +40,6 @@ import org.nuiton.topia.service.sql.TopiaSqlService;
import org.nuiton.topia.service.sql.blob.TopiaEntitySqlBlobIdsIterator;
import java.io.Closeable;
-import java.io.File;
import java.nio.file.Path;
import java.util.ArrayList;
import java.util.List;
@@ -121,8 +120,6 @@ public interface TopiaApplicationContext<K extends TopiaPersistenceContext> exte
getMigrationService().runSchemaMigration();
}
- void backup(File backupFile, boolean compress);
-
/**
* Get the list of entities (ToPIA or not) that Hibernate has to handle. By default it only contains ToPIA entities
* but you may override it to add any other Hibernate entity.
=====================================
toolkit/persistence/src/main/java/org/nuiton/topia/persistence/internal/AbstractTopiaApplicationContext.java
=====================================
@@ -53,7 +53,6 @@ import org.nuiton.topia.service.migration.TopiaMigrationService;
import org.nuiton.topia.service.sql.TopiaSqlService;
import org.nuiton.topia.service.sql.blob.TopiaEntitySqlBlobIdsIterator;
-import java.io.File;
import java.nio.file.Path;
import java.util.Arrays;
import java.util.LinkedHashSet;
@@ -248,17 +247,6 @@ public abstract class AbstractTopiaApplicationContext<K extends TopiaPersistence
return Objects.hash(authenticationToken);
}
- @Override
- public final void backup(File backupFile, boolean compress) {
- if (!getConfiguration().isH2Configuration()) {
- throw new IllegalStateException("Cant backup a none H2 database.");
- }
- try (K p = newPersistenceContext()) {
- String sqlScript = String.format("SCRIPT NOPASSWORDS NOSETTINGS BLOCKSIZE 2048 TO '%s' %s CHARSET 'UTF-8';", backupFile.getAbsolutePath(), compress ? "COMPRESSION GZIP" : "");
- p.getSqlSupport().executeSql(sqlScript);
- }
- }
-
@Override
public final void executeSqlStatements(SqlScript content) {
try {
=====================================
toolkit/persistence/src/main/java/org/nuiton/topia/persistence/jdbc/JdbcHelperH2.java
=====================================
@@ -78,7 +78,7 @@ public class JdbcHelperH2 extends JdbcHelper {
* @param compress if true then use gzip to compress file
*/
public void backup(File file, boolean compress) {
- String options = "";
+ String options = " BLOCKSIZE 2048 CHARSET 'UTF-8'";
if (compress) {
options += " COMPRESSION GZIP";
}
=====================================
toolkit/plugin/src/main/java/fr/ird/observe/toolkit/maven/plugin/tck/MigrateTckDatabases.java
=====================================
@@ -100,7 +100,7 @@ public class MigrateTckDatabases extends PersistenceRunner {
applicationContext.executeSqlStatements(SqlScript.of(backupFile));
Path checkBackupFile = getTemporaryPath().resolve("check-backup-" + backupFile.toFile().getName().replace(".sql.gz", "-check.sql"));
- applicationContext.backup(checkBackupFile.toFile(), false);
+ applicationContext.newJdbcHelperH2().backup(checkBackupFile.toFile(), false);
log.info(String.format("[%S] Check - backup to %s", tckDbName, checkBackupFile));
}
}
View it on GitLab: https://gitlab.com/ultreiaio/ird-observe/-/compare/61a39193f1ace712c0f168ad…
--
View it on GitLab: https://gitlab.com/ultreiaio/ird-observe/-/compare/61a39193f1ace712c0f168ad…
You're receiving this email because of your account on gitlab.com.
1
0
[Git][ultreiaio/ird-observe][develop] [persistence-test] Improve performance by using read databases and never...
by Tony CHEMIT (@tchemit) 24 Jan '24
by Tony CHEMIT (@tchemit) 24 Jan '24
24 Jan '24
Tony CHEMIT pushed to branch develop at ultreiaio / ird-observe
Commits:
61a39193 by Tony Chemit at 2024-01-24T09:56:29+01:00
[persistence-test] Improve performance by using read databases and never commit to them (wins 2.5 minutes :))
- - - - -
7 changed files:
- core/persistence/test/src/main/java/fr/ird/observe/persistence/test/ObservePersistenceFixtures.java
- core/persistence/test/src/test/java/fr/ird/observe/persistence/test/request/DeleteDataRequestTest.java
- core/persistence/test/src/test/java/fr/ird/observe/persistence/test/request/DeletePartialRequestTest.java
- core/persistence/test/src/test/java/fr/ird/observe/persistence/test/request/DeleteReferentialRequestTest.java
- core/persistence/test/src/test/java/fr/ird/observe/persistence/test/request/ReferentialExtraScriptsTest.java
- core/persistence/test/src/test/java/fr/ird/observe/persistence/test/request/ReplicatePartialRequestTest.java
- core/persistence/test/src/test/java/fr/ird/observe/persistence/test/request/ReplicateRequestTest.java
Changes:
=====================================
core/persistence/test/src/main/java/fr/ird/observe/persistence/test/ObservePersistenceFixtures.java
=====================================
@@ -43,12 +43,16 @@ import java.util.Map;
public class ObservePersistenceFixtures extends ObserveFixtures {
public static Map<String, Long> getTablesCount(ObserveTopiaApplicationContext applicationContext, List<String> schemaAndTableNames) {
- Map<String, Long> countBuilder = new LinkedHashMap<>();
try (ObserveTopiaPersistenceContext persistenceContext = applicationContext.newPersistenceContext()) {
- for (String table : schemaAndTableNames) {
- Long actualCount = persistenceContext.countTable(table);
- countBuilder.put(table, actualCount);
- }
+ return getTablesCount(persistenceContext, schemaAndTableNames);
+ }
+ }
+
+ public static Map<String, Long> getTablesCount(ObserveTopiaPersistenceContext persistenceContext, List<String> schemaAndTableNames) {
+ Map<String, Long> countBuilder = new LinkedHashMap<>();
+ for (String table : schemaAndTableNames) {
+ Long actualCount = persistenceContext.countTable(table);
+ countBuilder.put(table, actualCount);
}
return countBuilder;
}
=====================================
core/persistence/test/src/test/java/fr/ird/observe/persistence/test/request/DeleteDataRequestTest.java
=====================================
@@ -31,6 +31,7 @@ import fr.ird.observe.entities.ObserveTopiaPersistenceContext;
import fr.ird.observe.entities.data.DataEntity;
import fr.ird.observe.entities.data.RootOpenableEntity;
import fr.ird.observe.persistence.test.ObservePersistenceFixtures;
+import fr.ird.observe.persistence.test.PersistenceTestSupportRead;
import fr.ird.observe.persistence.test.PersistenceTestSupportWrite;
import fr.ird.observe.spi.ObservePersistenceBusinessProject;
import fr.ird.observe.spi.context.DtoEntityContext;
@@ -38,7 +39,6 @@ import fr.ird.observe.spi.context.OpenableDtoEntityContext;
import fr.ird.observe.spi.module.BusinessModule;
import fr.ird.observe.spi.module.ObserveBusinessProject;
import fr.ird.observe.test.IgnoreTestClassRule;
-import fr.ird.observe.test.spi.CopyDatabaseConfiguration;
import io.ultreia.java4all.util.sql.SqlScript;
import org.apache.logging.log4j.LogManager;
import org.apache.logging.log4j.Logger;
@@ -49,6 +49,7 @@ import org.junit.runner.RunWith;
import org.junit.runners.Parameterized;
import org.nuiton.topia.service.sql.model.TopiaEntitySqlDescriptors;
+import java.sql.SQLException;
import java.util.Comparator;
import java.util.List;
import java.util.Map;
@@ -64,7 +65,7 @@ import static fr.ird.observe.persistence.test.ObservePersistenceFixtures.getTabl
* @since 9.0.0
*/
@RunWith(Parameterized.class)
-public class DeleteDataRequestTest extends PersistenceTestSupportWrite {
+public class DeleteDataRequestTest extends PersistenceTestSupportRead {
@ClassRule
public static final IgnoreTestClassRule IGNORE2 = new IgnoreTestClassRule("Persistence Request", "persistence.request.test.skip");
@@ -78,16 +79,15 @@ public class DeleteDataRequestTest extends PersistenceTestSupportWrite {
@Parameterized.Parameters(name = "{0}")
public static Iterable<Object[]> data() {
return ObservePersistenceBusinessProject.get().getEntityToDtoClassMapping().keySet().stream()
- .filter(Class::isInterface)
- .filter(DataEntity.class::isAssignableFrom)
- .sorted(Comparator.comparing(Object::toString))
- .map(t -> new Object[]{t})
- .collect(Collectors.toList());
+ .filter(Class::isInterface)
+ .filter(DataEntity.class::isAssignableFrom)
+ .sorted(Comparator.comparing(Object::toString))
+ .map(t -> new Object[]{t})
+ .collect(Collectors.toList());
}
@Test
- @CopyDatabaseConfiguration
- public void test() {
+ public void test() throws SQLException {
String variableName = ObservePersistenceFixtures.getEntityVariableName(entityType);
String id = ObservePersistenceFixtures.getVariable(variableName);
@@ -106,34 +106,41 @@ public class DeleteDataRequestTest extends PersistenceTestSupportWrite {
}
DeleteRequest request = new DeleteRequest(false, entityType.getName(), parentId, id);
- try (ObserveTopiaApplicationContext applicationContext = localTestMethodResource.getTopiaApplicationContext()) {
-
- SqlScript script = applicationContext.getSqlService().consume(request);
- boolean entryPoint = RootOpenableEntity.class.isAssignableFrom(entityType);
- List<String> schemaAndTableNames = null;
- Map<String, Long> expectedCount = null;
- if (entryPoint) {
- BusinessModule businessModule = ObserveBusinessProject.get().getBusinessModuleByDtoType(spi.toDtoType());
- String classifier = "data-" + businessModule.getName();
- expectedCount = ObservePersistenceFixtures.loadFixturesMapCount("persistence/table_count/" + classifier);
- TopiaEntitySqlDescriptors descriptors = PersistenceTestSupportWrite.descriptorForReplication(classifier).reverse();
- schemaAndTableNames = descriptors.getSchemaAndTableNames();
- }
+ ObserveTopiaApplicationContext applicationContext = localTestMethodResource.getTopiaApplicationContext();
+
+ SqlScript script = applicationContext.getSqlService().consume(request);
+ boolean entryPoint = RootOpenableEntity.class.isAssignableFrom(entityType);
+ List<String> schemaAndTableNames = null;
+ Map<String, Long> expectedCount = null;
+ if (entryPoint) {
+ BusinessModule businessModule = ObserveBusinessProject.get().getBusinessModuleByDtoType(spi.toDtoType());
+ String classifier = "data-" + businessModule.getName();
+ expectedCount = ObservePersistenceFixtures.loadFixturesMapCount("persistence/table_count/" + classifier);
+ TopiaEntitySqlDescriptors descriptors = PersistenceTestSupportWrite.descriptorForReplication(classifier).reverse();
+ schemaAndTableNames = descriptors.getSchemaAndTableNames();
+ }
- ObservePersistenceFixtures.assertDataExist(applicationContext, spi, id);
- Map<String, Long> beforeTablesCount = null;
- if (entryPoint) {
- beforeTablesCount = getTablesCount(applicationContext, schemaAndTableNames);
- }
- if (!ObservePersistenceFixtures.WITH_ASSERT) {
- String content = script.content();
- System.out.println(content);
- }
- applicationContext.executeSqlStatements(script);
- ObservePersistenceFixtures.assertDataNotExist(applicationContext, spi, id);
- if (entryPoint) {
- Map<String, Long> afterTablesCount = getTablesCount(applicationContext, schemaAndTableNames);
- assertDeleteEntryPoint(beforeTablesCount, afterTablesCount, expectedCount);
+ ObservePersistenceFixtures.assertDataExist(applicationContext, spi, id);
+ Map<String, Long> beforeTablesCount = null;
+ if (entryPoint) {
+ beforeTablesCount = getTablesCount(applicationContext, schemaAndTableNames);
+ }
+ if (!ObservePersistenceFixtures.WITH_ASSERT) {
+ String content = script.content();
+ System.out.println(content);
+ }
+ try (ObserveTopiaPersistenceContext persistenceContext = applicationContext.newPersistenceContext()) {
+
+ persistenceContext.executeSqlScript(script);
+ persistenceContext.flush();
+ try {
+ ObservePersistenceFixtures.assertDataNotExist(persistenceContext, spi, id);
+ if (entryPoint) {
+ Map<String, Long> afterTablesCount = getTablesCount(persistenceContext, schemaAndTableNames);
+ assertDeleteEntryPoint(beforeTablesCount, afterTablesCount, expectedCount);
+ }
+ } finally {
+ persistenceContext.rollback();
}
}
}
=====================================
core/persistence/test/src/test/java/fr/ird/observe/persistence/test/request/DeletePartialRequestTest.java
=====================================
@@ -23,17 +23,14 @@ package fr.ird.observe.persistence.test.request;
*/
import fr.ird.observe.datasource.request.DeletePartialRequest;
-import fr.ird.observe.datasource.request.ReplicatePartialRequest;
import fr.ird.observe.dto.data.DataDto;
import fr.ird.observe.entities.ObserveTopiaApplicationContext;
import fr.ird.observe.entities.ObserveTopiaPersistenceContext;
import fr.ird.observe.entities.data.ps.common.Trip;
import fr.ird.observe.persistence.test.ObservePersistenceFixtures;
-import fr.ird.observe.persistence.test.PersistenceTestSupportWrite;
+import fr.ird.observe.persistence.test.PersistenceTestSupportRead;
import fr.ird.observe.services.service.data.DeleteLayoutRequest;
-import fr.ird.observe.services.service.data.MoveLayoutRequest;
import fr.ird.observe.test.IgnoreTestClassRule;
-import fr.ird.observe.test.spi.CopyDatabaseConfiguration;
import io.ultreia.java4all.util.sql.SqlScript;
import org.junit.Assert;
import org.junit.ClassRule;
@@ -51,7 +48,7 @@ import java.util.Set;
* @since 9.0.0
*/
@RunWith(Parameterized.class)
-public class DeletePartialRequestTest extends PersistenceTestSupportWrite {
+public class DeletePartialRequestTest extends PersistenceTestSupportRead {
@ClassRule
public static final IgnoreTestClassRule IGNORE2 = new IgnoreTestClassRule("Persistence Request", "persistence.request.test.skip");
@@ -73,51 +70,43 @@ public class DeletePartialRequestTest extends PersistenceTestSupportWrite {
return ReplicatePartialRequestTest.PARTIAL_PS_FIXTURES;
}
- static void assertDelete(ObserveTopiaApplicationContext applicationContext, DeletePartialRequest deleteRequest, Set<String> shell, Map<String, Long> beforeResults, Map<String, Long> afterDelete) {
- SqlScript deleteScript = applicationContext.getSqlService().consume(deleteRequest);
+ static void assertDelete(ObserveTopiaPersistenceContext persistenceContext, SqlScript deleteScript, Set<String> shell, Map<String, Long> beforeResults, Map<String, Long> afterDelete) {
if (!ObservePersistenceFixtures.WITH_ASSERT) {
System.out.println(deleteScript.content());
}
- applicationContext.executeSqlStatements(deleteScript);
-
- try (ObserveTopiaPersistenceContext persistenceContext = applicationContext.newPersistenceContext()) {
- for (String table : shell) {
- long actualCount = persistenceContext.countTable(table);
- long beforeCount = beforeResults.get(table);
- long afterDeleteCount = afterDelete.get(table);
- Assert.assertEquals(String.format("bad size for table: %s (excepted %d == %d)", table, actualCount, beforeCount), actualCount, afterDeleteCount);
- }
+ for (String table : shell) {
+ long actualCount = persistenceContext.countTable(table);
+ long beforeCount = beforeResults.get(table);
+ long afterDeleteCount = afterDelete.get(table);
+ Assert.assertEquals(String.format("bad size for table: %s (excepted %d == %d)", table, actualCount, beforeCount), actualCount, afterDeleteCount);
}
}
@Test
- @CopyDatabaseConfiguration
public void test() {
- Map<String, Long> expected = ObservePersistenceFixtures.loadFixturesMapCount("persistence/replicate_partial_count/" + classifier + "-" + flavor);
- try (ObserveTopiaApplicationContext applicationContext = localTestMethodResource.getTopiaApplicationContext()) {
+ ObserveTopiaApplicationContext applicationContext = localTestMethodResource.getTopiaApplicationContext();
- DeletePartialRequest deleteRequest = Trip.SPI.toSqlRequest(false, new DeleteLayoutRequest(scopes, newId));
- Set<String> shell = applicationContext.createShell(deleteRequest);
+ DeletePartialRequest deleteRequest = Trip.SPI.toSqlRequest(false, new DeleteLayoutRequest(scopes, newId));
+ Set<String> shell = applicationContext.createShell(deleteRequest);
- Map<String, Long> beforeResults = ReplicatePartialRequestTest.getBeforeResults(applicationContext, shell);
- SqlScript deleteScript = applicationContext.getSqlService().consume(deleteRequest);
- applicationContext.executeSqlStatements(deleteScript);
+ SqlScript deleteScript = applicationContext.getSqlService().consume(deleteRequest);
- Map<String, Long> afterDelete = ReplicatePartialRequestTest.getBeforeResults(applicationContext, shell);
+ try (ObserveTopiaPersistenceContext persistenceContext = applicationContext.newPersistenceContext()) {
- assertDelete(applicationContext, deleteRequest, shell, beforeResults, afterDelete);
+ try {
+ Map<String, Long> beforeResults = ReplicatePartialRequestTest.getBeforeResults(persistenceContext, shell);
- ReplicatePartialRequest replicateRequest = Trip.SPI.toSqlRequest(false, new MoveLayoutRequest(scopes, tripId, newId, false));
- ReplicatePartialRequestTest.assertReplicate(applicationContext, replicateRequest, shell, expected, afterDelete, 1);
+ persistenceContext.executeSqlScript(deleteScript);
+ persistenceContext.flush();
- assertDelete(applicationContext, deleteRequest, shell, beforeResults, afterDelete);
+ Map<String, Long> afterDelete = ReplicatePartialRequestTest.getBeforeResults(persistenceContext, shell);
- ReplicatePartialRequestTest.assertReplicate(applicationContext, replicateRequest, shell, expected, afterDelete, 1);
- ReplicatePartialRequestTest.assertReplicate(applicationContext, replicateRequest, shell, expected, afterDelete, 2);
+ assertDelete(persistenceContext, deleteScript, shell, beforeResults, afterDelete);
+ } finally {
+ persistenceContext.rollback();
+ }
- assertDelete(applicationContext, deleteRequest, shell, beforeResults, afterDelete);
- assertDelete(applicationContext, deleteRequest, shell, beforeResults, afterDelete);
}
}
}
=====================================
core/persistence/test/src/test/java/fr/ird/observe/persistence/test/request/DeleteReferentialRequestTest.java
=====================================
@@ -25,14 +25,14 @@ package fr.ird.observe.persistence.test.request;
import fr.ird.observe.datasource.request.DeleteRequest;
import fr.ird.observe.entities.Entity;
import fr.ird.observe.entities.ObserveTopiaApplicationContext;
+import fr.ird.observe.entities.ObserveTopiaPersistenceContext;
import fr.ird.observe.entities.referential.ReferentialEntity;
import fr.ird.observe.persistence.test.ObservePersistenceFixtures;
-import fr.ird.observe.persistence.test.PersistenceTestSupportWrite;
+import fr.ird.observe.persistence.test.PersistenceTestSupportRead;
import fr.ird.observe.spi.ObservePersistenceBusinessProject;
import fr.ird.observe.spi.context.DtoEntityContext;
import fr.ird.observe.test.DatabaseName;
import fr.ird.observe.test.IgnoreTestClassRule;
-import fr.ird.observe.test.spi.CopyDatabaseConfiguration;
import fr.ird.observe.test.spi.DatabaseNameConfiguration;
import io.ultreia.java4all.util.sql.SqlScript;
import org.apache.logging.log4j.LogManager;
@@ -51,7 +51,7 @@ import java.util.stream.Collectors;
* @since 9.0.0
*/
@DatabaseNameConfiguration(DatabaseName.referential)
-public class DeleteReferentialRequestTest extends PersistenceTestSupportWrite {
+public class DeleteReferentialRequestTest extends PersistenceTestSupportRead {
@ClassRule
public static final IgnoreTestClassRule IGNORE2 = new IgnoreTestClassRule("Persistence Request", "persistence.request.test.skip");
@@ -67,12 +67,10 @@ public class DeleteReferentialRequestTest extends PersistenceTestSupportWrite {
}
@Test
- @CopyDatabaseConfiguration
public void test() {
for (Class<? extends Entity> entityType : data()) {
test(entityType);
}
-
}
public void test(Class<? extends Entity> entityType) {
@@ -95,8 +93,15 @@ public class DeleteReferentialRequestTest extends PersistenceTestSupportWrite {
String content = script.content();
System.out.println(content);
}
- applicationContext.executeSqlStatements(script);
- ObservePersistenceFixtures.assertDataNotExist(applicationContext, spi, id);
+ try (ObserveTopiaPersistenceContext persistenceContext = applicationContext.newPersistenceContext()) {
+ try {
+ persistenceContext.executeSqlScript(script);
+ persistenceContext.flush();
+ ObservePersistenceFixtures.assertDataNotExist(persistenceContext, spi, id);
+ } finally {
+ persistenceContext.rollback();
+ }
+ }
}
}
=====================================
core/persistence/test/src/test/java/fr/ird/observe/persistence/test/request/ReferentialExtraScriptsTest.java
=====================================
@@ -28,12 +28,11 @@ import fr.ird.observe.entities.ObserveTopiaApplicationContext;
import fr.ird.observe.entities.ObserveTopiaPersistenceContext;
import fr.ird.observe.entities.referential.ReferentialEntity;
import fr.ird.observe.persistence.test.ObservePersistenceFixtures;
-import fr.ird.observe.persistence.test.PersistenceTestSupportWrite;
+import fr.ird.observe.persistence.test.PersistenceTestSupportRead;
import fr.ird.observe.spi.ObservePersistenceBusinessProject;
import fr.ird.observe.spi.context.ReferentialDtoEntityContext;
import fr.ird.observe.test.DatabaseName;
import fr.ird.observe.test.IgnoreTestClassRule;
-import fr.ird.observe.test.spi.CopyDatabaseConfiguration;
import fr.ird.observe.test.spi.DatabaseNameConfiguration;
import io.ultreia.java4all.util.sql.SqlScript;
import org.apache.logging.log4j.LogManager;
@@ -54,7 +53,7 @@ import java.util.stream.Collectors;
* @since 9.0.7
*/
@DatabaseNameConfiguration(DatabaseName.referential)
-public class ReferentialExtraScriptsTest extends PersistenceTestSupportWrite {
+public class ReferentialExtraScriptsTest extends PersistenceTestSupportRead {
@ClassRule
public static final IgnoreTestClassRule IGNORE2 = new IgnoreTestClassRule("Persistence Request", "persistence.request.test.skip");
@@ -63,14 +62,14 @@ public class ReferentialExtraScriptsTest extends PersistenceTestSupportWrite {
public static List<Class<? extends Entity>> data() {
return ObservePersistenceBusinessProject.get().getEntityToDtoClassMapping().keySet().stream()
- .filter(Class::isInterface)
- .filter(ReferentialEntity.class::isAssignableFrom)
- .sorted(Comparator.comparing(Object::toString))
- .collect(Collectors.toList());
+ .filter(Class::isInterface)
+ .filter(ReferentialEntity.class::isAssignableFrom)
+ .sorted(Comparator.comparing(Object::toString))
+ .collect(Collectors.toList());
}
@Test
- @CopyDatabaseConfiguration
+// @CopyDatabaseConfiguration
public void test() {
for (Class<? extends Entity> entityType : data()) {
test(entityType);
@@ -105,16 +104,36 @@ public class ReferentialExtraScriptsTest extends PersistenceTestSupportWrite {
ObserveTopiaApplicationContext applicationContext = localTestMethodResource.getTopiaApplicationContext();
- SqlScript script = applicationContext.getSqlService().consume(request);
+ SqlScript deleteScript = applicationContext.getSqlService().consume(request);
- ObservePersistenceFixtures.assertDataExist(applicationContext, spi, id);
+ try (ObserveTopiaPersistenceContext persistenceContext = applicationContext.newPersistenceContext()) {
- applicationContext.executeSqlStatements(script);
- ObservePersistenceFixtures.assertDataNotExist(applicationContext, spi, id);
+ try {
+ ObservePersistenceFixtures.assertDataExist(persistenceContext, spi, id);
- applicationContext.executeSqlStatements(copyScript);
- ObservePersistenceFixtures.assertDataExist(applicationContext, spi, id);
- applicationContext.executeSqlStatements(updateScript);
- ObservePersistenceFixtures.assertDataExist(applicationContext, spi, id);
+ persistenceContext.executeSqlScript(deleteScript);
+ persistenceContext.flush();
+ ObservePersistenceFixtures.assertDataNotExist(persistenceContext, spi, id);
+
+ persistenceContext.executeSqlScript(copyScript);
+ persistenceContext.flush();
+ ObservePersistenceFixtures.assertDataExist(persistenceContext, spi, id);
+ persistenceContext.executeSqlScript(updateScript);
+ persistenceContext.flush();
+ ObservePersistenceFixtures.assertDataExist(persistenceContext, spi, id);
+ } finally {
+ persistenceContext.rollback();
+ }
+
+ }
+// ObservePersistenceFixtures.assertDataExist(applicationContext, spi, id);
+//
+// applicationContext.executeSqlStatements(deleteScript);
+// ObservePersistenceFixtures.assertDataNotExist(applicationContext, spi, id);
+//
+// applicationContext.executeSqlStatements(copyScript);
+// ObservePersistenceFixtures.assertDataExist(applicationContext, spi, id);
+// applicationContext.executeSqlStatements(updateScript);
+// ObservePersistenceFixtures.assertDataExist(applicationContext, spi, id);
}
}
=====================================
core/persistence/test/src/test/java/fr/ird/observe/persistence/test/request/ReplicatePartialRequestTest.java
=====================================
@@ -24,11 +24,16 @@ package fr.ird.observe.persistence.test.request;
import fr.ird.observe.datasource.request.ReplicatePartialRequest;
import fr.ird.observe.dto.data.DataDto;
+import fr.ird.observe.dto.data.ps.common.TripGearUseFeaturesDto;
+import fr.ird.observe.dto.data.ps.common.TripLocalmarketDto;
+import fr.ird.observe.dto.data.ps.common.TripLogbookDto;
+import fr.ird.observe.dto.data.ps.landing.TripLandingDto;
+import fr.ird.observe.dto.data.ps.observation.RouteDto;
import fr.ird.observe.entities.ObserveTopiaApplicationContext;
import fr.ird.observe.entities.ObserveTopiaPersistenceContext;
import fr.ird.observe.entities.data.ps.common.Trip;
import fr.ird.observe.persistence.test.ObservePersistenceFixtures;
-import fr.ird.observe.persistence.test.PersistenceTestSupportWrite;
+import fr.ird.observe.persistence.test.PersistenceTestSupportRead;
import fr.ird.observe.services.service.data.MoveLayoutRequest;
import fr.ird.observe.test.IgnoreTestClassRule;
import fr.ird.observe.test.ObserveFixtures;
@@ -52,7 +57,7 @@ import java.util.TreeMap;
* @since 9.0.0
*/
@RunWith(Parameterized.class)
-public class ReplicatePartialRequestTest extends PersistenceTestSupportWrite {
+public class ReplicatePartialRequestTest extends PersistenceTestSupportRead {
@ClassRule
public static final IgnoreTestClassRule IGNORE2 = new IgnoreTestClassRule("Persistence Request", "persistence.request.test.skip");
@@ -61,14 +66,14 @@ public class ReplicatePartialRequestTest extends PersistenceTestSupportWrite {
private static final String PS_COMMON_TRIP_ID = ObservePersistenceFixtures.getPsCommonTripId();
private static final String PS_COMMON_TRIP_MOVE = ObserveFixtures.getId("PS_COMMON_TRIP_MOVE");
public static final Iterable<Object[]> PARTIAL_PS_FIXTURES = Arrays.asList(
- new Object[]{CLASSIFIER_DATA_PS, "GearUseFeatures", PS_COMMON_TRIP_ID, PS_COMMON_TRIP_MOVE, Set.of(fr.ird.observe.dto.data.ps.common.TripGearUseFeaturesDto.class)},
- new Object[]{CLASSIFIER_DATA_PS, "Observations", PS_COMMON_TRIP_ID, PS_COMMON_TRIP_MOVE, Set.of(fr.ird.observe.dto.data.ps.observation.RouteDto.class)},
- new Object[]{CLASSIFIER_DATA_PS, "Logbook", PS_COMMON_TRIP_ID, PS_COMMON_TRIP_MOVE, Set.of(fr.ird.observe.dto.data.ps.common.TripLogbookDto.class)},
- new Object[]{CLASSIFIER_DATA_PS, "Localmarket", PS_COMMON_TRIP_ID, PS_COMMON_TRIP_MOVE, Set.of(fr.ird.observe.dto.data.ps.common.TripLocalmarketDto.class)},
- new Object[]{CLASSIFIER_DATA_PS, "Landing", PS_COMMON_TRIP_ID, PS_COMMON_TRIP_MOVE, Set.of(fr.ird.observe.dto.data.ps.landing.TripLandingDto.class)},
- new Object[]{CLASSIFIER_DATA_PS, "Observations-Logbook", PS_COMMON_TRIP_ID, PS_COMMON_TRIP_MOVE, Set.of(fr.ird.observe.dto.data.ps.common.TripLogbookDto.class, fr.ird.observe.dto.data.ps.observation.RouteDto.class)},
- new Object[]{CLASSIFIER_DATA_PS, "Observations-Logbook-Localmarket", PS_COMMON_TRIP_ID, PS_COMMON_TRIP_MOVE, Set.of(fr.ird.observe.dto.data.ps.common.TripLocalmarketDto.class, fr.ird.observe.dto.data.ps.common.TripLogbookDto.class, fr.ird.observe.dto.data.ps.observation.RouteDto.class)},
- new Object[]{CLASSIFIER_DATA_PS, "Landing-Logbook-Localmarket", PS_COMMON_TRIP_ID, PS_COMMON_TRIP_MOVE, Set.of(fr.ird.observe.dto.data.ps.common.TripLocalmarketDto.class, fr.ird.observe.dto.data.ps.common.TripLogbookDto.class, fr.ird.observe.dto.data.ps.landing.TripLandingDto.class)}
+ new Object[]{CLASSIFIER_DATA_PS, "GearUseFeatures", PS_COMMON_TRIP_ID, PS_COMMON_TRIP_MOVE, Set.of(TripGearUseFeaturesDto.class)},
+ new Object[]{CLASSIFIER_DATA_PS, "Observations", PS_COMMON_TRIP_ID, PS_COMMON_TRIP_MOVE, Set.of(RouteDto.class)},
+ new Object[]{CLASSIFIER_DATA_PS, "Logbook", PS_COMMON_TRIP_ID, PS_COMMON_TRIP_MOVE, Set.of(TripLogbookDto.class)},
+ new Object[]{CLASSIFIER_DATA_PS, "Localmarket", PS_COMMON_TRIP_ID, PS_COMMON_TRIP_MOVE, Set.of(TripLocalmarketDto.class)},
+ new Object[]{CLASSIFIER_DATA_PS, "Landing", PS_COMMON_TRIP_ID, PS_COMMON_TRIP_MOVE, Set.of(TripLandingDto.class)},
+ new Object[]{CLASSIFIER_DATA_PS, "Observations-Logbook", PS_COMMON_TRIP_ID, PS_COMMON_TRIP_MOVE, Set.of(TripLogbookDto.class, RouteDto.class)},
+ new Object[]{CLASSIFIER_DATA_PS, "Observations-Logbook-Localmarket", PS_COMMON_TRIP_ID, PS_COMMON_TRIP_MOVE, Set.of(TripLocalmarketDto.class, TripLogbookDto.class, RouteDto.class)},
+ new Object[]{CLASSIFIER_DATA_PS, "Landing-Logbook-Localmarket", PS_COMMON_TRIP_ID, PS_COMMON_TRIP_MOVE, Set.of(TripLocalmarketDto.class, TripLogbookDto.class, TripLandingDto.class)}
);
@Parameterized.Parameter
@@ -87,29 +92,24 @@ public class ReplicatePartialRequestTest extends PersistenceTestSupportWrite {
return PARTIAL_PS_FIXTURES;
}
- static Map<String, Long> getBeforeResults(ObserveTopiaApplicationContext applicationContext, Set<String> shell) {
+ static Map<String, Long> getBeforeResults(ObserveTopiaPersistenceContext persistenceContext, Set<String> shell) {
Map<String, Long> beforeResults = new TreeMap<>();
- try (ObserveTopiaPersistenceContext persistenceContext = applicationContext.newPersistenceContext()) {
- for (String table : shell) {
- Long actualCount = persistenceContext.countTable(table);
- beforeResults.put(table, actualCount);
- }
+ for (String table : shell) {
+ Long actualCount = persistenceContext.countTable(table);
+ beforeResults.put(table, actualCount);
}
return beforeResults;
}
- static void assertReplicate(ObserveTopiaApplicationContext applicationContext, ReplicatePartialRequest replicateRequest, Set<String> shell, Map<String, Long> expected, Map<String, Long> before, int factor) {
+ static void assertReplicate(ObserveTopiaApplicationContext applicationContext, ObserveTopiaPersistenceContext persistenceContext, ReplicatePartialRequest replicateRequest, Set<String> shell, Map<String, Long> expected, Map<String, Long> before, int factor) {
SqlScript replicateScript = applicationContext.getSqlService().consume(replicateRequest);
- applicationContext.executeSqlStatements(replicateScript);
-
+ persistenceContext.executeSqlScript(replicateScript);
+ persistenceContext.flush();
if (!ObservePersistenceFixtures.WITH_ASSERT) {
-
Map<String, Long> actualResults = new TreeMap<>();
- try (ObserveTopiaPersistenceContext persistenceContext = applicationContext.newPersistenceContext()) {
- for (String table : shell) {
- long actualCount = factor * persistenceContext.countTable(table) - before.get(table);
- actualResults.put(table, actualCount);
- }
+ for (String table : shell) {
+ long actualCount = factor * persistenceContext.countTable(table) - before.get(table);
+ actualResults.put(table, actualCount);
}
System.out.println(replicateScript.content());
StringBuilder asserts = new StringBuilder();
@@ -117,13 +117,10 @@ public class ReplicatePartialRequestTest extends PersistenceTestSupportWrite {
System.out.println(asserts);
return;
}
-
- try (ObserveTopiaPersistenceContext persistenceContext = applicationContext.newPersistenceContext()) {
- for (String table : shell) {
- long actualCount = persistenceContext.countTable(table) - before.get(table);
- long expectedCount = factor * expected.get(table);
- Assert.assertEquals("bad size for table: " + table, expectedCount, actualCount);
- }
+ for (String table : shell) {
+ long actualCount = persistenceContext.countTable(table) - before.get(table);
+ long expectedCount = factor * expected.get(table);
+ Assert.assertEquals("bad size for table: " + table, expectedCount, actualCount);
}
}
@@ -131,21 +128,25 @@ public class ReplicatePartialRequestTest extends PersistenceTestSupportWrite {
@CopyDatabaseConfiguration
public void test() {
Map<String, Long> expected = ObservePersistenceFixtures.loadFixturesMapCount("persistence/replicate_partial_count/" + classifier + "-" + flavor);
- try (ObserveTopiaApplicationContext applicationContext = localTestMethodResource.getTopiaApplicationContext()) {
+ ObserveTopiaApplicationContext applicationContext = localTestMethodResource.getTopiaApplicationContext();
- ReplicatePartialRequest replicateRequest = Trip.SPI.toSqlRequest(false, new MoveLayoutRequest(scopes, tripId, newId, false));
- Set<String> shell = applicationContext.createShell(replicateRequest);
- Map<String, Long> beforeResults = getBeforeResults(applicationContext, shell);
+ ReplicatePartialRequest replicateRequest = Trip.SPI.toSqlRequest(false, new MoveLayoutRequest(scopes, tripId, newId, false));
+ Set<String> shell = applicationContext.createShell(replicateRequest);
- assertReplicate(applicationContext, replicateRequest, shell, expected, beforeResults, 1);
+ try (ObserveTopiaPersistenceContext persistenceContext = applicationContext.newPersistenceContext()) {
- if (!ObservePersistenceFixtures.WITH_ASSERT) {
- return;
+ Map<String, Long> beforeResults = getBeforeResults(persistenceContext, shell);
+ try {
+ assertReplicate(applicationContext, persistenceContext, replicateRequest, shell, expected, beforeResults, 1);
+ if (!ObservePersistenceFixtures.WITH_ASSERT) {
+ return;
+ }
+ assertReplicate(applicationContext, persistenceContext, replicateRequest, shell, expected, beforeResults, 2);
+ assertReplicate(applicationContext, persistenceContext, replicateRequest, shell, expected, beforeResults, 3);
+ assertReplicate(applicationContext, persistenceContext, replicateRequest, shell, expected, beforeResults, 4);
+ } finally {
+ persistenceContext.rollback();
}
-
- assertReplicate(applicationContext, replicateRequest, shell, expected, beforeResults, 2);
- assertReplicate(applicationContext, replicateRequest, shell, expected, beforeResults, 3);
- assertReplicate(applicationContext, replicateRequest, shell, expected, beforeResults, 4);
}
}
}
=====================================
core/persistence/test/src/test/java/fr/ird/observe/persistence/test/request/ReplicateRequestTest.java
=====================================
@@ -33,14 +33,11 @@ import fr.ird.observe.entities.data.RootOpenableEntity;
import fr.ird.observe.entities.data.ps.logbook.SampleActivity;
import fr.ird.observe.entities.data.ps.logbook.WellActivity;
import fr.ird.observe.persistence.test.ObservePersistenceFixtures;
-import fr.ird.observe.persistence.test.PersistenceTestSupportWrite;
+import fr.ird.observe.persistence.test.PersistenceTestSupportRead;
import fr.ird.observe.spi.ObservePersistenceBusinessProject;
import fr.ird.observe.spi.context.DtoEntityContext;
import fr.ird.observe.spi.relation.WithDtoEntityRelation;
-import fr.ird.observe.test.DatabaseName;
import fr.ird.observe.test.IgnoreTestClassRule;
-import fr.ird.observe.test.spi.CopyDatabaseConfiguration;
-import fr.ird.observe.test.spi.DatabaseNameConfiguration;
import io.ultreia.java4all.util.sql.SqlScript;
import io.ultreia.java4all.util.sql.SqlScriptConsumer;
import org.junit.Assert;
@@ -62,8 +59,7 @@ import java.util.stream.Collectors;
* @since 9.0.0
*/
@RunWith(Parameterized.class)
-(a)DatabaseNameConfiguration(DatabaseName.data)
-public class ReplicateRequestTest extends PersistenceTestSupportWrite {
+public class ReplicateRequestTest extends PersistenceTestSupportRead {
@ClassRule
public static final IgnoreTestClassRule IGNORE2 = new IgnoreTestClassRule("Persistence Request", "persistence.request.test.skip");
@@ -78,54 +74,56 @@ public class ReplicateRequestTest extends PersistenceTestSupportWrite {
@Parameterized.Parameters(name = "{0}")
public static Iterable<Object[]> data() {
return ObservePersistenceBusinessProject.get().getEntityToDtoClassMapping().keySet().stream()
- .filter(Class::isInterface)
- .filter(Predicate.not(RootOpenableEntity.class::isAssignableFrom).and(DataEntity.class::isAssignableFrom).and(Predicate.not(NO_REPLICATE_TYPES::contains)))
- .sorted(Comparator.comparing(Object::toString)).map(t -> new Object[]{t}).collect(Collectors.toList());
+ .filter(Class::isInterface)
+ .filter(Predicate.not(RootOpenableEntity.class::isAssignableFrom).and(DataEntity.class::isAssignableFrom).and(Predicate.not(NO_REPLICATE_TYPES::contains)))
+ .sorted(Comparator.comparing(Object::toString)).map(t -> new Object[]{t}).collect(Collectors.toList());
}
@Test
- @CopyDatabaseConfiguration
public void replicate() {
String variableName = ObservePersistenceFixtures.getEntityVariableName(entityType);
String id = ObservePersistenceFixtures.getVariable(variableName);
log.info(String.format("test replicate for: %s", id));
DtoEntityContext<BusinessDto, DtoReference, ? extends DataEntity, ?> spi = ObservePersistenceBusinessProject.fromEntity(entityType);
- try (ObserveTopiaApplicationContext applicationContext = localTestMethodResource.getTopiaApplicationContext()) {
- ObservePersistenceFixtures.assertDataExist(applicationContext, spi, id);
- String parentId;
- try (ObserveTopiaPersistenceContext persistenceContext = applicationContext.newPersistenceContext()) {
- parentId = ((WithDtoEntityRelation<?, ?, ?, ?>) spi).getParentId(persistenceContext, id).getId();
- }
- log.info(String.format("use parent id: %s", parentId));
+ ObserveTopiaApplicationContext applicationContext = localTestMethodResource.getTopiaApplicationContext();
+ ObservePersistenceFixtures.assertDataExist(applicationContext, spi, id);
+ String parentId;
+ try (ObserveTopiaPersistenceContext persistenceContext = applicationContext.newPersistenceContext()) {
+ parentId = ((WithDtoEntityRelation<?, ?, ?, ?>) spi).getParentId(persistenceContext, id).getId();
+ }
+ log.info(String.format("use parent id: %s", parentId));
- ReplicateRequest replicateRequest = new ReplicateRequest(false, parentId, parentId, entityType.getName(), id);
- DeleteRequest deleteRequest = new DeleteRequest(false, entityType.getName(), parentId, id);
- SqlScript deleteScript = applicationContext.getSqlService().consume(deleteRequest);
- SqlScript replicateScript = applicationContext.getSqlService().consume(replicateRequest);
- String replicateScriptContent = replicateScript.content();
- String deleteScriptContent = deleteScript.content();
- if (!ObservePersistenceFixtures.WITH_ASSERT) {
- System.out.println(deleteScriptContent);
- System.out.println(replicateScriptContent);
- }
+ ReplicateRequest replicateRequest = new ReplicateRequest(false, parentId, parentId, entityType.getName(), id);
+ DeleteRequest deleteRequest = new DeleteRequest(false, entityType.getName(), parentId, id);
+ SqlScript deleteScript = applicationContext.getSqlService().consume(deleteRequest);
+ SqlScript replicateScript = applicationContext.getSqlService().consume(replicateRequest);
+ String replicateScriptContent = replicateScript.content();
+ String deleteScriptContent = deleteScript.content();
+ if (!ObservePersistenceFixtures.WITH_ASSERT) {
+ System.out.println(deleteScriptContent);
+ System.out.println(replicateScriptContent);
+ }
- try (ObserveTopiaPersistenceContext persistenceContext = applicationContext.newPersistenceContext()) {
+ try (ObserveTopiaPersistenceContext persistenceContext = applicationContext.newPersistenceContext()) {
+ try {
ObservePersistenceFixtures.assertDataExist(persistenceContext, spi, id);
TopiaDao<? extends DataEntity> dao = spi.getDao(persistenceContext);
long beforeCount = dao.count();
persistenceContext.executeSqlScript(deleteScript);
- persistenceContext.commit();
+ persistenceContext.flush();
ObservePersistenceFixtures.assertDataNotExist(persistenceContext, spi, id);
persistenceContext.executeSqlScript(SqlScriptConsumer.of(replicateScript));
- persistenceContext.commit();
+ persistenceContext.flush();
long afterCount = dao.count();
Assert.assertEquals(String.format("On type %s, should get count: %d, but get %d", entityType.getName(), beforeCount, afterCount), beforeCount, afterCount);
- ObservePersistenceFixtures.assertDataNotExist(applicationContext, spi, id);
-
+ ObservePersistenceFixtures.assertDataNotExist(persistenceContext, spi, id);
+ } finally {
+ persistenceContext.rollback();
}
+
}
}
View it on GitLab: https://gitlab.com/ultreiaio/ird-observe/-/commit/61a39193f1ace712c0f168ad3…
--
View it on GitLab: https://gitlab.com/ultreiaio/ird-observe/-/commit/61a39193f1ace712c0f168ad3…
You're receiving this email because of your account on gitlab.com.
1
0