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
November 2022
- 1 participants
- 117 discussions
[Git][ultreiaio/ird-observe][develop] Quadrants des océans Méditerranée et Multiples non initialisés - Closes #2540
by Tony CHEMIT (@tchemit) 22 Nov '22
by Tony CHEMIT (@tchemit) 22 Nov '22
22 Nov '22
Tony CHEMIT pushed to branch develop at ultreiaio / ird-observe
Commits:
c80c4354 by Tony Chemit at 2022-11-22T12:12:29+01:00
Quadrants des océans Méditerranée et Multiples non initialisés - Closes #2540
- - - - -
1 changed file:
- core/persistence/resources/src/main/resources/db/migration/v9/9.0/21_0_adapt_table_common_ocean-common.sql
Changes:
=====================================
core/persistence/resources/src/main/resources/db/migration/v9/9.0/21_0_adapt_table_common_ocean-common.sql
=====================================
@@ -31,8 +31,8 @@ UPDATE common.Ocean set lastUpdateDate = ${CURRENT_TIMESTAMP}, topiaVersion = to
-- For Ocean 3 Pacific
UPDATE common.Ocean set lastUpdateDate = ${CURRENT_TIMESTAMP}, topiaVersion = topiaVersion + 1, northEastAllowed = TRUE, southEastAllowed = TRUE, southWestAllowed = TRUE, northWestAllowed = TRUE WHERE topiaId = 'fr.ird.referential.common.Ocean#1239832686152#0.7039171539191688';
-- For Ocean 4
-UPDATE common.Ocean set lastUpdateDate = ${CURRENT_TIMESTAMP}, topiaVersion = topiaVersion + 1, northEastAllowed = TRUE, northWestAllowed = TRUE WHERE topiaId = 'fr.ird.entities.referential.common.Ocean#1651431107744#0.7000579392148572';
+UPDATE common.Ocean set lastUpdateDate = ${CURRENT_TIMESTAMP}, topiaVersion = topiaVersion + 1, northEastAllowed = TRUE, northWestAllowed = TRUE WHERE topiaId = 'fr.ird.referential.common.Ocean#1651431107744#0.7000579392148572';
-- For Ocean 99
-UPDATE common.Ocean set lastUpdateDate = ${CURRENT_TIMESTAMP}, topiaVersion = topiaVersion + 1, northEastAllowed = TRUE, southEastAllowed = TRUE, southWestAllowed = TRUE, northWestAllowed = TRUE WHERE topiaId = 'fr.ird.entities.referential.common.Ocean#1651650345031#0.44320492543276846';
+UPDATE common.Ocean set lastUpdateDate = ${CURRENT_TIMESTAMP}, topiaVersion = topiaVersion + 1, northEastAllowed = TRUE, southEastAllowed = TRUE, southWestAllowed = TRUE, northWestAllowed = TRUE WHERE topiaId = 'fr.ird.referential.common.Ocean#1651650345031#0.44320492543276846';
UPDATE common.LastUpdateDate SET lastUpdateDate = ${CURRENT_TIMESTAMP} WHERE type ='fr.ird.observe.entities.referential.common.Ocean';
\ No newline at end of file
View it on GitLab: https://gitlab.com/ultreiaio/ird-observe/-/commit/c80c43546b09b4bdbcec1851d…
--
View it on GitLab: https://gitlab.com/ultreiaio/ird-observe/-/commit/c80c43546b09b4bdbcec1851d…
You're receiving this email because of your account on gitlab.com.
1
0
[Git][ultreiaio/ird-observe][develop-9.0.x] Quadrants des océans Méditerranée et Multiples non initialisés - Closes #2540
by Tony CHEMIT (@tchemit) 22 Nov '22
by Tony CHEMIT (@tchemit) 22 Nov '22
22 Nov '22
Tony CHEMIT pushed to branch develop-9.0.x at ultreiaio / ird-observe
Commits:
8bde4b68 by Tony Chemit at 2022-11-22T11:41:49+01:00
Quadrants des océans Méditerranée et Multiples non initialisés - Closes #2540
- - - - -
1 changed file:
- core/persistence/resources/src/main/resources/db/migration/v9/9.0/21_0_adapt_table_common_ocean-common.sql
Changes:
=====================================
core/persistence/resources/src/main/resources/db/migration/v9/9.0/21_0_adapt_table_common_ocean-common.sql
=====================================
@@ -31,8 +31,8 @@ UPDATE common.Ocean set lastUpdateDate = ${CURRENT_TIMESTAMP}, topiaVersion = to
-- For Ocean 3 Pacific
UPDATE common.Ocean set lastUpdateDate = ${CURRENT_TIMESTAMP}, topiaVersion = topiaVersion + 1, northEastAllowed = TRUE, southEastAllowed = TRUE, southWestAllowed = TRUE, northWestAllowed = TRUE WHERE topiaId = 'fr.ird.referential.common.Ocean#1239832686152#0.7039171539191688';
-- For Ocean 4
-UPDATE common.Ocean set lastUpdateDate = ${CURRENT_TIMESTAMP}, topiaVersion = topiaVersion + 1, northEastAllowed = TRUE, northWestAllowed = TRUE WHERE topiaId = 'fr.ird.entities.referential.common.Ocean#1651431107744#0.7000579392148572';
+UPDATE common.Ocean set lastUpdateDate = ${CURRENT_TIMESTAMP}, topiaVersion = topiaVersion + 1, northEastAllowed = TRUE, northWestAllowed = TRUE WHERE topiaId = 'fr.ird.referential.common.Ocean#1651431107744#0.7000579392148572';
-- For Ocean 99
-UPDATE common.Ocean set lastUpdateDate = ${CURRENT_TIMESTAMP}, topiaVersion = topiaVersion + 1, northEastAllowed = TRUE, southEastAllowed = TRUE, southWestAllowed = TRUE, northWestAllowed = TRUE WHERE topiaId = 'fr.ird.entities.referential.common.Ocean#1651650345031#0.44320492543276846';
+UPDATE common.Ocean set lastUpdateDate = ${CURRENT_TIMESTAMP}, topiaVersion = topiaVersion + 1, northEastAllowed = TRUE, southEastAllowed = TRUE, southWestAllowed = TRUE, northWestAllowed = TRUE WHERE topiaId = 'fr.ird.referential.common.Ocean#1651650345031#0.44320492543276846';
UPDATE common.LastUpdateDate SET lastUpdateDate = ${CURRENT_TIMESTAMP} WHERE type ='fr.ird.observe.entities.referential.common.Ocean';
\ No newline at end of file
View it on GitLab: https://gitlab.com/ultreiaio/ird-observe/-/commit/8bde4b6814c870048356a488b…
--
View it on GitLab: https://gitlab.com/ultreiaio/ird-observe/-/commit/8bde4b6814c870048356a488b…
You're receiving this email because of your account on gitlab.com.
1
0
[Git][ultreiaio/ird-observe][develop-9.0.x] 6 commits: Migration - show stringFixedCount and commentFixedCount and the end
by Tony CHEMIT (@tchemit) 21 Nov '22
by Tony CHEMIT (@tchemit) 21 Nov '22
21 Nov '22
Tony CHEMIT pushed to branch develop-9.0.x at ultreiaio / ird-observe
Commits:
bbacf732 by Tony Chemit at 2022-11-20T11:05:04+01:00
Migration - show stringFixedCount and commentFixedCount and the end
- - - - -
f1331125 by Tony Chemit at 2022-11-21T14:37:04+01:00
Replay Sample migration - See #2539
- - - - -
00f0ee47 by Tony Chemit at 2022-11-21T14:38:23+01:00
Service - Add new service TripService.getPsObservationCatchesSpeciesFateBySpeciesId
- - - - -
529742f7 by Tony Chemit at 2022-11-21T14:38:23+01:00
GUI Sample - Use specific SpeciesFate for selected Species in Form
- - - - -
e6cbd1a5 by Tony Chemit at 2022-11-21T14:38:23+01:00
Model - Clean Sample dto (remove speciesFate, availableSpeciesIds and availableSpeciesFateIds fields)
- - - - -
9bfe6476 by Tony Chemit at 2022-11-21T15:27:09+01:00
Merge branch 'feature/issue_2538' into develop-9.0.x
Closes #2538
- - - - -
13 changed files:
- client/datasource/editor/ps/src/main/java/fr/ird/observe/client/datasource/editor/ps/data/observation/SampleUIHandler.java
- client/datasource/editor/ps/src/main/java/fr/ird/observe/client/datasource/editor/ps/data/observation/SampleUIModelStates.java
- core/api/services/src/main/java/fr/ird/observe/services/service/data/ps/common/TripService.java
- core/persistence/java/src/main/java/fr/ird/observe/entities/data/ps/observation/SampleSpi.java
- core/persistence/resources/src/main/java/fr/ird/observe/spi/migration/v9/DataSourceMigrationForVersion_9_0.java
- + core/persistence/resources/src/main/java/fr/ird/observe/spi/migration/v9/SampleMeasureRecord.java
- + core/persistence/resources/src/main/java/fr/ird/observe/spi/migration/v9/SampleRecord.java
- core/services/local/src/main/java/fr/ird/observe/services/local/service/data/ps/common/TripServiceLocalSupport.java
- core/services/test/src/main/java/fr/ird/observe/services/service/data/ps/common/TripServiceFixtures.java
- core/services/test/src/main/resources/fixtures/fr/ird/observe/services/service/data/ps/common/TripService.properties
- model/src/main/models/Observe/dto/20-data-ps-observation.model
- model/src/main/models/Observe/dto/attribute/unique.properties
- server/core/src/main/filtered-resources/META-INF/mapping-api-client.wm
Changes:
=====================================
client/datasource/editor/ps/src/main/java/fr/ird/observe/client/datasource/editor/ps/data/observation/SampleUIHandler.java
=====================================
@@ -28,6 +28,7 @@ import fr.ird.observe.dto.data.ps.observation.SampleMeasureDto;
import fr.ird.observe.dto.referential.common.SizeMeasureTypeReference;
import fr.ird.observe.dto.referential.common.SpeciesReference;
import fr.ird.observe.dto.referential.common.WeightMeasureTypeReference;
+import fr.ird.observe.dto.referential.ps.common.SpeciesFateReference;
import org.apache.logging.log4j.LogManager;
import org.apache.logging.log4j.Logger;
import org.nuiton.jaxx.runtime.swing.JAXXButtonGroup;
@@ -36,6 +37,7 @@ import javax.swing.JComponent;
import javax.swing.event.ChangeEvent;
import java.awt.Component;
import java.beans.PropertyChangeListener;
+import java.util.List;
import java.util.Optional;
/**
@@ -99,7 +101,7 @@ public class SampleUIHandler extends GeneratedSampleUIHandler {
onLengthChanged(tableEditBean.getLength(), false);
onWeightChanged(tableEditBean.getWeight(), false);
- SampleUIModel sampleModel = getModel();
+ SampleUIModelStates states = getModel().getStates();
SpeciesReference species = tableEditBean.getSpecies();
log.info(String.format("%s selected species %s", prefix, species));
@@ -113,7 +115,7 @@ public class SampleUIHandler extends GeneratedSampleUIHandler {
boolean unsetSpecies = true;
if (newRow) {
// use default mode
- AcquisitionMode acquisitionMode = sampleModel.getStates().getDefaultAcquisitionMode();
+ AcquisitionMode acquisitionMode = states.getDefaultAcquisitionMode();
if (previousRowBean != null) {
//use previous row (species won't be empty)
unsetSpecies = false;
@@ -131,8 +133,8 @@ public class SampleUIHandler extends GeneratedSampleUIHandler {
}
// get default size measure type
- defaultSizeMeasureType = sampleModel.getStates().getSpeciesDefaultSizeMeasureType(species);
- defaultWeightMeasureType = sampleModel.getStates().getSpeciesDefaultWeightMeasureType(species);
+ defaultSizeMeasureType = states.getSpeciesDefaultSizeMeasureType(species);
+ defaultWeightMeasureType = states.getSpeciesDefaultWeightMeasureType(species);
if (unsetSpecies) {
// unset species (this will not set again species in widget)
@@ -145,8 +147,8 @@ public class SampleUIHandler extends GeneratedSampleUIHandler {
updateAcquisitionMode0(AcquisitionMode.valueOf(tableEditBean.getAcquisitionMode()));
// get default size measure type
- defaultSizeMeasureType = sampleModel.getStates().getSpeciesDefaultSizeMeasureType(species);
- defaultWeightMeasureType = sampleModel.getStates().getSpeciesDefaultWeightMeasureType(species);
+ defaultSizeMeasureType = states.getSpeciesDefaultSizeMeasureType(species);
+ defaultWeightMeasureType = states.getSpeciesDefaultWeightMeasureType(species);
species = null;
sizeMeasureType = Optional.ofNullable(tableEditBean.getSizeMeasureType());
@@ -154,8 +156,8 @@ public class SampleUIHandler extends GeneratedSampleUIHandler {
}
// use default size measure type
- sampleModel.getStates().setDefaultSizeMeasureType(defaultSizeMeasureType.orElse(null));
- sampleModel.getStates().setDefaultWeightMeasureType(defaultWeightMeasureType.orElse(null));
+ states.setDefaultSizeMeasureType(defaultSizeMeasureType.orElse(null));
+ states.setDefaultWeightMeasureType(defaultWeightMeasureType.orElse(null));
ui.getSizeMeasureType().setSelectedItem(null);
sizeMeasureType.ifPresent(ui.getSizeMeasureType()::setSelectedItem);
@@ -172,16 +174,36 @@ public class SampleUIHandler extends GeneratedSampleUIHandler {
ui.getSpecies().setSelectedItem(null);
ui.getSpecies().setSelectedItem(species);
}
+ updateSpeciesFateUniverse(tableEditBean.getSpecies(), tableEditBean.getSpeciesFate());
}
protected void onSpeciesChanged(SpeciesReference species) {
- SampleUIModel model = getModel();
- Optional<SizeMeasureTypeReference> sizeMeasureType = model.getStates().getSpeciesDefaultSizeMeasureType(species);
- Optional<WeightMeasureTypeReference> weightMeasureType = model.getStates().getSpeciesDefaultWeightMeasureType(species);
- model.getStates().setDefaultSizeMeasureType(sizeMeasureType.orElse(null));
- model.getStates().setDefaultWeightMeasureType(weightMeasureType.orElse(null));
+ SampleUIModelStates states = getModel().getStates();
+ Optional<SizeMeasureTypeReference> sizeMeasureType = states.getSpeciesDefaultSizeMeasureType(species);
+ Optional<WeightMeasureTypeReference> weightMeasureType = states.getSpeciesDefaultWeightMeasureType(species);
+ states.setDefaultSizeMeasureType(sizeMeasureType.orElse(null));
+ states.setDefaultWeightMeasureType(weightMeasureType.orElse(null));
resetDefaultSizeMeasureType(false);
resetDefaultWeightMeasureType(false);
+ updateSpeciesFateUniverse(species, states.getTableEditBean().getSpeciesFate());
+ }
+
+ protected void updateSpeciesFateUniverse(SpeciesReference species, SpeciesFateReference speciesFate) {
+ ui.getSpeciesFate().setSelectedItem(null);
+ if (species == null) {
+ ui.getSpeciesFate().setEnabled(false);
+ ui.getSpeciesFate().setData(List.of());
+ } else {
+ List<SpeciesFateReference> speciesFateReferences = getModel().getStates().getSpeciesFate(species);
+ ui.getSpeciesFate().setData(speciesFateReferences);
+ ui.getSpeciesFate().setEnabled(true);
+ //FIXME Due to none sample migration on speciesFate, we can have some one not present in speciesFateReferences
+ //FIXME Need a fix in migration probably
+// if (speciesFate != null && speciesFateReferences.contains(speciesFate)) {
+ if (speciesFate != null) {
+ ui.getSpeciesFate().setSelectedItem(speciesFate);
+ }
+ }
}
public void resetDefaultSizeMeasureType(boolean force) {
=====================================
client/datasource/editor/ps/src/main/java/fr/ird/observe/client/datasource/editor/ps/data/observation/SampleUIModelStates.java
=====================================
@@ -37,6 +37,10 @@ import fr.ird.observe.services.ObserveServicesProvider;
import io.ultreia.java4all.bean.spi.GenerateJavaBeanDefinition;
import javax.swing.Icon;
+import java.util.List;
+import java.util.Map;
+import java.util.Set;
+import java.util.stream.Collectors;
import static io.ultreia.java4all.i18n.I18n.n;
import static io.ultreia.java4all.i18n.I18n.t;
@@ -51,6 +55,11 @@ public class SampleUIModelStates extends SampleContentTableUIModelStates<SampleD
private final Icon computedIcon;
private final Icon observedIcon;
+ /**
+ * Dictionary of species fate ids available per species id.
+ */
+ private Map<String, Set<String>> speciesFateBySpeciesMap;
+
public SampleUIModelStates(GeneratedSampleUIModel model) {
super(model, SampleDto.newDto(new java.util.Date()), SampleMeasureDto.newDto(new java.util.Date()), model.getSource().getInitializer().getSelectedId(), model.getSource().getInitializer().getScope().isStandalone());
this.computedIcon = UIHelper.getUIManagerActionIcon("data-calcule");
@@ -69,8 +78,10 @@ public class SampleUIModelStates extends SampleContentTableUIModelStates<SampleD
@Override
public void onAfterInitAddReferentialFilters(ClientConfig clientConfig, Project observeSelectModel, ObserveServicesProvider servicesProvider, ReferencesCache referenceCache) {
- referenceCache.addReferentialFilter(SampleMeasureDto.PROPERTY_SPECIES, ReferencesFilterHelper.<SampleDto, SpeciesReference>newSubList(SampleDto::getAvailableSpeciesIds));
- referenceCache.addReferentialFilter(SampleMeasureDto.PROPERTY_SPECIES_FATE, ReferencesFilterHelper.<SampleDto, SpeciesFateReference>newSubList(SampleDto::getAvailableSpeciesFateIds));
+ speciesFateBySpeciesMap = servicesProvider.getPsCommonTripService().getPsObservationCatchesSpeciesFateBySpeciesId(observeSelectModel.getPs().getObservationSet().getId());
+ referenceCache.addReferentialFilter(SampleMeasureDto.PROPERTY_SPECIES, ReferencesFilterHelper.<SampleDto, SpeciesReference>newSubList(e -> speciesFateBySpeciesMap.keySet()));
+ referenceCache.addReferentialFilter(SampleMeasureDto.PROPERTY_SPECIES_FATE, ReferencesFilterHelper.<SampleDto, SpeciesFateReference>newSubList(
+ e -> speciesFateBySpeciesMap.values().stream().flatMap(Set::stream).collect(Collectors.toSet())));
}
@Override
@@ -92,4 +103,8 @@ public class SampleUIModelStates extends SampleContentTableUIModelStates<SampleD
return computed ? computedIcon : observedIcon;
}
+ public List<SpeciesFateReference> getSpeciesFate(SpeciesReference speciesReference) {
+ Set<String> availableSpeciesFateIds = speciesFateBySpeciesMap.get(speciesReference.getId());
+ return getReferenceCache().<SpeciesFateReference>getReferentialReferenceSet(SampleMeasureDto.PROPERTY_SPECIES_FATE).subSet(availableSpeciesFateIds).collect(Collectors.toList());
+ }
}
=====================================
core/api/services/src/main/java/fr/ird/observe/services/service/data/ps/common/TripService.java
=====================================
@@ -33,6 +33,9 @@ import io.ultreia.java4all.http.spi.Get;
import io.ultreia.java4all.http.spi.Nullable;
import io.ultreia.java4all.http.spi.Service;
+import java.util.Map;
+import java.util.Set;
+
/**
* Created on 26/07/2021.
*
@@ -54,6 +57,10 @@ public interface TripService extends TripAwareService {
@MethodCredential(Permission.READ_DATA)
boolean isActivityEndOfSearchFound(String routeId);
+ @Get
+ @MethodCredential(Permission.READ_DATA)
+ Map<String, Set<String>> getPsObservationCatchesSpeciesFateBySpeciesId(String setId);
+
@Get
@MethodCredential(Permission.WRITE_DATA)
Form<fr.ird.observe.dto.data.ps.observation.FloatingObjectDto> preCreateObservationFloatingObject(String activityId, @Nullable FloatingObjectPreset floatingObjectPreset);
=====================================
core/persistence/java/src/main/java/fr/ird/observe/entities/data/ps/observation/SampleSpi.java
=====================================
@@ -26,13 +26,13 @@ import fr.ird.observe.dto.data.ps.observation.SampleDto;
import fr.ird.observe.dto.db.ConcurrentModificationException;
import fr.ird.observe.dto.form.Form;
import fr.ird.observe.dto.result.SaveResultDto;
-import fr.ird.observe.entities.referential.common.Species;
import fr.ird.observe.entities.referential.ps.common.SpeciesFate;
import fr.ird.observe.spi.result.AddEntityToUpdateStep;
import fr.ird.observe.spi.service.ServiceContext;
-import java.util.Objects;
-import java.util.stream.Collectors;
+import java.util.Map;
+import java.util.TreeMap;
+import java.util.TreeSet;
public class SampleSpi extends GeneratedSampleSpi {
@@ -45,8 +45,6 @@ public class SampleSpi extends GeneratedSampleSpi {
SampleDto dto = form.getObject();
// always use the set id, //FIXME See why ?
dto.setId(id);
- dto.setAvailableSpeciesIds(parent.getCatches().stream().map(Catch::getSpecies).map(Species::getTopiaId).collect(Collectors.toSet()));
- dto.setAvailableSpeciesFateIds(parent.getCatches().stream().map(Catch::getSpeciesFate).filter(Objects::nonNull).map(SpeciesFate::getTopiaId).collect(Collectors.toSet()));
return form;
}
@@ -64,7 +62,7 @@ public class SampleSpi extends GeneratedSampleSpi {
Sample.SPI.getDao(context).initId(entity);
parent.addSample(entity);
}
- SampleMeasure.SPI.initId(context,entity.getSampleMeasure());
+ SampleMeasure.SPI.initId(context, entity.getSampleMeasure());
context.getTopiaPersistenceContext().flush();
AddEntityToUpdateStep saveHelper = newSaveHelper(context)
.update(this, entity);
@@ -74,6 +72,17 @@ public class SampleSpi extends GeneratedSampleSpi {
.build(entity);
}
+ public Map<String, java.util.Set<String>> getCatchesSpeciesFateBySpeciesId(ServiceContext context, String id) {
+ Set parent = Set.loadEntity(context, id);
+ Map<String, java.util.Set<String>> result = new TreeMap<>();
+ parent.getCatches().stream().filter(c -> c.getSpeciesFate() != null).forEach(aCatch -> {
+ String speciesId = aCatch.getSpecies().getId();
+ SpeciesFate speciesFate = aCatch.getSpeciesFate();
+ result.computeIfAbsent(speciesId, e -> new TreeSet<>()).add(speciesFate.getId());
+ });
+ return result;
+ }
+
protected Sample loadSampleFormEntity(ServiceContext context, Set parent) {
if (parent.isSampleEmpty()) {
return Sample.newEntity(context.now());
=====================================
core/persistence/resources/src/main/java/fr/ird/observe/spi/migration/v9/DataSourceMigrationForVersion_9_0.java
=====================================
@@ -23,8 +23,6 @@ package fr.ird.observe.spi.migration.v9;
*/
import com.google.auto.service.AutoService;
-import fr.ird.observe.dto.StringCleaner;
-import fr.ird.observe.persistence.SqlHelper;
import fr.ird.observe.spi.migration.ByMajorMigrationVersionResource;
import io.ultreia.java4all.util.Version;
import io.ultreia.java4all.util.sql.SqlQuery;
@@ -36,8 +34,6 @@ import org.nuiton.topia.service.migration.resources.MigrationVersionResourceExec
import java.sql.PreparedStatement;
import java.sql.ResultSet;
-import java.sql.SQLException;
-import java.sql.Timestamp;
import java.util.LinkedHashSet;
import java.util.List;
import java.util.Map;
@@ -61,6 +57,11 @@ public class DataSourceMigrationForVersion_9_0 extends ByMajorMigrationVersionRe
public static final String INFORMATION_SOURCE_U = "fr.ird.referential.ps.observation.InformationSource#1464000000000#03";
public static final String SPECIES_FATE_5 = "fr.ird.referential.ps.common.SpeciesFate#1239832683619#0.6250731662108877";
public static final String SPECIES_FATE_6 = "fr.ird.referential.ps.common.SpeciesFate#1239832683619#0.5722739932065866";
+ public static final Set<String> SMALL_SPECIES_TO_SPECIES_FATE_6 =
+ Set.of("fr.ird.referential.common.Species#1239832685476#0.5618871286604711", //ALB
+ "fr.ird.referential.common.Species#1239832685475#0.13349466123905152", //BET
+ "fr.ird.referential.common.Species#1239832685474#0.975344121171992", //SKJ
+ "fr.ird.referential.common.Species#1239832685474#0.8943253454598569"); //YFT
public static final String SPECIES_FATE_15 = "fr.ird.referential.ps.common.SpeciesFate#1464000000000#15";
public DataSourceMigrationForVersion_9_0() {
@@ -163,6 +164,7 @@ public class DataSourceMigrationForVersion_9_0 extends ByMajorMigrationVersionRe
executor.addScript("03_2", "migrate-table-ps_observation_catch_well");
// See https://gitlab.com/ultreiaio/ird-observe/-/issues/2436
+ // See https://gitlab.com/ultreiaio/ird-observe/-/issues/2539
migrateSample(executor);
}
@@ -283,319 +285,40 @@ public class DataSourceMigrationForVersion_9_0 extends ByMajorMigrationVersionRe
});
}
- static class Sample {
- String topiaId;
- long topiaVersion;
- Timestamp topiaCreateDate;
- Timestamp lastUpdateDate;
- String homeId;
- String comment;
- String set;
-
- public Sample(ResultSet resultSet) throws SQLException {
- this.topiaId = resultSet.getString(1);
- this.topiaVersion = resultSet.getLong(2);
- this.topiaCreateDate = resultSet.getTimestamp(3);
- this.homeId = resultSet.getString(4);
- this.comment = resultSet.getString(5);
- this.set = resultSet.getString(6);
- this.lastUpdateDate = resultSet.getTimestamp(7);
- }
-
- public void addHomeId(String homeId) {
- if (homeId == null) {
- return;
- }
- if (this.homeId == null) {
- this.homeId = homeId;
- return;
- }
- this.homeId += " - " + homeId;
- }
-
- public void addComment(String comment) {
- if (comment == null) {
- return;
- }
- if (this.comment == null) {
- this.comment = comment;
- return;
- }
- this.comment += " \n " + comment;
- }
-
- }
-
-
- static class SampleMeasure {
- String topiaId;
- long topiaVersion;
- Timestamp topiaCreateDate;
- Timestamp lastUpdateDate;
- String homeId;
- Float length;
- Boolean isLengthComputed;
- String picturesReferences;
- Float weight;
- Boolean isWeightComputed;
- int count;
- int acquisitionMode;
- String species;
- String sample;
- String sex;
- String sizeMeasureType;
- String weightMeasureType;
- String tagNumber;
- String speciesFate;
- int sample_idx;
- String lengthMeasureMethod;
- String weightMeasureMethod;
-
- public SampleMeasure(ResultSet resultSet) throws SQLException {
- this.topiaId = resultSet.getString(1);
- this.topiaVersion = resultSet.getLong(2);
- this.topiaCreateDate = resultSet.getTimestamp(3);
- this.homeId = resultSet.getString(4);
- this.length = resultSet.getFloat(5);
- this.isLengthComputed = resultSet.getBoolean(6);
- this.picturesReferences = resultSet.getString(7);
- this.weight = resultSet.getFloat(8);
- this.isWeightComputed = resultSet.getBoolean(9);
- this.count = resultSet.getInt(10);
- this.acquisitionMode = resultSet.getInt(11);
- this.species = resultSet.getString(12);
- this.sample = resultSet.getString(13);
- this.sex = resultSet.getString(14);
- this.lastUpdateDate = resultSet.getTimestamp(15);
- this.sizeMeasureType = resultSet.getString(16);
- this.weightMeasureType = resultSet.getString(17);
- this.tagNumber = resultSet.getString(18);
- this.speciesFate = resultSet.getString(19);
- this.sample_idx = resultSet.getInt(20);
- this.lengthMeasureMethod = resultSet.getString(21);
- this.weightMeasureMethod = resultSet.getString(22);
- // See https://gitlab.com/ultreiaio/ird-observe/-/issues/2503
- if (acquisitionMode == 0 && weight != null && !isWeightComputed) {
- isWeightComputed = true;
- }
- }
-
- }
private void migrateSample(MigrationVersionResourceExecutor executor) {
- Map<String, Sample> setToSampleMap = new TreeMap<>();
+ Map<String, SampleRecord> setToSampleMap = new TreeMap<>();
Map<String, String> sampleMapping = new TreeMap<>();
- addSample(executor, setToSampleMap, sampleMapping, "SELECT REPLACE(topiaId, '.NonTargetSample', '.Sample'), topiaVersion, topiaCreateDate, homeId, comment, set, lastUpdateDate FROM ps_observation.nontargetsample order by set, topiaId");
-
- addSample(executor, setToSampleMap, sampleMapping, "SELECT REPLACE(topiaId, '.TargetSample', '.Sample'), topiaVersion, topiaCreateDate, homeId, comment, set, lastUpdateDate FROM ps_observation.targetsample order by set, topiaId");
+ executor.doSqlWork(connection -> {
+ SampleRecord.addNonTargetSample(connection, setToSampleMap, sampleMapping);
+ SampleRecord.addTargetSample(connection, setToSampleMap, sampleMapping);
+ });
Function<String, String> stringFormat = executor.commentFormat();
- for (Sample sample : setToSampleMap.values()) {
- executor.writeSql(String.format("INSERT INTO ps_observation.Sample(topiaId, topiaVersion, topiaCreateDate, homeId, comment, set, lastUpdateDate) VALUES('%s', %s, '%s'::timestamp, %s, %s, '%s', '%s'::timestamp);",
- sample.topiaId,
- sample.topiaVersion,
- sample.topiaCreateDate,
- SqlHelper.escapeString(StringCleaner.ALL.apply(sample.homeId)),
- stringFormat.apply(sample.comment),
- sample.set,
- sample.lastUpdateDate
- ));
+ for (SampleRecord sample : setToSampleMap.values()) {
+ executor.writeSql(sample.toSampleSql(stringFormat));
}
migrateSampleMeasure(executor, sampleMapping);
}
private void migrateSampleMeasure(MigrationVersionResourceExecutor executor, Map<String, String> sampleMapping) {
- // nonTargetSampleMeasure
- addSampleMeasure(executor, sampleMapping, "SELECT " +
- "REPLACE(topiaId, '.NonTargetLength', '.SampleMeasure'), " +
- "topiaVersion + 1, " +
- "topiaCreateDate, " +
- "homeId, " +
- "length, " +
- "isLengthComputed, " +
- "picturesReferences, " +
- "weight, " +
- "isWeightComputed, " +
- "count, " +
- "acquisitionMode, " +
- "species, " +
- "REPLACE(nonTargetSample, '.NonTargetSample', '.Sample'), " +
- "sex, " +
- "lastUpdateDate, " +
- "sizeMeasureType, " +
- "weightMeasureType, " +
- "tagNumber, " +
- "speciesFate, " +
- "nonTargetSample_idx, " +
- "lengthMeasureMethod, " +
- "weightMeasureMethod " +
- "FROM ps_observation.NonTargetLength");
-
- // discardedTargetSampleMeasure
- addSampleMeasure(executor, sampleMapping, "SELECT " +
- "REPLACE(tl.topiaId, '.TargetLength', '.SampleMeasure'), " +
- "tl.topiaVersion + 1, " +
- "tl.topiaCreateDate, " +
- "tl.homeId, " +
- "tl.length, " +
- "tl.isLengthComputed, " +
- "NULL, " +
- "tl.weight, " +
- "tl.isWeightComputed, " +
- "tl.count, " +
- "tl.acquisitionMode, " +
- "tl.species, " +
- "REPLACE(tl.targetSample, '.TargetSample', '.Sample'), " +
- "'fr.ird.referential.common.Sex#1239832686121#0.0', " +
- "tl.lastUpdateDate, " +
- "tl.sizeMeasureType, " +
- "tl.weightMeasureType, " +
- "tl.tagNumber, " +
- "'fr.ird.referential.ps.common.SpeciesFate#1239832683619#0.6250731662108877', " +
- "-tl.targetsample_idx, " +
- "tl.lengthMeasureMethod, " +
- "tl.weightMeasureMethod " +
- "FROM ps_observation.TargetSample ts " +
- "INNER JOIN ps_observation.TargetLength tl ON (tl.targetSample=ts.topiaId) " +
- "WHERE ts.discarded");
-
- // notDiscardedTargetSampleMeasure
- addSampleMeasure(executor, sampleMapping, "SELECT " +
- "REPLACE(tl.topiaId, '.TargetLength', '.SampleMeasure'), " +
- "tl.topiaVersion + 1, " +
- "tl.topiaCreateDate, " +
- "tl.homeId, " +
- "tl.length, " +
- "tl.isLengthComputed, " +
- "NULL, " +
- "tl.weight, " +
- "tl.isWeightComputed, " +
- "tl.count, " +
- "tl.acquisitionMode, " +
- "tl.species, " +
- "REPLACE(tl.targetSample, '.TargetSample', '.Sample'), " +
- "'fr.ird.referential.common.Sex#1239832686121#0.0', " +
- "tl.lastUpdateDate, " +
- "tl.sizeMeasureType, " +
- "tl.weightMeasureType, " +
- "tl.tagNumber, " +
- "'fr.ird.referential.ps.common.SpeciesFate#1239832683619#0.5722739932065866', " +
- "-tl.targetsample_idx, " +
- "tl.lengthMeasureMethod, " +
- "tl.weightMeasureMethod " +
- "FROM ps_observation.TargetSample ts " +
- "INNER JOIN ps_observation.TargetLength tl ON (tl.targetSample=ts.topiaId) " +
- "WHERE NOT ts.discarded");
- }
-
- private void addSample(MigrationVersionResourceExecutor executor, Map<String, Sample> setToSampleMap, Map<String, String> sampleMapping, String query) {
- List<Sample> targetSample = executor.findMultipleResult(SqlQuery.wrap(query, Sample::new));
- for (Sample sample : targetSample) {
- Sample existingSample = setToSampleMap.get(sample.set);
- if (existingSample == null) {
- // new sample
- setToSampleMap.put(sample.set, sample);
- } else {
- // add to sample mapping
- sampleMapping.put(sample.topiaId, existingSample.topiaId);
- // update homeId
- existingSample.addHomeId(sample.homeId);
- // update comment
- existingSample.addComment(sample.comment);
- }
- }
- }
-
- private void addSampleMeasure(MigrationVersionResourceExecutor executor, Map<String, String> sampleMapping, String query) {
- List<SampleMeasure> sampleMeasureList = executor.findMultipleResult(SqlQuery.wrap(query, SampleMeasure::new));
- for (SampleMeasure sampleMeasure : sampleMeasureList) {
- String sampleId = sampleMapping.get(sampleMeasure.sample);
- if (sampleId == null) {
- sampleId = sampleMeasure.sample;
- }
- executor.writeSql(String.format("INSERT INTO ps_observation.SampleMeasure(" +
- " topiaId," +
- " topiaVersion," +
- " topiaCreateDate," +
- " homeId," +
- " length," +
- " isLengthComputed," +
- " picturesReferences," +
- " weight," +
- " isWeightComputed," +
- " count," +
- " acquisitionMode," +
- " species," +
- " sample," +
- " sex," +
- " lastUpdateDate," +
- " sizeMeasureType," +
- " weightMeasureType," +
- " tagNumber," +
- " speciesFate," +
- " sample_idx," +
- " lengthMeasureMethod," +
- " weightMeasureMethod)" +
- " VALUES(" +
- "'%s', " +
- "%s, " +
- "'%s'::timestamp, " +
- "%s, " +
- "%s, " +
- "%s, " +
- "%s, " +
- "%s, " +
- "%s, " +
- "%s, " +
- "%s, " +
- "%s, " +
- "'%s', " +
- "%s, " +
- "'%s'::timestamp, " +
- "%s, " +
- "%s, " +
- "%s, " +
- "%s, " +
- "%s, " +
- "%s, " +
- "%s " +
- ");",
- sampleMeasure.topiaId,
- sampleMeasure.topiaVersion,
- sampleMeasure.topiaCreateDate,
- SqlHelper.escapeString(sampleMeasure.homeId == null ? null : sampleMeasure.homeId.replaceAll("'", "")),
- sampleMeasure.length,
- sampleMeasure.isLengthComputed,
- SqlHelper.escapeString(sampleMeasure.picturesReferences == null ? null : sampleMeasure.picturesReferences.replaceAll("'", "")),
- sampleMeasure.weight,
- sampleMeasure.isWeightComputed,
- sampleMeasure.count,
- sampleMeasure.acquisitionMode,
- SqlHelper.escapeString(sampleMeasure.species),
- sampleId,
- SqlHelper.escapeString(sampleMeasure.sex),
- sampleMeasure.lastUpdateDate,
- SqlHelper.escapeString(sampleMeasure.sizeMeasureType),
- SqlHelper.escapeString(sampleMeasure.weightMeasureType),
- SqlHelper.escapeString(sampleMeasure.tagNumber),
- SqlHelper.escapeString(sampleMeasure.speciesFate),
- sampleMeasure.sample_idx,
- SqlHelper.escapeString(sampleMeasure.lengthMeasureMethod),
- SqlHelper.escapeString(sampleMeasure.weightMeasureMethod)
- ));
- }
+ executor.doSqlWork(connection -> {
+ SampleMeasureRecord.addNonTargetSampleMeasure(connection, executor, sampleMapping);
+ SampleMeasureRecord.addDiscardedTargetSampleMeasure(connection, executor, sampleMapping);
+ SampleMeasureRecord.addNotDiscardedTargetSampleMeasure(connection, executor, sampleMapping);
+ });
}
@Override
public void generateFinalizeSqlScript(MigrationVersionResourceExecutor executor) {
long stringFixedCount = new FixStringHelper(executor).execute();
+ long commentFixedCount = new FixCommentHelper(executor).execute();
if (stringFixedCount > 0) {
log.warn(String.format("Fix %s string rows(s).", stringFixedCount));
}
- long commentFixedCount = new FixCommentHelper(executor).execute();
if (commentFixedCount > 0) {
log.warn(String.format("Fix %s comment rows(s).", commentFixedCount));
}
=====================================
core/persistence/resources/src/main/java/fr/ird/observe/spi/migration/v9/SampleMeasureRecord.java
=====================================
@@ -0,0 +1,301 @@
+package fr.ird.observe.spi.migration.v9;
+
+/*-
+ * #%L
+ * ObServe Core :: Persistence :: Resources
+ * %%
+ * Copyright (C) 2008 - 2022 IRD, Ultreia.io
+ * %%
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as
+ * published by the Free Software Foundation, either version 3 of the
+ * License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public
+ * License along with this program. If not, see
+ * <http://www.gnu.org/licenses/gpl-3.0.html>.
+ * #L%
+ */
+
+import fr.ird.observe.persistence.SqlHelper;
+import org.nuiton.topia.service.migration.resources.MigrationVersionResourceExecutor;
+
+import java.sql.Connection;
+import java.sql.PreparedStatement;
+import java.sql.ResultSet;
+import java.sql.SQLException;
+import java.sql.Timestamp;
+import java.util.Map;
+import java.util.function.Function;
+
+/**
+ * Created on 20/11/2022.
+ *
+ * @author Tony Chemit - dev(a)tchemit.fr
+ * @since 9.0.18
+ */
+class SampleMeasureRecord {
+
+ static void addNonTargetSampleMeasure(Connection connection, MigrationVersionResourceExecutor executor, Map<String, String> sampleMapping) throws SQLException {
+ addSampleMeasure(connection, executor, sampleMapping, "SELECT " +
+ "REPLACE(topiaId, '.NonTargetLength', '.SampleMeasure'), " +
+ "topiaVersion + 1, " +
+ "topiaCreateDate, " +
+ "homeId, " +
+ "length, " +
+ "isLengthComputed, " +
+ "picturesReferences, " +
+ "weight, " +
+ "isWeightComputed, " +
+ "count, " +
+ "acquisitionMode, " +
+ "species, " +
+ "REPLACE(nonTargetSample, '.NonTargetSample', '.Sample'), " +
+ "sex, " +
+ "lastUpdateDate, " +
+ "sizeMeasureType, " +
+ "weightMeasureType, " +
+ "tagNumber, " +
+ "speciesFate, " +
+ "nonTargetSample_idx, " +
+ "lengthMeasureMethod, " +
+ "weightMeasureMethod " +
+ "FROM ps_observation.NonTargetLength",
+ SampleMeasureRecord::toNonTargetSpeciesFate);
+ }
+
+ static void addDiscardedTargetSampleMeasure(Connection connection, MigrationVersionResourceExecutor executor, Map<String, String> sampleMapping) throws SQLException {
+ addSampleMeasure(connection, executor, sampleMapping, "SELECT " +
+ "REPLACE(tl.topiaId, '.TargetLength', '.SampleMeasure'), " +
+ "tl.topiaVersion + 1, " +
+ "tl.topiaCreateDate, " +
+ "tl.homeId, " +
+ "tl.length, " +
+ "tl.isLengthComputed, " +
+ "NULL, " +
+ "tl.weight, " +
+ "tl.isWeightComputed, " +
+ "tl.count, " +
+ "tl.acquisitionMode, " +
+ "tl.species, " +
+ "REPLACE(tl.targetSample, '.TargetSample', '.Sample'), " +
+ "'fr.ird.referential.common.Sex#1239832686121#0.0', " +
+ "tl.lastUpdateDate, " +
+ "tl.sizeMeasureType, " +
+ "tl.weightMeasureType, " +
+ "tl.tagNumber, " +
+ "'fr.ird.referential.ps.common.SpeciesFate#1239832683619#0.6250731662108877', " +
+ "-tl.targetSample_idx, " +
+ "tl.lengthMeasureMethod, " +
+ "tl.weightMeasureMethod " +
+ "FROM ps_observation.TargetSample ts " +
+ "INNER JOIN ps_observation.TargetLength tl ON (tl.targetSample=ts.topiaId) " +
+ "WHERE ts.discarded",
+ SampleMeasureRecord::toDiscardedTargetSpeciesFate);
+ }
+
+ static void addNotDiscardedTargetSampleMeasure(Connection connection, MigrationVersionResourceExecutor executor, Map<String, String> sampleMapping) throws SQLException {
+ addSampleMeasure(connection, executor, sampleMapping, "SELECT " +
+ "REPLACE(tl.topiaId, '.TargetLength', '.SampleMeasure'), " +
+ "tl.topiaVersion + 1, " +
+ "tl.topiaCreateDate, " +
+ "tl.homeId, " +
+ "tl.length, " +
+ "tl.isLengthComputed, " +
+ "NULL, " +
+ "tl.weight, " +
+ "tl.isWeightComputed, " +
+ "tl.count, " +
+ "tl.acquisitionMode, " +
+ "tl.species, " +
+ "REPLACE(tl.targetSample, '.TargetSample', '.Sample'), " +
+ "'fr.ird.referential.common.Sex#1239832686121#0.0', " +
+ "tl.lastUpdateDate, " +
+ "tl.sizeMeasureType, " +
+ "tl.weightMeasureType, " +
+ "tl.tagNumber, " +
+ "'fr.ird.referential.ps.common.SpeciesFate#1239832683619#0.5722739932065866', " +
+ "-tl.targetSample_idx, " +
+ "tl.lengthMeasureMethod, " +
+ "tl.weightMeasureMethod " +
+ "FROM ps_observation.TargetSample ts " +
+ "INNER JOIN ps_observation.TargetLength tl ON (tl.targetSample=ts.topiaId) " +
+ "WHERE NOT ts.discarded",
+ SampleMeasureRecord::toNotDiscardedTargetSpeciesFate);
+ }
+
+ static void addSampleMeasure(Connection connection, MigrationVersionResourceExecutor executor, Map<String, String> sampleMapping, String query, Function<SampleMeasureRecord, String> speciesFateSupplier) throws SQLException {
+
+ try (PreparedStatement statement = connection.prepareStatement(query)) {
+ try (ResultSet resultSet = statement.executeQuery()) {
+ while (resultSet.next()) {
+ SampleMeasureRecord sampleMeasure = new SampleMeasureRecord(resultSet);
+ String sampleId = sampleMapping.get(sampleMeasure.sample);
+ if (sampleId == null) {
+ sampleId = sampleMeasure.sample;
+ }
+ executor.writeSql(sampleMeasure.toSampleMeasureSql(sampleId, speciesFateSupplier));
+ }
+ }
+ }
+ }
+
+ String topiaId;
+ long topiaVersion;
+ Timestamp topiaCreateDate;
+ Timestamp lastUpdateDate;
+ String homeId;
+ Float length;
+ Boolean isLengthComputed;
+ String picturesReferences;
+ Float weight;
+ Boolean isWeightComputed;
+ int count;
+ int acquisitionMode;
+ String species;
+ String sample;
+ String sex;
+ String sizeMeasureType;
+ String weightMeasureType;
+ String tagNumber;
+ String speciesFate;
+ int sample_idx;
+ String lengthMeasureMethod;
+ String weightMeasureMethod;
+
+
+ private String toNonTargetSpeciesFate() {
+ if (speciesFate == null) {
+ return null;
+ }
+ if (DataSourceMigrationForVersion_9_0.SPECIES_FATE_6.equals(speciesFate)) {
+ // like for non target catches always change from speciesFate 6 to 15
+ speciesFate = DataSourceMigrationForVersion_9_0.SPECIES_FATE_15;
+ }
+ return speciesFate;
+ }
+
+ private String toDiscardedTargetSpeciesFate() {
+ // Discarded target species use always speciesFate 5 (and we have it from the sql query)
+ return speciesFate;
+
+ }
+
+ private String toNotDiscardedTargetSpeciesFate() {
+ // by default we use in sql query speciesFate = 6
+ // for small species, they are always with speciesFate = 15
+
+ if (!DataSourceMigrationForVersion_9_0.SMALL_SPECIES_TO_SPECIES_FATE_6.contains(species)) {
+ speciesFate = DataSourceMigrationForVersion_9_0.SPECIES_FATE_15;
+ }
+ return speciesFate;
+ }
+
+ public SampleMeasureRecord(ResultSet resultSet) throws SQLException {
+ this.topiaId = resultSet.getString(1);
+ this.topiaVersion = resultSet.getLong(2);
+ this.topiaCreateDate = resultSet.getTimestamp(3);
+ this.homeId = resultSet.getString(4);
+ this.length = resultSet.getFloat(5);
+ this.isLengthComputed = resultSet.getBoolean(6);
+ this.picturesReferences = resultSet.getString(7);
+ this.weight = resultSet.getFloat(8);
+ this.isWeightComputed = resultSet.getBoolean(9);
+ this.count = resultSet.getInt(10);
+ this.acquisitionMode = resultSet.getInt(11);
+ this.species = resultSet.getString(12);
+ this.sample = resultSet.getString(13);
+ this.sex = resultSet.getString(14);
+ this.lastUpdateDate = resultSet.getTimestamp(15);
+ this.sizeMeasureType = resultSet.getString(16);
+ this.weightMeasureType = resultSet.getString(17);
+ this.tagNumber = resultSet.getString(18);
+ this.speciesFate = resultSet.getString(19);
+ this.sample_idx = resultSet.getInt(20);
+ this.lengthMeasureMethod = resultSet.getString(21);
+ this.weightMeasureMethod = resultSet.getString(22);
+ // See https://gitlab.com/ultreiaio/ird-observe/-/issues/2503
+ if (acquisitionMode == 0 && weight != null && !isWeightComputed) {
+ isWeightComputed = true;
+ }
+ }
+
+ String toSampleMeasureSql(String sampleId, Function<SampleMeasureRecord, String> speciesFateSupplier) {
+ return String.format("INSERT INTO ps_observation.SampleMeasure(" +
+ " topiaId," +
+ " topiaVersion," +
+ " topiaCreateDate," +
+ " homeId," +
+ " length," +
+ " isLengthComputed," +
+ " picturesReferences," +
+ " weight," +
+ " isWeightComputed," +
+ " count," +
+ " acquisitionMode," +
+ " species," +
+ " sample," +
+ " sex," +
+ " lastUpdateDate," +
+ " sizeMeasureType," +
+ " weightMeasureType," +
+ " tagNumber," +
+ " speciesFate," +
+ " sample_idx," +
+ " lengthMeasureMethod," +
+ " weightMeasureMethod)" +
+ " VALUES(" +
+ "'%s', " +
+ "%s, " +
+ "'%s'::timestamp, " +
+ "%s, " +
+ "%s, " +
+ "%s, " +
+ "%s, " +
+ "%s, " +
+ "%s, " +
+ "%s, " +
+ "%s, " +
+ "%s, " +
+ "'%s', " +
+ "%s, " +
+ "'%s'::timestamp, " +
+ "%s, " +
+ "%s, " +
+ "%s, " +
+ "%s, " +
+ "%s, " +
+ "%s, " +
+ "%s " +
+ ");",
+ topiaId,
+ topiaVersion,
+ topiaCreateDate,
+ SqlHelper.escapeString(homeId == null ? null : homeId.replaceAll("'", "")),
+ length,
+ isLengthComputed,
+ SqlHelper.escapeString(picturesReferences == null ? null : picturesReferences.replaceAll("'", "")),
+ weight,
+ isWeightComputed,
+ count,
+ acquisitionMode,
+ SqlHelper.escapeString(species),
+ sampleId,
+ SqlHelper.escapeString(sex),
+ lastUpdateDate,
+ SqlHelper.escapeString(sizeMeasureType),
+ SqlHelper.escapeString(weightMeasureType),
+ SqlHelper.escapeString(tagNumber),
+ SqlHelper.escapeString(speciesFateSupplier.apply(this)),
+ sample_idx,
+ SqlHelper.escapeString(lengthMeasureMethod),
+ SqlHelper.escapeString(weightMeasureMethod)
+ );
+ }
+
+}
=====================================
core/persistence/resources/src/main/java/fr/ird/observe/spi/migration/v9/SampleRecord.java
=====================================
@@ -0,0 +1,150 @@
+package fr.ird.observe.spi.migration.v9;
+
+/*-
+ * #%L
+ * ObServe Core :: Persistence :: Resources
+ * %%
+ * Copyright (C) 2008 - 2022 IRD, Ultreia.io
+ * %%
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as
+ * published by the Free Software Foundation, either version 3 of the
+ * License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public
+ * License along with this program. If not, see
+ * <http://www.gnu.org/licenses/gpl-3.0.html>.
+ * #L%
+ */
+
+import fr.ird.observe.dto.StringCleaner;
+import fr.ird.observe.persistence.SqlHelper;
+
+import java.sql.Connection;
+import java.sql.PreparedStatement;
+import java.sql.ResultSet;
+import java.sql.SQLException;
+import java.sql.Timestamp;
+import java.util.Map;
+import java.util.function.Function;
+
+/**
+ * Created on 20/11/2022.
+ *
+ * @author Tony Chemit - dev(a)tchemit.fr
+ * @since 9.0.18
+ */
+class SampleRecord {
+ final String topiaId;
+ final long topiaVersion;
+ final Timestamp topiaCreateDate;
+ final Timestamp lastUpdateDate;
+ final boolean nonTarget;
+ String homeId;
+ String comment;
+ String set;
+
+ static void addNonTargetSample(Connection connection, Map<String, SampleRecord> setToSampleMap, Map<String, String> sampleMapping) throws SQLException {
+
+ try (PreparedStatement statement = connection.prepareStatement(
+ "SELECT " +
+ "REPLACE(topiaId, '.NonTargetSample', '.Sample'), " +
+ "topiaVersion, " +
+ "topiaCreateDate, " +
+ "homeId, " +
+ "comment, " +
+ "set, " +
+ "lastUpdateDate " +
+ "FROM ps_observation.nontargetsample " +
+ "ORDER BY set, topiaId")) {
+ addSample(statement, setToSampleMap, sampleMapping, true);
+ }
+ }
+
+
+ static void addTargetSample(Connection connection, Map<String, SampleRecord> setToSampleMap, Map<String, String> sampleMapping) throws SQLException {
+ try (PreparedStatement statement = connection.prepareStatement(
+ "SELECT " +
+ "REPLACE(topiaId, '.TargetSample', '.Sample'), " +
+ "topiaVersion, " +
+ "topiaCreateDate, " +
+ "homeId, " +
+ "comment, " +
+ "set, " +
+ "lastUpdateDate " +
+ "FROM ps_observation.targetsample " +
+ "ORDER BY set, topiaId")) {
+ addSample(statement, setToSampleMap, sampleMapping, false);
+ }
+ }
+
+ static void addSample(PreparedStatement statement, Map<String, SampleRecord> setToSampleMap, Map<String, String> sampleMapping, boolean nonTarget) throws SQLException {
+ try (ResultSet resultSet = statement.executeQuery()) {
+ while (resultSet.next()) {
+ SampleRecord sample = new SampleRecord(resultSet, nonTarget);
+ SampleRecord existingSample = setToSampleMap.get(sample.set);
+ if (existingSample == null) {
+ // new sample
+ setToSampleMap.put(sample.set, sample);
+ } else {
+ // add to sample mapping
+ sampleMapping.put(sample.topiaId, existingSample.topiaId);
+ // update homeId
+ existingSample.addHomeId(sample.homeId);
+ // update comment
+ existingSample.addComment(sample.comment);
+ }
+ }
+ }
+ }
+
+ public SampleRecord(ResultSet resultSet, boolean nonTarget) throws SQLException {
+ this.topiaId = resultSet.getString(1);
+ this.topiaVersion = resultSet.getLong(2);
+ this.topiaCreateDate = resultSet.getTimestamp(3);
+ this.homeId = resultSet.getString(4);
+ this.comment = resultSet.getString(5);
+ this.set = resultSet.getString(6);
+ this.lastUpdateDate = resultSet.getTimestamp(7);
+ this.nonTarget = nonTarget;
+ }
+
+ public String toSampleSql(Function<String, String> commentFormat) {
+ return String.format("INSERT INTO ps_observation.Sample(topiaId, topiaVersion, topiaCreateDate, homeId, comment, set, lastUpdateDate) VALUES('%s', %s, '%s'::timestamp, %s, %s, '%s', '%s'::timestamp);",
+ topiaId,
+ topiaVersion,
+ topiaCreateDate,
+ SqlHelper.escapeString(StringCleaner.ALL.apply(homeId)),
+ commentFormat.apply(comment),
+ set,
+ lastUpdateDate);
+ }
+
+ public void addHomeId(String homeId) {
+ if (homeId == null) {
+ return;
+ }
+ if (this.homeId == null) {
+ this.homeId = homeId;
+ return;
+ }
+ this.homeId += " - " + homeId;
+ }
+
+ public void addComment(String comment) {
+ if (comment == null) {
+ return;
+ }
+ if (this.comment == null) {
+ this.comment = comment;
+ return;
+ }
+ this.comment += " \n " + comment;
+ }
+
+}
=====================================
core/services/local/src/main/java/fr/ird/observe/services/local/service/data/ps/common/TripServiceLocalSupport.java
=====================================
@@ -36,6 +36,8 @@ import fr.ird.observe.services.service.data.ps.common.TripService;
import java.util.Date;
import java.util.LinkedHashSet;
+import java.util.Map;
+import java.util.Set;
/**
* Created on 26/07/2021.
@@ -80,6 +82,11 @@ public abstract class TripServiceLocalSupport extends ObserveServiceLocal implem
return Trip.SPI.isActivityEndOfSearchFound(this, routeId);
}
+ @Override
+ public Map<String, Set<String>> getPsObservationCatchesSpeciesFateBySpeciesId(String setId) {
+ return fr.ird.observe.entities.data.ps.observation.Sample.SPI.getCatchesSpeciesFateBySpeciesId(this, setId);
+ }
+
@Override
public Form<fr.ird.observe.dto.data.ps.observation.FloatingObjectDto> preCreateObservationFloatingObject(String activityId, FloatingObjectPreset floatingObjectPreset) {
return fr.ird.observe.entities.data.ps.observation.FloatingObject.SPI.preCreate(this, floatingObjectPreset);
=====================================
core/services/test/src/main/java/fr/ird/observe/services/service/data/ps/common/TripServiceFixtures.java
=====================================
@@ -39,7 +39,9 @@ import fr.ird.observe.services.service.data.EditableServiceFixtures;
import fr.ird.observe.services.service.data.RootOpenableServiceFixtures;
import org.junit.Assert;
+import java.util.Map;
import java.util.Set;
+import java.util.stream.Collectors;
public class TripServiceFixtures extends GeneratedTripServiceFixtures {
@@ -67,6 +69,15 @@ public class TripServiceFixtures extends GeneratedTripServiceFixtures {
// }
+ @Override
+ public void getPsObservationCatchesSpeciesFateBySpeciesId(ObserveServicesProvider servicesProvider, TripService service) {
+ String setId = getProperty("getPsObservationCatchesSpeciesFateBySpeciesId.setId");
+ Map<String, Set<String>> actual = service.getPsObservationCatchesSpeciesFateBySpeciesId(setId);
+ Assert.assertNotNull(actual);
+ Assert.assertEquals(getIntegerProperty("getPsObservationCatchesSpeciesFateBySpeciesId.speciesCount"), actual.size());
+ Assert.assertEquals(getIntegerProperty("getPsObservationCatchesSpeciesFateBySpeciesId.speciesFateCount"), actual.values().stream().flatMap(Set::stream).collect(Collectors.toSet()).size());
+ }
+
@Override
public void getAllTripIds(ObserveServicesProvider servicesProvider, TripService service) {
Set<String> actual = service.getAllTripIds();
=====================================
core/services/test/src/main/resources/fixtures/fr/ird/observe/services/service/data/ps/common/TripService.properties
=====================================
@@ -25,6 +25,7 @@ defaultNewParentId=${REFERENTIAL_PS_COMMON_PROGRAM_MOVE}
defaultParentId=${REFERENTIAL_PS_COMMON_PROGRAM}
defaultProgramId=${REFERENTIAL_PS_COMMON_PROGRAM}
defaultRouteId=FIXME
+defaultSetId=${PS_OBSERVATION_SET}
defaultSpeciesListId=fr.ird.referential.common.SpeciesList#1239832675370#0.1
defaultTripId=${PS_COMMON_TRIP}
defaultVesselId=fr.ird.referential.common.Vessel#1239832679425#0.9136908731720471
@@ -42,6 +43,9 @@ getMatchingTripsVesselWithinDateRange.vesselId=${defaultVesselId}
getParentBrothers.count=16
getParentBrothers.parentId=${defaultParentId}
getParentBrothers.programId=${defaultProgramId}
+getPsObservationCatchesSpeciesFateBySpeciesId.setId=${defaultSetId}
+getPsObservationCatchesSpeciesFateBySpeciesId.speciesCount=6
+getPsObservationCatchesSpeciesFateBySpeciesId.speciesFateCount=4
getSpeciesByListAndTrip.count=14
getSpeciesByListAndTrip.speciesListId=${defaultSpeciesListId}
getSpeciesByListAndTrip.tripId=${defaultTripId}
=====================================
model/src/main/models/Observe/dto/20-data-ps-observation.model
=====================================
@@ -158,8 +158,6 @@ informationSource {*:0..1} referential.ps.observation.InformationSourceReference
data.ps.observation.Sample > data.Container
sampleMeasure + {*} data.ps.observation.SampleMeasure
speciesFate {*:*} referential.ps.common.SpeciesFateReference
-availableSpeciesIds + {*} String
-availableSpeciesFateIds + {*} String
data.ps.observation.SetCatch > data.Container
catches {*} data.ps.observation.Catch
=====================================
model/src/main/models/Observe/dto/attribute/unique.properties
=====================================
@@ -37,8 +37,6 @@ data.ps.localmarket.TripBatch.attribute.localmarketSurvey=true
data.ps.logbook.Route.attribute.activity=true
data.ps.observation.Activity.attribute.nonTargetCatchSpecies=true
data.ps.observation.Route.attribute.activity=true
-data.ps.observation.Sample.attribute.availableSpeciesFateIds=true
-data.ps.observation.Sample.attribute.availableSpeciesIds=true
data.ps.observation.SetNonTargetCatchRelease.attribute.availableSpeciesIds=true
referential.Referential.attribute.homeId=true
referential.Referential.attribute.uri=true
=====================================
server/core/src/main/filtered-resources/META-INF/mapping-api-client.wm
=====================================
@@ -16,150 +16,151 @@
# Do not remove the next line, it is used to generate the following actions.
# →→→ Generated dynamic mapping
-GET /AnonymousService/applySecurity AnonymousServiceRestApi.applySecurity
-GET /AnonymousService/checkCanConnect AnonymousServiceRestApi.checkCanConnect
-GET /AnonymousService/checkCanConnectOrBeEmpty AnonymousServiceRestApi.checkCanConnectOrBeEmpty
-POST /AnonymousService/createEmpty AnonymousServiceRestApi.createEmpty
-POST /AnonymousService/createFromDump AnonymousServiceRestApi.createFromDump
-POST /AnonymousService/createFromImport AnonymousServiceRestApi.createFromImport
-GET /AnonymousService/generateHomeId AnonymousServiceRestApi.generateHomeId
-GET /AnonymousService/getAvailableDatabaseNames AnonymousServiceRestApi.getAvailableDatabaseNames
-GET /AnonymousService/getModelVersion AnonymousServiceRestApi.getModelVersion
-GET /AnonymousService/getServerVersion AnonymousServiceRestApi.getServerVersion
-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
-GET /DataSourceService/isIdValid DataSourceServiceRestApi.isIdValid
-POST /DataSourceService/produceAddSqlScript DataSourceServiceRestApi.produceAddSqlScript
-POST /DataSourceService/produceCreateSqlScript DataSourceServiceRestApi.produceCreateSqlScript
-POST /DataSourceService/produceDeleteSqlScript DataSourceServiceRestApi.produceDeleteSqlScript
-POST /DataSourceService/produceMoveSqlScript DataSourceServiceRestApi.produceMoveSqlScript
-POST /DataSourceService/retainExistingIds DataSourceServiceRestApi.retainExistingIds
-GET /NavigationService/getGroupByDtoSet NavigationServiceRestApi.getGroupByDtoSet
-GET /NavigationService/getNavigation NavigationServiceRestApi.getNavigation
-GET /NavigationService/loadNavigationPath NavigationServiceRestApi.loadNavigationPath
-GET /NavigationService/loadNavigationRoot NavigationServiceRestApi.loadNavigationRoot
-GET /NavigationService/loadSelectionRoot NavigationServiceRestApi.loadSelectionRoot
-GET /ReferenceService/createData ReferenceServiceRestApi.createData
-GET /ReferenceService/createReferential ReferenceServiceRestApi.createReferential
-GET /ReferenceService/loadData ReferenceServiceRestApi.loadData
-GET /ReferenceService/loadReferential ReferenceServiceRestApi.loadReferential
-POST /ReportService/executeReport ReportServiceRestApi.executeReport
-POST /ReportService/populateVariables ReportServiceRestApi.populateVariables
-GET /UsageService/countMandatoryData UsageServiceRestApi.countMandatoryData
-GET /UsageService/countOptionalData UsageServiceRestApi.countOptionalData
-GET /UsageService/countReferential UsageServiceRestApi.countReferential
-POST /UsageService/findMandatoryData UsageServiceRestApi.findMandatoryData
-POST /UsageService/findOptionalData UsageServiceRestApi.findOptionalData
-POST /UsageService/findReferential UsageServiceRestApi.findReferential
-POST /ValidateService/validateData ValidateServiceRestApi.validateData
-POST /ValidateService/validateReferential ValidateServiceRestApi.validateReferential
-POST /api/DataEntityService/create api.DataEntityServiceRestApi.create
-DELETE /api/DataEntityService/delete api.DataEntityServiceRestApi.delete
-GET /api/DataEntityService/generateId api.DataEntityServiceRestApi.generateId
-GET /api/DataEntityService/getOne api.DataEntityServiceRestApi.getOne
-GET /api/DataEntityService/getSome api.DataEntityServiceRestApi.getSome
-POST /api/DataEntityService/update api.DataEntityServiceRestApi.update
-POST /api/ReferentialEntityService/create api.ReferentialEntityServiceRestApi.create
-DELETE /api/ReferentialEntityService/delete api.ReferentialEntityServiceRestApi.delete
-GET /api/ReferentialEntityService/generateId api.ReferentialEntityServiceRestApi.generateId
-GET /api/ReferentialEntityService/getAll api.ReferentialEntityServiceRestApi.getAll
-GET /api/ReferentialEntityService/getByModule api.ReferentialEntityServiceRestApi.getByModule
-GET /api/ReferentialEntityService/getByPackage api.ReferentialEntityServiceRestApi.getByPackage
-GET /api/ReferentialEntityService/getOne api.ReferentialEntityServiceRestApi.getOne
-GET /api/ReferentialEntityService/getSome api.ReferentialEntityServiceRestApi.getSome
-PUT /api/ReferentialEntityService/update api.ReferentialEntityServiceRestApi.update
-GET /api/SqlService/select api.SqlServiceRestApi.select
-GET /data/ContainerService/loadForm data.ContainerServiceRestApi.loadForm
-POST /data/ContainerService/save data.ContainerServiceRestApi.save
-GET /data/DataFileService/getDataFile data.DataFileServiceRestApi.getDataFile
-POST /data/DataManagementService/deleteData data.DataManagementServiceRestApi.deleteData
-POST /data/DataManagementService/exportData data.DataManagementServiceRestApi.exportData
-POST /data/DataManagementService/importData data.DataManagementServiceRestApi.importData
-DELETE /data/EditableService/delete data.EditableServiceRestApi.delete
-GET /data/EditableService/exists data.EditableServiceRestApi.exists
-GET /data/EditableService/loadDto data.EditableServiceRestApi.loadDto
-GET /data/EditableService/loadForm data.EditableServiceRestApi.loadForm
-GET /data/EditableService/preCreate data.EditableServiceRestApi.preCreate
-POST /data/EditableService/save data.EditableServiceRestApi.save
-DELETE /data/OpenableService/delete data.OpenableServiceRestApi.delete
-GET /data/OpenableService/exists data.OpenableServiceRestApi.exists
-GET /data/OpenableService/getBrothers data.OpenableServiceRestApi.getBrothers
-GET /data/OpenableService/getBrothersFromParent data.OpenableServiceRestApi.getBrothersFromParent
-GET /data/OpenableService/getChildren data.OpenableServiceRestApi.getChildren
-GET /data/OpenableService/getChildrenUpdate data.OpenableServiceRestApi.getChildrenUpdate
-POST /data/OpenableService/getMandatoryDependencies data.OpenableServiceRestApi.getMandatoryDependencies
-POST /data/OpenableService/getMandatoryDependenciesCount data.OpenableServiceRestApi.getMandatoryDependenciesCount
-POST /data/OpenableService/getOptionalDependencies data.OpenableServiceRestApi.getOptionalDependencies
-POST /data/OpenableService/getOptionalDependenciesCount data.OpenableServiceRestApi.getOptionalDependenciesCount
-GET /data/OpenableService/loadDto data.OpenableServiceRestApi.loadDto
-GET /data/OpenableService/loadForm data.OpenableServiceRestApi.loadForm
-POST /data/OpenableService/move data.OpenableServiceRestApi.move
-GET /data/OpenableService/preCreate data.OpenableServiceRestApi.preCreate
-POST /data/OpenableService/save data.OpenableServiceRestApi.save
-POST /data/RootOpenableService/computeMissingReferential data.RootOpenableServiceRestApi.computeMissingReferential
-DELETE /data/RootOpenableService/delete data.RootOpenableServiceRestApi.delete
-DELETE /data/RootOpenableService/deleteLayout data.RootOpenableServiceRestApi.deleteLayout
-GET /data/RootOpenableService/exists data.RootOpenableServiceRestApi.exists
-GET /data/RootOpenableService/getBrothers data.RootOpenableServiceRestApi.getBrothers
-GET /data/RootOpenableService/getChildren data.RootOpenableServiceRestApi.getChildren
-GET /data/RootOpenableService/getChildrenUpdate data.RootOpenableServiceRestApi.getChildrenUpdate
-GET /data/RootOpenableService/getGroupByDtoValue data.RootOpenableServiceRestApi.getGroupByDtoValue
-GET /data/RootOpenableService/getGroupByValue data.RootOpenableServiceRestApi.getGroupByValue
-GET /data/RootOpenableService/loadDto data.RootOpenableServiceRestApi.loadDto
-GET /data/RootOpenableService/loadForm data.RootOpenableServiceRestApi.loadForm
-POST /data/RootOpenableService/moveLayout data.RootOpenableServiceRestApi.moveLayout
-GET /data/RootOpenableService/preCreate data.RootOpenableServiceRestApi.preCreate
-POST /data/RootOpenableService/save data.RootOpenableServiceRestApi.save
-GET /data/SimpleService/loadForm data.SimpleServiceRestApi.loadForm
-POST /data/SimpleService/save data.SimpleServiceRestApi.save
-POST /data/ll/ActivityPairingService/applyPairing data.ll.ActivityPairingServiceRestApi.applyPairing
-POST /data/ll/ActivityPairingService/computePairing data.ll.ActivityPairingServiceRestApi.computePairing
-GET /data/ll/common/TripService/getAllTripIds data.ll.common.TripServiceRestApi.getAllTripIds
-GET /data/ll/common/TripService/getLogbookCatchSpeciesIds data.ll.common.TripServiceRestApi.getLogbookCatchSpeciesIds
-GET /data/ll/common/TripService/getMatchingTripsVesselWithinDateRange data.ll.common.TripServiceRestApi.getMatchingTripsVesselWithinDateRange
-GET /data/ll/common/TripService/getSampleActivityParentCandidate data.ll.common.TripServiceRestApi.getSampleActivityParentCandidate
-GET /data/ll/common/TripService/getSpeciesByListAndTrip data.ll.common.TripServiceRestApi.getSpeciesByListAndTrip
-GET /data/ll/common/TripService/getTripMap data.ll.common.TripServiceRestApi.getTripMap
-GET /data/ll/common/TripService/loadBranchlineForm data.ll.common.TripServiceRestApi.loadBranchlineForm
-POST /data/ll/common/TripService/moveActivitySample data.ll.common.TripServiceRestApi.moveActivitySample
-POST /data/ll/common/TripService/saveAndCopyProperties data.ll.common.TripServiceRestApi.saveAndCopyProperties
-POST /data/ll/common/TripService/saveBranchline data.ll.common.TripServiceRestApi.saveBranchline
-POST /data/ps/ActivityPairingService/applyPairing data.ps.ActivityPairingServiceRestApi.applyPairing
-POST /data/ps/ActivityPairingService/computePairing data.ps.ActivityPairingServiceRestApi.computePairing
-GET /data/ps/AvdthService/importData data.ps.AvdthServiceRestApi.importData
-POST /data/ps/ConsolidateDataService/consolidateLocalmarketBatch data.ps.ConsolidateDataServiceRestApi.consolidateLocalmarketBatch
-POST /data/ps/ConsolidateDataService/consolidateTrip data.ps.ConsolidateDataServiceRestApi.consolidateTrip
-GET /data/ps/ConsolidateDataService/newSimplifiedObjectTypeManager data.ps.ConsolidateDataServiceRestApi.newSimplifiedObjectTypeManager
-GET /data/ps/common/TripService/getAllTripIds data.ps.common.TripServiceRestApi.getAllTripIds
-GET /data/ps/common/TripService/getMatchingTripsVesselWithinDateRange data.ps.common.TripServiceRestApi.getMatchingTripsVesselWithinDateRange
-GET /data/ps/common/TripService/getSpeciesByListAndTrip data.ps.common.TripServiceRestApi.getSpeciesByListAndTrip
-GET /data/ps/common/TripService/getTripMap data.ps.common.TripServiceRestApi.getTripMap
-GET /data/ps/common/TripService/isActivityEndOfSearchFound data.ps.common.TripServiceRestApi.isActivityEndOfSearchFound
-GET /data/ps/common/TripService/loadLocalmarketForm data.ps.common.TripServiceRestApi.loadLocalmarketForm
-GET /data/ps/common/TripService/loadLogbookForm data.ps.common.TripServiceRestApi.loadLogbookForm
-GET /data/ps/common/TripService/preCreateLogbookFloatingObject data.ps.common.TripServiceRestApi.preCreateLogbookFloatingObject
-GET /data/ps/common/TripService/preCreateObservationFloatingObject data.ps.common.TripServiceRestApi.preCreateObservationFloatingObject
-POST /referential/ReferentialService/changeId referential.ReferentialServiceRestApi.changeId
-DELETE /referential/ReferentialService/delete referential.ReferentialServiceRestApi.delete
-GET /referential/ReferentialService/exists referential.ReferentialServiceRestApi.exists
-GET /referential/ReferentialService/getEnabledReferentialLabelSet referential.ReferentialServiceRestApi.getEnabledReferentialLabelSet
-GET /referential/ReferentialService/getReferenceSet referential.ReferentialServiceRestApi.getReferenceSet
-POST /referential/ReferentialService/getReferentialIds referential.ReferentialServiceRestApi.getReferentialIds
-GET /referential/ReferentialService/getReferentialReferenceSets referential.ReferentialServiceRestApi.getReferentialReferenceSets
-POST /referential/ReferentialService/insertMissingReferential referential.ReferentialServiceRestApi.insertMissingReferential
-GET /referential/ReferentialService/loadDto referential.ReferentialServiceRestApi.loadDto
-POST /referential/ReferentialService/loadDtoList referential.ReferentialServiceRestApi.loadDtoList
-GET /referential/ReferentialService/loadForm referential.ReferentialServiceRestApi.loadForm
-GET /referential/ReferentialService/loadIds referential.ReferentialServiceRestApi.loadIds
-GET /referential/ReferentialService/preCreate referential.ReferentialServiceRestApi.preCreate
-POST /referential/ReferentialService/replaceReference referential.ReferentialServiceRestApi.replaceReference
-POST /referential/ReferentialService/save referential.ReferentialServiceRestApi.save
-POST /referential/SynchronizeService/applySql referential.SynchronizeServiceRestApi.applySql
-POST /referential/SynchronizeService/filterIdsUsed referential.SynchronizeServiceRestApi.filterIdsUsed
-POST /referential/SynchronizeService/getReferentialToDelete referential.SynchronizeServiceRestApi.getReferentialToDelete
-POST /referential/SynchronizeService/produceSqlResult referential.SynchronizeServiceRestApi.produceSqlResult
+GET /AnonymousService/applySecurity AnonymousServiceRestApi.applySecurity
+GET /AnonymousService/checkCanConnect AnonymousServiceRestApi.checkCanConnect
+GET /AnonymousService/checkCanConnectOrBeEmpty AnonymousServiceRestApi.checkCanConnectOrBeEmpty
+POST /AnonymousService/createEmpty AnonymousServiceRestApi.createEmpty
+POST /AnonymousService/createFromDump AnonymousServiceRestApi.createFromDump
+POST /AnonymousService/createFromImport AnonymousServiceRestApi.createFromImport
+GET /AnonymousService/generateHomeId AnonymousServiceRestApi.generateHomeId
+GET /AnonymousService/getAvailableDatabaseNames AnonymousServiceRestApi.getAvailableDatabaseNames
+GET /AnonymousService/getModelVersion AnonymousServiceRestApi.getModelVersion
+GET /AnonymousService/getServerVersion AnonymousServiceRestApi.getServerVersion
+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
+GET /DataSourceService/isIdValid DataSourceServiceRestApi.isIdValid
+POST /DataSourceService/produceAddSqlScript DataSourceServiceRestApi.produceAddSqlScript
+POST /DataSourceService/produceCreateSqlScript DataSourceServiceRestApi.produceCreateSqlScript
+POST /DataSourceService/produceDeleteSqlScript DataSourceServiceRestApi.produceDeleteSqlScript
+POST /DataSourceService/produceMoveSqlScript DataSourceServiceRestApi.produceMoveSqlScript
+POST /DataSourceService/retainExistingIds DataSourceServiceRestApi.retainExistingIds
+GET /NavigationService/getGroupByDtoSet NavigationServiceRestApi.getGroupByDtoSet
+GET /NavigationService/getNavigation NavigationServiceRestApi.getNavigation
+GET /NavigationService/loadNavigationPath NavigationServiceRestApi.loadNavigationPath
+GET /NavigationService/loadNavigationRoot NavigationServiceRestApi.loadNavigationRoot
+GET /NavigationService/loadSelectionRoot NavigationServiceRestApi.loadSelectionRoot
+GET /ReferenceService/createData ReferenceServiceRestApi.createData
+GET /ReferenceService/createReferential ReferenceServiceRestApi.createReferential
+GET /ReferenceService/loadData ReferenceServiceRestApi.loadData
+GET /ReferenceService/loadReferential ReferenceServiceRestApi.loadReferential
+POST /ReportService/executeReport ReportServiceRestApi.executeReport
+POST /ReportService/populateVariables ReportServiceRestApi.populateVariables
+GET /UsageService/countMandatoryData UsageServiceRestApi.countMandatoryData
+GET /UsageService/countOptionalData UsageServiceRestApi.countOptionalData
+GET /UsageService/countReferential UsageServiceRestApi.countReferential
+POST /UsageService/findMandatoryData UsageServiceRestApi.findMandatoryData
+POST /UsageService/findOptionalData UsageServiceRestApi.findOptionalData
+POST /UsageService/findReferential UsageServiceRestApi.findReferential
+POST /ValidateService/validateData ValidateServiceRestApi.validateData
+POST /ValidateService/validateReferential ValidateServiceRestApi.validateReferential
+POST /api/DataEntityService/create api.DataEntityServiceRestApi.create
+DELETE /api/DataEntityService/delete api.DataEntityServiceRestApi.delete
+GET /api/DataEntityService/generateId api.DataEntityServiceRestApi.generateId
+GET /api/DataEntityService/getOne api.DataEntityServiceRestApi.getOne
+GET /api/DataEntityService/getSome api.DataEntityServiceRestApi.getSome
+POST /api/DataEntityService/update api.DataEntityServiceRestApi.update
+POST /api/ReferentialEntityService/create api.ReferentialEntityServiceRestApi.create
+DELETE /api/ReferentialEntityService/delete api.ReferentialEntityServiceRestApi.delete
+GET /api/ReferentialEntityService/generateId api.ReferentialEntityServiceRestApi.generateId
+GET /api/ReferentialEntityService/getAll api.ReferentialEntityServiceRestApi.getAll
+GET /api/ReferentialEntityService/getByModule api.ReferentialEntityServiceRestApi.getByModule
+GET /api/ReferentialEntityService/getByPackage api.ReferentialEntityServiceRestApi.getByPackage
+GET /api/ReferentialEntityService/getOne api.ReferentialEntityServiceRestApi.getOne
+GET /api/ReferentialEntityService/getSome api.ReferentialEntityServiceRestApi.getSome
+PUT /api/ReferentialEntityService/update api.ReferentialEntityServiceRestApi.update
+GET /api/SqlService/select api.SqlServiceRestApi.select
+GET /data/ContainerService/loadForm data.ContainerServiceRestApi.loadForm
+POST /data/ContainerService/save data.ContainerServiceRestApi.save
+GET /data/DataFileService/getDataFile data.DataFileServiceRestApi.getDataFile
+POST /data/DataManagementService/deleteData data.DataManagementServiceRestApi.deleteData
+POST /data/DataManagementService/exportData data.DataManagementServiceRestApi.exportData
+POST /data/DataManagementService/importData data.DataManagementServiceRestApi.importData
+DELETE /data/EditableService/delete data.EditableServiceRestApi.delete
+GET /data/EditableService/exists data.EditableServiceRestApi.exists
+GET /data/EditableService/loadDto data.EditableServiceRestApi.loadDto
+GET /data/EditableService/loadForm data.EditableServiceRestApi.loadForm
+GET /data/EditableService/preCreate data.EditableServiceRestApi.preCreate
+POST /data/EditableService/save data.EditableServiceRestApi.save
+DELETE /data/OpenableService/delete data.OpenableServiceRestApi.delete
+GET /data/OpenableService/exists data.OpenableServiceRestApi.exists
+GET /data/OpenableService/getBrothers data.OpenableServiceRestApi.getBrothers
+GET /data/OpenableService/getBrothersFromParent data.OpenableServiceRestApi.getBrothersFromParent
+GET /data/OpenableService/getChildren data.OpenableServiceRestApi.getChildren
+GET /data/OpenableService/getChildrenUpdate data.OpenableServiceRestApi.getChildrenUpdate
+POST /data/OpenableService/getMandatoryDependencies data.OpenableServiceRestApi.getMandatoryDependencies
+POST /data/OpenableService/getMandatoryDependenciesCount data.OpenableServiceRestApi.getMandatoryDependenciesCount
+POST /data/OpenableService/getOptionalDependencies data.OpenableServiceRestApi.getOptionalDependencies
+POST /data/OpenableService/getOptionalDependenciesCount data.OpenableServiceRestApi.getOptionalDependenciesCount
+GET /data/OpenableService/loadDto data.OpenableServiceRestApi.loadDto
+GET /data/OpenableService/loadForm data.OpenableServiceRestApi.loadForm
+POST /data/OpenableService/move data.OpenableServiceRestApi.move
+GET /data/OpenableService/preCreate data.OpenableServiceRestApi.preCreate
+POST /data/OpenableService/save data.OpenableServiceRestApi.save
+POST /data/RootOpenableService/computeMissingReferential data.RootOpenableServiceRestApi.computeMissingReferential
+DELETE /data/RootOpenableService/delete data.RootOpenableServiceRestApi.delete
+DELETE /data/RootOpenableService/deleteLayout data.RootOpenableServiceRestApi.deleteLayout
+GET /data/RootOpenableService/exists data.RootOpenableServiceRestApi.exists
+GET /data/RootOpenableService/getBrothers data.RootOpenableServiceRestApi.getBrothers
+GET /data/RootOpenableService/getChildren data.RootOpenableServiceRestApi.getChildren
+GET /data/RootOpenableService/getChildrenUpdate data.RootOpenableServiceRestApi.getChildrenUpdate
+GET /data/RootOpenableService/getGroupByDtoValue data.RootOpenableServiceRestApi.getGroupByDtoValue
+GET /data/RootOpenableService/getGroupByValue data.RootOpenableServiceRestApi.getGroupByValue
+GET /data/RootOpenableService/loadDto data.RootOpenableServiceRestApi.loadDto
+GET /data/RootOpenableService/loadForm data.RootOpenableServiceRestApi.loadForm
+POST /data/RootOpenableService/moveLayout data.RootOpenableServiceRestApi.moveLayout
+GET /data/RootOpenableService/preCreate data.RootOpenableServiceRestApi.preCreate
+POST /data/RootOpenableService/save data.RootOpenableServiceRestApi.save
+GET /data/SimpleService/loadForm data.SimpleServiceRestApi.loadForm
+POST /data/SimpleService/save data.SimpleServiceRestApi.save
+POST /data/ll/ActivityPairingService/applyPairing data.ll.ActivityPairingServiceRestApi.applyPairing
+POST /data/ll/ActivityPairingService/computePairing data.ll.ActivityPairingServiceRestApi.computePairing
+GET /data/ll/common/TripService/getAllTripIds data.ll.common.TripServiceRestApi.getAllTripIds
+GET /data/ll/common/TripService/getLogbookCatchSpeciesIds data.ll.common.TripServiceRestApi.getLogbookCatchSpeciesIds
+GET /data/ll/common/TripService/getMatchingTripsVesselWithinDateRange data.ll.common.TripServiceRestApi.getMatchingTripsVesselWithinDateRange
+GET /data/ll/common/TripService/getSampleActivityParentCandidate data.ll.common.TripServiceRestApi.getSampleActivityParentCandidate
+GET /data/ll/common/TripService/getSpeciesByListAndTrip data.ll.common.TripServiceRestApi.getSpeciesByListAndTrip
+GET /data/ll/common/TripService/getTripMap data.ll.common.TripServiceRestApi.getTripMap
+GET /data/ll/common/TripService/loadBranchlineForm data.ll.common.TripServiceRestApi.loadBranchlineForm
+POST /data/ll/common/TripService/moveActivitySample data.ll.common.TripServiceRestApi.moveActivitySample
+POST /data/ll/common/TripService/saveAndCopyProperties data.ll.common.TripServiceRestApi.saveAndCopyProperties
+POST /data/ll/common/TripService/saveBranchline data.ll.common.TripServiceRestApi.saveBranchline
+POST /data/ps/ActivityPairingService/applyPairing data.ps.ActivityPairingServiceRestApi.applyPairing
+POST /data/ps/ActivityPairingService/computePairing data.ps.ActivityPairingServiceRestApi.computePairing
+GET /data/ps/AvdthService/importData data.ps.AvdthServiceRestApi.importData
+POST /data/ps/ConsolidateDataService/consolidateLocalmarketBatch data.ps.ConsolidateDataServiceRestApi.consolidateLocalmarketBatch
+POST /data/ps/ConsolidateDataService/consolidateTrip data.ps.ConsolidateDataServiceRestApi.consolidateTrip
+GET /data/ps/ConsolidateDataService/newSimplifiedObjectTypeManager data.ps.ConsolidateDataServiceRestApi.newSimplifiedObjectTypeManager
+GET /data/ps/common/TripService/getAllTripIds data.ps.common.TripServiceRestApi.getAllTripIds
+GET /data/ps/common/TripService/getMatchingTripsVesselWithinDateRange data.ps.common.TripServiceRestApi.getMatchingTripsVesselWithinDateRange
+GET /data/ps/common/TripService/getPsObservationCatchesSpeciesFateBySpeciesId data.ps.common.TripServiceRestApi.getPsObservationCatchesSpeciesFateBySpeciesId
+GET /data/ps/common/TripService/getSpeciesByListAndTrip data.ps.common.TripServiceRestApi.getSpeciesByListAndTrip
+GET /data/ps/common/TripService/getTripMap data.ps.common.TripServiceRestApi.getTripMap
+GET /data/ps/common/TripService/isActivityEndOfSearchFound data.ps.common.TripServiceRestApi.isActivityEndOfSearchFound
+GET /data/ps/common/TripService/loadLocalmarketForm data.ps.common.TripServiceRestApi.loadLocalmarketForm
+GET /data/ps/common/TripService/loadLogbookForm data.ps.common.TripServiceRestApi.loadLogbookForm
+GET /data/ps/common/TripService/preCreateLogbookFloatingObject data.ps.common.TripServiceRestApi.preCreateLogbookFloatingObject
+GET /data/ps/common/TripService/preCreateObservationFloatingObject data.ps.common.TripServiceRestApi.preCreateObservationFloatingObject
+POST /referential/ReferentialService/changeId referential.ReferentialServiceRestApi.changeId
+DELETE /referential/ReferentialService/delete referential.ReferentialServiceRestApi.delete
+GET /referential/ReferentialService/exists referential.ReferentialServiceRestApi.exists
+GET /referential/ReferentialService/getEnabledReferentialLabelSet referential.ReferentialServiceRestApi.getEnabledReferentialLabelSet
+GET /referential/ReferentialService/getReferenceSet referential.ReferentialServiceRestApi.getReferenceSet
+POST /referential/ReferentialService/getReferentialIds referential.ReferentialServiceRestApi.getReferentialIds
+GET /referential/ReferentialService/getReferentialReferenceSets referential.ReferentialServiceRestApi.getReferentialReferenceSets
+POST /referential/ReferentialService/insertMissingReferential referential.ReferentialServiceRestApi.insertMissingReferential
+GET /referential/ReferentialService/loadDto referential.ReferentialServiceRestApi.loadDto
+POST /referential/ReferentialService/loadDtoList referential.ReferentialServiceRestApi.loadDtoList
+GET /referential/ReferentialService/loadForm referential.ReferentialServiceRestApi.loadForm
+GET /referential/ReferentialService/loadIds referential.ReferentialServiceRestApi.loadIds
+GET /referential/ReferentialService/preCreate referential.ReferentialServiceRestApi.preCreate
+POST /referential/ReferentialService/replaceReference referential.ReferentialServiceRestApi.replaceReference
+POST /referential/ReferentialService/save referential.ReferentialServiceRestApi.save
+POST /referential/SynchronizeService/applySql referential.SynchronizeServiceRestApi.applySql
+POST /referential/SynchronizeService/filterIdsUsed referential.SynchronizeServiceRestApi.filterIdsUsed
+POST /referential/SynchronizeService/getReferentialToDelete referential.SynchronizeServiceRestApi.getReferentialToDelete
+POST /referential/SynchronizeService/produceSqlResult referential.SynchronizeServiceRestApi.produceSqlResult
View it on GitLab: https://gitlab.com/ultreiaio/ird-observe/-/compare/be355177ae519cd2affd6695…
--
View it on GitLab: https://gitlab.com/ultreiaio/ird-observe/-/compare/be355177ae519cd2affd6695…
You're receiving this email because of your account on gitlab.com.
1
0
[Git][ultreiaio/ird-observe][develop] 6 commits: Migration - show stringFixedCount and commentFixedCount and the end
by Tony CHEMIT (@tchemit) 21 Nov '22
by Tony CHEMIT (@tchemit) 21 Nov '22
21 Nov '22
Tony CHEMIT pushed to branch develop at ultreiaio / ird-observe
Commits:
acb9501b by Tony Chemit at 2022-11-20T11:04:28+01:00
Migration - show stringFixedCount and commentFixedCount and the end
- - - - -
bd7079e1 by Tony Chemit at 2022-11-21T14:39:23+01:00
Replay Sample migration - Closes #2539
- - - - -
6936b80b by Tony Chemit at 2022-11-21T15:38:12+01:00
Service - Add new service TripService.getPsObservationCatchesSpeciesFateBySpeciesId
- - - - -
0bc50204 by Tony Chemit at 2022-11-21T15:38:12+01:00
GUI Sample - Use specific SpeciesFate for selected Species in Form
- - - - -
be85552d by Tony Chemit at 2022-11-21T15:38:12+01:00
Model - Clean Sample dto (remove speciesFate, availableSpeciesIds and availableSpeciesFateIds fields)
- - - - -
25a4e7d3 by Tony Chemit at 2022-11-21T16:14:04+01:00
Merge branch 'feature/issue_2538_v9.1' into develop
Closes #2538
- - - - -
13 changed files:
- client/datasource/editor/ps/src/main/java/fr/ird/observe/client/datasource/editor/ps/data/observation/SampleUIHandler.java
- client/datasource/editor/ps/src/main/java/fr/ird/observe/client/datasource/editor/ps/data/observation/SampleUIModelStates.java
- core/api/services/src/main/java/fr/ird/observe/services/service/data/ps/common/TripService.java
- core/persistence/java/src/main/java/fr/ird/observe/entities/data/ps/observation/SampleSpi.java
- core/persistence/resources/src/main/java/fr/ird/observe/spi/migration/v9/DataSourceMigrationForVersion_9_0.java
- + core/persistence/resources/src/main/java/fr/ird/observe/spi/migration/v9/SampleMeasureRecord.java
- + core/persistence/resources/src/main/java/fr/ird/observe/spi/migration/v9/SampleRecord.java
- core/services/local/src/main/java/fr/ird/observe/services/local/service/data/ps/common/TripServiceLocalSupport.java
- core/services/test/src/main/java/fr/ird/observe/services/service/data/ps/common/TripServiceFixtures.java
- core/services/test/src/main/resources/fixtures/fr/ird/observe/services/service/data/ps/common/TripService.properties
- model/src/main/models/Observe/dto/20-data-ps-observation.model
- model/src/main/models/Observe/dto/attribute/unique.properties
- server/core/src/main/filtered-resources/META-INF/mapping-api-client.wm
Changes:
=====================================
client/datasource/editor/ps/src/main/java/fr/ird/observe/client/datasource/editor/ps/data/observation/SampleUIHandler.java
=====================================
@@ -28,6 +28,7 @@ import fr.ird.observe.dto.data.ps.observation.SampleMeasureDto;
import fr.ird.observe.dto.referential.common.SizeMeasureTypeReference;
import fr.ird.observe.dto.referential.common.SpeciesReference;
import fr.ird.observe.dto.referential.common.WeightMeasureTypeReference;
+import fr.ird.observe.dto.referential.ps.common.SpeciesFateReference;
import org.apache.logging.log4j.LogManager;
import org.apache.logging.log4j.Logger;
import org.nuiton.jaxx.runtime.swing.JAXXButtonGroup;
@@ -36,6 +37,7 @@ import javax.swing.JComponent;
import javax.swing.event.ChangeEvent;
import java.awt.Component;
import java.beans.PropertyChangeListener;
+import java.util.List;
import java.util.Optional;
/**
@@ -99,7 +101,7 @@ public class SampleUIHandler extends GeneratedSampleUIHandler {
onLengthChanged(tableEditBean.getLength(), false);
onWeightChanged(tableEditBean.getWeight(), false);
- SampleUIModel sampleModel = getModel();
+ SampleUIModelStates states = getModel().getStates();
SpeciesReference species = tableEditBean.getSpecies();
log.info(String.format("%s selected species %s", prefix, species));
@@ -113,7 +115,7 @@ public class SampleUIHandler extends GeneratedSampleUIHandler {
boolean unsetSpecies = true;
if (newRow) {
// use default mode
- AcquisitionMode acquisitionMode = sampleModel.getStates().getDefaultAcquisitionMode();
+ AcquisitionMode acquisitionMode = states.getDefaultAcquisitionMode();
if (previousRowBean != null) {
//use previous row (species won't be empty)
unsetSpecies = false;
@@ -131,8 +133,8 @@ public class SampleUIHandler extends GeneratedSampleUIHandler {
}
// get default size measure type
- defaultSizeMeasureType = sampleModel.getStates().getSpeciesDefaultSizeMeasureType(species);
- defaultWeightMeasureType = sampleModel.getStates().getSpeciesDefaultWeightMeasureType(species);
+ defaultSizeMeasureType = states.getSpeciesDefaultSizeMeasureType(species);
+ defaultWeightMeasureType = states.getSpeciesDefaultWeightMeasureType(species);
if (unsetSpecies) {
// unset species (this will not set again species in widget)
@@ -145,8 +147,8 @@ public class SampleUIHandler extends GeneratedSampleUIHandler {
updateAcquisitionMode0(AcquisitionMode.valueOf(tableEditBean.getAcquisitionMode()));
// get default size measure type
- defaultSizeMeasureType = sampleModel.getStates().getSpeciesDefaultSizeMeasureType(species);
- defaultWeightMeasureType = sampleModel.getStates().getSpeciesDefaultWeightMeasureType(species);
+ defaultSizeMeasureType = states.getSpeciesDefaultSizeMeasureType(species);
+ defaultWeightMeasureType = states.getSpeciesDefaultWeightMeasureType(species);
species = null;
sizeMeasureType = Optional.ofNullable(tableEditBean.getSizeMeasureType());
@@ -154,8 +156,8 @@ public class SampleUIHandler extends GeneratedSampleUIHandler {
}
// use default size measure type
- sampleModel.getStates().setDefaultSizeMeasureType(defaultSizeMeasureType.orElse(null));
- sampleModel.getStates().setDefaultWeightMeasureType(defaultWeightMeasureType.orElse(null));
+ states.setDefaultSizeMeasureType(defaultSizeMeasureType.orElse(null));
+ states.setDefaultWeightMeasureType(defaultWeightMeasureType.orElse(null));
ui.getSizeMeasureType().setSelectedItem(null);
sizeMeasureType.ifPresent(ui.getSizeMeasureType()::setSelectedItem);
@@ -172,16 +174,36 @@ public class SampleUIHandler extends GeneratedSampleUIHandler {
ui.getSpecies().setSelectedItem(null);
ui.getSpecies().setSelectedItem(species);
}
+ updateSpeciesFateUniverse(tableEditBean.getSpecies(), tableEditBean.getSpeciesFate());
}
protected void onSpeciesChanged(SpeciesReference species) {
- SampleUIModel model = getModel();
- Optional<SizeMeasureTypeReference> sizeMeasureType = model.getStates().getSpeciesDefaultSizeMeasureType(species);
- Optional<WeightMeasureTypeReference> weightMeasureType = model.getStates().getSpeciesDefaultWeightMeasureType(species);
- model.getStates().setDefaultSizeMeasureType(sizeMeasureType.orElse(null));
- model.getStates().setDefaultWeightMeasureType(weightMeasureType.orElse(null));
+ SampleUIModelStates states = getModel().getStates();
+ Optional<SizeMeasureTypeReference> sizeMeasureType = states.getSpeciesDefaultSizeMeasureType(species);
+ Optional<WeightMeasureTypeReference> weightMeasureType = states.getSpeciesDefaultWeightMeasureType(species);
+ states.setDefaultSizeMeasureType(sizeMeasureType.orElse(null));
+ states.setDefaultWeightMeasureType(weightMeasureType.orElse(null));
resetDefaultSizeMeasureType(false);
resetDefaultWeightMeasureType(false);
+ updateSpeciesFateUniverse(species, states.getTableEditBean().getSpeciesFate());
+ }
+
+ protected void updateSpeciesFateUniverse(SpeciesReference species, SpeciesFateReference speciesFate) {
+ ui.getSpeciesFate().setSelectedItem(null);
+ if (species == null) {
+ ui.getSpeciesFate().setEnabled(false);
+ ui.getSpeciesFate().setData(List.of());
+ } else {
+ List<SpeciesFateReference> speciesFateReferences = getModel().getStates().getSpeciesFate(species);
+ ui.getSpeciesFate().setData(speciesFateReferences);
+ ui.getSpeciesFate().setEnabled(true);
+ //FIXME Due to none sample migration on speciesFate, we can have some one not present in speciesFateReferences
+ //FIXME Need a fix in migration probably
+// if (speciesFate != null && speciesFateReferences.contains(speciesFate)) {
+ if (speciesFate != null) {
+ ui.getSpeciesFate().setSelectedItem(speciesFate);
+ }
+ }
}
public void resetDefaultSizeMeasureType(boolean force) {
=====================================
client/datasource/editor/ps/src/main/java/fr/ird/observe/client/datasource/editor/ps/data/observation/SampleUIModelStates.java
=====================================
@@ -37,6 +37,10 @@ import fr.ird.observe.services.ObserveServicesProvider;
import io.ultreia.java4all.bean.spi.GenerateJavaBeanDefinition;
import javax.swing.Icon;
+import java.util.List;
+import java.util.Map;
+import java.util.Set;
+import java.util.stream.Collectors;
import static io.ultreia.java4all.i18n.I18n.n;
import static io.ultreia.java4all.i18n.I18n.t;
@@ -51,6 +55,11 @@ public class SampleUIModelStates extends SampleContentTableUIModelStates<SampleD
private final Icon computedIcon;
private final Icon observedIcon;
+ /**
+ * Dictionary of species fate ids available per species id.
+ */
+ private Map<String, Set<String>> speciesFateBySpeciesMap;
+
public SampleUIModelStates(GeneratedSampleUIModel model) {
super(model, SampleDto.newDto(new java.util.Date()), SampleMeasureDto.newDto(new java.util.Date()), model.getSource().getInitializer().getSelectedId(), model.getSource().getInitializer().getScope().isStandalone());
this.computedIcon = UIHelper.getUIManagerActionIcon("data-calcule");
@@ -69,8 +78,10 @@ public class SampleUIModelStates extends SampleContentTableUIModelStates<SampleD
@Override
public void onAfterInitAddReferentialFilters(ClientConfig clientConfig, Project observeSelectModel, ObserveServicesProvider servicesProvider, ReferencesCache referenceCache) {
- referenceCache.addReferentialFilter(SampleMeasureDto.PROPERTY_SPECIES, ReferencesFilterHelper.<SampleDto, SpeciesReference>newSubList(SampleDto::getAvailableSpeciesIds));
- referenceCache.addReferentialFilter(SampleMeasureDto.PROPERTY_SPECIES_FATE, ReferencesFilterHelper.<SampleDto, SpeciesFateReference>newSubList(SampleDto::getAvailableSpeciesFateIds));
+ speciesFateBySpeciesMap = servicesProvider.getPsCommonTripService().getPsObservationCatchesSpeciesFateBySpeciesId(observeSelectModel.getPs().getObservationSet().getId());
+ referenceCache.addReferentialFilter(SampleMeasureDto.PROPERTY_SPECIES, ReferencesFilterHelper.<SampleDto, SpeciesReference>newSubList(e -> speciesFateBySpeciesMap.keySet()));
+ referenceCache.addReferentialFilter(SampleMeasureDto.PROPERTY_SPECIES_FATE, ReferencesFilterHelper.<SampleDto, SpeciesFateReference>newSubList(
+ e -> speciesFateBySpeciesMap.values().stream().flatMap(Set::stream).collect(Collectors.toSet())));
}
@Override
@@ -92,4 +103,8 @@ public class SampleUIModelStates extends SampleContentTableUIModelStates<SampleD
return computed ? computedIcon : observedIcon;
}
+ public List<SpeciesFateReference> getSpeciesFate(SpeciesReference speciesReference) {
+ Set<String> availableSpeciesFateIds = speciesFateBySpeciesMap.get(speciesReference.getId());
+ return getReferenceCache().<SpeciesFateReference>getReferentialReferenceSet(SampleMeasureDto.PROPERTY_SPECIES_FATE).subSet(availableSpeciesFateIds).collect(Collectors.toList());
+ }
}
=====================================
core/api/services/src/main/java/fr/ird/observe/services/service/data/ps/common/TripService.java
=====================================
@@ -35,6 +35,8 @@ import io.ultreia.java4all.http.spi.Nullable;
import io.ultreia.java4all.http.spi.Service;
import java.util.List;
+import java.util.Map;
+import java.util.Set;
/**
* Created on 26/07/2021.
@@ -61,6 +63,10 @@ public interface TripService extends TripAwareService {
@MethodCredential(Permission.READ_DATA)
boolean isActivityEndOfSearchFound(String routeId);
+ @Get
+ @MethodCredential(Permission.READ_DATA)
+ Map<String, Set<String>> getPsObservationCatchesSpeciesFateBySpeciesId(String setId);
+
@Get
@MethodCredential(Permission.WRITE_DATA)
Form<fr.ird.observe.dto.data.ps.observation.FloatingObjectDto> preCreateObservationFloatingObject(String activityId, @Nullable FloatingObjectPreset floatingObjectPreset);
=====================================
core/persistence/java/src/main/java/fr/ird/observe/entities/data/ps/observation/SampleSpi.java
=====================================
@@ -26,13 +26,13 @@ import fr.ird.observe.dto.data.ps.observation.SampleDto;
import fr.ird.observe.dto.db.ConcurrentModificationException;
import fr.ird.observe.dto.form.Form;
import fr.ird.observe.dto.result.SaveResultDto;
-import fr.ird.observe.entities.referential.common.Species;
import fr.ird.observe.entities.referential.ps.common.SpeciesFate;
import fr.ird.observe.spi.result.AddEntityToUpdateStep;
import fr.ird.observe.spi.service.ServiceContext;
-import java.util.Objects;
-import java.util.stream.Collectors;
+import java.util.Map;
+import java.util.TreeMap;
+import java.util.TreeSet;
public class SampleSpi extends GeneratedSampleSpi {
@@ -45,8 +45,6 @@ public class SampleSpi extends GeneratedSampleSpi {
SampleDto dto = form.getObject();
// always use the set id, //FIXME See why ?
dto.setId(id);
- dto.setAvailableSpeciesIds(parent.getCatches().stream().map(Catch::getSpecies).map(Species::getTopiaId).collect(Collectors.toSet()));
- dto.setAvailableSpeciesFateIds(parent.getCatches().stream().map(Catch::getSpeciesFate).filter(Objects::nonNull).map(SpeciesFate::getTopiaId).collect(Collectors.toSet()));
return form;
}
@@ -64,7 +62,7 @@ public class SampleSpi extends GeneratedSampleSpi {
Sample.SPI.getDao(context).initId(entity);
parent.addSample(entity);
}
- SampleMeasure.SPI.initId(context,entity.getSampleMeasure());
+ SampleMeasure.SPI.initId(context, entity.getSampleMeasure());
context.getTopiaPersistenceContext().flush();
AddEntityToUpdateStep saveHelper = newSaveHelper(context)
.update(this, entity);
@@ -74,6 +72,17 @@ public class SampleSpi extends GeneratedSampleSpi {
.build(entity);
}
+ public Map<String, java.util.Set<String>> getCatchesSpeciesFateBySpeciesId(ServiceContext context, String id) {
+ Set parent = Set.loadEntity(context, id);
+ Map<String, java.util.Set<String>> result = new TreeMap<>();
+ parent.getCatches().stream().filter(c -> c.getSpeciesFate() != null).forEach(aCatch -> {
+ String speciesId = aCatch.getSpecies().getId();
+ SpeciesFate speciesFate = aCatch.getSpeciesFate();
+ result.computeIfAbsent(speciesId, e -> new TreeSet<>()).add(speciesFate.getId());
+ });
+ return result;
+ }
+
protected Sample loadSampleFormEntity(ServiceContext context, Set parent) {
if (parent.isSampleEmpty()) {
return Sample.newEntity(context.now());
=====================================
core/persistence/resources/src/main/java/fr/ird/observe/spi/migration/v9/DataSourceMigrationForVersion_9_0.java
=====================================
@@ -23,8 +23,6 @@ package fr.ird.observe.spi.migration.v9;
*/
import com.google.auto.service.AutoService;
-import fr.ird.observe.dto.StringCleaner;
-import fr.ird.observe.persistence.SqlHelper;
import fr.ird.observe.spi.migration.ByMajorMigrationVersionResource;
import io.ultreia.java4all.util.Version;
import io.ultreia.java4all.util.sql.SqlQuery;
@@ -36,8 +34,6 @@ import org.nuiton.topia.service.migration.resources.MigrationVersionResourceExec
import java.sql.PreparedStatement;
import java.sql.ResultSet;
-import java.sql.SQLException;
-import java.sql.Timestamp;
import java.util.LinkedHashSet;
import java.util.List;
import java.util.Map;
@@ -61,6 +57,11 @@ public class DataSourceMigrationForVersion_9_0 extends ByMajorMigrationVersionRe
public static final String INFORMATION_SOURCE_U = "fr.ird.referential.ps.observation.InformationSource#1464000000000#03";
public static final String SPECIES_FATE_5 = "fr.ird.referential.ps.common.SpeciesFate#1239832683619#0.6250731662108877";
public static final String SPECIES_FATE_6 = "fr.ird.referential.ps.common.SpeciesFate#1239832683619#0.5722739932065866";
+ public static final Set<String> SMALL_SPECIES_TO_SPECIES_FATE_6 =
+ Set.of("fr.ird.referential.common.Species#1239832685476#0.5618871286604711", //ALB
+ "fr.ird.referential.common.Species#1239832685475#0.13349466123905152", //BET
+ "fr.ird.referential.common.Species#1239832685474#0.975344121171992", //SKJ
+ "fr.ird.referential.common.Species#1239832685474#0.8943253454598569"); //YFT
public static final String SPECIES_FATE_15 = "fr.ird.referential.ps.common.SpeciesFate#1464000000000#15";
public DataSourceMigrationForVersion_9_0() {
@@ -163,6 +164,7 @@ public class DataSourceMigrationForVersion_9_0 extends ByMajorMigrationVersionRe
executor.addScript("03_2", "migrate-table-ps_observation_catch_well");
// See https://gitlab.com/ultreiaio/ird-observe/-/issues/2436
+ // See https://gitlab.com/ultreiaio/ird-observe/-/issues/2539
migrateSample(executor);
}
@@ -283,319 +285,40 @@ public class DataSourceMigrationForVersion_9_0 extends ByMajorMigrationVersionRe
});
}
- static class Sample {
- String topiaId;
- long topiaVersion;
- Timestamp topiaCreateDate;
- Timestamp lastUpdateDate;
- String homeId;
- String comment;
- String set;
-
- public Sample(ResultSet resultSet) throws SQLException {
- this.topiaId = resultSet.getString(1);
- this.topiaVersion = resultSet.getLong(2);
- this.topiaCreateDate = resultSet.getTimestamp(3);
- this.homeId = resultSet.getString(4);
- this.comment = resultSet.getString(5);
- this.set = resultSet.getString(6);
- this.lastUpdateDate = resultSet.getTimestamp(7);
- }
-
- public void addHomeId(String homeId) {
- if (homeId == null) {
- return;
- }
- if (this.homeId == null) {
- this.homeId = homeId;
- return;
- }
- this.homeId += " - " + homeId;
- }
-
- public void addComment(String comment) {
- if (comment == null) {
- return;
- }
- if (this.comment == null) {
- this.comment = comment;
- return;
- }
- this.comment += " \n " + comment;
- }
-
- }
-
-
- static class SampleMeasure {
- String topiaId;
- long topiaVersion;
- Timestamp topiaCreateDate;
- Timestamp lastUpdateDate;
- String homeId;
- Float length;
- Boolean isLengthComputed;
- String picturesReferences;
- Float weight;
- Boolean isWeightComputed;
- int count;
- int acquisitionMode;
- String species;
- String sample;
- String sex;
- String sizeMeasureType;
- String weightMeasureType;
- String tagNumber;
- String speciesFate;
- int sample_idx;
- String lengthMeasureMethod;
- String weightMeasureMethod;
-
- public SampleMeasure(ResultSet resultSet) throws SQLException {
- this.topiaId = resultSet.getString(1);
- this.topiaVersion = resultSet.getLong(2);
- this.topiaCreateDate = resultSet.getTimestamp(3);
- this.homeId = resultSet.getString(4);
- this.length = resultSet.getFloat(5);
- this.isLengthComputed = resultSet.getBoolean(6);
- this.picturesReferences = resultSet.getString(7);
- this.weight = resultSet.getFloat(8);
- this.isWeightComputed = resultSet.getBoolean(9);
- this.count = resultSet.getInt(10);
- this.acquisitionMode = resultSet.getInt(11);
- this.species = resultSet.getString(12);
- this.sample = resultSet.getString(13);
- this.sex = resultSet.getString(14);
- this.lastUpdateDate = resultSet.getTimestamp(15);
- this.sizeMeasureType = resultSet.getString(16);
- this.weightMeasureType = resultSet.getString(17);
- this.tagNumber = resultSet.getString(18);
- this.speciesFate = resultSet.getString(19);
- this.sample_idx = resultSet.getInt(20);
- this.lengthMeasureMethod = resultSet.getString(21);
- this.weightMeasureMethod = resultSet.getString(22);
- // See https://gitlab.com/ultreiaio/ird-observe/-/issues/2503
- if (acquisitionMode == 0 && weight != null && !isWeightComputed) {
- isWeightComputed = true;
- }
- }
-
- }
private void migrateSample(MigrationVersionResourceExecutor executor) {
- Map<String, Sample> setToSampleMap = new TreeMap<>();
+ Map<String, SampleRecord> setToSampleMap = new TreeMap<>();
Map<String, String> sampleMapping = new TreeMap<>();
- addSample(executor, setToSampleMap, sampleMapping, "SELECT REPLACE(topiaId, '.NonTargetSample', '.Sample'), topiaVersion, topiaCreateDate, homeId, comment, set, lastUpdateDate FROM ps_observation.nontargetsample order by set, topiaId");
-
- addSample(executor, setToSampleMap, sampleMapping, "SELECT REPLACE(topiaId, '.TargetSample', '.Sample'), topiaVersion, topiaCreateDate, homeId, comment, set, lastUpdateDate FROM ps_observation.targetsample order by set, topiaId");
+ executor.doSqlWork(connection -> {
+ SampleRecord.addNonTargetSample(connection, setToSampleMap, sampleMapping);
+ SampleRecord.addTargetSample(connection, setToSampleMap, sampleMapping);
+ });
Function<String, String> stringFormat = executor.commentFormat();
- for (Sample sample : setToSampleMap.values()) {
- executor.writeSql(String.format("INSERT INTO ps_observation.Sample(topiaId, topiaVersion, topiaCreateDate, homeId, comment, set, lastUpdateDate) VALUES('%s', %s, '%s'::timestamp, %s, %s, '%s', '%s'::timestamp);",
- sample.topiaId,
- sample.topiaVersion,
- sample.topiaCreateDate,
- SqlHelper.escapeString(StringCleaner.ALL.apply(sample.homeId)),
- stringFormat.apply(sample.comment),
- sample.set,
- sample.lastUpdateDate
- ));
+ for (SampleRecord sample : setToSampleMap.values()) {
+ executor.writeSql(sample.toSampleSql(stringFormat));
}
migrateSampleMeasure(executor, sampleMapping);
}
private void migrateSampleMeasure(MigrationVersionResourceExecutor executor, Map<String, String> sampleMapping) {
- // nonTargetSampleMeasure
- addSampleMeasure(executor, sampleMapping, "SELECT " +
- "REPLACE(topiaId, '.NonTargetLength', '.SampleMeasure'), " +
- "topiaVersion + 1, " +
- "topiaCreateDate, " +
- "homeId, " +
- "length, " +
- "isLengthComputed, " +
- "picturesReferences, " +
- "weight, " +
- "isWeightComputed, " +
- "count, " +
- "acquisitionMode, " +
- "species, " +
- "REPLACE(nonTargetSample, '.NonTargetSample', '.Sample'), " +
- "sex, " +
- "lastUpdateDate, " +
- "sizeMeasureType, " +
- "weightMeasureType, " +
- "tagNumber, " +
- "speciesFate, " +
- "nonTargetSample_idx, " +
- "lengthMeasureMethod, " +
- "weightMeasureMethod " +
- "FROM ps_observation.NonTargetLength");
-
- // discardedTargetSampleMeasure
- addSampleMeasure(executor, sampleMapping, "SELECT " +
- "REPLACE(tl.topiaId, '.TargetLength', '.SampleMeasure'), " +
- "tl.topiaVersion + 1, " +
- "tl.topiaCreateDate, " +
- "tl.homeId, " +
- "tl.length, " +
- "tl.isLengthComputed, " +
- "NULL, " +
- "tl.weight, " +
- "tl.isWeightComputed, " +
- "tl.count, " +
- "tl.acquisitionMode, " +
- "tl.species, " +
- "REPLACE(tl.targetSample, '.TargetSample', '.Sample'), " +
- "'fr.ird.referential.common.Sex#1239832686121#0.0', " +
- "tl.lastUpdateDate, " +
- "tl.sizeMeasureType, " +
- "tl.weightMeasureType, " +
- "tl.tagNumber, " +
- "'fr.ird.referential.ps.common.SpeciesFate#1239832683619#0.6250731662108877', " +
- "-tl.targetsample_idx, " +
- "tl.lengthMeasureMethod, " +
- "tl.weightMeasureMethod " +
- "FROM ps_observation.TargetSample ts " +
- "INNER JOIN ps_observation.TargetLength tl ON (tl.targetSample=ts.topiaId) " +
- "WHERE ts.discarded");
-
- // notDiscardedTargetSampleMeasure
- addSampleMeasure(executor, sampleMapping, "SELECT " +
- "REPLACE(tl.topiaId, '.TargetLength', '.SampleMeasure'), " +
- "tl.topiaVersion + 1, " +
- "tl.topiaCreateDate, " +
- "tl.homeId, " +
- "tl.length, " +
- "tl.isLengthComputed, " +
- "NULL, " +
- "tl.weight, " +
- "tl.isWeightComputed, " +
- "tl.count, " +
- "tl.acquisitionMode, " +
- "tl.species, " +
- "REPLACE(tl.targetSample, '.TargetSample', '.Sample'), " +
- "'fr.ird.referential.common.Sex#1239832686121#0.0', " +
- "tl.lastUpdateDate, " +
- "tl.sizeMeasureType, " +
- "tl.weightMeasureType, " +
- "tl.tagNumber, " +
- "'fr.ird.referential.ps.common.SpeciesFate#1239832683619#0.5722739932065866', " +
- "-tl.targetsample_idx, " +
- "tl.lengthMeasureMethod, " +
- "tl.weightMeasureMethod " +
- "FROM ps_observation.TargetSample ts " +
- "INNER JOIN ps_observation.TargetLength tl ON (tl.targetSample=ts.topiaId) " +
- "WHERE NOT ts.discarded");
- }
-
- private void addSample(MigrationVersionResourceExecutor executor, Map<String, Sample> setToSampleMap, Map<String, String> sampleMapping, String query) {
- List<Sample> targetSample = executor.findMultipleResult(SqlQuery.wrap(query, Sample::new));
- for (Sample sample : targetSample) {
- Sample existingSample = setToSampleMap.get(sample.set);
- if (existingSample == null) {
- // new sample
- setToSampleMap.put(sample.set, sample);
- } else {
- // add to sample mapping
- sampleMapping.put(sample.topiaId, existingSample.topiaId);
- // update homeId
- existingSample.addHomeId(sample.homeId);
- // update comment
- existingSample.addComment(sample.comment);
- }
- }
- }
-
- private void addSampleMeasure(MigrationVersionResourceExecutor executor, Map<String, String> sampleMapping, String query) {
- List<SampleMeasure> sampleMeasureList = executor.findMultipleResult(SqlQuery.wrap(query, SampleMeasure::new));
- for (SampleMeasure sampleMeasure : sampleMeasureList) {
- String sampleId = sampleMapping.get(sampleMeasure.sample);
- if (sampleId == null) {
- sampleId = sampleMeasure.sample;
- }
- executor.writeSql(String.format("INSERT INTO ps_observation.SampleMeasure(" +
- " topiaId," +
- " topiaVersion," +
- " topiaCreateDate," +
- " homeId," +
- " length," +
- " isLengthComputed," +
- " picturesReferences," +
- " weight," +
- " isWeightComputed," +
- " count," +
- " acquisitionMode," +
- " species," +
- " sample," +
- " sex," +
- " lastUpdateDate," +
- " sizeMeasureType," +
- " weightMeasureType," +
- " tagNumber," +
- " speciesFate," +
- " sample_idx," +
- " lengthMeasureMethod," +
- " weightMeasureMethod)" +
- " VALUES(" +
- "'%s', " +
- "%s, " +
- "'%s'::timestamp, " +
- "%s, " +
- "%s, " +
- "%s, " +
- "%s, " +
- "%s, " +
- "%s, " +
- "%s, " +
- "%s, " +
- "%s, " +
- "'%s', " +
- "%s, " +
- "'%s'::timestamp, " +
- "%s, " +
- "%s, " +
- "%s, " +
- "%s, " +
- "%s, " +
- "%s, " +
- "%s " +
- ");",
- sampleMeasure.topiaId,
- sampleMeasure.topiaVersion,
- sampleMeasure.topiaCreateDate,
- SqlHelper.escapeString(sampleMeasure.homeId == null ? null : sampleMeasure.homeId.replaceAll("'", "")),
- sampleMeasure.length,
- sampleMeasure.isLengthComputed,
- SqlHelper.escapeString(sampleMeasure.picturesReferences == null ? null : sampleMeasure.picturesReferences.replaceAll("'", "")),
- sampleMeasure.weight,
- sampleMeasure.isWeightComputed,
- sampleMeasure.count,
- sampleMeasure.acquisitionMode,
- SqlHelper.escapeString(sampleMeasure.species),
- sampleId,
- SqlHelper.escapeString(sampleMeasure.sex),
- sampleMeasure.lastUpdateDate,
- SqlHelper.escapeString(sampleMeasure.sizeMeasureType),
- SqlHelper.escapeString(sampleMeasure.weightMeasureType),
- SqlHelper.escapeString(sampleMeasure.tagNumber),
- SqlHelper.escapeString(sampleMeasure.speciesFate),
- sampleMeasure.sample_idx,
- SqlHelper.escapeString(sampleMeasure.lengthMeasureMethod),
- SqlHelper.escapeString(sampleMeasure.weightMeasureMethod)
- ));
- }
+ executor.doSqlWork(connection -> {
+ SampleMeasureRecord.addNonTargetSampleMeasure(connection, executor, sampleMapping);
+ SampleMeasureRecord.addDiscardedTargetSampleMeasure(connection, executor, sampleMapping);
+ SampleMeasureRecord.addNotDiscardedTargetSampleMeasure(connection, executor, sampleMapping);
+ });
}
@Override
public void generateFinalizeSqlScript(MigrationVersionResourceExecutor executor) {
long stringFixedCount = new FixStringHelper(executor).execute();
+ long commentFixedCount = new FixCommentHelper(executor).execute();
if (stringFixedCount > 0) {
log.warn(String.format("Fix %s string rows(s).", stringFixedCount));
}
- long commentFixedCount = new FixCommentHelper(executor).execute();
if (commentFixedCount > 0) {
log.warn(String.format("Fix %s comment rows(s).", commentFixedCount));
}
=====================================
core/persistence/resources/src/main/java/fr/ird/observe/spi/migration/v9/SampleMeasureRecord.java
=====================================
@@ -0,0 +1,301 @@
+package fr.ird.observe.spi.migration.v9;
+
+/*-
+ * #%L
+ * ObServe Core :: Persistence :: Resources
+ * %%
+ * Copyright (C) 2008 - 2022 IRD, Ultreia.io
+ * %%
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as
+ * published by the Free Software Foundation, either version 3 of the
+ * License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public
+ * License along with this program. If not, see
+ * <http://www.gnu.org/licenses/gpl-3.0.html>.
+ * #L%
+ */
+
+import fr.ird.observe.persistence.SqlHelper;
+import org.nuiton.topia.service.migration.resources.MigrationVersionResourceExecutor;
+
+import java.sql.Connection;
+import java.sql.PreparedStatement;
+import java.sql.ResultSet;
+import java.sql.SQLException;
+import java.sql.Timestamp;
+import java.util.Map;
+import java.util.function.Function;
+
+/**
+ * Created on 20/11/2022.
+ *
+ * @author Tony Chemit - dev(a)tchemit.fr
+ * @since 9.0.18
+ */
+class SampleMeasureRecord {
+
+ static void addNonTargetSampleMeasure(Connection connection, MigrationVersionResourceExecutor executor, Map<String, String> sampleMapping) throws SQLException {
+ addSampleMeasure(connection, executor, sampleMapping, "SELECT " +
+ "REPLACE(topiaId, '.NonTargetLength', '.SampleMeasure'), " +
+ "topiaVersion + 1, " +
+ "topiaCreateDate, " +
+ "homeId, " +
+ "length, " +
+ "isLengthComputed, " +
+ "picturesReferences, " +
+ "weight, " +
+ "isWeightComputed, " +
+ "count, " +
+ "acquisitionMode, " +
+ "species, " +
+ "REPLACE(nonTargetSample, '.NonTargetSample', '.Sample'), " +
+ "sex, " +
+ "lastUpdateDate, " +
+ "sizeMeasureType, " +
+ "weightMeasureType, " +
+ "tagNumber, " +
+ "speciesFate, " +
+ "nonTargetSample_idx, " +
+ "lengthMeasureMethod, " +
+ "weightMeasureMethod " +
+ "FROM ps_observation.NonTargetLength",
+ SampleMeasureRecord::toNonTargetSpeciesFate);
+ }
+
+ static void addDiscardedTargetSampleMeasure(Connection connection, MigrationVersionResourceExecutor executor, Map<String, String> sampleMapping) throws SQLException {
+ addSampleMeasure(connection, executor, sampleMapping, "SELECT " +
+ "REPLACE(tl.topiaId, '.TargetLength', '.SampleMeasure'), " +
+ "tl.topiaVersion + 1, " +
+ "tl.topiaCreateDate, " +
+ "tl.homeId, " +
+ "tl.length, " +
+ "tl.isLengthComputed, " +
+ "NULL, " +
+ "tl.weight, " +
+ "tl.isWeightComputed, " +
+ "tl.count, " +
+ "tl.acquisitionMode, " +
+ "tl.species, " +
+ "REPLACE(tl.targetSample, '.TargetSample', '.Sample'), " +
+ "'fr.ird.referential.common.Sex#1239832686121#0.0', " +
+ "tl.lastUpdateDate, " +
+ "tl.sizeMeasureType, " +
+ "tl.weightMeasureType, " +
+ "tl.tagNumber, " +
+ "'fr.ird.referential.ps.common.SpeciesFate#1239832683619#0.6250731662108877', " +
+ "-tl.targetSample_idx, " +
+ "tl.lengthMeasureMethod, " +
+ "tl.weightMeasureMethod " +
+ "FROM ps_observation.TargetSample ts " +
+ "INNER JOIN ps_observation.TargetLength tl ON (tl.targetSample=ts.topiaId) " +
+ "WHERE ts.discarded",
+ SampleMeasureRecord::toDiscardedTargetSpeciesFate);
+ }
+
+ static void addNotDiscardedTargetSampleMeasure(Connection connection, MigrationVersionResourceExecutor executor, Map<String, String> sampleMapping) throws SQLException {
+ addSampleMeasure(connection, executor, sampleMapping, "SELECT " +
+ "REPLACE(tl.topiaId, '.TargetLength', '.SampleMeasure'), " +
+ "tl.topiaVersion + 1, " +
+ "tl.topiaCreateDate, " +
+ "tl.homeId, " +
+ "tl.length, " +
+ "tl.isLengthComputed, " +
+ "NULL, " +
+ "tl.weight, " +
+ "tl.isWeightComputed, " +
+ "tl.count, " +
+ "tl.acquisitionMode, " +
+ "tl.species, " +
+ "REPLACE(tl.targetSample, '.TargetSample', '.Sample'), " +
+ "'fr.ird.referential.common.Sex#1239832686121#0.0', " +
+ "tl.lastUpdateDate, " +
+ "tl.sizeMeasureType, " +
+ "tl.weightMeasureType, " +
+ "tl.tagNumber, " +
+ "'fr.ird.referential.ps.common.SpeciesFate#1239832683619#0.5722739932065866', " +
+ "-tl.targetSample_idx, " +
+ "tl.lengthMeasureMethod, " +
+ "tl.weightMeasureMethod " +
+ "FROM ps_observation.TargetSample ts " +
+ "INNER JOIN ps_observation.TargetLength tl ON (tl.targetSample=ts.topiaId) " +
+ "WHERE NOT ts.discarded",
+ SampleMeasureRecord::toNotDiscardedTargetSpeciesFate);
+ }
+
+ static void addSampleMeasure(Connection connection, MigrationVersionResourceExecutor executor, Map<String, String> sampleMapping, String query, Function<SampleMeasureRecord, String> speciesFateSupplier) throws SQLException {
+
+ try (PreparedStatement statement = connection.prepareStatement(query)) {
+ try (ResultSet resultSet = statement.executeQuery()) {
+ while (resultSet.next()) {
+ SampleMeasureRecord sampleMeasure = new SampleMeasureRecord(resultSet);
+ String sampleId = sampleMapping.get(sampleMeasure.sample);
+ if (sampleId == null) {
+ sampleId = sampleMeasure.sample;
+ }
+ executor.writeSql(sampleMeasure.toSampleMeasureSql(sampleId, speciesFateSupplier));
+ }
+ }
+ }
+ }
+
+ String topiaId;
+ long topiaVersion;
+ Timestamp topiaCreateDate;
+ Timestamp lastUpdateDate;
+ String homeId;
+ Float length;
+ Boolean isLengthComputed;
+ String picturesReferences;
+ Float weight;
+ Boolean isWeightComputed;
+ int count;
+ int acquisitionMode;
+ String species;
+ String sample;
+ String sex;
+ String sizeMeasureType;
+ String weightMeasureType;
+ String tagNumber;
+ String speciesFate;
+ int sample_idx;
+ String lengthMeasureMethod;
+ String weightMeasureMethod;
+
+
+ private String toNonTargetSpeciesFate() {
+ if (speciesFate == null) {
+ return null;
+ }
+ if (DataSourceMigrationForVersion_9_0.SPECIES_FATE_6.equals(speciesFate)) {
+ // like for non target catches always change from speciesFate 6 to 15
+ speciesFate = DataSourceMigrationForVersion_9_0.SPECIES_FATE_15;
+ }
+ return speciesFate;
+ }
+
+ private String toDiscardedTargetSpeciesFate() {
+ // Discarded target species use always speciesFate 5 (and we have it from the sql query)
+ return speciesFate;
+
+ }
+
+ private String toNotDiscardedTargetSpeciesFate() {
+ // by default we use in sql query speciesFate = 6
+ // for small species, they are always with speciesFate = 15
+
+ if (!DataSourceMigrationForVersion_9_0.SMALL_SPECIES_TO_SPECIES_FATE_6.contains(species)) {
+ speciesFate = DataSourceMigrationForVersion_9_0.SPECIES_FATE_15;
+ }
+ return speciesFate;
+ }
+
+ public SampleMeasureRecord(ResultSet resultSet) throws SQLException {
+ this.topiaId = resultSet.getString(1);
+ this.topiaVersion = resultSet.getLong(2);
+ this.topiaCreateDate = resultSet.getTimestamp(3);
+ this.homeId = resultSet.getString(4);
+ this.length = resultSet.getFloat(5);
+ this.isLengthComputed = resultSet.getBoolean(6);
+ this.picturesReferences = resultSet.getString(7);
+ this.weight = resultSet.getFloat(8);
+ this.isWeightComputed = resultSet.getBoolean(9);
+ this.count = resultSet.getInt(10);
+ this.acquisitionMode = resultSet.getInt(11);
+ this.species = resultSet.getString(12);
+ this.sample = resultSet.getString(13);
+ this.sex = resultSet.getString(14);
+ this.lastUpdateDate = resultSet.getTimestamp(15);
+ this.sizeMeasureType = resultSet.getString(16);
+ this.weightMeasureType = resultSet.getString(17);
+ this.tagNumber = resultSet.getString(18);
+ this.speciesFate = resultSet.getString(19);
+ this.sample_idx = resultSet.getInt(20);
+ this.lengthMeasureMethod = resultSet.getString(21);
+ this.weightMeasureMethod = resultSet.getString(22);
+ // See https://gitlab.com/ultreiaio/ird-observe/-/issues/2503
+ if (acquisitionMode == 0 && weight != null && !isWeightComputed) {
+ isWeightComputed = true;
+ }
+ }
+
+ String toSampleMeasureSql(String sampleId, Function<SampleMeasureRecord, String> speciesFateSupplier) {
+ return String.format("INSERT INTO ps_observation.SampleMeasure(" +
+ " topiaId," +
+ " topiaVersion," +
+ " topiaCreateDate," +
+ " homeId," +
+ " length," +
+ " isLengthComputed," +
+ " picturesReferences," +
+ " weight," +
+ " isWeightComputed," +
+ " count," +
+ " acquisitionMode," +
+ " species," +
+ " sample," +
+ " sex," +
+ " lastUpdateDate," +
+ " sizeMeasureType," +
+ " weightMeasureType," +
+ " tagNumber," +
+ " speciesFate," +
+ " sample_idx," +
+ " lengthMeasureMethod," +
+ " weightMeasureMethod)" +
+ " VALUES(" +
+ "'%s', " +
+ "%s, " +
+ "'%s'::timestamp, " +
+ "%s, " +
+ "%s, " +
+ "%s, " +
+ "%s, " +
+ "%s, " +
+ "%s, " +
+ "%s, " +
+ "%s, " +
+ "%s, " +
+ "'%s', " +
+ "%s, " +
+ "'%s'::timestamp, " +
+ "%s, " +
+ "%s, " +
+ "%s, " +
+ "%s, " +
+ "%s, " +
+ "%s, " +
+ "%s " +
+ ");",
+ topiaId,
+ topiaVersion,
+ topiaCreateDate,
+ SqlHelper.escapeString(homeId == null ? null : homeId.replaceAll("'", "")),
+ length,
+ isLengthComputed,
+ SqlHelper.escapeString(picturesReferences == null ? null : picturesReferences.replaceAll("'", "")),
+ weight,
+ isWeightComputed,
+ count,
+ acquisitionMode,
+ SqlHelper.escapeString(species),
+ sampleId,
+ SqlHelper.escapeString(sex),
+ lastUpdateDate,
+ SqlHelper.escapeString(sizeMeasureType),
+ SqlHelper.escapeString(weightMeasureType),
+ SqlHelper.escapeString(tagNumber),
+ SqlHelper.escapeString(speciesFateSupplier.apply(this)),
+ sample_idx,
+ SqlHelper.escapeString(lengthMeasureMethod),
+ SqlHelper.escapeString(weightMeasureMethod)
+ );
+ }
+
+}
=====================================
core/persistence/resources/src/main/java/fr/ird/observe/spi/migration/v9/SampleRecord.java
=====================================
@@ -0,0 +1,150 @@
+package fr.ird.observe.spi.migration.v9;
+
+/*-
+ * #%L
+ * ObServe Core :: Persistence :: Resources
+ * %%
+ * Copyright (C) 2008 - 2022 IRD, Ultreia.io
+ * %%
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as
+ * published by the Free Software Foundation, either version 3 of the
+ * License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public
+ * License along with this program. If not, see
+ * <http://www.gnu.org/licenses/gpl-3.0.html>.
+ * #L%
+ */
+
+import fr.ird.observe.dto.StringCleaner;
+import fr.ird.observe.persistence.SqlHelper;
+
+import java.sql.Connection;
+import java.sql.PreparedStatement;
+import java.sql.ResultSet;
+import java.sql.SQLException;
+import java.sql.Timestamp;
+import java.util.Map;
+import java.util.function.Function;
+
+/**
+ * Created on 20/11/2022.
+ *
+ * @author Tony Chemit - dev(a)tchemit.fr
+ * @since 9.0.18
+ */
+class SampleRecord {
+ final String topiaId;
+ final long topiaVersion;
+ final Timestamp topiaCreateDate;
+ final Timestamp lastUpdateDate;
+ final boolean nonTarget;
+ String homeId;
+ String comment;
+ String set;
+
+ static void addNonTargetSample(Connection connection, Map<String, SampleRecord> setToSampleMap, Map<String, String> sampleMapping) throws SQLException {
+
+ try (PreparedStatement statement = connection.prepareStatement(
+ "SELECT " +
+ "REPLACE(topiaId, '.NonTargetSample', '.Sample'), " +
+ "topiaVersion, " +
+ "topiaCreateDate, " +
+ "homeId, " +
+ "comment, " +
+ "set, " +
+ "lastUpdateDate " +
+ "FROM ps_observation.nontargetsample " +
+ "ORDER BY set, topiaId")) {
+ addSample(statement, setToSampleMap, sampleMapping, true);
+ }
+ }
+
+
+ static void addTargetSample(Connection connection, Map<String, SampleRecord> setToSampleMap, Map<String, String> sampleMapping) throws SQLException {
+ try (PreparedStatement statement = connection.prepareStatement(
+ "SELECT " +
+ "REPLACE(topiaId, '.TargetSample', '.Sample'), " +
+ "topiaVersion, " +
+ "topiaCreateDate, " +
+ "homeId, " +
+ "comment, " +
+ "set, " +
+ "lastUpdateDate " +
+ "FROM ps_observation.targetsample " +
+ "ORDER BY set, topiaId")) {
+ addSample(statement, setToSampleMap, sampleMapping, false);
+ }
+ }
+
+ static void addSample(PreparedStatement statement, Map<String, SampleRecord> setToSampleMap, Map<String, String> sampleMapping, boolean nonTarget) throws SQLException {
+ try (ResultSet resultSet = statement.executeQuery()) {
+ while (resultSet.next()) {
+ SampleRecord sample = new SampleRecord(resultSet, nonTarget);
+ SampleRecord existingSample = setToSampleMap.get(sample.set);
+ if (existingSample == null) {
+ // new sample
+ setToSampleMap.put(sample.set, sample);
+ } else {
+ // add to sample mapping
+ sampleMapping.put(sample.topiaId, existingSample.topiaId);
+ // update homeId
+ existingSample.addHomeId(sample.homeId);
+ // update comment
+ existingSample.addComment(sample.comment);
+ }
+ }
+ }
+ }
+
+ public SampleRecord(ResultSet resultSet, boolean nonTarget) throws SQLException {
+ this.topiaId = resultSet.getString(1);
+ this.topiaVersion = resultSet.getLong(2);
+ this.topiaCreateDate = resultSet.getTimestamp(3);
+ this.homeId = resultSet.getString(4);
+ this.comment = resultSet.getString(5);
+ this.set = resultSet.getString(6);
+ this.lastUpdateDate = resultSet.getTimestamp(7);
+ this.nonTarget = nonTarget;
+ }
+
+ public String toSampleSql(Function<String, String> commentFormat) {
+ return String.format("INSERT INTO ps_observation.Sample(topiaId, topiaVersion, topiaCreateDate, homeId, comment, set, lastUpdateDate) VALUES('%s', %s, '%s'::timestamp, %s, %s, '%s', '%s'::timestamp);",
+ topiaId,
+ topiaVersion,
+ topiaCreateDate,
+ SqlHelper.escapeString(StringCleaner.ALL.apply(homeId)),
+ commentFormat.apply(comment),
+ set,
+ lastUpdateDate);
+ }
+
+ public void addHomeId(String homeId) {
+ if (homeId == null) {
+ return;
+ }
+ if (this.homeId == null) {
+ this.homeId = homeId;
+ return;
+ }
+ this.homeId += " - " + homeId;
+ }
+
+ public void addComment(String comment) {
+ if (comment == null) {
+ return;
+ }
+ if (this.comment == null) {
+ this.comment = comment;
+ return;
+ }
+ this.comment += " \n " + comment;
+ }
+
+}
=====================================
core/services/local/src/main/java/fr/ird/observe/services/local/service/data/ps/common/TripServiceLocalSupport.java
=====================================
@@ -38,6 +38,8 @@ import fr.ird.observe.services.service.data.ps.common.TripService;
import java.util.Date;
import java.util.LinkedHashSet;
import java.util.List;
+import java.util.Map;
+import java.util.Set;
/**
* Created on 26/07/2021.
@@ -87,6 +89,11 @@ public abstract class TripServiceLocalSupport extends ObserveServiceLocal implem
return Trip.SPI.isActivityEndOfSearchFound(this, routeId);
}
+ @Override
+ public Map<String, Set<String>> getPsObservationCatchesSpeciesFateBySpeciesId(String setId) {
+ return fr.ird.observe.entities.data.ps.observation.Sample.SPI.getCatchesSpeciesFateBySpeciesId(this, setId);
+ }
+
@Override
public Form<fr.ird.observe.dto.data.ps.observation.FloatingObjectDto> preCreateObservationFloatingObject(String activityId, FloatingObjectPreset floatingObjectPreset) {
return fr.ird.observe.entities.data.ps.observation.FloatingObject.SPI.preCreate(this, floatingObjectPreset);
=====================================
core/services/test/src/main/java/fr/ird/observe/services/service/data/ps/common/TripServiceFixtures.java
=====================================
@@ -39,7 +39,9 @@ import fr.ird.observe.services.service.data.EditableServiceFixtures;
import fr.ird.observe.services.service.data.RootOpenableServiceFixtures;
import org.junit.Assert;
+import java.util.Map;
import java.util.Set;
+import java.util.stream.Collectors;
public class TripServiceFixtures extends GeneratedTripServiceFixtures {
@@ -67,6 +69,15 @@ public class TripServiceFixtures extends GeneratedTripServiceFixtures {
// }
+ @Override
+ public void getPsObservationCatchesSpeciesFateBySpeciesId(ObserveServicesProvider servicesProvider, TripService service) {
+ String setId = getProperty("getPsObservationCatchesSpeciesFateBySpeciesId.setId");
+ Map<String, Set<String>> actual = service.getPsObservationCatchesSpeciesFateBySpeciesId(setId);
+ Assert.assertNotNull(actual);
+ Assert.assertEquals(getIntegerProperty("getPsObservationCatchesSpeciesFateBySpeciesId.speciesCount"), actual.size());
+ Assert.assertEquals(getIntegerProperty("getPsObservationCatchesSpeciesFateBySpeciesId.speciesFateCount"), actual.values().stream().flatMap(Set::stream).collect(Collectors.toSet()).size());
+ }
+
@Override
public void getAllTripIds(ObserveServicesProvider servicesProvider, TripService service) {
Set<String> actual = service.getAllTripIds();
=====================================
core/services/test/src/main/resources/fixtures/fr/ird/observe/services/service/data/ps/common/TripService.properties
=====================================
@@ -25,6 +25,7 @@ defaultNewParentId=${REFERENTIAL_PS_COMMON_PROGRAM_MOVE}
defaultParentId=${REFERENTIAL_PS_COMMON_PROGRAM}
defaultProgramId=${REFERENTIAL_PS_COMMON_PROGRAM}
defaultRouteId=FIXME
+defaultSetId=${PS_OBSERVATION_SET}
defaultSpeciesListId=fr.ird.referential.common.SpeciesList#1239832675370#0.1
defaultTripId=${PS_COMMON_TRIP}
defaultVesselId=fr.ird.referential.common.Vessel#1239832679425#0.9136908731720471
@@ -43,6 +44,9 @@ getMatchingTripsVesselWithinDateRange.vesselId=${defaultVesselId}
getParentBrothers.count=16
getParentBrothers.parentId=${defaultParentId}
getParentBrothers.programId=${defaultProgramId}
+getPsObservationCatchesSpeciesFateBySpeciesId.setId=${defaultSetId}
+getPsObservationCatchesSpeciesFateBySpeciesId.speciesCount=6
+getPsObservationCatchesSpeciesFateBySpeciesId.speciesFateCount=4
getSpeciesByListAndTrip.count=14
getSpeciesByListAndTrip.speciesListId=${defaultSpeciesListId}
getSpeciesByListAndTrip.tripId=${defaultTripId}
=====================================
model/src/main/models/Observe/dto/20-data-ps-observation.model
=====================================
@@ -158,8 +158,6 @@ informationSource {*:0..1} referential.ps.observation.InformationSourceReference
data.ps.observation.Sample > data.Container
sampleMeasure + {*} data.ps.observation.SampleMeasure
speciesFate {*:*} referential.ps.common.SpeciesFateReference
-availableSpeciesIds + {*} String
-availableSpeciesFateIds + {*} String
data.ps.observation.SetCatch > data.Container
catches {*} data.ps.observation.Catch
=====================================
model/src/main/models/Observe/dto/attribute/unique.properties
=====================================
@@ -38,8 +38,6 @@ data.ps.localmarket.TripBatch.attribute.localmarketSurvey=true
data.ps.logbook.Route.attribute.activity=true
data.ps.observation.Activity.attribute.nonTargetCatchSpecies=true
data.ps.observation.Route.attribute.activity=true
-data.ps.observation.Sample.attribute.availableSpeciesFateIds=true
-data.ps.observation.Sample.attribute.availableSpeciesIds=true
data.ps.observation.SetNonTargetCatchRelease.attribute.availableSpeciesIds=true
referential.Referential.attribute.homeId=true
referential.Referential.attribute.uri=true
=====================================
server/core/src/main/filtered-resources/META-INF/mapping-api-client.wm
=====================================
@@ -16,151 +16,152 @@
# Do not remove the next line, it is used to generate the following actions.
# →→→ Generated dynamic mapping
-GET /AnonymousService/applySecurity AnonymousServiceRestApi.applySecurity
-GET /AnonymousService/checkCanConnect AnonymousServiceRestApi.checkCanConnect
-GET /AnonymousService/checkCanConnectOrBeEmpty AnonymousServiceRestApi.checkCanConnectOrBeEmpty
-POST /AnonymousService/createEmpty AnonymousServiceRestApi.createEmpty
-POST /AnonymousService/createFromDump AnonymousServiceRestApi.createFromDump
-POST /AnonymousService/createFromImport AnonymousServiceRestApi.createFromImport
-GET /AnonymousService/generateHomeId AnonymousServiceRestApi.generateHomeId
-GET /AnonymousService/getAvailableDatabaseNames AnonymousServiceRestApi.getAvailableDatabaseNames
-GET /AnonymousService/getModelVersion AnonymousServiceRestApi.getModelVersion
-GET /AnonymousService/getServerVersion AnonymousServiceRestApi.getServerVersion
-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
-GET /DataSourceService/isIdValid DataSourceServiceRestApi.isIdValid
-POST /DataSourceService/produceAddSqlScript DataSourceServiceRestApi.produceAddSqlScript
-POST /DataSourceService/produceCreateSqlScript DataSourceServiceRestApi.produceCreateSqlScript
-POST /DataSourceService/produceDeleteSqlScript DataSourceServiceRestApi.produceDeleteSqlScript
-POST /DataSourceService/produceMoveSqlScript DataSourceServiceRestApi.produceMoveSqlScript
-POST /DataSourceService/retainExistingIds DataSourceServiceRestApi.retainExistingIds
-GET /NavigationService/getGroupByDtoSet NavigationServiceRestApi.getGroupByDtoSet
-GET /NavigationService/getNavigation NavigationServiceRestApi.getNavigation
-GET /NavigationService/loadNavigationPath NavigationServiceRestApi.loadNavigationPath
-GET /NavigationService/loadNavigationRoot NavigationServiceRestApi.loadNavigationRoot
-GET /NavigationService/loadSelectionRoot NavigationServiceRestApi.loadSelectionRoot
-GET /ReferenceService/createData ReferenceServiceRestApi.createData
-GET /ReferenceService/createReferential ReferenceServiceRestApi.createReferential
-GET /ReferenceService/loadData ReferenceServiceRestApi.loadData
-GET /ReferenceService/loadReferential ReferenceServiceRestApi.loadReferential
-POST /ReportService/executeReport ReportServiceRestApi.executeReport
-POST /ReportService/populateVariables ReportServiceRestApi.populateVariables
-GET /UsageService/countMandatoryData UsageServiceRestApi.countMandatoryData
-GET /UsageService/countOptionalData UsageServiceRestApi.countOptionalData
-GET /UsageService/countReferential UsageServiceRestApi.countReferential
-POST /UsageService/findMandatoryData UsageServiceRestApi.findMandatoryData
-POST /UsageService/findOptionalData UsageServiceRestApi.findOptionalData
-POST /UsageService/findReferential UsageServiceRestApi.findReferential
-POST /ValidateService/validateData ValidateServiceRestApi.validateData
-POST /ValidateService/validateReferential ValidateServiceRestApi.validateReferential
-POST /api/DataEntityService/create api.DataEntityServiceRestApi.create
-DELETE /api/DataEntityService/delete api.DataEntityServiceRestApi.delete
-GET /api/DataEntityService/generateId api.DataEntityServiceRestApi.generateId
-GET /api/DataEntityService/getOne api.DataEntityServiceRestApi.getOne
-GET /api/DataEntityService/getSome api.DataEntityServiceRestApi.getSome
-POST /api/DataEntityService/update api.DataEntityServiceRestApi.update
-POST /api/ReferentialEntityService/create api.ReferentialEntityServiceRestApi.create
-DELETE /api/ReferentialEntityService/delete api.ReferentialEntityServiceRestApi.delete
-GET /api/ReferentialEntityService/generateId api.ReferentialEntityServiceRestApi.generateId
-GET /api/ReferentialEntityService/getAll api.ReferentialEntityServiceRestApi.getAll
-GET /api/ReferentialEntityService/getByModule api.ReferentialEntityServiceRestApi.getByModule
-GET /api/ReferentialEntityService/getByPackage api.ReferentialEntityServiceRestApi.getByPackage
-GET /api/ReferentialEntityService/getOne api.ReferentialEntityServiceRestApi.getOne
-GET /api/ReferentialEntityService/getSome api.ReferentialEntityServiceRestApi.getSome
-PUT /api/ReferentialEntityService/update api.ReferentialEntityServiceRestApi.update
-GET /api/SqlService/select api.SqlServiceRestApi.select
-GET /data/ContainerService/loadForm data.ContainerServiceRestApi.loadForm
-POST /data/ContainerService/save data.ContainerServiceRestApi.save
-GET /data/DataFileService/getDataFile data.DataFileServiceRestApi.getDataFile
-POST /data/DataManagementService/deleteData data.DataManagementServiceRestApi.deleteData
-POST /data/DataManagementService/exportData data.DataManagementServiceRestApi.exportData
-POST /data/DataManagementService/importData data.DataManagementServiceRestApi.importData
-DELETE /data/EditableService/delete data.EditableServiceRestApi.delete
-GET /data/EditableService/exists data.EditableServiceRestApi.exists
-GET /data/EditableService/loadDto data.EditableServiceRestApi.loadDto
-GET /data/EditableService/loadForm data.EditableServiceRestApi.loadForm
-GET /data/EditableService/preCreate data.EditableServiceRestApi.preCreate
-POST /data/EditableService/save data.EditableServiceRestApi.save
-DELETE /data/OpenableService/delete data.OpenableServiceRestApi.delete
-GET /data/OpenableService/exists data.OpenableServiceRestApi.exists
-GET /data/OpenableService/getBrothers data.OpenableServiceRestApi.getBrothers
-GET /data/OpenableService/getBrothersFromParent data.OpenableServiceRestApi.getBrothersFromParent
-GET /data/OpenableService/getChildren data.OpenableServiceRestApi.getChildren
-GET /data/OpenableService/getChildrenUpdate data.OpenableServiceRestApi.getChildrenUpdate
-POST /data/OpenableService/getMandatoryDependencies data.OpenableServiceRestApi.getMandatoryDependencies
-POST /data/OpenableService/getMandatoryDependenciesCount data.OpenableServiceRestApi.getMandatoryDependenciesCount
-POST /data/OpenableService/getOptionalDependencies data.OpenableServiceRestApi.getOptionalDependencies
-POST /data/OpenableService/getOptionalDependenciesCount data.OpenableServiceRestApi.getOptionalDependenciesCount
-GET /data/OpenableService/loadDto data.OpenableServiceRestApi.loadDto
-GET /data/OpenableService/loadForm data.OpenableServiceRestApi.loadForm
-POST /data/OpenableService/move data.OpenableServiceRestApi.move
-GET /data/OpenableService/preCreate data.OpenableServiceRestApi.preCreate
-POST /data/OpenableService/save data.OpenableServiceRestApi.save
-POST /data/RootOpenableService/computeMissingReferential data.RootOpenableServiceRestApi.computeMissingReferential
-DELETE /data/RootOpenableService/delete data.RootOpenableServiceRestApi.delete
-DELETE /data/RootOpenableService/deleteLayout data.RootOpenableServiceRestApi.deleteLayout
-GET /data/RootOpenableService/exists data.RootOpenableServiceRestApi.exists
-GET /data/RootOpenableService/getBrothers data.RootOpenableServiceRestApi.getBrothers
-GET /data/RootOpenableService/getChildren data.RootOpenableServiceRestApi.getChildren
-GET /data/RootOpenableService/getChildrenUpdate data.RootOpenableServiceRestApi.getChildrenUpdate
-GET /data/RootOpenableService/getGroupByDtoValue data.RootOpenableServiceRestApi.getGroupByDtoValue
-GET /data/RootOpenableService/getGroupByValue data.RootOpenableServiceRestApi.getGroupByValue
-GET /data/RootOpenableService/loadDto data.RootOpenableServiceRestApi.loadDto
-GET /data/RootOpenableService/loadForm data.RootOpenableServiceRestApi.loadForm
-POST /data/RootOpenableService/moveLayout data.RootOpenableServiceRestApi.moveLayout
-GET /data/RootOpenableService/preCreate data.RootOpenableServiceRestApi.preCreate
-POST /data/RootOpenableService/save data.RootOpenableServiceRestApi.save
-GET /data/SimpleService/loadForm data.SimpleServiceRestApi.loadForm
-POST /data/SimpleService/save data.SimpleServiceRestApi.save
-POST /data/ll/ActivityPairingService/applyPairing data.ll.ActivityPairingServiceRestApi.applyPairing
-POST /data/ll/ActivityPairingService/computePairing data.ll.ActivityPairingServiceRestApi.computePairing
-GET /data/ll/common/TripService/getAllTripIds data.ll.common.TripServiceRestApi.getAllTripIds
-GET /data/ll/common/TripService/getLogbookCatchSpeciesIds data.ll.common.TripServiceRestApi.getLogbookCatchSpeciesIds
-GET /data/ll/common/TripService/getMatchingTripsVesselWithinDateRange data.ll.common.TripServiceRestApi.getMatchingTripsVesselWithinDateRange
-GET /data/ll/common/TripService/getSampleActivityParentCandidate data.ll.common.TripServiceRestApi.getSampleActivityParentCandidate
-GET /data/ll/common/TripService/getSpeciesByListAndTrip data.ll.common.TripServiceRestApi.getSpeciesByListAndTrip
-GET /data/ll/common/TripService/getTripMap data.ll.common.TripServiceRestApi.getTripMap
-GET /data/ll/common/TripService/loadBranchlineForm data.ll.common.TripServiceRestApi.loadBranchlineForm
-POST /data/ll/common/TripService/moveActivitySample data.ll.common.TripServiceRestApi.moveActivitySample
-POST /data/ll/common/TripService/saveAndCopyProperties data.ll.common.TripServiceRestApi.saveAndCopyProperties
-POST /data/ll/common/TripService/saveBranchline data.ll.common.TripServiceRestApi.saveBranchline
-POST /data/ps/ActivityPairingService/applyPairing data.ps.ActivityPairingServiceRestApi.applyPairing
-POST /data/ps/ActivityPairingService/computePairing data.ps.ActivityPairingServiceRestApi.computePairing
-GET /data/ps/AvdthService/importData data.ps.AvdthServiceRestApi.importData
-POST /data/ps/ConsolidateDataService/consolidateLocalmarketBatch data.ps.ConsolidateDataServiceRestApi.consolidateLocalmarketBatch
-POST /data/ps/ConsolidateDataService/consolidateTrip data.ps.ConsolidateDataServiceRestApi.consolidateTrip
-GET /data/ps/ConsolidateDataService/newSimplifiedObjectTypeManager data.ps.ConsolidateDataServiceRestApi.newSimplifiedObjectTypeManager
-GET /data/ps/common/TripService/getAllTripIds data.ps.common.TripServiceRestApi.getAllTripIds
-GET /data/ps/common/TripService/getLogbookWellPlanActivities data.ps.common.TripServiceRestApi.getLogbookWellPlanActivities
-GET /data/ps/common/TripService/getMatchingTripsVesselWithinDateRange data.ps.common.TripServiceRestApi.getMatchingTripsVesselWithinDateRange
-GET /data/ps/common/TripService/getSpeciesByListAndTrip data.ps.common.TripServiceRestApi.getSpeciesByListAndTrip
-GET /data/ps/common/TripService/getTripMap data.ps.common.TripServiceRestApi.getTripMap
-GET /data/ps/common/TripService/isActivityEndOfSearchFound data.ps.common.TripServiceRestApi.isActivityEndOfSearchFound
-GET /data/ps/common/TripService/loadLocalmarketForm data.ps.common.TripServiceRestApi.loadLocalmarketForm
-GET /data/ps/common/TripService/loadLogbookForm data.ps.common.TripServiceRestApi.loadLogbookForm
-GET /data/ps/common/TripService/preCreateLogbookFloatingObject data.ps.common.TripServiceRestApi.preCreateLogbookFloatingObject
-GET /data/ps/common/TripService/preCreateObservationFloatingObject data.ps.common.TripServiceRestApi.preCreateObservationFloatingObject
-POST /referential/ReferentialService/changeId referential.ReferentialServiceRestApi.changeId
-DELETE /referential/ReferentialService/delete referential.ReferentialServiceRestApi.delete
-GET /referential/ReferentialService/exists referential.ReferentialServiceRestApi.exists
-GET /referential/ReferentialService/getEnabledReferentialLabelSet referential.ReferentialServiceRestApi.getEnabledReferentialLabelSet
-GET /referential/ReferentialService/getReferenceSet referential.ReferentialServiceRestApi.getReferenceSet
-POST /referential/ReferentialService/getReferentialIds referential.ReferentialServiceRestApi.getReferentialIds
-GET /referential/ReferentialService/getReferentialReferenceSets referential.ReferentialServiceRestApi.getReferentialReferenceSets
-POST /referential/ReferentialService/insertMissingReferential referential.ReferentialServiceRestApi.insertMissingReferential
-GET /referential/ReferentialService/loadDto referential.ReferentialServiceRestApi.loadDto
-POST /referential/ReferentialService/loadDtoList referential.ReferentialServiceRestApi.loadDtoList
-GET /referential/ReferentialService/loadForm referential.ReferentialServiceRestApi.loadForm
-GET /referential/ReferentialService/loadIds referential.ReferentialServiceRestApi.loadIds
-GET /referential/ReferentialService/preCreate referential.ReferentialServiceRestApi.preCreate
-POST /referential/ReferentialService/replaceReference referential.ReferentialServiceRestApi.replaceReference
-POST /referential/ReferentialService/save referential.ReferentialServiceRestApi.save
-POST /referential/SynchronizeService/applySql referential.SynchronizeServiceRestApi.applySql
-POST /referential/SynchronizeService/filterIdsUsed referential.SynchronizeServiceRestApi.filterIdsUsed
-POST /referential/SynchronizeService/getReferentialToDelete referential.SynchronizeServiceRestApi.getReferentialToDelete
-POST /referential/SynchronizeService/produceSqlResult referential.SynchronizeServiceRestApi.produceSqlResult
+GET /AnonymousService/applySecurity AnonymousServiceRestApi.applySecurity
+GET /AnonymousService/checkCanConnect AnonymousServiceRestApi.checkCanConnect
+GET /AnonymousService/checkCanConnectOrBeEmpty AnonymousServiceRestApi.checkCanConnectOrBeEmpty
+POST /AnonymousService/createEmpty AnonymousServiceRestApi.createEmpty
+POST /AnonymousService/createFromDump AnonymousServiceRestApi.createFromDump
+POST /AnonymousService/createFromImport AnonymousServiceRestApi.createFromImport
+GET /AnonymousService/generateHomeId AnonymousServiceRestApi.generateHomeId
+GET /AnonymousService/getAvailableDatabaseNames AnonymousServiceRestApi.getAvailableDatabaseNames
+GET /AnonymousService/getModelVersion AnonymousServiceRestApi.getModelVersion
+GET /AnonymousService/getServerVersion AnonymousServiceRestApi.getServerVersion
+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
+GET /DataSourceService/isIdValid DataSourceServiceRestApi.isIdValid
+POST /DataSourceService/produceAddSqlScript DataSourceServiceRestApi.produceAddSqlScript
+POST /DataSourceService/produceCreateSqlScript DataSourceServiceRestApi.produceCreateSqlScript
+POST /DataSourceService/produceDeleteSqlScript DataSourceServiceRestApi.produceDeleteSqlScript
+POST /DataSourceService/produceMoveSqlScript DataSourceServiceRestApi.produceMoveSqlScript
+POST /DataSourceService/retainExistingIds DataSourceServiceRestApi.retainExistingIds
+GET /NavigationService/getGroupByDtoSet NavigationServiceRestApi.getGroupByDtoSet
+GET /NavigationService/getNavigation NavigationServiceRestApi.getNavigation
+GET /NavigationService/loadNavigationPath NavigationServiceRestApi.loadNavigationPath
+GET /NavigationService/loadNavigationRoot NavigationServiceRestApi.loadNavigationRoot
+GET /NavigationService/loadSelectionRoot NavigationServiceRestApi.loadSelectionRoot
+GET /ReferenceService/createData ReferenceServiceRestApi.createData
+GET /ReferenceService/createReferential ReferenceServiceRestApi.createReferential
+GET /ReferenceService/loadData ReferenceServiceRestApi.loadData
+GET /ReferenceService/loadReferential ReferenceServiceRestApi.loadReferential
+POST /ReportService/executeReport ReportServiceRestApi.executeReport
+POST /ReportService/populateVariables ReportServiceRestApi.populateVariables
+GET /UsageService/countMandatoryData UsageServiceRestApi.countMandatoryData
+GET /UsageService/countOptionalData UsageServiceRestApi.countOptionalData
+GET /UsageService/countReferential UsageServiceRestApi.countReferential
+POST /UsageService/findMandatoryData UsageServiceRestApi.findMandatoryData
+POST /UsageService/findOptionalData UsageServiceRestApi.findOptionalData
+POST /UsageService/findReferential UsageServiceRestApi.findReferential
+POST /ValidateService/validateData ValidateServiceRestApi.validateData
+POST /ValidateService/validateReferential ValidateServiceRestApi.validateReferential
+POST /api/DataEntityService/create api.DataEntityServiceRestApi.create
+DELETE /api/DataEntityService/delete api.DataEntityServiceRestApi.delete
+GET /api/DataEntityService/generateId api.DataEntityServiceRestApi.generateId
+GET /api/DataEntityService/getOne api.DataEntityServiceRestApi.getOne
+GET /api/DataEntityService/getSome api.DataEntityServiceRestApi.getSome
+POST /api/DataEntityService/update api.DataEntityServiceRestApi.update
+POST /api/ReferentialEntityService/create api.ReferentialEntityServiceRestApi.create
+DELETE /api/ReferentialEntityService/delete api.ReferentialEntityServiceRestApi.delete
+GET /api/ReferentialEntityService/generateId api.ReferentialEntityServiceRestApi.generateId
+GET /api/ReferentialEntityService/getAll api.ReferentialEntityServiceRestApi.getAll
+GET /api/ReferentialEntityService/getByModule api.ReferentialEntityServiceRestApi.getByModule
+GET /api/ReferentialEntityService/getByPackage api.ReferentialEntityServiceRestApi.getByPackage
+GET /api/ReferentialEntityService/getOne api.ReferentialEntityServiceRestApi.getOne
+GET /api/ReferentialEntityService/getSome api.ReferentialEntityServiceRestApi.getSome
+PUT /api/ReferentialEntityService/update api.ReferentialEntityServiceRestApi.update
+GET /api/SqlService/select api.SqlServiceRestApi.select
+GET /data/ContainerService/loadForm data.ContainerServiceRestApi.loadForm
+POST /data/ContainerService/save data.ContainerServiceRestApi.save
+GET /data/DataFileService/getDataFile data.DataFileServiceRestApi.getDataFile
+POST /data/DataManagementService/deleteData data.DataManagementServiceRestApi.deleteData
+POST /data/DataManagementService/exportData data.DataManagementServiceRestApi.exportData
+POST /data/DataManagementService/importData data.DataManagementServiceRestApi.importData
+DELETE /data/EditableService/delete data.EditableServiceRestApi.delete
+GET /data/EditableService/exists data.EditableServiceRestApi.exists
+GET /data/EditableService/loadDto data.EditableServiceRestApi.loadDto
+GET /data/EditableService/loadForm data.EditableServiceRestApi.loadForm
+GET /data/EditableService/preCreate data.EditableServiceRestApi.preCreate
+POST /data/EditableService/save data.EditableServiceRestApi.save
+DELETE /data/OpenableService/delete data.OpenableServiceRestApi.delete
+GET /data/OpenableService/exists data.OpenableServiceRestApi.exists
+GET /data/OpenableService/getBrothers data.OpenableServiceRestApi.getBrothers
+GET /data/OpenableService/getBrothersFromParent data.OpenableServiceRestApi.getBrothersFromParent
+GET /data/OpenableService/getChildren data.OpenableServiceRestApi.getChildren
+GET /data/OpenableService/getChildrenUpdate data.OpenableServiceRestApi.getChildrenUpdate
+POST /data/OpenableService/getMandatoryDependencies data.OpenableServiceRestApi.getMandatoryDependencies
+POST /data/OpenableService/getMandatoryDependenciesCount data.OpenableServiceRestApi.getMandatoryDependenciesCount
+POST /data/OpenableService/getOptionalDependencies data.OpenableServiceRestApi.getOptionalDependencies
+POST /data/OpenableService/getOptionalDependenciesCount data.OpenableServiceRestApi.getOptionalDependenciesCount
+GET /data/OpenableService/loadDto data.OpenableServiceRestApi.loadDto
+GET /data/OpenableService/loadForm data.OpenableServiceRestApi.loadForm
+POST /data/OpenableService/move data.OpenableServiceRestApi.move
+GET /data/OpenableService/preCreate data.OpenableServiceRestApi.preCreate
+POST /data/OpenableService/save data.OpenableServiceRestApi.save
+POST /data/RootOpenableService/computeMissingReferential data.RootOpenableServiceRestApi.computeMissingReferential
+DELETE /data/RootOpenableService/delete data.RootOpenableServiceRestApi.delete
+DELETE /data/RootOpenableService/deleteLayout data.RootOpenableServiceRestApi.deleteLayout
+GET /data/RootOpenableService/exists data.RootOpenableServiceRestApi.exists
+GET /data/RootOpenableService/getBrothers data.RootOpenableServiceRestApi.getBrothers
+GET /data/RootOpenableService/getChildren data.RootOpenableServiceRestApi.getChildren
+GET /data/RootOpenableService/getChildrenUpdate data.RootOpenableServiceRestApi.getChildrenUpdate
+GET /data/RootOpenableService/getGroupByDtoValue data.RootOpenableServiceRestApi.getGroupByDtoValue
+GET /data/RootOpenableService/getGroupByValue data.RootOpenableServiceRestApi.getGroupByValue
+GET /data/RootOpenableService/loadDto data.RootOpenableServiceRestApi.loadDto
+GET /data/RootOpenableService/loadForm data.RootOpenableServiceRestApi.loadForm
+POST /data/RootOpenableService/moveLayout data.RootOpenableServiceRestApi.moveLayout
+GET /data/RootOpenableService/preCreate data.RootOpenableServiceRestApi.preCreate
+POST /data/RootOpenableService/save data.RootOpenableServiceRestApi.save
+GET /data/SimpleService/loadForm data.SimpleServiceRestApi.loadForm
+POST /data/SimpleService/save data.SimpleServiceRestApi.save
+POST /data/ll/ActivityPairingService/applyPairing data.ll.ActivityPairingServiceRestApi.applyPairing
+POST /data/ll/ActivityPairingService/computePairing data.ll.ActivityPairingServiceRestApi.computePairing
+GET /data/ll/common/TripService/getAllTripIds data.ll.common.TripServiceRestApi.getAllTripIds
+GET /data/ll/common/TripService/getLogbookCatchSpeciesIds data.ll.common.TripServiceRestApi.getLogbookCatchSpeciesIds
+GET /data/ll/common/TripService/getMatchingTripsVesselWithinDateRange data.ll.common.TripServiceRestApi.getMatchingTripsVesselWithinDateRange
+GET /data/ll/common/TripService/getSampleActivityParentCandidate data.ll.common.TripServiceRestApi.getSampleActivityParentCandidate
+GET /data/ll/common/TripService/getSpeciesByListAndTrip data.ll.common.TripServiceRestApi.getSpeciesByListAndTrip
+GET /data/ll/common/TripService/getTripMap data.ll.common.TripServiceRestApi.getTripMap
+GET /data/ll/common/TripService/loadBranchlineForm data.ll.common.TripServiceRestApi.loadBranchlineForm
+POST /data/ll/common/TripService/moveActivitySample data.ll.common.TripServiceRestApi.moveActivitySample
+POST /data/ll/common/TripService/saveAndCopyProperties data.ll.common.TripServiceRestApi.saveAndCopyProperties
+POST /data/ll/common/TripService/saveBranchline data.ll.common.TripServiceRestApi.saveBranchline
+POST /data/ps/ActivityPairingService/applyPairing data.ps.ActivityPairingServiceRestApi.applyPairing
+POST /data/ps/ActivityPairingService/computePairing data.ps.ActivityPairingServiceRestApi.computePairing
+GET /data/ps/AvdthService/importData data.ps.AvdthServiceRestApi.importData
+POST /data/ps/ConsolidateDataService/consolidateLocalmarketBatch data.ps.ConsolidateDataServiceRestApi.consolidateLocalmarketBatch
+POST /data/ps/ConsolidateDataService/consolidateTrip data.ps.ConsolidateDataServiceRestApi.consolidateTrip
+GET /data/ps/ConsolidateDataService/newSimplifiedObjectTypeManager data.ps.ConsolidateDataServiceRestApi.newSimplifiedObjectTypeManager
+GET /data/ps/common/TripService/getAllTripIds data.ps.common.TripServiceRestApi.getAllTripIds
+GET /data/ps/common/TripService/getLogbookWellPlanActivities data.ps.common.TripServiceRestApi.getLogbookWellPlanActivities
+GET /data/ps/common/TripService/getMatchingTripsVesselWithinDateRange data.ps.common.TripServiceRestApi.getMatchingTripsVesselWithinDateRange
+GET /data/ps/common/TripService/getPsObservationCatchesSpeciesFateBySpeciesId data.ps.common.TripServiceRestApi.getPsObservationCatchesSpeciesFateBySpeciesId
+GET /data/ps/common/TripService/getSpeciesByListAndTrip data.ps.common.TripServiceRestApi.getSpeciesByListAndTrip
+GET /data/ps/common/TripService/getTripMap data.ps.common.TripServiceRestApi.getTripMap
+GET /data/ps/common/TripService/isActivityEndOfSearchFound data.ps.common.TripServiceRestApi.isActivityEndOfSearchFound
+GET /data/ps/common/TripService/loadLocalmarketForm data.ps.common.TripServiceRestApi.loadLocalmarketForm
+GET /data/ps/common/TripService/loadLogbookForm data.ps.common.TripServiceRestApi.loadLogbookForm
+GET /data/ps/common/TripService/preCreateLogbookFloatingObject data.ps.common.TripServiceRestApi.preCreateLogbookFloatingObject
+GET /data/ps/common/TripService/preCreateObservationFloatingObject data.ps.common.TripServiceRestApi.preCreateObservationFloatingObject
+POST /referential/ReferentialService/changeId referential.ReferentialServiceRestApi.changeId
+DELETE /referential/ReferentialService/delete referential.ReferentialServiceRestApi.delete
+GET /referential/ReferentialService/exists referential.ReferentialServiceRestApi.exists
+GET /referential/ReferentialService/getEnabledReferentialLabelSet referential.ReferentialServiceRestApi.getEnabledReferentialLabelSet
+GET /referential/ReferentialService/getReferenceSet referential.ReferentialServiceRestApi.getReferenceSet
+POST /referential/ReferentialService/getReferentialIds referential.ReferentialServiceRestApi.getReferentialIds
+GET /referential/ReferentialService/getReferentialReferenceSets referential.ReferentialServiceRestApi.getReferentialReferenceSets
+POST /referential/ReferentialService/insertMissingReferential referential.ReferentialServiceRestApi.insertMissingReferential
+GET /referential/ReferentialService/loadDto referential.ReferentialServiceRestApi.loadDto
+POST /referential/ReferentialService/loadDtoList referential.ReferentialServiceRestApi.loadDtoList
+GET /referential/ReferentialService/loadForm referential.ReferentialServiceRestApi.loadForm
+GET /referential/ReferentialService/loadIds referential.ReferentialServiceRestApi.loadIds
+GET /referential/ReferentialService/preCreate referential.ReferentialServiceRestApi.preCreate
+POST /referential/ReferentialService/replaceReference referential.ReferentialServiceRestApi.replaceReference
+POST /referential/ReferentialService/save referential.ReferentialServiceRestApi.save
+POST /referential/SynchronizeService/applySql referential.SynchronizeServiceRestApi.applySql
+POST /referential/SynchronizeService/filterIdsUsed referential.SynchronizeServiceRestApi.filterIdsUsed
+POST /referential/SynchronizeService/getReferentialToDelete referential.SynchronizeServiceRestApi.getReferentialToDelete
+POST /referential/SynchronizeService/produceSqlResult referential.SynchronizeServiceRestApi.produceSqlResult
View it on GitLab: https://gitlab.com/ultreiaio/ird-observe/-/compare/ee2e72272e0e137178b4a434…
--
View it on GitLab: https://gitlab.com/ultreiaio/ird-observe/-/compare/ee2e72272e0e137178b4a434…
You're receiving this email because of your account on gitlab.com.
1
0
[Git][ultreiaio/ird-observe][develop] Update changelog for v.9.0.17 [skip CI]
by Tony CHEMIT (@tchemit) 16 Nov '22
by Tony CHEMIT (@tchemit) 16 Nov '22
16 Nov '22
Tony CHEMIT pushed to branch develop at ultreiaio / ird-observe
Commits:
ee2e7227 by Tony Chemit at 2022-11-16T18:45:34+01:00
Update changelog for v.9.0.17 [skip CI]
- - - - -
1 changed file:
- CHANGELOG.md
Changes:
=====================================
CHANGELOG.md
=====================================
@@ -1,7 +1,44 @@
# ObServe changelog
* Author [Tony Chemit](mailto:dev@tchemit.fr)
- * Last generated at 2022-10-24 23:50.
+ * Last generated at 2022-11-16 16:17.
+
+## Version [9.0.17](https://gitlab.com/ultreiaio/ird-observe/-/milestones/245)
+
+**Closed at 2022-11-16.**
+
+### Download
+* [Client (observe-9.0.17-client.zip)](https://repo1.maven.org/maven2/fr/ird/observe/o…)
+* [Serveur (observe-9.0.17.war)](https://repo1.maven.org/maven2/fr/ird/observe/observe/…)
+* [Serveur (observe-9.0.17-server.zip)](https://repo1.maven.org/maven2/fr/ird/observe/o…)
+
+### Issues
+ * [[Type::Anomalie 2448]](https://gitlab.com/ultreiaio/ird-observe/-/issues/2448) **Dans l'UI de recherche, les dates ne sont pas ordonnées** (Thanks to Tony CHEMIT) (Reported by Pascal Cauquil)
+ * [[Type::Anomalie 2496]](https://gitlab.com/ultreiaio/ird-observe/-/issues/2496) **Sur l'UI de gestion des listes d'affichage d'espèces, un contrôle récalcitrant sur espèces désactivées** (Thanks to Tony CHEMIT) (Reported by Pascal Cauquil)
+ * [[Type::Anomalie 2503]](https://gitlab.com/ultreiaio/ird-observe/-/issues/2503) **Sur échantillons PS observations saisis par lots, migrés vers 9.0, valeurs étranges sur le champ poids individuel** (Thanks to Tony CHEMIT) (Reported by Pascal Cauquil)
+ * [[Type::Anomalie 2507]](https://gitlab.com/ultreiaio/ird-observe/-/issues/2507) **La vérification avant sauvegarde d'un référentiel désactivé n'est plus en place** (Thanks to Tony CHEMIT) (Reported by Tony CHEMIT)
+ * [[Type::Anomalie 2508]](https://gitlab.com/ultreiaio/ird-observe/-/issues/2508) **Pouvoir de nouveau éditer le référentiel d'une base locale en utilisant l'option de configuration déjà existante** (Thanks to Tony CHEMIT) (Reported by Tony CHEMIT)
+ * [[Type::Anomalie 2510]](https://gitlab.com/ultreiaio/ird-observe/-/issues/2510) **Dans l'import AVDTH, les longitudes extrêmes >90° ou >100° semblent mal gérées** (Thanks to Tony CHEMIT) (Reported by Pascal Cauquil)
+ * [[Type::Anomalie 2511]](https://gitlab.com/ultreiaio/ird-observe/-/issues/2511) **Pas mal de positions géographiques sont mises à NULL/NULL par l'importeur AVDTH** (Thanks to Tony CHEMIT) (Reported by Pascal Cauquil)
+ * [[Type::Anomalie 2528]](https://gitlab.com/ultreiaio/ird-observe/-/issues/2528) **Disparition des TargetCatch avec discarded=FALSE dans la nouvelle migration V9** (Thanks to Tony CHEMIT) (Reported by Pascal Cauquil)
+ * [[Type::Anomalie 2531]](https://gitlab.com/ultreiaio/ird-observe/-/issues/2531) **Adaptation requises dans les rapports PS observations suite au regroupement de TargetCatch et NonTargetCatch** (Thanks to Tony CHEMIT) (Reported by Pascal Cauquil)
+ * [[Type::Anomalie 2534]](https://gitlab.com/ultreiaio/ird-observe/-/issues/2534) **Rapport Dénombrement des captures accessoires et devenir, filtrées par groupe** (Thanks to Tony CHEMIT) (Reported by Pascal Cauquil)
+ * [[Type::Evolution 1544]](https://gitlab.com/ultreiaio/ird-observe/-/issues/1544) **[UI REFERENTIELS] Envisager un auto-trim droite et gauche sur les champs alphanumériques** (Thanks to Pascal Cauquil) (Reported by Pascal Cauquil)
+ * [[Type::Evolution 2459]](https://gitlab.com/ultreiaio/ird-observe/-/issues/2459) **En insertion de marée par le service web, les nouveaux topiaid générés ont un nouveau format. Est-il voulu et fiable ?** (Thanks to Tony CHEMIT) (Reported by Pascal Cauquil)
+ * [[Type::Evolution 2492]](https://gitlab.com/ultreiaio/ird-observe/-/issues/2492) **Ajout une contrainte de non nullité sur PS_OBS_Catch.speciesFate** (Thanks to Tony CHEMIT) (Reported by Tony CHEMIT)
+ * [[Type::Evolution 2504]](https://gitlab.com/ultreiaio/ird-observe/-/issues/2504) **Souci d'unicité sur le formPS observations / captures** (Thanks to Tony CHEMIT) (Reported by Pascal Cauquil)
+ * [[Type::Evolution 2505]](https://gitlab.com/ultreiaio/ird-observe/-/issues/2505) **Générer les validateurs sur l'unicité des clef métier de collections** (Thanks to Tony CHEMIT) (Reported by Tony CHEMIT)
+ * [[Type::Evolution 2512]](https://gitlab.com/ultreiaio/ird-observe/-/issues/2512) **Labellisation du référentiel 'Type de données des propriétés/matériaux de FOB** (Thanks to Tony CHEMIT) (Reported by Pascal Cauquil)
+ * [[Type::Evolution 2513]](https://gitlab.com/ultreiaio/ird-observe/-/issues/2513) **Amélioration de libellés du formulaire captures** (Thanks to Tony CHEMIT) (Reported by Pascal Cauquil)
+ * [[Type::Evolution 2515]](https://gitlab.com/ultreiaio/ird-observe/-/issues/2515) **Replay de la migration V9 captures** (Thanks to Tony CHEMIT) (Reported by Pascal Cauquil)
+ * [[Type::Evolution 2526]](https://gitlab.com/ultreiaio/ird-observe/-/issues/2526) **Adaptation de la validation et du formulaire Captures suite à la nouvelle migration v9** (Thanks to Tony CHEMIT) (Reported by Tony CHEMIT)
+ * [[Type::Evolution 2527]](https://gitlab.com/ultreiaio/ird-observe/-/issues/2527) **Décoration des devenirs sur formulaire captures** (Thanks to Tony CHEMIT) (Reported by Pascal Cauquil)
+ * [[Type::Evolution 2529]](https://gitlab.com/ultreiaio/ird-observe/-/issues/2529) **Nettoyage par migration de tous les champs texte** (Thanks to Tony CHEMIT) (Reported by Tony CHEMIT)
+ * [[Type::Evolution 2530]](https://gitlab.com/ultreiaio/ird-observe/-/issues/2530) **Rapports Captures/Rejets selon le type d'association** (Thanks to Tony CHEMIT) (Reported by Pascal Cauquil)
+ * [[Type::Evolution 2532]](https://gitlab.com/ultreiaio/ird-observe/-/issues/2532) **Rapport Liste des captures de faune accessoire selon le type de banc, filtrées par groupe** (Thanks to Tony CHEMIT) (Reported by Pascal Cauquil)
+ * [[Type::Evolution 2533]](https://gitlab.com/ultreiaio/ird-observe/-/issues/2533) **Rapports Distributions de tailles** (Thanks to Tony CHEMIT) (Reported by Pascal Cauquil)
+ * [[Type::Evolution 2535]](https://gitlab.com/ultreiaio/ird-observe/-/issues/2535) **Ordonner les colonnes du tableau captures selon l'ordre des champs sur le formulaire** (Thanks to Tony CHEMIT) (Reported by Pascal Cauquil)
+ * [[Type::Tâche 2480]](https://gitlab.com/ultreiaio/ird-observe/-/issues/2480) **Les touches de recourcis F3, F4, F5... exigent que le focus soit déjà sur leur panel pour fonctionner** (Thanks to ) (Reported by Pascal Cauquil)
## Version [9.0.16](https://gitlab.com/ultreiaio/ird-observe/-/milestones/242)
View it on GitLab: https://gitlab.com/ultreiaio/ird-observe/-/commit/ee2e72272e0e137178b4a4343…
--
View it on GitLab: https://gitlab.com/ultreiaio/ird-observe/-/commit/ee2e72272e0e137178b4a4343…
You're receiving this email because of your account on gitlab.com.
1
0
[Git][ultreiaio/ird-observe][pages] Site checkin for project ObServe (version 9.0.17)
by Tony CHEMIT (@tchemit) 16 Nov '22
by Tony CHEMIT (@tchemit) 16 Nov '22
16 Nov '22
Tony CHEMIT pushed to branch pages at ultreiaio / ird-observe
Commits:
f096a356 by Tony Chemit at 2022-11-16T18:43:57+01:00
Site checkin for project ObServe (version 9.0.17)
- - - - -
8 changed files:
- + 9.0.17/CHANGELOG.html
- + 9.0.17/architecture-logicielle.html
- + 9.0.17/avdth/common.html
- + 9.0.17/avdth/index.html
- + 9.0.17/avdth/landing.html
- + 9.0.17/avdth/local_market.html
- + 9.0.17/avdth/logbook.html
- + 9.0.17/avdth/referential.html
The diff was not included because it is too large.
View it on GitLab: https://gitlab.com/ultreiaio/ird-observe/-/commit/f096a356303fb1862989cb0ab…
--
View it on GitLab: https://gitlab.com/ultreiaio/ird-observe/-/commit/f096a356303fb1862989cb0ab…
You're receiving this email because of your account on gitlab.com.
1
0
16 Nov '22
Tony CHEMIT deleted branch release/9.0.17 at ultreiaio / ird-observe
--
You're receiving this email because of your account on gitlab.com.
1
0
Tony CHEMIT pushed new tag v9.0.17 at ultreiaio / ird-observe
--
View it on GitLab: https://gitlab.com/ultreiaio/ird-observe/-/tree/v9.0.17
You're receiving this email because of your account on gitlab.com.
1
0
[Git][ultreiaio/ird-observe][release/9.0.17] [jgitflow-maven-plugin]updating poms for branch'release/9.0.17' with non-snapshot versions[skip ci]
by Tony CHEMIT (@tchemit) 16 Nov '22
by Tony CHEMIT (@tchemit) 16 Nov '22
16 Nov '22
Tony CHEMIT pushed to branch release/9.0.17 at ultreiaio / ird-observe
Commits:
51e9b9a1 by Tony Chemit at 2022-11-16T16:20:35+01:00
[jgitflow-maven-plugin]updating poms for branch'release/9.0.17' with non-snapshot versions[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/pom.xml
- core/api/pom.xml
- core/api/services/pom.xml
- core/api/tree/pom.xml
- core/api/validation/pom.xml
- core/persistence/java/pom.xml
- core/persistence/pom.xml
- core/persistence/resources/pom.xml
- core/persistence/test/pom.xml
- core/pom.xml
- core/services/client/pom.xml
- core/services/i18n/pom.xml
- core/services/local/pom.xml
- core/services/pom.xml
- core/services/test/pom.xml
- model/pom.xml
- observe/pom.xml
The diff was not included because it is too large.
View it on GitLab: https://gitlab.com/ultreiaio/ird-observe/-/commit/51e9b9a1f09ca55f489df6b88…
--
View it on GitLab: https://gitlab.com/ultreiaio/ird-observe/-/commit/51e9b9a1f09ca55f489df6b88…
You're receiving this email because of your account on gitlab.com.
1
0
[Git][ultreiaio/ird-observe][master-9.0.x] 82 commits: [jgitflow-maven-plugin]updating poms for 9.0.17-SNAPSHOT development[skip ci]
by Tony CHEMIT (@tchemit) 16 Nov '22
by Tony CHEMIT (@tchemit) 16 Nov '22
16 Nov '22
Tony CHEMIT pushed to branch master-9.0.x at ultreiaio / ird-observe
Commits:
858366d2 by Tony Chemit at 2022-10-24T23:27:33+02:00
[jgitflow-maven-plugin]updating poms for 9.0.17-SNAPSHOT development[skip ci]
- - - - -
3ddb2ff9 by Tony Chemit at 2022-10-24T23:47:19+02:00
[jgitflow-maven-plugin]updating develop poms to master versions to avoid merge conflicts[skip ci]
- - - - -
51892a0b by Tony Chemit at 2022-10-24T23:47:20+02:00
[jgitflow-maven-plugin]merging 'master-9.0.x' into 'develop-9.0.x'
- - - - -
52bf0b30 by Tony Chemit at 2022-10-24T23:47:22+02:00
[jgitflow-maven-plugin]Updating develop poms back to pre merge state[skip ci]
- - - - -
d8cbd9f9 by Tony Chemit at 2022-10-25T12:47:51+02:00
Persistence (IdFactory) - En insertion de marée par le service web, les nouveaux topiaid générés ont un nouveau format. Est-il voulu et fiable ? - Closes #2459
- - - - -
a131dd54 by Tony Chemit at 2022-10-25T12:47:57+02:00
Persistence (IdFactory) - Review his usage in Avdth import - See #2459
- - - - -
d7c8956f by Tony Chemit at 2022-10-25T21:24:49+02:00
Sur l'UI de gestion des listes d'affichage d'espèces, un contrôle récalcitrant sur espèces désactivées - Closes #2496
- - - - -
f4127bc3 by Tony Chemit at 2022-10-30T17:02:23+01:00
Générer les validateurs sur l'unicité des clef métier de collections - Closes #2505
- - - - -
dc9bac3b by Tony Chemit at 2022-10-30T17:02:23+01:00
Souci d'unicité sur le formPS observations / captures - Closes #2504
- - - - -
0c6c5e20 by Tony Chemit at 2022-10-30T20:09:23+01:00
I can't afford to pay 10$ each week for some build that takes too much time to save cache or other things :( Gitlab -1
- - - - -
46069153 by Tony Chemit at 2022-10-31T14:24:25+01:00
GUI - Référentiel - La vérification avant sauvegarde d'un référentiel désactivé n'est plus en place - Closes #2507
- - - - -
83685f9e by Tony Chemit at 2022-10-31T15:44:43+01:00
GUI - Référentiel - Pouvoir de nouveau éditer le référentiel d'une base locale en utilisant l'option de configuration déjà existante - Closes #2508
- - - - -
0a6062e6 by Tony Chemit at 2022-11-01T09:27:25+01:00
update pom
- - - - -
2adc5bee by Tony Chemit at 2022-11-02T15:41:38+01:00
Review trip i18n comment
- - - - -
a022dda3 by Tony Chemit at 2022-11-02T15:42:25+01:00
Model - Introduce notBlank tagvalue
- - - - -
73e29dd6 by Tony Chemit at 2022-11-02T15:42:28+01:00
Dto - Add autoTrim method (generated dto will fill this method if necessary)
- - - - -
65bff72e by Tony Chemit at 2022-11-02T15:42:32+01:00
Dto (generator) - Generate autoTrim method if necessary
- - - - -
012579fb by Tony Chemit at 2022-11-02T15:42:36+01:00
Validation - Introduce notBlankString validator
- - - - -
b6107bf1 by Tony Chemit at 2022-11-02T15:42:39+01:00
Validation (generator) - Let's generate notBlankString from model
- - - - -
24e8fae5 by Tony Chemit at 2022-11-02T15:42:42+01:00
GUI - Better TagValues usage in UI mojo
- - - - -
5fd44d0d by Tony Chemit at 2022-11-02T15:42:44+01:00
GUI - Review SavePredicate API to always check if states is valid before all (this is a side effect to auto-trim before save)
- - - - -
c077d163 by Tony Chemit at 2022-11-02T15:42:47+01:00
GUI (generator) - clean one
- - - - -
09818749 by Tony Chemit at 2022-11-02T15:42:51+01:00
GUI - Add auto-trim on content save process
- - - - -
6bff57f9 by Tony Chemit at 2022-11-02T15:42:56+01:00
Model (referential) - add notBlank tagvalue
- - - - -
4e081a84 by Tony Chemit at 2022-11-02T15:43:00+01:00
Validation (referential) - Update validation definitions
- - - - -
cb3e9cb1 by Tony Chemit at 2022-11-02T15:43:03+01:00
Validation (referential) - Update validation tests fixtures
- - - - -
b4c38d89 by Tony Chemit at 2022-11-02T15:43:06+01:00
Validation (referential) - Update Public API doc
- - - - -
e59114d3 by Tony Chemit at 2022-11-02T15:43:09+01:00
Model (data) - add notBlank tagvalue
- - - - -
805a466d by Tony Chemit at 2022-11-02T15:43:12+01:00
Validation (data) - Update validation definitions
- - - - -
f448e7ea by Tony Chemit at 2022-11-02T15:43:16+01:00
Validation (data) - Update validation tests fixtures
- - - - -
bf0692db by Tony Chemit at 2022-11-02T15:43:18+01:00
Validation (data) - Update Public API doc
- - - - -
8b522f7b by Tony Chemit at 2022-11-02T15:43:28+01:00
Merge branch 'feature/issue_1544' into develop-9.0.x
See #1544
- - - - -
73c88a1f by Tony Chemit at 2022-11-09T11:03:31+01:00
FIXME - Do not drop table until release time
- - - - -
5ad0f967 by Tony Chemit at 2022-11-09T11:06:28+01:00
I18n - Review min - max Weight labels
- - - - -
73f69c7d by Tony Chemit at 2022-11-09T11:30:27+01:00
Sql comment - Review howto write them in pure sql statements.
- - - - -
56eb4621 by Tony Chemit at 2022-11-09T11:30:39+01:00
Model (Dto and persistence) - add ps_observation.Catch (minWeight and maxWeight) - See ultreiaio/ird-observe#2515
- - - - -
2aca61ff by Tony Chemit at 2022-11-09T11:37:51+01:00
Model (Dto and persistence and migration) - add ps_observation.Catch.speciesFate not null - See ultreiaio/ird-observe#2515
- - - - -
b9e51dd2 by Tony Chemit at 2022-11-09T11:37:51+01:00
Model (Dto) - modify ps_observation.Catch unique key (up to 10 fields)
Validation - update ps_observation.Catch validation
See ultreiaio/ird-observe#2515
- - - - -
6db371b3 by Tony Chemit at 2022-11-09T11:38:57+01:00
Persistence migration - replay migration
Persistence migration - Add ps_common.SpeciesFate 15, update the 6 one
Persistence migration - Fix ps_observation.InformationSource label (double quote instead of simple one)
- - - - -
910c8b93 by Tony Chemit at 2022-11-09T11:38:57+01:00
Validation - Add ps_common.SpeciesFate weightRangeAllowed field
- - - - -
7f761a73 by Tony Chemit at 2022-11-09T11:38:57+01:00
I18n - Update with new fields (Catch and Species Fate)
- - - - -
648facd1 by Tony Chemit at 2022-11-09T11:38:57+01:00
Tests - Update fixtures
- - - - -
0bbe77fa by Tony Chemit at 2022-11-09T11:38:57+01:00
GUI Referential - Add ps_common.SpeciesFate weightRangeAllowed field
- - - - -
7f38a436 by Tony Chemit at 2022-11-09T11:38:57+01:00
GUI Data - Adapt SetCatchUI
- - - - -
b168375e by Tony Chemit at 2022-11-09T12:10:08+01:00
Merge branch 'feature/issue_2515' into develop-9.0.x
Closes #2515
- - - - -
5d79c10e by Tony Chemit at 2022-11-09T12:14:45+01:00
Dans l'import AVDTH, les longitudes extrêmes >90° ou >100° semblent mal gérées - Closes #2510
- - - - -
600606a4 by Tony Chemit at 2022-11-09T12:15:24+01:00
Pas mal de positions géographiques sont mises à NULL/NULL par l'importeur AVDTH - Closes #2511
- - - - -
bfa4262e by Tony Chemit at 2022-11-09T14:11:01+01:00
Amélioration de libellés du formulaire captures - Closes #2513
- - - - -
8d07203f by Tony Chemit at 2022-11-10T10:54:05+01:00
Labellisation du référentiel 'Type de données des propriétés/matériaux de FOB - Closes #2512
- - - - -
85fa0c6a by Tony Chemit at 2022-11-10T10:54:05+01:00
Persistence migration - Sur échantillons PS observations saisis par lots, migrés vers 9.0, valeurs étranges sur le champ poids individuel - Closes #2503
- - - - -
a7a1fbc7 by Tony Chemit at 2022-11-10T10:54:19+01:00
GUI - Sur échantillons PS observations saisis par lots, migrés vers 9.0, valeurs étranges sur le champ poids individuel - Closes #2503
- - - - -
9301c201 by Tony Chemit at 2022-11-11T11:12:49+01:00
Disparition des TargetCatch avec discarded=FALSE dans la nouvelle migration V9 - Closes #2528
- - - - -
4be9d6e1 by Tony Chemit at 2022-11-11T11:12:49+01:00
Décoration des devenirs sur formulaire captures - Closes #2527
- - - - -
bca4db5f by Tony Chemit at 2022-11-12T14:41:10+01:00
[UI REFERENTIELS] Envisager un auto-trim droite et gauche sur les champs alphanumériques - See #1544
Nettoyage par migration de tous les champs texte - Closes #2529
- - - - -
fbed49a2 by Tony Chemit at 2022-11-12T14:41:10+01:00
Test fixtures - [UI REFERENTIELS] Envisager un auto-trim droite et gauche sur les champs alphanumériques - See #1544
- - - - -
0d869f9d by Tony Chemit at 2022-11-12T14:41:10+01:00
Test fixtures - Renommage speciesFate
- - - - -
ffe04d3e by Tony Chemit at 2022-11-13T10:53:48+01:00
Adaptation de la validation et du formulaire Captures suite à la nouvelle migration v9 - Closes #2526
- - - - -
7c8b227d by Tony Chemit at 2022-11-13T10:53:48+01:00
Revert "FIXME - Do not drop table until release time"
This reverts commit 73c88a1f12625a827361ececc852b783e4a0941d.
- - - - -
4fcb9612 by Tony Chemit at 2022-11-13T15:28:50+01:00
Rapport Liste des captures de faune accessoire selon le type de banc, filtrées par groupe - Closes #2532
- - - - -
ec5fe21b by Tony Chemit at 2022-11-13T15:28:50+01:00
GUI - use resetEdit state when reset entry on content table
- - - - -
0ae68cbf by Tony Chemit at 2022-11-13T15:28:50+01:00
GUI - Sur échantillons PS observations saisis par lots, migrés vers 9.0, valeurs étranges sur le champ poids individuel - Closes #2503
- - - - -
5e4a6ebb by Tony Chemit at 2022-11-16T00:45:19+01:00
Report API - Add TimeLog in DefaultReportRequestExecutor
- - - - -
3bd433b6 by Tony Chemit at 2022-11-16T00:45:28+01:00
Report API - Clean ReportRequest code
- - - - -
e8829668 by Tony Chemit at 2022-11-16T00:45:37+01:00
Report API - Improve executeReportRequest method (one for simple request and one for request with repeat)
- - - - -
9db0b05d by Tony Chemit at 2022-11-16T00:45:43+01:00
Report API - Improve Sum operations (can now set x and y and better round of double)
- - - - -
50e5bc76 by Tony Chemit at 2022-11-16T00:47:17+01:00
Report API - add safe guard tests (to be able to copy partial matrix)
- - - - -
9eea592f by Tony Chemit at 2022-11-16T00:47:23+01:00
Report API - Be able to order variables and repeat variables
- - - - -
35b99acf by Tony Chemit at 2022-11-16T00:47:29+01:00
Tck Report - columnHeaders can be null
Tck Report - Improve when to deliver asserts
- - - - -
4ca5a8fb by Tony Chemit at 2022-11-16T00:47:34+01:00
Report GUI - Manage report with no columns and row headers (everything is coming from the report result to be able to manage dynamic columns)
- - - - -
f0e410ce by Tony Chemit at 2022-11-16T00:47:42+01:00
Report GUI - Respect report variables order in Report model
- - - - -
c3a6a87b by Tony Chemit at 2022-11-16T00:58:54+01:00
Report API - Improve ReportVariable (add isEmpty and computeIndexList methods)
- - - - -
f68f8bc0 by Tony Chemit at 2022-11-16T01:15:15+01:00
Report API - Add new neutral operations
- - - - -
7d57e433 by Tony Chemit at 2022-11-16T09:01:23+01:00
Report model - Fix psObservationFobUsageMinimal report (one line escape was missing)
- - - - -
0762f803 by Tony Chemit at 2022-11-16T09:01:23+01:00
Rapports Captures/Rejets selon le type d'association - Closes #2530
- - - - -
6a7aad17 by Tony Chemit at 2022-11-16T09:03:46+01:00
Rapport Dénombrement des captures accessoires et devenir, filtrées par groupe - Closes #2534
- - - - -
0a4047ca by Tony Chemit at 2022-11-16T09:03:46+01:00
Rapports Distributions de tailles - Closes #2533
- - - - -
86d60578 by Tony Chemit at 2022-11-16T09:03:46+01:00
Report Tck - Add more tests (for complex reports to make debug more easy)
- - - - -
2fa74a21 by Tony Chemit at 2022-11-16T09:04:25+01:00
Merge branch 'feature/issue_2531_v9.0.x' into develop-9.0.x
Closes #2531
- - - - -
7bf9961e by Tony Chemit at 2022-11-16T16:14:20+01:00
Ordonner les colonnes du tableau captures selon l'ordre des champs sur le formulaire - Closes #2535
- - - - -
13d6f339 by Tony Chemit at 2022-11-16T16:18:55+01:00
Update changelog for v.9.0.17 [skip CI]
- - - - -
51e9b9a1 by Tony Chemit at 2022-11-16T16:20:35+01:00
[jgitflow-maven-plugin]updating poms for branch'release/9.0.17' with non-snapshot versions[skip ci]
- - - - -
0e6e50fe by Tony Chemit at 2022-11-16T16:41:04+01:00
[jgitflow-maven-plugin]merging 'release/9.0.17' into 'master-9.0.x'
- - - - -
30 changed files:
- .gitlab-ci.yml
- CHANGELOG.md
- client/configuration/pom.xml
- client/configuration/src/main/config/Client.ini
- 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/main/body/ClientConfigUI.java
- client/core/src/main/resources/fr/ird/observe/client/ui/ObserveCommon.jcss
- client/datasource/actions/pom.xml
- client/datasource/actions/src/main/java/fr/ird/observe/client/datasource/actions/report/ReportModel.java
- client/datasource/actions/src/main/java/fr/ird/observe/client/datasource/actions/report/ResultTableModel.java
- client/datasource/editor/api-test/pom.xml
- client/datasource/editor/api/pom.xml
- client/datasource/editor/api/src/main/i18n/getters/java.getter
- client/datasource/editor/api/src/main/java/fr/ird/observe/client/datasource/editor/api/avdth/ImportDialog.jcss
- client/datasource/editor/api/src/main/java/fr/ird/observe/client/datasource/editor/api/avdth/ImportDialogModel.java
- core/services/test/src/main/java/fr/ird/observe/services/service/report/ps/PsObservationTargetDiscardedDistributionLengthsLD1ReportFixture.java → client/datasource/editor/api/src/main/java/fr/ird/observe/client/datasource/editor/api/content/actions/save/SavePredicateSupport.java
- client/datasource/editor/api/src/main/java/fr/ird/observe/client/datasource/editor/api/content/data/sample/SampleContentTableUIModelStates.java
- client/datasource/editor/api/src/main/java/fr/ird/observe/client/datasource/editor/api/content/data/sample/actions/ResetSizeMeasureType.java
- client/datasource/editor/api/src/main/java/fr/ird/observe/client/datasource/editor/api/content/data/simple/ContentSimpleUIModelStatesSupport.java
- client/datasource/editor/api/src/main/java/fr/ird/observe/client/datasource/editor/api/content/data/table/ContentTableUIModelStates.java
- client/datasource/editor/api/src/main/java/fr/ird/observe/client/datasource/editor/api/content/data/table/ContentTableUITableModel.java
- client/datasource/editor/api/src/main/java/fr/ird/observe/client/datasource/editor/api/content/data/table/TableSavePredicate.java
- client/datasource/editor/api/src/main/java/fr/ird/observe/client/datasource/editor/api/content/data/table/actions/entry/ResetEntry.java
- client/datasource/editor/api/src/main/java/fr/ird/observe/client/datasource/editor/api/content/data/table/actions/entry/SaveTableEntry.java
- client/datasource/editor/api/src/main/java/fr/ird/observe/client/datasource/editor/api/content/referential/ContentReferentialUIModel.java
- client/datasource/editor/api/src/main/java/fr/ird/observe/client/datasource/editor/api/content/referential/ReferentialSavePredicate.java
- client/datasource/editor/api/src/main/resources/fr/ird/observe/client/datasource/editor/api/content/data/sample/CommonSample.jcss
- client/datasource/editor/common/pom.xml
- client/datasource/editor/common/src/main/i18n/getters/jaxx.getter
The diff was not included because it is too large.
View it on GitLab: https://gitlab.com/ultreiaio/ird-observe/-/compare/e49d4146136e0add7097ad81…
--
View it on GitLab: https://gitlab.com/ultreiaio/ird-observe/-/compare/e49d4146136e0add7097ad81…
You're receiving this email because of your account on gitlab.com.
1
0