Tony CHEMIT pushed to branch develop at ultreiaio / ird-observe Commits: fc1319fd by Tony Chemit at 2020-06-27T17:57:42+02:00 [LL Logbook Activity] Revoir finement l'activité observée associée à une activité logbook - See #1551 - - - - - 280e3b1a by Tony Chemit at 2020-06-27T17:58:42+02:00 Revoir les barres de progressions - Closes #1417 - - - - - 19 changed files: - client-core/src/main/java/fr/ird/observe/client/datasource/api/ObserveDataSourcesManager.java - client-core/src/main/java/fr/ird/observe/client/datasource/api/ObserveSwingDataSource.java - client-core/src/main/java/fr/ird/observe/client/util/ProgressModel.java - client-datasource-actions/src/main/java/fr/ird/observe/client/datasource/actions/actions/AdminTabUIActionSupport.java - client-datasource-actions/src/main/java/fr/ird/observe/client/datasource/actions/consolidate/actions/Start.java - client-datasource-actions/src/main/java/fr/ird/observe/client/datasource/actions/export/actions/Start.java - client-datasource-actions/src/main/java/fr/ird/observe/client/datasource/actions/longline/pairing/actions/Prepare.java - client-datasource-actions/src/main/java/fr/ird/observe/client/datasource/actions/longline/pairing/tree/node/ActivityLonglinePairingActivityNode.java - client-datasource-actions/src/main/java/fr/ird/observe/client/datasource/actions/synchronize/data/actions/Apply.java - client-datasource-actions/src/main/java/fr/ird/observe/client/datasource/actions/validate/actions/Start.java - client-datasource-editor-api/src/main/java/fr/ird/observe/client/datasource/editor/DataSourceEditorBodyContent.java - client-datasource-editor-api/src/main/java/fr/ird/observe/client/datasource/editor/DataSourceEditorHandler.java - client-datasource-editor-api/src/main/java/fr/ird/observe/client/datasource/editor/wizard/StorageBackupUILauncher.java - dto/src/main/java/fr/ird/observe/dto/data/ll/logbook/ActivityReference.java - dto/src/main/models/Observe-31-data-ll-logbook.model - pom.xml - services/src/main/java/fr/ird/observe/services/service/data/ll/pairing/ActivityLonglinePairingEngine.java - services/src/main/java/fr/ird/observe/services/service/data/ll/pairing/ActivityLonglinePairingResult.java - services/src/main/java/fr/ird/observe/services/service/data/ll/pairing/ActivityLonglinePairingResultItem.java Changes: ===================================== client-core/src/main/java/fr/ird/observe/client/datasource/api/ObserveDataSourcesManager.java ===================================== @@ -25,6 +25,7 @@ package fr.ird.observe.client.datasource.api; import fr.ird.observe.client.configuration.ClientConfig; import fr.ird.observe.client.datasource.api.event.ObserveSwingDataSourceEvent; import fr.ird.observe.client.datasource.api.event.ObserveSwingDataSourceListenerAdapter; +import fr.ird.observe.client.util.ProgressModel; import fr.ird.observe.navigation.model.edit.ObserveEditModel; import fr.ird.observe.navigation.model.select.ObserveSelectModel; import fr.ird.observe.services.ObserveDataSourceConfigurationMainFactory; @@ -44,7 +45,6 @@ import io.ultreia.java4all.application.context.spi.GenerateApplicationComponent; import org.apache.logging.log4j.LogManager; import org.apache.logging.log4j.Logger; -import javax.swing.DefaultBoundedRangeModel; import java.io.Closeable; import java.io.File; import java.util.ArrayList; @@ -217,7 +217,7 @@ public class ObserveDataSourcesManager implements Closeable { try { //FIXME:BodyContent Review progress model, not linked to ui any more... if (getProgressModel() == null) { - setProgressModel(new DefaultBoundedRangeModel()); + setProgressModel(new ProgressModel()); } create(createDto); } catch (IncompatibleDataSourceCreateConfigurationException | DataSourceCreateWithNoReferentialImportException e) { ===================================== client-core/src/main/java/fr/ird/observe/client/datasource/api/ObserveSwingDataSource.java ===================================== @@ -29,6 +29,7 @@ import fr.ird.observe.client.configuration.WithClientConfig; import fr.ird.observe.client.datasource.api.event.ObserveSwingDataSourceEvent; import fr.ird.observe.client.datasource.api.event.ObserveSwingDataSourceListener; import fr.ird.observe.client.datasource.dcp.FloatingObjectPresetsManager; +import fr.ird.observe.client.util.ProgressModel; import fr.ird.observe.client.util.UIHelper; import fr.ird.observe.dto.IdDto; import fr.ird.observe.dto.ObserveUtil; @@ -115,7 +116,7 @@ public class ObserveSwingDataSource extends ObserveServicesProviderSupport imple private final Icon icon; private final ObserveServiceMainFactory serviceFactory; private ObserveDataSourceConnection connection; - private BoundedRangeModel progressModel; + private ProgressModel progressModel; // indique que la connexion a expiré mais que la source n'est pas complétement fermer private boolean expired; @@ -606,11 +607,11 @@ public class ObserveSwingDataSource extends ObserveServicesProviderSupport imple return servicesProvider.getService(serviceType); } - public BoundedRangeModel getProgressModel() { + public ProgressModel getProgressModel() { return progressModel; } - public void setProgressModel(BoundedRangeModel progressModel) { + public void setProgressModel(ProgressModel progressModel) { this.progressModel = progressModel; } ===================================== client-core/src/main/java/fr/ird/observe/client/util/ProgressModel.java ===================================== @@ -38,4 +38,7 @@ public class ProgressModel extends DefaultBoundedRangeModel { progressBar.setModel(this); } + public void increments() { + setValue(getValue() + 1); + } } ===================================== client-datasource-actions/src/main/java/fr/ird/observe/client/datasource/actions/actions/AdminTabUIActionSupport.java ===================================== @@ -203,17 +203,17 @@ public abstract class AdminTabUIActionSupport<U extends AdminTabUI> extends JCom public WizardState prepareCopy(ProgressModel progressModel, ObserveSwingDataSource centralSource, String centralSourceLabel, ObserveSwingDataSource targetSource, String targetSourceLabel, Collection<String> idsToCopy) { - progressModel.setExtent(1); + progressModel.increments(); ReferentialService targetReferentialService = targetSource.getReferentialService(); ImmutableSetStringMap targetSourceReferential = targetReferentialService.getReferentialIds(); MissingReferentialRequest missingReferentialRequest = MissingReferentialRequest.of(targetSourceReferential, idsToCopy.toArray(new String[0])); MissingReferentialResult missingReferentialResult = centralSource.getReferentialService().computeMissingReferential(missingReferentialRequest); - progressModel.setExtent(1); + progressModel.increments(); if (missingReferentialResult == null) { - progressModel.setExtent(1); + progressModel.increments(); return WizardState.SUCCESSED; } @@ -250,7 +250,7 @@ public abstract class AdminTabUIActionSupport<U extends AdminTabUI> extends JCom sendMessage(t("observe.actions.exportData.message.add.missing.referential", decorator.toString(reference))); } } - progressModel.setExtent(1); + progressModel.increments(); targetReferentialService.insertMissingReferential(missingReferentialResult.getSqlCode()); return WizardState.SUCCESSED; } ===================================== client-datasource-actions/src/main/java/fr/ird/observe/client/datasource/actions/consolidate/actions/Start.java ===================================== @@ -100,7 +100,7 @@ public class Start extends AdminTabUIActionSupport<ConsolidateUI> { ImmutableSet.Builder<ConsolidateTripSeineDataResult> resultsBuilder = ImmutableSet.builder(); for (String tripId : tripIds) { - progressModel.setExtent(1); + progressModel.increments(); sendMessage(t("observe.actions.consolidate.start.trip", ++index, nbTrips, tripId)); ConsolidateTripSeineDataRequest request = new ConsolidateTripSeineDataRequest(); @@ -131,7 +131,7 @@ public class Start extends AdminTabUIActionSupport<ConsolidateUI> { ObserveUtil.cleanMemory(); } - progressModel.setExtent(1); + progressModel.increments(); ImmutableSet<ConsolidateTripSeineDataResult> results = resultsBuilder.build(); if (results.isEmpty()) { ===================================== client-datasource-actions/src/main/java/fr/ird/observe/client/datasource/actions/export/actions/Start.java ===================================== @@ -94,12 +94,12 @@ public class Start extends ExportUIActionSupport { progressModel.setValue(0); - progressModel.setExtent(1); + progressModel.increments(); try (ObserveSwingDataSource localDataSource = openSource(stepModel.getSource())) { TripManagementService localTripManagementService = localDataSource.getTripManagementService(); - progressModel.setExtent(1); + progressModel.increments(); try (ObserveSwingDataSource centralDataSource = openSource(stepModel.getCentralSource())) { TripManagementService centralTripManagementService = centralDataSource.getTripManagementService(); @@ -113,7 +113,7 @@ public class Start extends ExportUIActionSupport { for (TripEntry tripEntry : tripEntries) { - progressModel.setExtent(1); + progressModel.increments(); ExportTripRequest exportTripRequest = new ExportTripRequest(false, tripEntry.getProgramId(), tripEntry.getTripId()); ExportTripResult exportTripResult = localTripManagementService.exportTrip(exportTripRequest); logExportResult(n("observe.actions.synchro.data.result.export.trip"), @@ -123,7 +123,7 @@ public class Start extends ExportUIActionSupport { tripEntry.getProgram(), tripEntry.getTrip()); - progressModel.setExtent(1); + progressModel.increments(); ImportTripRequest importTripRequest = new ImportTripRequest(exportTripResult); ImportTripResult importTripResult = centralTripManagementService.importTrip(importTripRequest); logImportResult(n("observe.actions.synchro.data.result.import.trip"), @@ -138,7 +138,7 @@ public class Start extends ExportUIActionSupport { } } - progressModel.setExtent(1); + progressModel.increments(); sendMessage(t("observe.actions.operation.message.done", new Date())); ===================================== client-datasource-actions/src/main/java/fr/ird/observe/client/datasource/actions/longline/pairing/actions/Prepare.java ===================================== @@ -105,7 +105,7 @@ public class Prepare extends ActivityLonglinePairingUIActionSupport { log.info(sendMessage(String.format("[Program %d/%d - Trip %d/%d] Found %d logbook activities.", programIndex, nbProgram, tripIndex, nbTrip, tripLonglinePairingResult.getItems().size()))); ActivityLonglinePairingTripNode activityLonglinePairingTripNode = new ActivityLonglinePairingTripNode(tripLonglinePairingResult); activityLonglinePairingProgramNode.add(activityLonglinePairingTripNode); - progressModel.setExtent(1); + progressModel.increments(); } } ===================================== client-datasource-actions/src/main/java/fr/ird/observe/client/datasource/actions/longline/pairing/tree/node/ActivityLonglinePairingActivityNode.java ===================================== @@ -39,7 +39,7 @@ public class ActivityLonglinePairingActivityNode extends ActivityLonglinePairing ActivityLonglinePairingActivityNode(ActivityLonglinePairingResult userObject) { super(Objects.requireNonNull(userObject), false); - this.selectedValue = userObject.getRelatedObservedActivity(); + this.selectedValue = userObject.getSelectedRelatedObservedActivity(); if (selectedValue == null && !userObject.getItems().isEmpty()) { ActivityLonglinePairingResultItem activityLonglinePairingResultItem = userObject.getItems().get(0); setValueAt(activityLonglinePairingResultItem, 1); ===================================== client-datasource-actions/src/main/java/fr/ird/observe/client/datasource/actions/synchronize/data/actions/Apply.java ===================================== @@ -141,7 +141,7 @@ public class Apply extends DataSynchroUIActionSupport { TripAware trip = task.getTrip(); - progressModel.setExtent(1); + progressModel.increments(); if (task instanceof DeleteFromLeftDataSynchronizeTask) { executeDeleteTask(programDecorator, program, trip, @@ -223,7 +223,7 @@ public class Apply extends DataSynchroUIActionSupport { program, trip); - progressModel.setExtent(1); + progressModel.increments(); ImportTripRequest importTripRequest = new ImportTripRequest(exportTripResult); ImportTripResult importTripResult = targetTripManagementService.importTrip(importTripRequest); logImportResult(n("observe.actions.synchro.data.result.import.trip"), ===================================== client-datasource-actions/src/main/java/fr/ird/observe/client/datasource/actions/validate/actions/Start.java ===================================== @@ -183,7 +183,7 @@ public class Start extends ValidateUIActionSupport { request.setValidationLengthWeightEnable(config.getValidationLengthWeightEnable()); request.setValidationDisabledReferential(config.getValidationUseDisabledReferential()); - progressModel.setExtent(1); + progressModel.increments(); result = validateService.validateReferential(request); @@ -218,7 +218,7 @@ public class Start extends ValidateUIActionSupport { //noinspection unchecked sendMessage(t("observe.actions.validate.message.validate.trip", getDecoratorService().getDataReferenceDecorator((Class) dataReference.getReferenceType()).toString(dataReference))); - progressModel.setExtent(1); + progressModel.increments(); result = validateService.validateData(request); resultBuilder.addMessages(result.getData()); @@ -229,7 +229,7 @@ public class Start extends ValidateUIActionSupport { } else throw new IllegalStateException(); - progressModel.setExtent(1); + progressModel.increments(); dataSourceToValidate.close(); stepModel.setValidationResult(result); ===================================== client-datasource-editor-api/src/main/java/fr/ird/observe/client/datasource/editor/DataSourceEditorBodyContent.java ===================================== @@ -39,6 +39,7 @@ import fr.ird.observe.client.datasource.editor.menu.actions.ShowDataSourcePreset import fr.ird.observe.client.main.ObserveMainUI; import fr.ird.observe.client.main.body.HideBodyContentNotAcceptedException; import fr.ird.observe.client.main.body.MainUIBodyContent; +import fr.ird.observe.client.util.ProgressModel; import fr.ird.observe.client.util.UIHelper; import fr.ird.observe.client.util.busy.BusyModel; import fr.ird.observe.navigation.model.edit.ObserveEditModel; @@ -49,7 +50,6 @@ import io.ultreia.java4all.util.SingletonSupplier; import org.apache.logging.log4j.LogManager; import org.apache.logging.log4j.Logger; -import javax.swing.BoundedRangeModel; import java.beans.PropertyChangeListener; import java.util.Set; import java.util.function.Supplier; @@ -143,7 +143,7 @@ public class DataSourceEditorBodyContent extends MainUIBodyContent<DataSourceEdi log.info(String.format("loading ui for storage %s: %s", dataSource.getLabel(), mainUI)); - BoundedRangeModel progressModel = dataSource.getProgressModel(); + ProgressModel progressModel = dataSource.getProgressModel(); ObserveEditModel navigationEditModel = null; try { @@ -180,7 +180,7 @@ public class DataSourceEditorBodyContent extends MainUIBodyContent<DataSourceEdi get().getHandler().loadNavigationUI(dataSource, progressModel); - progressModel.setExtent(1); + progressModel.increments(); } ===================================== client-datasource-editor-api/src/main/java/fr/ird/observe/client/datasource/editor/DataSourceEditorHandler.java ===================================== @@ -33,9 +33,9 @@ import fr.ird.observe.client.datasource.editor.tree.navigation.NavigationTreeMod import fr.ird.observe.client.datasource.editor.tree.navigation.nodes.NavigationTreeNodeSupport; import fr.ird.observe.client.datasource.editor.tree.navigation.nodes.ReferenceNavigationTreeNodeSupport; import fr.ird.observe.client.datasource.editor.tree.navigation.nodes.StringNavigationTreeNodeSupport; -import fr.ird.observe.client.main.MainUIModel; import fr.ird.observe.client.util.ObserveSwingValidatorMessageTableModel; import fr.ird.observe.client.util.ObserveValidatorMessageTableRenderer; +import fr.ird.observe.client.util.ProgressModel; import fr.ird.observe.client.util.UIHelper; import fr.ird.observe.client.util.busy.BusyModel; import fr.ird.observe.client.util.session.WithObserveSwingSessionHelper; @@ -49,7 +49,6 @@ import org.apache.logging.log4j.Logger; import org.nuiton.jaxx.runtime.spi.UIHandler; import org.nuiton.jaxx.validator.swing.SwingValidatorUtil; -import javax.swing.BoundedRangeModel; import javax.swing.SwingUtilities; import javax.swing.event.TreeSelectionEvent; import javax.swing.tree.TreePath; @@ -251,13 +250,13 @@ public class DataSourceEditorHandler implements UIHandler<DataSourceEditor>, Wit * @param servicesProvider services provider to load navigation model * @param progressModel the progress model to interact with ui */ - public void loadNavigationUI(ObserveServicesProvider servicesProvider, BoundedRangeModel progressModel) { + public void loadNavigationUI(ObserveServicesProvider servicesProvider, ProgressModel progressModel) { NavigationTree tree = ui.getNavigationUI().getTree(); NavigationTreeModel treeModel = tree.getModel(); treeModel.populate(servicesProvider); - progressModel.setExtent(1); + progressModel.increments(); // select initial node try { @@ -265,7 +264,7 @@ public class DataSourceEditorHandler implements UIHandler<DataSourceEditor>, Wit } catch (Exception e) { log.error("Could not load initial node", e); } - progressModel.setExtent(1); + progressModel.increments(); tree.setVisible(true); ===================================== client-datasource-editor-api/src/main/java/fr/ird/observe/client/datasource/editor/wizard/StorageBackupUILauncher.java ===================================== @@ -158,11 +158,11 @@ public class StorageBackupUILauncher extends StorageUILauncher { ExportTripRequest exportRequest = new ExportTripRequest(false, entry.getKey().getId(), trip.getId()); ExportTripResult exportTripResult = managementService.exportTrip(exportRequest); - progressModel.setExtent(1); + progressModel.increments(); ImportTripRequest importTripRequest = new ImportTripRequest(exportTripResult); tmpManagementService.importTrip(importTripRequest); - progressModel.setExtent(1); + progressModel.increments(); } @@ -175,13 +175,13 @@ public class StorageBackupUILauncher extends StorageUILauncher { } sourceToBackup.getDataSourceService().backup(backupFile); - progressModel.setExtent(1); + progressModel.increments(); } catch (DatabaseNotFoundException | DatabaseConnexionNotAuthorizedException | BabModelVersionException | IncompatibleDataSourceCreateConfigurationException | DataSourceCreateWithNoReferentialImportException e) { throw new ObserveSwingTechnicalException(e); } finally { - progressModel.setExtent(1); + progressModel.increments(); if (sourceToBackup != localSource) { sourceToBackup.close(); } ===================================== dto/src/main/java/fr/ird/observe/dto/data/ll/logbook/ActivityReference.java ===================================== @@ -34,8 +34,8 @@ public class ActivityReference extends GeneratedActivityReference { private transient GPSPoint gpsPoint; - public ActivityReference(DtoReferenceAware dto, Date startTimeStamp, Date endTimeStamp, Float latitude, Float longitude, String vesselActivityId, String vesselActivityLabel, SetReference set, SampleReference sample, String activityId) { - super(dto, startTimeStamp, endTimeStamp, latitude, longitude, vesselActivityId, vesselActivityLabel, set, sample, activityId); + public ActivityReference(DtoReferenceAware dto, Date startTimeStamp, Date endTimeStamp, Float latitude, Float longitude, String vesselActivityId, String vesselActivityLabel, SetReference set, SampleReference sample, fr.ird.observe.dto.data.ll.observation.ActivityReference activity) { + super(dto, startTimeStamp, endTimeStamp, latitude, longitude, vesselActivityId, vesselActivityLabel, set, sample, activity); } public ActivityReference(DtoReferenceAware dto) { ===================================== dto/src/main/models/Observe-31-data-ll-logbook.model ===================================== @@ -20,7 +20,7 @@ longitude + {*:1} Float quadrant + {*:1} Integer samplePart + {*} fr.ird.observe.dto.data.ll.logbook.SamplePartDto | ordered -data.ll.logbook.Activity > data.Openable >> data.ActivityAware | references=startTimeStamp,endTimeStamp,latitude,longitude,vesselActivityId,vesselActivityLabel,set,sample,relatedObservedActivityId +data.ll.logbook.Activity > data.Openable >> data.ActivityAware | references=startTimeStamp,endTimeStamp,latitude,longitude,vesselActivityId,vesselActivityLabel,set,sample,relatedObservedActivity startTimeStamp + {*:1} Date | notNull endTimeStamp + {*:1} Date | mayNotNull latitude + {*:1} Float | mayNotNull ===================================== pom.xml ===================================== @@ -24,7 +24,7 @@ <parent> <groupId>io.ultreia.maven</groupId> <artifactId>pom</artifactId> - <version>2020.34</version> + <version>2020.35</version> </parent> <groupId>fr.ird.observe</groupId> @@ -162,15 +162,15 @@ <maven.build.timestamp.format>dd/MM/yyyy HH:mm z</maven.build.timestamp.format> <buildDate>${maven.build.timestamp}</buildDate> - <lib.version.toolkit>4.33</lib.version.toolkit> + <lib.version.toolkit>4.34-SNAPSHOT</lib.version.toolkit> <lib.version.nuiton.validation>3.1</lib.version.nuiton.validation> <!--can't use 1.4.197 (date has changed + blob also)--> <lib.version.h2>1.4.196</lib.version.h2> <lib.version.nuiton.utils>3.0</lib.version.nuiton.utils> <!-- <lib.version.java4all.topia>1.17</lib.version.java4all.topia>--> - <!--<lib.version.java4all.eugene>3.0<-alpha-22</lib.version.java4all.eugene>--> - <lib.version.java4all.jaxx>3.0-alpha-72-SNAPSHOT</lib.version.java4all.jaxx> +<!-- <lib.version.java4all.eugene>3.0-alpha-34-SNAPSHOT</lib.version.java4all.eugene>--> +<!-- <lib.version.java4all.jaxx>3.0-alpha-72-SNAPSHOT</lib.version.java4all.jaxx>--> <!--<lib.version.java4all.application-context>1.0.3-SNAPSHOT</lib.version.java4all.application-context>--> <!--<lib.version.java4all.application-template>1.0.2-SNAPSHOT</lib.version.java4all.application-template>--> <!--<lib.version.java4all.i18n>4.0-beta-3-SNAPSHOT</lib.version.java4all.i18n>--> ===================================== services/src/main/java/fr/ird/observe/services/service/data/ll/pairing/ActivityLonglinePairingEngine.java ===================================== @@ -33,10 +33,8 @@ import fr.ird.observe.services.service.data.ll.logbook.ActivityService; import java.util.ArrayList; import java.util.Collection; -import java.util.Date; import java.util.List; import java.util.Set; -import java.util.concurrent.TimeUnit; /** * Created by tchemit on 15/10/2018. @@ -74,7 +72,7 @@ public class ActivityLonglinePairingEngine { ImmutableList<ActivityReference> activityLonglineObsList = context.getActivityLonglineObsList(activityLonglineLogbook); List<ActivityLonglinePairingResultItem> itemBuilder = new ArrayList<>(activityLonglineObsList.size()); for (ActivityReference activityLonglineObs : activityLonglineObsList) { - itemBuilder.add(toActivityResultItem(activityLonglineLogbook, activityLonglineObs)); + itemBuilder.add(ActivityLonglinePairingResultItem.create(activityLonglineLogbook, activityLonglineObs)); } itemBuilder.sort(ActivityLonglinePairingResult.COMPARATOR); fr.ird.observe.dto.data.ll.logbook.ActivityReference reference; @@ -86,12 +84,4 @@ public class ActivityLonglinePairingEngine { return new ActivityLonglinePairingResult(reference, ImmutableList.copyOf(itemBuilder)); } - private ActivityLonglinePairingResultItem toActivityResultItem(ActivityAware activityLonglineLogbook, ActivityReference activityLonglineObsReference) { - Date logbookTimeStamp = activityLonglineLogbook.getTimeStamp(); - Date obsTimeStamp = activityLonglineObsReference.getTimeStamp(); - long computedTime = TimeUnit.MINUTES.convert(logbookTimeStamp.getTime() - obsTimeStamp.getTime(), TimeUnit.MILLISECONDS); - double computedDistance = activityLonglineLogbook.getGPSPoint().getDistanceInKm(activityLonglineObsReference.getGPSPoint()); - return new ActivityLonglinePairingResultItem(activityLonglineObsReference, computedTime, computedDistance); - } - } ===================================== services/src/main/java/fr/ird/observe/services/service/data/ll/pairing/ActivityLonglinePairingResult.java ===================================== @@ -40,18 +40,21 @@ public class ActivityLonglinePairingResult implements ObserveDto { private final ActivityReference activityLonglineLogbook; private final ImmutableList<ActivityLonglinePairingResultItem> items; + private final ActivityLonglinePairingResultItem selectedRelatedObservedActivity; public ActivityLonglinePairingResult(ActivityReference activityLonglineLogbook, ImmutableList<ActivityLonglinePairingResultItem> items) { this.activityLonglineLogbook = Objects.requireNonNull(activityLonglineLogbook); this.items = Objects.requireNonNull(items); + fr.ird.observe.dto.data.ll.observation.ActivityReference relatedObservedActivity = activityLonglineLogbook.getRelatedObservedActivity(); + selectedRelatedObservedActivity = relatedObservedActivity == null + ? null + : items.stream().filter(s -> relatedObservedActivity.equals(s.getObservationActivity())) + .findFirst() + .orElse(ActivityLonglinePairingResultItem.create(activityLonglineLogbook, relatedObservedActivity)); } - public ActivityLonglinePairingResultItem getRelatedObservedActivity() { - String relatedObservedActivityId = activityLonglineLogbook.getRelatedObservedActivityId(); - if (relatedObservedActivityId != null) { - return items.stream().filter(s -> relatedObservedActivityId.equals(s.getObservationActivity().getId())).findFirst().orElseThrow(IllegalStateException::new); - } - return null; + public ActivityLonglinePairingResultItem getSelectedRelatedObservedActivity() { + return selectedRelatedObservedActivity; } public ActivityReference getActivityLonglineLogbook() { ===================================== services/src/main/java/fr/ird/observe/services/service/data/ll/pairing/ActivityLonglinePairingResultItem.java ===================================== @@ -22,10 +22,12 @@ package fr.ird.observe.services.service.data.ll.pairing; * #L% */ +import fr.ird.observe.dto.data.ActivityAware; import fr.ird.observe.dto.data.ll.observation.ActivityReference; import fr.ird.observe.dto.spi.SimpleDto; import io.ultreia.java4all.lang.Numbers; +import java.util.Date; import java.util.Objects; import java.util.concurrent.TimeUnit; @@ -43,7 +45,15 @@ public class ActivityLonglinePairingResultItem implements SimpleDto { private final float computedDistance; private String computedTimeStr; - public ActivityLonglinePairingResultItem(ActivityReference observationActivity, long computedTime, double computedDistance) { + public static ActivityLonglinePairingResultItem create(ActivityAware activityLonglineLogbook, ActivityReference activityLonglineObsReference) { + Date logbookTimeStamp = activityLonglineLogbook.getTimeStamp(); + Date obsTimeStamp = activityLonglineObsReference.getTimeStamp(); + long computedTime = TimeUnit.MINUTES.convert(logbookTimeStamp.getTime() - obsTimeStamp.getTime(), TimeUnit.MILLISECONDS); + double computedDistance = activityLonglineLogbook.getGPSPoint().getDistanceInKm(activityLonglineObsReference.getGPSPoint()); + return new ActivityLonglinePairingResultItem(activityLonglineObsReference, computedTime, computedDistance); + } + + protected ActivityLonglinePairingResultItem(ActivityReference observationActivity, long computedTime, double computedDistance) { this.observationActivity = observationActivity; this.computedTime = computedTime; this.computedDistance = Numbers.roundTwoDigits((float) computedDistance); View it on GitLab: https://gitlab.com/ultreiaio/ird-observe/-/compare/bf70909191a2513dc7a2cdb9a... -- View it on GitLab: https://gitlab.com/ultreiaio/ird-observe/-/compare/bf70909191a2513dc7a2cdb9a... You're receiving this email because of your account on gitlab.com.