Tony CHEMIT pushed to branch develop at ultreiaio / ird-observe Commits: 46204afa by Tony Chemit at 2022-04-11T19:37:57+02:00 Add FIXME (remove slowQueriesThreshold, prefer TimeLog) - - - - - a97399de by Tony Chemit at 2022-04-12T11:07:00+02:00 Amélioration du calcul des référentiels manquants - Closes ultreiaio/ird-observe#2257 - - - - - 16 changed files: - client/core/src/main/java/fr/ird/observe/client/datasource/api/data/InsertMissingReferentialTask.java - client/datasource/actions/src/main/java/fr/ird/observe/client/datasource/actions/synchronize/data/actions/Apply.java - core/persistence/java/src/main/java/fr/ird/observe/entities/ObserveTopiaApplicationContext.java - core/persistence/java/src/main/java/fr/ird/observe/entities/ObserveTopiaPersistenceContext.java - + core/persistence/test/src/test/java/fr/ird/observe/persistence/test/request/GetReferentialIdsTest.java - + core/persistence/test/src/test/resources/fixtures/persistence/referential_ids_count/data-ll-all.properties - + core/persistence/test/src/test/resources/fixtures/persistence/referential_ids_count/data-ll.properties - + core/persistence/test/src/test/resources/fixtures/persistence/referential_ids_count/data-ps-all.properties - + core/persistence/test/src/test/resources/fixtures/persistence/referential_ids_count/data-ps.properties - core/services/local/src/main/java/fr/ird/observe/services/local/service/ObserveServiceLocal.java - core/services/local/src/main/java/fr/ird/observe/services/local/service/data/RootOpenableServiceLocalSupport.java - core/services/local/src/main/java/fr/ird/observe/services/local/service/referential/ReferentialServiceLocalSupport.java - core/services/test/src/main/java/fr/ird/observe/services/service/data/RootOpenableServiceFixtures.java - core/services/test/src/main/java/fr/ird/observe/services/service/referential/ReferentialServiceFixtures.java - core/services/test/src/main/resources/fixtures/fr/ird/observe/services/service/data/RootOpenableService.properties - server/core/src/main/filtered-resources/META-INF/mapping-api-client.wm Changes: ===================================== client/core/src/main/java/fr/ird/observe/client/datasource/api/data/InsertMissingReferentialTask.java ===================================== @@ -26,6 +26,7 @@ import fr.ird.observe.client.datasource.api.ObserveSwingDataSource; import fr.ird.observe.client.datasource.usage.UsageForDisplayUIHandler; import fr.ird.observe.dto.ProgressionModel; import fr.ird.observe.dto.ToolkitIdLabel; +import fr.ird.observe.dto.data.RootOpenableDto; import fr.ird.observe.dto.referential.ReferentialDto; import fr.ird.observe.services.service.referential.ReferentialService; import fr.ird.observe.spi.decoration.I18nDecoratorHelper; @@ -51,14 +52,16 @@ import static io.ultreia.java4all.i18n.I18n.t; */ public class InsertMissingReferentialTask extends DataTaskSupport { + private final Class<? extends RootOpenableDto> dataType; private final Collection<String> idsToCopy; - public static InsertMissingReferentialTask of(TaskSide taskSide, Collection<String> idsToCopy) { - return new InsertMissingReferentialTask(taskSide, idsToCopy); + public static InsertMissingReferentialTask of(TaskSide taskSide, Class<? extends RootOpenableDto> dataType, Collection<String> idsToCopy) { + return new InsertMissingReferentialTask(taskSide, dataType, idsToCopy); } - protected InsertMissingReferentialTask(TaskSide taskSide, Collection<String> idsToCopy) { + protected InsertMissingReferentialTask(TaskSide taskSide, Class<? extends RootOpenableDto> dataType, Collection<String> idsToCopy) { super(taskSide, taskSide.getCopyLabelKey(), taskSide.getCopyIcon()); + this.dataType = dataType; this.idsToCopy = Objects.requireNonNull(idsToCopy); } @@ -79,7 +82,7 @@ public class InsertMissingReferentialTask extends DataTaskSupport { ReferentialService targetReferentialService = targetSource.getReferentialService(); ReferentialIds targetSourceReferential = targetReferentialService.getReferentialIds(); MissingReferentialRequest missingReferentialRequest = MissingReferentialRequest.of(targetSourceReferential.getIds(), idsToCopy.toArray(new String[0])); - MissingReferentialResult missingReferentialResult = incomingSource.getReferentialService().computeMissingReferential(missingReferentialRequest); + MissingReferentialResult missingReferentialResult = incomingSource.getRootOpenableService().computeMissingReferential(dataType, missingReferentialRequest); progressModel.increments(); ===================================== client/datasource/actions/src/main/java/fr/ird/observe/client/datasource/actions/synchronize/data/actions/Apply.java ===================================== @@ -32,6 +32,7 @@ import fr.ird.observe.client.datasource.api.data.InsertMissingReferentialTask; import fr.ird.observe.client.datasource.api.data.TaskSide; import fr.ird.observe.client.datasource.api.data.UserCancelException; import fr.ird.observe.dto.ProgressionModel; +import fr.ird.observe.dto.data.RootOpenableDto; import org.apache.logging.log4j.LogManager; import org.apache.logging.log4j.Logger; import org.nuiton.jaxx.runtime.swing.wizard.ext.WizardState; @@ -68,6 +69,8 @@ public class Apply extends DataSynchroUIActionSupport { private WizardState doApply() { DataSynchroModel stepModel = ui.getStepModel(); + String moduleName = stepModel.getLeftSelectionDataModel().getConfig().getModuleName(); + Class<? extends RootOpenableDto> dataType = "ps".equals(moduleName) ? fr.ird.observe.dto.data.ps.common.TripDto.class : fr.ird.observe.dto.data.ll.common.TripDto.class; ObserveSwingDataSource leftSource = stepModel.getLeftSource(); ObserveSwingDataSource rightSource = stepModel.getRightSource(); DefaultListModel<DataTaskSupport> tasks = stepModel.getTasks(); @@ -105,12 +108,12 @@ public class Apply extends DataSynchroUIActionSupport { if (!idsToCopyToLeft.isEmpty()) { stepsCount.addAndGet(3); // first add missing referential to left - finalTasksToConsume.add(0, InsertMissingReferentialTask.of(TaskSide.FROM_RIGHT, idsToCopyToLeft)); + finalTasksToConsume.add(0, InsertMissingReferentialTask.of(TaskSide.FROM_RIGHT, dataType, idsToCopyToLeft)); } if (!idsToCopyToRight.isEmpty()) { stepsCount.addAndGet(3); // first add missing referential to right - finalTasksToConsume.add(0, InsertMissingReferentialTask.of(TaskSide.FROM_LEFT, idsToCopyToRight)); + finalTasksToConsume.add(0, InsertMissingReferentialTask.of(TaskSide.FROM_LEFT, dataType, idsToCopyToRight)); } int totalStep = stepsCount.get(); log.info("Total step computed: " + totalStep); ===================================== core/persistence/java/src/main/java/fr/ird/observe/entities/ObserveTopiaApplicationContext.java ===================================== @@ -28,7 +28,10 @@ import fr.ird.observe.dto.db.DatabaseNotFoundException; import fr.ird.observe.dto.db.configuration.ObserveDataSourceConfiguration; import fr.ird.observe.dto.referential.ReferentialDto; import fr.ird.observe.entities.data.DataGroupByEntity; +import fr.ird.observe.spi.ObservePersistenceBusinessProject; import fr.ird.observe.spi.module.BusinessProject; +import fr.ird.observe.spi.referential.ReferentialIds; +import fr.ird.observe.spi.referential.ReferentialIdsBuilder; import fr.ird.observe.spi.referential.differential.DifferentialMetaModel; import fr.ird.observe.spi.referential.synchro.OneSideSqlResultBuilder; import fr.ird.observe.spi.script.ToolkitEntitySqlScriptModel; @@ -48,7 +51,6 @@ import org.nuiton.topia.service.sql.plan.replicate.TopiaEntitySqlReplicatePlanMo import org.nuiton.topia.service.sql.request.ReplicatePartialRequestCallback; import org.nuiton.topia.service.sql.usage.TopiaEntitySqlUsageModel; -import java.time.Duration; import java.util.Date; import java.util.Set; import java.util.function.Consumer; @@ -75,7 +77,7 @@ public class ObserveTopiaApplicationContext extends AbstractObserveTopiaApplicat getTopiaFiresSupport(), getTopiaIdFactory(), getSessionRegistry(), - Duration.ofMinutes(1), + null,/* FIXME We dont not need this, this is too much for the purpose (creating thread... for counting time berk)...Duration.ofMinutes(1),*/ getConfiguration(), getDaoMapping() ) @@ -99,6 +101,11 @@ public class ObserveTopiaApplicationContext extends AbstractObserveTopiaApplicat return ObserveTopiaEntitySqlModelResource.get().newOneSideSqlResultBuilder(context, defaultLastUpdateDate); } + @Override + public ReferentialIds getReferentialIds(Class<? extends TopiaEntity> dataType, String... ids) { + return ReferentialIdsBuilder.builder(this, ObservePersistenceBusinessProject.get(), this, dataType, ids).build(this); + } + @Override public final TagValues getPersistenceTagValues() { return ObserveTopiaEntitySqlModelResource.get().getPersistenceTagValues(); ===================================== core/persistence/java/src/main/java/fr/ird/observe/entities/ObserveTopiaPersistenceContext.java ===================================== @@ -35,7 +35,6 @@ import fr.ird.observe.spi.navigation.parent.ObserveToParentIdProviderImpl; import fr.ird.observe.spi.report.ObserveDefaultReportRequestExecutor; import org.apache.logging.log4j.LogManager; import org.apache.logging.log4j.Logger; -import org.nuiton.topia.persistence.TopiaEntity; import org.nuiton.topia.persistence.TopiaPersistenceContextConstructorParameterSupport; import org.nuiton.topia.persistence.internal.AbstractTopiaPersistenceContextConstructorParameter; import org.nuiton.topia.persistence.script.SqlScriptReader; @@ -81,11 +80,6 @@ public class ObserveTopiaPersistenceContext extends AbstractObserveTopiaPersiste return new ObserveDefaultReportRequestExecutor(referentialLocale, this, daoSupplier); } - @Override - public <E extends TopiaEntity> ToolkitTopiaDao<E> getDao(Class<E> entityClass) { - return (ToolkitTopiaDao<E>) super.getDao(entityClass); - } - @Override public ObserveToParentIdProvider getToParentIdProvider() { return (ObserveToParentIdProvider) super.getToParentIdProvider(); ===================================== core/persistence/test/src/test/java/fr/ird/observe/persistence/test/request/GetReferentialIdsTest.java ===================================== @@ -0,0 +1,106 @@ +package fr.ird.observe.persistence.test.request; + +/*- + * #%L + * ObServe Core :: Persistence :: Test + * %% + * Copyright (C) 2008 - 2022 IRD, Code Lutin, Ultreia.io + * %% + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as + * published by the Free Software Foundation, either version 3 of the + * License, or (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public + * License along with this program. If not, see + * <http://www.gnu.org/licenses/gpl-3.0.html>. + * #L% + */ + +import fr.ird.observe.dto.BusinessDto; +import fr.ird.observe.dto.referential.ReferentialDto; +import fr.ird.observe.entities.ObserveTopiaApplicationContext; +import fr.ird.observe.persistence.test.ObservePersistenceFixtures; +import fr.ird.observe.persistence.test.PersistenceTestSupportRead; +import fr.ird.observe.spi.referential.ReferentialIds; +import fr.ird.observe.test.DatabaseName; +import fr.ird.observe.test.spi.DatabaseNameConfiguration; +import io.ultreia.java4all.lang.Objects2; +import org.junit.Assert; +import org.junit.Before; +import org.junit.Test; +import org.junit.runner.RunWith; +import org.junit.runners.Parameterized; +import org.nuiton.topia.persistence.TopiaEntity; + +import java.util.Arrays; +import java.util.LinkedList; +import java.util.List; +import java.util.Map; +import java.util.Set; + +/** + * Created on 12/04/2022. + * + * @author Tony Chemit - dev@tchemit.fr + * @since 9.0.0 + */ +@RunWith(Parameterized.class) +@DatabaseNameConfiguration(DatabaseName.data) +public class GetReferentialIdsTest extends PersistenceTestSupportRead { + + @Parameterized.Parameter + public String classifier; + @Parameterized.Parameter(1) + public Class<? extends TopiaEntity> entityType; + @Parameterized.Parameter(2) + public Set<String> tripId; + private Map<String, Long> expectedResults; + + @Parameterized.Parameters(name = "{0}") + public static Iterable<Object[]> data() { + return Arrays.asList(new Object[]{CLASSIFIER_DATA_PS, fr.ird.observe.entities.data.ps.common.Trip.class, Set.of(ObservePersistenceFixtures.getPsCommonTripId())}, + new Object[]{CLASSIFIER_DATA_LL, fr.ird.observe.entities.data.ll.common.Trip.class, Set.of(ObservePersistenceFixtures.getLlCommonTripId())}, + new Object[]{CLASSIFIER_DATA_PS + "-all", fr.ird.observe.entities.data.ps.common.Trip.class, Set.of()}, + new Object[]{CLASSIFIER_DATA_LL + "-all", fr.ird.observe.entities.data.ll.common.Trip.class, Set.of()} + ); + } + + @Before + public void setUp() { + expectedResults = ObservePersistenceFixtures.loadFixturesMapCount("persistence/referential_ids_count/" + classifier); + } + + @Test + public void test() throws Exception { + + ObserveTopiaApplicationContext applicationContext = localTestMethodResource.getTopiaApplicationContext(); + ReferentialIds actual = applicationContext.getReferentialIds(entityType, tripId.toArray(new String[0])); + + if (!ObservePersistenceFixtures.WITH_ASSERT) { + List<String> actualList = new LinkedList<>(); + for (Map.Entry<Class<? extends ReferentialDto>, Set<String>> entry : actual.getIds().entrySet()) { + Class<? extends ReferentialDto> dtoType = entry.getKey(); + actualList.add(String.format("%s=%d", dtoType.getName(), entry.getValue().size())); + } + actualList.sort(String::compareTo); + System.out.println(String.join("\n", actualList)); + return; + } + for (Map.Entry<String, Long> entry : expectedResults.entrySet()) { + String table = entry.getKey(); + Class<? extends BusinessDto> dtoType = Objects2.forName(table); + Set<String> actualIds = actual.getIds().getOrDefault(dtoType, Set.of()); + int actualCount = actualIds.size(); + long expectedCount = expectedResults.get(table); + Assert.assertEquals("bad size for table: " + table, expectedCount, actualCount); + } + } + +} + ===================================== core/persistence/test/src/test/resources/fixtures/persistence/referential_ids_count/data-ll-all.properties ===================================== @@ -0,0 +1,62 @@ +### +# #%L +# ObServe Core :: Persistence :: Test +# %% +# Copyright (C) 2008 - 2022 IRD, Code Lutin, Ultreia.io +# %% +# This program is free software: you can redistribute it and/or modify +# it under the terms of the GNU General Public License as +# published by the Free Software Foundation, either version 3 of the +# License, or (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public +# License along with this program. If not, see +# <http://www.gnu.org/licenses/gpl-3.0.html>. +# #L% +### +fr.ird.observe.dto.referential.common.DataQualityDto=1 +fr.ird.observe.dto.referential.common.FpaZoneDto=2 +fr.ird.observe.dto.referential.common.GearCharacteristicDto=1 +fr.ird.observe.dto.referential.common.GearDto=1 +fr.ird.observe.dto.referential.common.HarbourDto=3 +fr.ird.observe.dto.referential.common.LengthMeasureMethodDto=1 +fr.ird.observe.dto.referential.common.OceanDto=1 +fr.ird.observe.dto.referential.common.PersonDto=6 +fr.ird.observe.dto.referential.common.SexDto=3 +fr.ird.observe.dto.referential.common.SizeMeasureTypeDto=4 +fr.ird.observe.dto.referential.common.SpeciesDto=31 +fr.ird.observe.dto.referential.common.VesselDto=3 +fr.ird.observe.dto.referential.common.WeightMeasureMethodDto=2 +fr.ird.observe.dto.referential.common.WeightMeasureTypeDto=3 +fr.ird.observe.dto.referential.ll.common.BaitSettingStatusDto=3 +fr.ird.observe.dto.referential.ll.common.BaitTypeDto=4 +fr.ird.observe.dto.referential.ll.common.CatchFateDto=3 +fr.ird.observe.dto.referential.ll.common.HealthStatusDto=3 +fr.ird.observe.dto.referential.ll.common.HookSizeDto=3 +fr.ird.observe.dto.referential.ll.common.HookTypeDto=4 +fr.ird.observe.dto.referential.ll.common.LightsticksColorDto=1 +fr.ird.observe.dto.referential.ll.common.LightsticksTypeDto=1 +fr.ird.observe.dto.referential.ll.common.LineTypeDto=5 +fr.ird.observe.dto.referential.ll.common.MitigationTypeDto=3 +fr.ird.observe.dto.referential.ll.common.ObservationMethodDto=2 +fr.ird.observe.dto.referential.ll.common.OnBoardProcessingDto=1 +fr.ird.observe.dto.referential.ll.common.ProgramDto=3 +fr.ird.observe.dto.referential.ll.common.SettingShapeDto=4 +fr.ird.observe.dto.referential.ll.common.TripTypeDto=1 +fr.ird.observe.dto.referential.ll.common.VesselActivityDto=2 +fr.ird.observe.dto.referential.ll.landing.CompanyDto=2 +fr.ird.observe.dto.referential.ll.landing.DataSourceDto=1 +fr.ird.observe.dto.referential.ll.observation.EncounterTypeDto=2 +fr.ird.observe.dto.referential.ll.observation.HookPositionDto=4 +fr.ird.observe.dto.referential.ll.observation.ItemHorizontalPositionDto=1 +fr.ird.observe.dto.referential.ll.observation.ItemVerticalPositionDto=1 +fr.ird.observe.dto.referential.ll.observation.MaturityStatusDto=1 +fr.ird.observe.dto.referential.ll.observation.SensorBrandDto=2 +fr.ird.observe.dto.referential.ll.observation.SensorDataFormatDto=1 +fr.ird.observe.dto.referential.ll.observation.SensorTypeDto=1 +fr.ird.observe.dto.referential.ll.observation.StomachFullnessDto=1 ===================================== core/persistence/test/src/test/resources/fixtures/persistence/referential_ids_count/data-ll.properties ===================================== @@ -0,0 +1,60 @@ +### +# #%L +# ObServe Core :: Persistence :: Test +# %% +# Copyright (C) 2008 - 2022 IRD, Code Lutin, Ultreia.io +# %% +# This program is free software: you can redistribute it and/or modify +# it under the terms of the GNU General Public License as +# published by the Free Software Foundation, either version 3 of the +# License, or (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public +# License along with this program. If not, see +# <http://www.gnu.org/licenses/gpl-3.0.html>. +# #L% +### +fr.ird.observe.dto.referential.common.DataQualityDto=1 +fr.ird.observe.dto.referential.common.FpaZoneDto=1 +fr.ird.observe.dto.referential.common.GearCharacteristicDto=1 +fr.ird.observe.dto.referential.common.GearDto=1 +fr.ird.observe.dto.referential.common.HarbourDto=2 +fr.ird.observe.dto.referential.common.LengthMeasureMethodDto=1 +fr.ird.observe.dto.referential.common.OceanDto=1 +fr.ird.observe.dto.referential.common.PersonDto=3 +fr.ird.observe.dto.referential.common.SexDto=2 +fr.ird.observe.dto.referential.common.SizeMeasureTypeDto=3 +fr.ird.observe.dto.referential.common.SpeciesDto=30 +fr.ird.observe.dto.referential.common.VesselDto=2 +fr.ird.observe.dto.referential.common.WeightMeasureMethodDto=2 +fr.ird.observe.dto.referential.common.WeightMeasureTypeDto=3 +fr.ird.observe.dto.referential.ll.common.BaitSettingStatusDto=3 +fr.ird.observe.dto.referential.ll.common.BaitTypeDto=4 +fr.ird.observe.dto.referential.ll.common.CatchFateDto=3 +fr.ird.observe.dto.referential.ll.common.HealthStatusDto=3 +fr.ird.observe.dto.referential.ll.common.HookSizeDto=3 +fr.ird.observe.dto.referential.ll.common.HookTypeDto=4 +fr.ird.observe.dto.referential.ll.common.LineTypeDto=5 +fr.ird.observe.dto.referential.ll.common.MitigationTypeDto=3 +fr.ird.observe.dto.referential.ll.common.ObservationMethodDto=1 +fr.ird.observe.dto.referential.ll.common.OnBoardProcessingDto=1 +fr.ird.observe.dto.referential.ll.common.ProgramDto=2 +fr.ird.observe.dto.referential.ll.common.SettingShapeDto=4 +fr.ird.observe.dto.referential.ll.common.TripTypeDto=1 +fr.ird.observe.dto.referential.ll.common.VesselActivityDto=2 +fr.ird.observe.dto.referential.ll.landing.CompanyDto=2 +fr.ird.observe.dto.referential.ll.landing.DataSourceDto=1 +fr.ird.observe.dto.referential.ll.observation.EncounterTypeDto=2 +fr.ird.observe.dto.referential.ll.observation.HookPositionDto=1 +fr.ird.observe.dto.referential.ll.observation.ItemHorizontalPositionDto=1 +fr.ird.observe.dto.referential.ll.observation.ItemVerticalPositionDto=1 +fr.ird.observe.dto.referential.ll.observation.MaturityStatusDto=1 +fr.ird.observe.dto.referential.ll.observation.SensorBrandDto=2 +fr.ird.observe.dto.referential.ll.observation.SensorDataFormatDto=1 +fr.ird.observe.dto.referential.ll.observation.SensorTypeDto=1 +fr.ird.observe.dto.referential.ll.observation.StomachFullnessDto=1 ===================================== core/persistence/test/src/test/resources/fixtures/persistence/referential_ids_count/data-ps-all.properties ===================================== @@ -0,0 +1,68 @@ +### +# #%L +# ObServe Core :: Persistence :: Test +# %% +# Copyright (C) 2008 - 2022 IRD, Code Lutin, Ultreia.io +# %% +# This program is free software: you can redistribute it and/or modify +# it under the terms of the GNU General Public License as +# published by the Free Software Foundation, either version 3 of the +# License, or (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public +# License along with this program. If not, see +# <http://www.gnu.org/licenses/gpl-3.0.html>. +# #L% +### +fr.ird.observe.dto.referential.common.CountryDto=4 +fr.ird.observe.dto.referential.common.DataQualityDto=2 +fr.ird.observe.dto.referential.common.FpaZoneDto=4 +fr.ird.observe.dto.referential.common.GearCharacteristicDto=3 +fr.ird.observe.dto.referential.common.GearDto=15 +fr.ird.observe.dto.referential.common.HarbourDto=2 +fr.ird.observe.dto.referential.common.LengthMeasureMethodDto=3 +fr.ird.observe.dto.referential.common.OceanDto=2 +fr.ird.observe.dto.referential.common.PersonDto=7 +fr.ird.observe.dto.referential.common.SexDto=4 +fr.ird.observe.dto.referential.common.SizeMeasureTypeDto=7 +fr.ird.observe.dto.referential.common.SpeciesDto=52 +fr.ird.observe.dto.referential.common.SpeciesGroupReleaseModeDto=5 +fr.ird.observe.dto.referential.common.VesselDto=6 +fr.ird.observe.dto.referential.common.WeightMeasureMethodDto=4 +fr.ird.observe.dto.referential.common.WeightMeasureTypeDto=1 +fr.ird.observe.dto.referential.common.WindDto=9 +fr.ird.observe.dto.referential.ps.common.AcquisitionStatusDto=2 +fr.ird.observe.dto.referential.ps.common.ObjectMaterialDto=76 +fr.ird.observe.dto.referential.ps.common.ObjectOperationDto=5 +fr.ird.observe.dto.referential.ps.common.ObservedSystemDto=12 +fr.ird.observe.dto.referential.ps.common.ProgramDto=3 +fr.ird.observe.dto.referential.ps.common.ReasonForNoFishingDto=10 +fr.ird.observe.dto.referential.ps.common.ReasonForNullSetDto=6 +fr.ird.observe.dto.referential.ps.common.SampleTypeDto=2 +fr.ird.observe.dto.referential.ps.common.SchoolTypeDto=2 +fr.ird.observe.dto.referential.ps.common.SpeciesFateDto=11 +fr.ird.observe.dto.referential.ps.common.TransmittingBuoyOperationDto=3 +fr.ird.observe.dto.referential.ps.common.TransmittingBuoyOwnershipDto=4 +fr.ird.observe.dto.referential.ps.common.TransmittingBuoyTypeDto=10 +fr.ird.observe.dto.referential.ps.common.VesselActivityDto=19 +fr.ird.observe.dto.referential.ps.common.WeightCategoryDto=5 +fr.ird.observe.dto.referential.ps.landing.DestinationDto=2 +fr.ird.observe.dto.referential.ps.landing.FateDto=1 +fr.ird.observe.dto.referential.ps.localmarket.PackagingDto=2 +fr.ird.observe.dto.referential.ps.logbook.SampleQualityDto=1 +fr.ird.observe.dto.referential.ps.logbook.WellContentStatusDto=1 +fr.ird.observe.dto.referential.ps.logbook.WellSamplingConformityDto=1 +fr.ird.observe.dto.referential.ps.logbook.WellSamplingStatusDto=1 +fr.ird.observe.dto.referential.ps.observation.DetectionModeDto=6 +fr.ird.observe.dto.referential.ps.observation.InformationSourceDto=2 +fr.ird.observe.dto.referential.ps.observation.NonTargetCatchReleaseConformityDto=3 +fr.ird.observe.dto.referential.ps.observation.NonTargetCatchReleaseStatusDto=4 +fr.ird.observe.dto.referential.ps.observation.NonTargetCatchReleasingTimeDto=4 +fr.ird.observe.dto.referential.ps.observation.ReasonForDiscardDto=5 +fr.ird.observe.dto.referential.ps.observation.SpeciesStatusDto=4 +fr.ird.observe.dto.referential.ps.observation.SurroundingActivityDto=7 ===================================== core/persistence/test/src/test/resources/fixtures/persistence/referential_ids_count/data-ps.properties ===================================== @@ -0,0 +1,68 @@ +### +# #%L +# ObServe Core :: Persistence :: Test +# %% +# Copyright (C) 2008 - 2022 IRD, Code Lutin, Ultreia.io +# %% +# This program is free software: you can redistribute it and/or modify +# it under the terms of the GNU General Public License as +# published by the Free Software Foundation, either version 3 of the +# License, or (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public +# License along with this program. If not, see +# <http://www.gnu.org/licenses/gpl-3.0.html>. +# #L% +### +fr.ird.observe.dto.referential.common.CountryDto=4 +fr.ird.observe.dto.referential.common.DataQualityDto=2 +fr.ird.observe.dto.referential.common.FpaZoneDto=2 +fr.ird.observe.dto.referential.common.GearCharacteristicDto=2 +fr.ird.observe.dto.referential.common.GearDto=1 +fr.ird.observe.dto.referential.common.HarbourDto=1 +fr.ird.observe.dto.referential.common.LengthMeasureMethodDto=3 +fr.ird.observe.dto.referential.common.OceanDto=1 +fr.ird.observe.dto.referential.common.PersonDto=3 +fr.ird.observe.dto.referential.common.SexDto=3 +fr.ird.observe.dto.referential.common.SizeMeasureTypeDto=5 +fr.ird.observe.dto.referential.common.SpeciesDto=20 +fr.ird.observe.dto.referential.common.SpeciesGroupReleaseModeDto=2 +fr.ird.observe.dto.referential.common.VesselDto=3 +fr.ird.observe.dto.referential.common.WeightMeasureMethodDto=4 +fr.ird.observe.dto.referential.common.WeightMeasureTypeDto=1 +fr.ird.observe.dto.referential.common.WindDto=6 +fr.ird.observe.dto.referential.ps.common.AcquisitionStatusDto=2 +fr.ird.observe.dto.referential.ps.common.ObjectMaterialDto=6 +fr.ird.observe.dto.referential.ps.common.ObjectOperationDto=3 +fr.ird.observe.dto.referential.ps.common.ObservedSystemDto=8 +fr.ird.observe.dto.referential.ps.common.ProgramDto=2 +fr.ird.observe.dto.referential.ps.common.ReasonForNoFishingDto=6 +fr.ird.observe.dto.referential.ps.common.ReasonForNullSetDto=2 +fr.ird.observe.dto.referential.ps.common.SampleTypeDto=2 +fr.ird.observe.dto.referential.ps.common.SchoolTypeDto=2 +fr.ird.observe.dto.referential.ps.common.SpeciesFateDto=6 +fr.ird.observe.dto.referential.ps.common.TransmittingBuoyOperationDto=3 +fr.ird.observe.dto.referential.ps.common.TransmittingBuoyOwnershipDto=3 +fr.ird.observe.dto.referential.ps.common.TransmittingBuoyTypeDto=5 +fr.ird.observe.dto.referential.ps.common.VesselActivityDto=12 +fr.ird.observe.dto.referential.ps.common.WeightCategoryDto=5 +fr.ird.observe.dto.referential.ps.landing.DestinationDto=2 +fr.ird.observe.dto.referential.ps.landing.FateDto=1 +fr.ird.observe.dto.referential.ps.localmarket.PackagingDto=2 +fr.ird.observe.dto.referential.ps.logbook.SampleQualityDto=1 +fr.ird.observe.dto.referential.ps.logbook.WellContentStatusDto=1 +fr.ird.observe.dto.referential.ps.logbook.WellSamplingConformityDto=1 +fr.ird.observe.dto.referential.ps.logbook.WellSamplingStatusDto=1 +fr.ird.observe.dto.referential.ps.observation.DetectionModeDto=6 +fr.ird.observe.dto.referential.ps.observation.InformationSourceDto=2 +fr.ird.observe.dto.referential.ps.observation.NonTargetCatchReleaseConformityDto=2 +fr.ird.observe.dto.referential.ps.observation.NonTargetCatchReleaseStatusDto=2 +fr.ird.observe.dto.referential.ps.observation.NonTargetCatchReleasingTimeDto=2 +fr.ird.observe.dto.referential.ps.observation.ReasonForDiscardDto=2 +fr.ird.observe.dto.referential.ps.observation.SpeciesStatusDto=2 +fr.ird.observe.dto.referential.ps.observation.SurroundingActivityDto=4 ===================================== core/services/local/src/main/java/fr/ird/observe/services/local/service/ObserveServiceLocal.java ===================================== @@ -86,6 +86,7 @@ import fr.ird.observe.spi.validation.ServiceValidationContext; import io.ultreia.java4all.util.TimeLog; import org.nuiton.validator.NuitonValidatorScope; +import java.nio.file.Path; import java.util.Date; import java.util.LinkedHashSet; import java.util.List; @@ -124,6 +125,11 @@ public abstract class ObserveServiceLocal implements ObserveService, ServiceCont return referentialLocale; } + @Override + public final Path getTemporaryDirectoryRoot() { + return serviceContext().serviceInitializer().getInitializerConfig().getTemporaryDirectoryRoot().toPath(); + } + @Override public final DecoratorService getDecoratorService() { return serviceContext.getDecoratorService(); ===================================== core/services/local/src/main/java/fr/ird/observe/services/local/service/data/RootOpenableServiceLocalSupport.java ===================================== @@ -40,6 +40,8 @@ import fr.ird.observe.services.service.data.MoveLayoutRequest; import fr.ird.observe.services.service.data.RootOpenableService; import fr.ird.observe.spi.GroupBySpiContext; import fr.ird.observe.spi.context.RootOpenableDtoEntityContext; +import fr.ird.observe.spi.referential.MissingReferentialRequest; +import fr.ird.observe.spi.referential.MissingReferentialResult; import java.util.Date; import java.util.List; @@ -142,5 +144,11 @@ public class RootOpenableServiceLocalSupport extends ObserveServiceLocal impleme RootOpenableDtoEntityContext<?, ?, ?, ?, ?> spi = fromRootOpenableDto(dtoType); spi.moveLayout(this, request); } + + @Override + public <D extends RootOpenableDto> MissingReferentialResult computeMissingReferential(Class<D> dtoType, MissingReferentialRequest request) { + RootOpenableDtoEntityContext<?, ?, ?, ?, ?> spi = fromRootOpenableDto(dtoType); + return getTopiaApplicationContext().computeMissingReferential(this, spi.toEntityType(), request); + } } ===================================== core/services/local/src/main/java/fr/ird/observe/services/local/service/referential/ReferentialServiceLocalSupport.java ===================================== @@ -35,8 +35,6 @@ import fr.ird.observe.services.local.service.ObserveServiceLocal; import fr.ird.observe.services.service.referential.ReferentialService; import fr.ird.observe.spi.context.ReferentialDtoEntityContext; import fr.ird.observe.spi.module.ObserveBusinessProject; -import fr.ird.observe.spi.referential.MissingReferentialRequest; -import fr.ird.observe.spi.referential.MissingReferentialResult; import fr.ird.observe.spi.referential.ReferentialIds; import fr.ird.observe.spi.referential.differential.DifferentialMetaModel; import org.nuiton.topia.persistence.script.TopiaSqlScript; @@ -159,11 +157,6 @@ class ReferentialServiceLocalSupport extends ObserveServiceLocal implements Refe return getTopiaPersistenceContext().getReferentialIds(ObserveBusinessProject.get()); } - @Override - public MissingReferentialResult computeMissingReferential(MissingReferentialRequest request) { - return getTopiaApplicationContext().computeMissingReferential(this, request, serviceContext().serviceInitializer().getInitializerConfig().getTemporaryDirectoryRoot().toPath()); - } - @Override public void insertMissingReferential(TopiaSqlScript sqlContent) { getTopiaPersistenceContext().executeSqlScript(sqlContent); ===================================== core/services/test/src/main/java/fr/ird/observe/services/service/data/RootOpenableServiceFixtures.java ===================================== @@ -46,6 +46,8 @@ import fr.ird.observe.services.service.ObserveServiceFixtures; import fr.ird.observe.services.service.ReferenceServiceFixtures; import fr.ird.observe.spi.module.BusinessModule; import fr.ird.observe.spi.module.ObserveBusinessProject; +import fr.ird.observe.spi.referential.MissingReferentialRequest; +import fr.ird.observe.spi.referential.MissingReferentialResult; import io.ultreia.java4all.lang.Strings; import org.apache.logging.log4j.LogManager; import org.apache.logging.log4j.Logger; @@ -275,6 +277,18 @@ public class RootOpenableServiceFixtures extends GeneratedRootOpenableServiceFix return new RootOpenableServiceFixtures.SaveResult<>(createForm, createSave, updateForm, updateSave); } + + @Override + public void computeMissingReferential(ObserveServicesProvider servicesProvider, RootOpenableService service) { + String id = getProperty("computeMissingReferential.id"); + MissingReferentialResult actual = service.computeMissingReferential(TripDto.class, MissingReferentialRequest.of(Map.of(), id)); + Assert.assertNotNull(actual); + Assert.assertNotNull(actual.getSqlCode()); + Assert.assertNotNull(actual.getMissingIds()); + MissingReferentialResult actualNull = service.computeMissingReferential(TripDto.class, MissingReferentialRequest.of(actual.getMissingIds(), id)); + Assert.assertNull(actualNull); + } + @Override public void getGroupByValue(ObserveServicesProvider servicesProvider, RootOpenableService service) { for (Class<? extends RootOpenableDto> dtoType : ObserveBusinessProject.get().getRootOpenableDataTypes()) { ===================================== core/services/test/src/main/java/fr/ird/observe/services/service/referential/ReferentialServiceFixtures.java ===================================== @@ -30,13 +30,10 @@ import fr.ird.observe.dto.reference.ReferentialDtoReferenceSet; import fr.ird.observe.dto.referential.ps.common.ProgramDto; import fr.ird.observe.dto.result.SaveResultDto; import fr.ird.observe.services.ObserveServicesProvider; -import fr.ird.observe.spi.referential.MissingReferentialRequest; -import fr.ird.observe.spi.referential.MissingReferentialResult; import fr.ird.observe.spi.referential.ReferentialIds; import org.junit.Assert; import java.util.Collections; -import java.util.LinkedHashMap; import java.util.Set; public class ReferentialServiceFixtures extends GeneratedReferentialServiceFixtures { @@ -51,15 +48,6 @@ public class ReferentialServiceFixtures extends GeneratedReferentialServiceFixtu Assert.assertTrue(service.exists(ProgramDto.class, newId)); } - @Override - public void computeMissingReferential(ObserveServicesProvider servicesProvider, ReferentialService service) { - MissingReferentialResult actual = service.computeMissingReferential(MissingReferentialRequest.of( - new LinkedHashMap<>(), - getProperty("computeMissingReferential.id") - )); - Assert.assertNotNull(actual); - } - @Override public void delete(ObserveServicesProvider servicesProvider, ReferentialService service) { String id = getProperty("delete.id"); ===================================== core/services/test/src/main/resources/fixtures/fr/ird/observe/services/service/data/RootOpenableService.properties ===================================== @@ -19,6 +19,7 @@ # <http://www.gnu.org/licenses/gpl-3.0.html>. # #L% ### +computeMissingReferential.id=${PS_COMMON_TRIP} data.ll.common.Trip.dependencies.count=0 data.ll.common.Trip.getBrothers.count=0 data.ll.common.Trip.getBrothersFromParent.count=1 ===================================== server/core/src/main/filtered-resources/META-INF/mapping-api-client.wm ===================================== @@ -102,6 +102,7 @@ GET /data/OpenableService/loadForm data 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 @@ -148,7 +149,6 @@ GET /data/ps/common/TripService/loadLogbookForm data 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 -POST /referential/ReferentialService/computeMissingReferential referential.ReferentialServiceRestApi.computeMissingReferential DELETE /referential/ReferentialService/delete referential.ReferentialServiceRestApi.delete GET /referential/ReferentialService/differentialMetaModel referential.ReferentialServiceRestApi.differentialMetaModel GET /referential/ReferentialService/exists referential.ReferentialServiceRestApi.exists View it on GitLab: https://gitlab.com/ultreiaio/ird-observe/-/compare/6f62a2f8ef0289a298716602d... -- View it on GitLab: https://gitlab.com/ultreiaio/ird-observe/-/compare/6f62a2f8ef0289a298716602d... You're receiving this email because of your account on gitlab.com.
participants (1)
-
Tony CHEMIT (@tchemit)