Tony CHEMIT pushed to branch develop at ultreiaio / ird-observe Commits: c2eb9b53 by Tony Chemit at 2020-07-08T14:21:50+02:00 [LL Logbook Activity] Revoir finement l'activité observée associée à une activité logbook - Closes #1551 - - - - - 18 changed files: - client-datasource-editor-ll/src/main/i18n/getters/java.getter - client-datasource-editor-ll/src/main/java/fr/ird/observe/client/datasource/editor/content/data/ll/logbook/ActivityUI.jaxx - client-datasource-editor-ll/src/main/java/fr/ird/observe/client/datasource/editor/content/data/ll/logbook/ActivityUI.jcss - client-datasource-editor-ll/src/main/java/fr/ird/observe/client/datasource/editor/content/data/ll/logbook/ActivityUIHandler.java - client-datasource-editor-ll/src/main/java/fr/ird/observe/client/datasource/editor/content/data/ll/logbook/ActivityUIModel.java - − client-datasource-editor-ll/src/main/java/fr/ird/observe/client/datasource/editor/content/data/ll/logbook/actions/ActivityUIChooseRelatedObservedActivity.java - client-datasource-editor-ll/src/main/java/fr/ird/observe/client/datasource/editor/content/data/ll/observation/ActivityUI.jcss - client-datasource-editor-ll/src/main/java/fr/ird/observe/client/datasource/editor/content/data/ll/observation/ActivityUIModel.java - dto/src/main/java/fr/ird/observe/dto/data/ActivityAware.java - dto/src/main/java/fr/ird/observe/dto/data/ll/logbook/ActivityDto.java - dto/src/main/java/fr/ird/observe/dto/data/ll/logbook/ActivityReference.java - dto/src/main/java/fr/ird/observe/dto/data/ll/observation/ActivityDto.java - dto/src/main/java/fr/ird/observe/dto/data/ll/observation/ActivityReference.java - dto/src/main/java/fr/ird/observe/dto/referential/ll/common/VesselActivityHelper.java → dto/src/main/java/fr/ird/observe/dto/referential/ll/common/VesselActivityReference.java - dto/src/main/models/Observe-30-data-ll-observation.model - dto/src/main/models/Observe-31-data-ll-logbook.model - persistence/src/main/java/fr/ird/observe/entities/data/ll/common/TripImpl.java - persistence/src/main/java/fr/ird/observe/entities/data/ll/logbook/ActivityImpl.java Changes: ===================================== client-datasource-editor-ll/src/main/i18n/getters/java.getter ===================================== @@ -68,9 +68,6 @@ observe.data.ll.logbook.Activity.action.addSample observe.data.ll.logbook.Activity.action.addSample.tip observe.data.ll.logbook.Activity.action.addSet observe.data.ll.logbook.Activity.action.addSet.tip -observe.data.ll.logbook.Activity.action.chooseRelatedObservedActivity -observe.data.ll.logbook.Activity.action.chooseRelatedObservedActivity.message -observe.data.ll.logbook.Activity.action.chooseRelatedObservedActivity.title observe.data.ll.logbook.Activity.action.moves observe.data.ll.logbook.Activity.action.moves.tip observe.data.ll.logbook.Activity.message.not.open ===================================== client-datasource-editor-ll/src/main/java/fr/ird/observe/client/datasource/editor/content/data/ll/logbook/ActivityUI.jaxx ===================================== @@ -39,7 +39,6 @@ fr.ird.observe.client.datasource.editor.content.data.ll.logbook.actions.ActivityUIAddSample fr.ird.observe.client.datasource.editor.content.data.ll.logbook.actions.ActivityUIDelete fr.ird.observe.client.datasource.editor.content.data.ll.logbook.actions.ActivityUISave - fr.ird.observe.client.datasource.editor.content.data.ll.logbook.actions.ActivityUIChooseRelatedObservedActivity fr.ird.observe.services.service.data.ll.pairing.ActivityLonglinePairingResultItem @@ -110,8 +109,7 @@ <JLabel id='vesselActivityLabel'/> </cell> <cell anchor='east' fill="both"> - <JaxxComboBox id='vesselActivity' genericType='VesselActivityReference' - constructorParams='this'/> + <JaxxComboBox id='vesselActivity' genericType='VesselActivityReference' constructorParams='this'/> </cell> </row> @@ -190,11 +188,7 @@ <JLabel id='relatedObservedActivityLabel'/> </cell> <cell anchor='east' fill="both"> - <JPanel layout="{new BorderLayout()}"> - <JaxxComboBox id='relatedObservedActivity' genericType='fr.ird.observe.dto.data.ll.observation.ActivityReference' constructorParams='this' - constraints='BorderLayout.CENTER'/> - <JButton id='chooseRelatedObservedActivity' constraints='BorderLayout.EAST'/> - </JPanel> + <JaxxComboBox id='relatedObservedActivity' genericType='fr.ird.observe.dto.data.ll.observation.ActivityReference' constructorParams='this'/> </cell> </row> ===================================== client-datasource-editor-ll/src/main/java/fr/ird/observe/client/datasource/editor/content/data/ll/logbook/ActivityUI.jcss ===================================== @@ -33,13 +33,13 @@ DateTimeEditor { } #startTimeStamp { - propertyDayDate:{ActivityUIModel.PROPERTY_START_DATE}; - propertyTimeDate:{ActivityUIModel.PROPERTY_START_TIME}; + propertyDayDate:{ActivityDto.PROPERTY_START_DATE}; + propertyTimeDate:{ActivityDto.PROPERTY_START_TIME}; } #endTimeStamp { - propertyDayDate:{ActivityUIModel.PROPERTY_END_DATE}; - propertyTimeDate:{ActivityUIModel.PROPERTY_END_TIME}; + propertyDayDate:{ActivityDto.PROPERTY_END_DATE}; + propertyTimeDate:{ActivityDto.PROPERTY_END_TIME}; } #coordinate { @@ -71,14 +71,9 @@ DateTimeEditor { } #addSet { - enabled:{!model.isModified() && model.isValid() && model.isSetOperation() && ! bean.isHasSet()}; + enabled:{!model.isModified() && model.isValid() && bean.isSetOperation() && ! bean.isHasSet()}; } #addSample { enabled:{!model.isModified() && model.isValid() && !bean.isHasSample()}; } - -#chooseRelatedObservedActivity { - visible:{!model.isReadingMode()}; - enabled:{model.isValid() && bean.getLatitude() != null && bean.getLongitude() != null && bean.getQuadrant() != null}; -} ===================================== client-datasource-editor-ll/src/main/java/fr/ird/observe/client/datasource/editor/content/data/ll/logbook/ActivityUIHandler.java ===================================== @@ -27,6 +27,7 @@ import fr.ird.observe.client.datasource.editor.content.data.open.ContentOpenable import fr.ird.observe.dto.data.ll.logbook.ActivityDto; import fr.ird.observe.dto.data.ll.observation.ActivityReference; import fr.ird.observe.dto.form.Form; +import fr.ird.observe.services.service.data.ll.pairing.ActivityLonglinePairingEngine; import org.apache.logging.log4j.LogManager; import org.apache.logging.log4j.Logger; import org.nuiton.jaxx.runtime.spi.UIHandler; @@ -44,6 +45,7 @@ import java.util.List; class ActivityUIHandler extends ContentOpenableUIHandler<ActivityDto, fr.ird.observe.dto.data.ll.logbook.ActivityReference, ActivityUI> implements UIHandler<ActivityUI> { private static final Logger log = LogManager.getLogger(ActivityUIHandler.class); + private ActivityLonglinePairingEngine pairingEngine; @Override public ActivityUIModel getModel() { @@ -74,6 +76,7 @@ class ActivityUIHandler extends ContentOpenableUIHandler<ActivityDto, fr.ird.obs public void afterInit(ActivityUI ui) { ui.getRelatedObservedActivity().setBeanType(ActivityReference.class); super.afterInit(ui); + pairingEngine = new ActivityLonglinePairingEngine(getClientConfig().getReferentialLocale(), getLlCommonTripService(), getLlLogbookActivityService()); } @Override @@ -94,7 +97,7 @@ class ActivityUIHandler extends ContentOpenableUIHandler<ActivityDto, fr.ird.obs } List<ActivityReference> allActivityLonglineObs = getLlObservationActivityService().getActivityLonglineByTripLongline(tripId).toList(); - model.openForm(form, allActivityLonglineObs); + model.openForm(form, allActivityLonglineObs, pairingEngine); } } ===================================== client-datasource-editor-ll/src/main/java/fr/ird/observe/client/datasource/editor/content/data/ll/logbook/ActivityUIModel.java ===================================== @@ -23,21 +23,20 @@ package fr.ird.observe.client.datasource.editor.content.data.ll.logbook; */ import com.google.common.collect.ImmutableList; +import com.google.common.collect.ImmutableSet; import fr.ird.observe.client.datasource.editor.content.data.open.ContentOpenableUIModel; import fr.ird.observe.dto.data.ll.logbook.ActivityDto; import fr.ird.observe.dto.data.ll.observation.ActivityReference; import fr.ird.observe.dto.form.Form; -import fr.ird.observe.dto.referential.ll.common.VesselActivityHelper; -import fr.ird.observe.dto.referential.ll.common.VesselActivityReference; +import fr.ird.observe.services.service.data.ll.pairing.ActivityLonglinePairingEngine; +import fr.ird.observe.services.service.data.ll.pairing.TripLonglinePairingContext; import io.ultreia.java4all.i18n.I18n; import org.apache.logging.log4j.LogManager; import org.apache.logging.log4j.Logger; -import org.nuiton.util.DateUtil; import java.util.Collections; -import java.util.Date; import java.util.List; -import java.util.stream.Collectors; +import java.util.Objects; /** * Created on 9/26/14. @@ -47,95 +46,46 @@ import java.util.stream.Collectors; */ public class ActivityUIModel extends ContentOpenableUIModel<ActivityDto, fr.ird.observe.dto.data.ll.logbook.ActivityReference> { - public static final String PROPERTY_START_DATE = "startDate"; - public static final String PROPERTY_START_TIME = "startTime"; - public static final String PROPERTY_END_DATE = "endDate"; - public static final String PROPERTY_END_TIME = "endTime"; - private static final String PROPERTY_SET_OPERATION = "setOperation"; + public static final String PROPERTY_ACTIVITY_OBS = "activityObs"; + public static final ImmutableSet<String> PROPERTIES_FOR_UPDATE_ACTIVITIES_OBS_LIST = ImmutableSet.of( + ActivityDto.PROPERTY_VESSEL_ACTIVITY, + ActivityDto.PROPERTY_LATITUDE, + ActivityDto.PROPERTY_LONGITUDE, + ActivityDto.PROPERTY_QUADRANT, + ActivityDto.PROPERTY_START_DATE, + ActivityDto.PROPERTY_START_TIME, + ActivityDto.PROPERTY_START_TIME_STAMP, + ActivityDto.PROPERTY_END_DATE, + ActivityDto.PROPERTY_END_TIME, + ActivityDto.PROPERTY_END_TIME_STAMP); + private static final Logger log = LogManager.getLogger(ActivityUIModel.class); - private List<ActivityReference> allActivityObs; - private List<ActivityReference> activityObs; + private boolean opening = false; + private List<ActivityReference> activityObs; + private TripLonglinePairingContext pairingContext; public ActivityUIModel() { super(ActivityDto.class, I18n.n("observe.data.ll.logbook.Activity.message.not.open")); - - getBean().addPropertyChangeListener(ActivityDto.PROPERTY_VESSEL_ACTIVITY, evt -> { - boolean oldValue = VesselActivityHelper.isSetOperation((VesselActivityReference) evt.getOldValue()); - VesselActivityReference VesselActivityReference = (VesselActivityReference) evt.getNewValue(); - boolean newValue = VesselActivityHelper.isSetOperation(VesselActivityReference); - firePropertyChange(PROPERTY_SET_OPERATION, oldValue, newValue); - if (!opening) { - updateActivityObs(); + getBean().attachSetOperationListener(); + getBean().addPropertyChangeListener(evt -> { + String propertyName = evt.getPropertyName(); + if (opening || !PROPERTIES_FOR_UPDATE_ACTIVITIES_OBS_LIST.contains(propertyName)) { + return; } + updateActivityObsCandidates(); }); } - public boolean isSetOperation() { - return VesselActivityHelper.isSetOperation(getBean().getVesselActivity()); - } - - public Date getStartDate() { - Date timeStamp = getBean().getStartTimeStamp(); - return timeStamp == null ? null : DateUtil.getDay(timeStamp); - } - - public void setStartDate(Date date) { - Date timeStamp = getBean().getStartTimeStamp(); - if (timeStamp != null) { - Date dateAndTime = date == null ? timeStamp : DateUtil.getDateAndTime(date, timeStamp, true, false); - getBean().setStartTimeStamp(dateAndTime); - } - } - - public Date getStartTime() { - Date timeStamp = getBean().getStartTimeStamp(); - return timeStamp == null ? null : DateUtil.getTime(timeStamp, false, false); - } - - public void setStartTime(Date time) { - Date timeStamp = getBean().getStartTimeStamp(); - if (timeStamp != null) { - Date dateAndTime = time == null ? timeStamp : DateUtil.getDateAndTime(timeStamp, time, false, false); - getBean().setStartTimeStamp(dateAndTime); - } - } - - public Date getEndDate() { - Date timeStamp = getBean().getEndTimeStamp(); - return timeStamp == null ? null : DateUtil.getDay(timeStamp); - } - - public void setEndDate(Date date) { - Date timeStamp = getBean().getEndTimeStamp(); - if (timeStamp != null) { - Date dateAndTime = date == null ? timeStamp : DateUtil.getDateAndTime(date, timeStamp, true, false); - getBean().setEndTimeStamp(dateAndTime); - } - } - - public Date getEndTime() { - Date timeStamp = getBean().getEndTimeStamp(); - return timeStamp == null ? null : DateUtil.getTime(timeStamp, false, false); - } - - public void setEndTime(Date time) { - Date timeStamp = getBean().getEndTimeStamp(); - if (timeStamp != null) { - Date dateAndTime = time == null ? timeStamp : DateUtil.getDateAndTime(timeStamp, time, false, false); - getBean().setEndTimeStamp(dateAndTime); - } - } - - public void openForm(Form<ActivityDto> form, List<ActivityReference> allActivityObs) { - this.allActivityObs = ImmutableList.copyOf(allActivityObs); + public void openForm(Form<ActivityDto> form, List<ActivityReference> allActivityObs, ActivityLonglinePairingEngine pairingEngine) { + this.pairingContext = pairingEngine.newTripContext(getSelectedParentId(), ImmutableList.copyOf(allActivityObs)); opening = true; try { super.openForm(form); } finally { opening = false; } - updateActivityObs(); + updateActivityObsCandidates(); } public List<ActivityReference> getActivityObs() { @@ -143,29 +93,29 @@ public class ActivityUIModel extends ContentOpenableUIModel<ActivityDto, fr.ird. } public void setActivityObs(List<ActivityReference> activityObs) { - // only used for jaxx binding - } - - public List<ActivityReference> getAllActivityObs() { - return allActivityObs; + ActivityReference relatedObservedActivity = getBean().getRelatedObservedActivity(); + this.activityObs = Objects.requireNonNull(activityObs); + boolean removeRelatedObservedActivity = relatedObservedActivity != null && !activityObs.contains(relatedObservedActivity); + firePropertyChange(PROPERTY_ACTIVITY_OBS, null, activityObs); + if (removeRelatedObservedActivity) { + log.info(String.format("%s Removed not matching related observed activity: %s", getPrefix(), relatedObservedActivity)); + getBean().setRelatedObservedActivity(null); + } } - private void updateActivityObs() { - log.info(getPrefix() + "Will update release observed actities..."); + private void updateActivityObsCandidates() { + if (opening) { + return; + } + log.info(String.format("%s Will update release observed activities...", getPrefix())); ActivityDto bean = getBean(); - if (allActivityObs == null || bean.getVesselActivityId() == null) { + String vesselActivityId = bean.getVesselActivityId(); + if (pairingContext == null || vesselActivityId == null) { activityObs = Collections.emptyList(); } else { - String VesselActivityId = bean.getVesselActivityId(); - activityObs = allActivityObs.stream().filter(e -> VesselActivityId.equals(e.getVesselActivityId())).collect(Collectors.toList()); - } - log.info(getPrefix() + "Found " + activityObs.size() + " related observed activities."); - ActivityReference relatedObservedActivity = bean.getRelatedObservedActivity(); - boolean removeRelatedObservedActivity = !opening && relatedObservedActivity != null && !activityObs.contains(relatedObservedActivity); - firePropertyChange("activityObs", null, activityObs); - if (removeRelatedObservedActivity) { - log.info(getPrefix() + "Removed not matching related observed activity: " + relatedObservedActivity); - bean.setRelatedObservedActivity(null); + activityObs = pairingContext.getActivityLonglineObsList(bean); } + log.info(String.format("%s Found %d related observed activities.", getPrefix(), activityObs.size())); + setActivityObs(activityObs); } } ===================================== client-datasource-editor-ll/src/main/java/fr/ird/observe/client/datasource/editor/content/data/ll/logbook/actions/ActivityUIChooseRelatedObservedActivity.java deleted ===================================== @@ -1,135 +0,0 @@ -package fr.ird.observe.client.datasource.editor.content.data.ll.logbook.actions; - -/*- - * #%L - * ObServe :: Client DataSource Editor LL - * %% - * Copyright (C) 2008 - 2020 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.client.ClientUIContextApplicationComponent; -import fr.ird.observe.client.datasource.editor.content.ObserveLLKeyStrokes; -import fr.ird.observe.client.datasource.editor.content.actions.ContentUIActionSupport; -import fr.ird.observe.client.datasource.editor.content.data.ll.logbook.ActivityUI; -import fr.ird.observe.client.datasource.editor.content.data.ll.logbook.ActivityUIModel; -import fr.ird.observe.client.datasource.editor.content.ref.usage.UsageUIHandlerSupport; -import fr.ird.observe.client.util.UIHelper; -import fr.ird.observe.dto.data.ll.logbook.ActivityDto; -import fr.ird.observe.dto.data.ll.observation.ActivityReference; -import fr.ird.observe.services.service.data.ll.pairing.ActivityLonglinePairingEngine; -import fr.ird.observe.services.service.data.ll.pairing.ActivityLonglinePairingResult; -import fr.ird.observe.services.service.data.ll.pairing.ActivityLonglinePairingResultItem; -import fr.ird.observe.services.service.data.ll.pairing.ActivityLonglinePairingResultItemDecorator; -import fr.ird.observe.services.service.data.ll.pairing.TripLonglinePairingContext; -import io.ultreia.java4all.jaxx.widgets.combobox.JaxxComboBox; -import org.apache.logging.log4j.LogManager; -import org.apache.logging.log4j.Logger; - -import javax.swing.JButton; -import javax.swing.JLabel; -import javax.swing.JOptionPane; -import javax.swing.JPanel; -import java.awt.BorderLayout; -import java.awt.event.ActionEvent; -import java.util.ArrayList; -import java.util.List; -import java.util.Objects; -import java.util.Optional; - -import static io.ultreia.java4all.i18n.I18n.n; -import static io.ultreia.java4all.i18n.I18n.t; - -/** - * Created by tchemit on 16/10/2018. - * - * @author Tony Chemit - dev@tchemit.fr - */ -public class ActivityUIChooseRelatedObservedActivity extends ContentUIActionSupport<ActivityUI> { - - private static final Logger log = LogManager.getLogger(ActivityUIChooseRelatedObservedActivity.class); - private final ActivityLonglinePairingResultItemDecorator decorator; - - public ActivityUIChooseRelatedObservedActivity() { - super(n("observe.data.ll.logbook.Activity.action.chooseRelatedObservedActivity"), n("observe.data.ll.logbook.Activity.action.chooseRelatedObservedActivity"), "data-calcule", ObserveLLKeyStrokes.KEY_STROKE_CHOOSE_RELATED_OBSERVATION_ACTIVITY); - decorator = new ActivityLonglinePairingResultItemDecorator(getDecoratorService(), getClientConfig().getLocale()); - } - - @Override - protected void doActionPerformed(ActionEvent e, ActivityUI ui) { - - ActivityUIModel model = ui.getModel(); - - ActivityLonglinePairingEngine pairingEngine = new ActivityLonglinePairingEngine(getClientConfig().getReferentialLocale(), getServicesProvider().getLlCommonTripService(), getServicesProvider().getLlLogbookActivityService()); - - ActivityDto bean = model.getBean(); - - TripLonglinePairingContext pairingContext = pairingEngine.newTripContext(model.getSelectedParentId(), model.getAllActivityObs()); - - ActivityLonglinePairingResult activityLonglinePairingResult = pairingEngine.computeForActivityLogbook(pairingContext, bean); - - Optional<ActivityReference> optionalActivityLonglineObs = askNewParent(activityLonglinePairingResult.getItems()); - - if (optionalActivityLonglineObs.isPresent()) { - ActivityReference activityLonglineObs = optionalActivityLonglineObs.get(); - log.info("will use new related activity observation: " + activityLonglineObs); - bean.setRelatedObservedActivity(activityLonglineObs); - } - } - - private Optional<ActivityReference> askNewParent(List<ActivityLonglinePairingResultItem> pairingResult) { - - JaxxComboBox<ActivityLonglinePairingResultItem> editor = UIHelper.newJaxxComboBox( - ActivityLonglinePairingResultItem.class, - decorator, - new ArrayList<>(pairingResult)); - - String continueActionText = t("observe.choice.continue"); - Object[] options = {continueActionText, t("observe.choice.cancel")}; - JPanel panel = new JPanel(new BorderLayout()); - panel.add(BorderLayout.NORTH, new JLabel(t("observe.data.ll.logbook.Activity.action.chooseRelatedObservedActivity.message"))); - panel.add(BorderLayout.CENTER, editor); - - JOptionPane pane = new JOptionPane(panel, JOptionPane.QUESTION_MESSAGE, JOptionPane.DEFAULT_OPTION, null, options, options[0]) { - @Override - public void selectInitialValue() { - if (editor.getModel().getData().size() == 1) { - editor.setSelectedItem(editor.getModel().getData().get(0)); - } - editor.requestFocusInWindow(); - } - }; - - JButton jButton = UsageUIHandlerSupport.findButton(pane, continueActionText); - Objects.requireNonNull(jButton); - jButton.setEnabled(false); - editor.addPropertyChangeListener("selectedItem", evt -> jButton.setEnabled(evt.getNewValue() != null)); - - int response = UIHelper.askUser(ClientUIContextApplicationComponent.value().getMainUI(), pane, t("observe.data.ll.logbook.Activity.action.chooseRelatedObservedActivity.title"), options); - - ActivityLonglinePairingResultItem newActivityLonglineObs = null; - if (response == 0) { - newActivityLonglineObs = editor.getComboBoxModel().getSelectedItem(); - log.info(String.format("Selected new related observed activity id: %s", newActivityLonglineObs)); - } else { - log.info("Use cancel choice of related observed activity"); - } - return Optional.ofNullable(newActivityLonglineObs).map(ActivityLonglinePairingResultItem::getObservationActivity); - } - -} - ===================================== client-datasource-editor-ll/src/main/java/fr/ird/observe/client/datasource/editor/content/data/ll/observation/ActivityUI.jcss ===================================== @@ -29,8 +29,8 @@ } #timeStamp { - propertyDayDate:{ActivityUIModel.PROPERTY_DATE}; - propertyTimeDate:{ActivityUIModel.PROPERTY_TIME}; + propertyDayDate:{ActivityDto.PROPERTY_DATE}; + propertyTimeDate:{ActivityDto.PROPERTY_TIME}; } #vesselActivity { @@ -51,5 +51,5 @@ } #addSet { - enabled:{!model.isModified() && model.isValid() && model.isSetOperation() && ! bean.isHasSet()}; + enabled:{!model.isModified() && model.isValid() && bean.isSetOperation() && ! bean.isHasSet()}; } ===================================== client-datasource-editor-ll/src/main/java/fr/ird/observe/client/datasource/editor/content/data/ll/observation/ActivityUIModel.java ===================================== @@ -25,12 +25,7 @@ package fr.ird.observe.client.datasource.editor.content.data.ll.observation; import fr.ird.observe.client.datasource.editor.content.data.open.ContentOpenableUIModel; import fr.ird.observe.dto.data.ll.observation.ActivityDto; import fr.ird.observe.dto.data.ll.observation.ActivityReference; -import fr.ird.observe.dto.referential.ll.common.VesselActivityHelper; -import fr.ird.observe.dto.referential.ll.common.VesselActivityReference; import io.ultreia.java4all.i18n.I18n; -import org.nuiton.util.DateUtil; - -import java.util.Date; /** * Created on 9/26/14. @@ -40,47 +35,8 @@ import java.util.Date; */ public class ActivityUIModel extends ContentOpenableUIModel<ActivityDto, ActivityReference> { - public static final String PROPERTY_SET_OPERATION = "setOperation"; - public static final String PROPERTY_DATE = "date"; - public static final String PROPERTY_TIME = "time"; - public ActivityUIModel() { super(ActivityDto.class, I18n.n("observe.data.ll.observation.Activity.message.not.open")); - - getBean().addPropertyChangeListener(ActivityDto.PROPERTY_VESSEL_ACTIVITY, evt -> { - boolean oldValue = VesselActivityHelper.isSetOperation((VesselActivityReference) evt.getOldValue()); - boolean newValue = VesselActivityHelper.isSetOperation((VesselActivityReference) evt.getNewValue()); - firePropertyChange(PROPERTY_SET_OPERATION, oldValue, newValue); - }); - } - - public boolean isSetOperation() { - return VesselActivityHelper.isSetOperation(getBean().getVesselActivity()); - } - - public Date getDate() { - Date timeStamp = getBean().getTimeStamp(); - return timeStamp == null ? null : DateUtil.getDay(timeStamp); - } - - public void setDate(Date date) { - Date timeStamp = getBean().getTimeStamp(); - if (timeStamp != null) { - Date dateAndTime = date == null ? timeStamp : DateUtil.getDateAndTime(date, timeStamp, true, false); - getBean().setTimeStamp(dateAndTime); - } - } - - public Date getTime() { - Date timeStamp = getBean().getTimeStamp(); - return timeStamp == null ? null : DateUtil.getTime(timeStamp, false, false); - } - - public void setTime(Date time) { - Date timeStamp = getBean().getTimeStamp(); - if (timeStamp != null) { - Date dateAndTime = time == null ? timeStamp : DateUtil.getDateAndTime(timeStamp, time, false, false); - getBean().setTimeStamp(dateAndTime); - } + getBean().attachSetOperationListener(); } } ===================================== dto/src/main/java/fr/ird/observe/dto/data/ActivityAware.java ===================================== @@ -24,16 +24,21 @@ package fr.ird.observe.dto.data; import fr.ird.observe.dto.DtoAndReferenceAware; import fr.ird.observe.dto.GPSPoint; +import fr.ird.observe.dto.referential.ll.common.VesselActivityReference; +import io.ultreia.java4all.bean.JavaBean; import org.nuiton.util.DateUtil; import java.util.Date; +import java.util.Optional; /** * Created by tchemit on 15/10/2018. * * @author Tony Chemit - dev@tchemit.fr */ -public interface ActivityAware extends DtoAndReferenceAware { +public interface ActivityAware extends DtoAndReferenceAware, JavaBean { + + String PROPERTY_SET_OPERATION = "setOperation"; static GPSPoint newGPSPoint(ActivityAware a) { GPSPoint gpsPoint = new GPSPoint(); @@ -57,5 +62,23 @@ public interface ActivityAware extends DtoAndReferenceAware { Float getLongitude(); - String getVesselActivityId(); + VesselActivityReference getVesselActivity(); + + default String getVesselActivityId() { + return Optional.ofNullable(getVesselActivity()).map(VesselActivityReference::getId).orElse(null); + } + default String getVesselActivityLabel() { + return Optional.ofNullable(getVesselActivity()).map(VesselActivityReference::getLabel).orElse(null); + } + + boolean isSetOperation(); + + + static boolean isSetOperation(ActivityAware activity) { + return isSetOperation(activity.getVesselActivity()); + } + + static boolean isSetOperation(VesselActivityReference activity) { + return Optional.ofNullable(activity).map(VesselActivityReference::isSetOperation).orElse(false); + } } ===================================== dto/src/main/java/fr/ird/observe/dto/data/ll/logbook/ActivityDto.java ===================================== @@ -24,10 +24,14 @@ package fr.ird.observe.dto.data.ll.logbook; import fr.ird.observe.dto.GPSPoint; import fr.ird.observe.dto.data.ActivityAware; +import fr.ird.observe.dto.referential.ll.common.VesselActivityReference; import io.ultreia.java4all.bean.spi.GenerateJavaBeanDefinition; import org.nuiton.util.DateUtil; +import java.beans.PropertyChangeEvent; +import java.beans.PropertyChangeListener; import java.util.Date; +import java.util.Optional; @GenerateJavaBeanDefinition public class ActivityDto extends GeneratedActivityDto { @@ -37,6 +41,7 @@ public class ActivityDto extends GeneratedActivityDto { public static final String PROPERTY_END_DATE = "endDate"; public static final String PROPERTY_END_TIME = "endTime"; private static final long serialVersionUID = 1L; + private PropertyChangeListener setOperationListener; public Date getStartDate() { return startTimeStamp == null ? null : DateUtil.getDay(startTimeStamp); @@ -110,13 +115,42 @@ public class ActivityDto extends GeneratedActivityDto { return ActivityAware.newGPSPoint(this); } + public boolean isHasSample() { + return sample != null; + } + @Override - public String getVesselActivityId() { - return vesselActivity == null ? null : vesselActivity.getId(); + public boolean isSetOperation() { + return ActivityAware.isSetOperation(this); } - public boolean isHasSample() { - return sample != null; + public void attachSetOperationListener() { + if (setOperationListener == null) { + setOperationListener = new SetOperationListener(this); + } + removePropertyChangeListener(PROPERTY_VESSEL_ACTIVITY, setOperationListener); + addPropertyChangeListener(PROPERTY_VESSEL_ACTIVITY, setOperationListener); + fireSetOperation(false); + } + + public void fireSetOperation(boolean oldValue) { + firePropertyChange(PROPERTY_SET_OPERATION, oldValue, isSetOperation()); } + + static class SetOperationListener implements PropertyChangeListener { + + private final ActivityDto activity; + + SetOperationListener(ActivityDto activity) { + this.activity = activity; + } + + @Override + public void propertyChange(PropertyChangeEvent evt) { + Optional<VesselActivityReference> oldVesselActivity = Optional.ofNullable((VesselActivityReference) evt.getOldValue()); + boolean oldValue = oldVesselActivity.map(VesselActivityReference::isSetOperation).orElse(false); + activity.fireSetOperation(oldValue); + } + } } ===================================== dto/src/main/java/fr/ird/observe/dto/data/ll/logbook/ActivityReference.java ===================================== @@ -25,21 +25,23 @@ package fr.ird.observe.dto.data.ll.logbook; import fr.ird.observe.dto.GPSPoint; import fr.ird.observe.dto.data.ActivityAware; import fr.ird.observe.dto.reference.DtoReferenceAware; +import fr.ird.observe.dto.referential.ll.common.VesselActivityReference; import io.ultreia.java4all.bean.spi.GenerateJavaBeanDefinition; import java.util.Date; +import java.util.Optional; @GenerateJavaBeanDefinition 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, fr.ird.observe.dto.data.ll.observation.ActivityReference activity) { - super(dto, startTimeStamp, endTimeStamp, latitude, longitude, vesselActivityId, vesselActivityLabel, set, sample, activity); + public ActivityReference(DtoReferenceAware dto, Date startTimeStamp, Date endTimeStamp, Float latitude, Float longitude, VesselActivityReference vesselActivity, SetReference set, SampleReference sample, fr.ird.observe.dto.data.ll.observation.ActivityReference activity) { + super(dto, startTimeStamp, endTimeStamp, latitude, longitude, vesselActivity, set, sample, activity); } public ActivityReference(DtoReferenceAware dto) { - this(dto, null, null, null, null, null, null, null, null, null); + this(dto, null, null, null, null, null, null, null, null); } @Override @@ -47,6 +49,21 @@ public class ActivityReference extends GeneratedActivityReference { return getStartTimeStamp(); } + @Override + public boolean isSetOperation() { + return ActivityAware.isSetOperation(this); + } + + @Override + public String getVesselActivityId() { + return Optional.ofNullable(getVesselActivity()).map(VesselActivityReference::getId).orElse(null); + } + + @Override + public String getVesselActivityLabel() { + return Optional.ofNullable(getVesselActivity()).map(VesselActivityReference::getLabel).orElse(null); + } + @Override public GPSPoint getGPSPoint() { if (gpsPoint == null) { ===================================== dto/src/main/java/fr/ird/observe/dto/data/ll/observation/ActivityDto.java ===================================== @@ -24,10 +24,14 @@ package fr.ird.observe.dto.data.ll.observation; import fr.ird.observe.dto.GPSPoint; import fr.ird.observe.dto.data.ActivityAware; +import fr.ird.observe.dto.referential.ll.common.VesselActivityReference; import io.ultreia.java4all.bean.spi.GenerateJavaBeanDefinition; import org.nuiton.util.DateUtil; +import java.beans.PropertyChangeEvent; +import java.beans.PropertyChangeListener; import java.util.Date; +import java.util.Optional; @GenerateJavaBeanDefinition public class ActivityDto extends GeneratedActivityDto { @@ -35,6 +39,7 @@ public class ActivityDto extends GeneratedActivityDto { public static final String PROPERTY_DATE = "date"; public static final String PROPERTY_TIME = "time"; private static final long serialVersionUID = 1L; + private ActivityDto.SetOperationListener setOperationListener; public Date getDate() { return timeStamp == null ? null : DateUtil.getDay(timeStamp); @@ -73,7 +78,36 @@ public class ActivityDto extends GeneratedActivityDto { } @Override - public String getVesselActivityId() { - return vesselActivity == null ? null : vesselActivity.getId(); + public boolean isSetOperation() { + return ActivityAware.isSetOperation(this); + } + + public void attachSetOperationListener() { + if (setOperationListener == null) { + setOperationListener = new SetOperationListener(this); + } + removePropertyChangeListener(PROPERTY_VESSEL_ACTIVITY, setOperationListener); + addPropertyChangeListener(PROPERTY_VESSEL_ACTIVITY, setOperationListener); + fireSetOperation(false); + } + + public void fireSetOperation(boolean oldValue) { + firePropertyChange(PROPERTY_SET_OPERATION, oldValue, isSetOperation()); + } + + static class SetOperationListener implements PropertyChangeListener { + + private final ActivityDto activity; + + SetOperationListener(ActivityDto activity) { + this.activity = activity; + } + + @Override + public void propertyChange(PropertyChangeEvent evt) { + Optional<VesselActivityReference> oldVesselActivity = Optional.ofNullable((VesselActivityReference) evt.getOldValue()); + boolean oldValue = oldVesselActivity.map(VesselActivityReference::isSetOperation).orElse(false); + activity.fireSetOperation(oldValue); + } } } ===================================== dto/src/main/java/fr/ird/observe/dto/data/ll/observation/ActivityReference.java ===================================== @@ -25,21 +25,23 @@ package fr.ird.observe.dto.data.ll.observation; import fr.ird.observe.dto.GPSPoint; import fr.ird.observe.dto.data.ActivityAware; import fr.ird.observe.dto.reference.DtoReferenceAware; +import fr.ird.observe.dto.referential.ll.common.VesselActivityReference; import io.ultreia.java4all.bean.spi.GenerateJavaBeanDefinition; import java.util.Date; +import java.util.Optional; @GenerateJavaBeanDefinition public class ActivityReference extends GeneratedActivityReference { private transient GPSPoint gpsPoint; - public ActivityReference(DtoReferenceAware dto, Date timeStamp, Float latitude, Float longitude, String vesselActivityId, String vesselActivityLabel, SetReference set) { - super(dto, timeStamp, latitude, longitude, vesselActivityId, vesselActivityLabel, set); + public ActivityReference(DtoReferenceAware dto, Date timeStamp, Float latitude, Float longitude, VesselActivityReference vesselActivity, SetReference set) { + super(dto, timeStamp, latitude, longitude, vesselActivity, set); } public ActivityReference(DtoReferenceAware dto) { - this(dto, null, null, null, null, null, null); + this(dto, null, null, null, null, null); } @Override @@ -49,4 +51,19 @@ public class ActivityReference extends GeneratedActivityReference { } return gpsPoint; } + + @Override + public String getVesselActivityId() { + return Optional.ofNullable(getVesselActivity()).map(VesselActivityReference::getId).orElse(null); + } + + @Override + public String getVesselActivityLabel() { + return Optional.ofNullable(getVesselActivity()).map(VesselActivityReference::getLabel).orElse(null); + } + + @Override + public boolean isSetOperation() { + return ActivityAware.isSetOperation(this); + } } ===================================== dto/src/main/java/fr/ird/observe/dto/referential/ll/common/VesselActivityHelper.java → dto/src/main/java/fr/ird/observe/dto/referential/ll/common/VesselActivityReference.java ===================================== @@ -23,16 +23,21 @@ package fr.ird.observe.dto.referential.ll.common; */ import fr.ird.observe.dto.ProtectedIds; +import io.ultreia.java4all.bean.spi.GenerateJavaBeanDefinition; -public class VesselActivityHelper extends GeneratedVesselActivityHelper { +@GenerateJavaBeanDefinition +public class VesselActivityReference extends GeneratedVesselActivityReference { + + public VesselActivityReference(fr.ird.observe.dto.reference.ReferentialDtoReferenceAware dto, java.lang.String code, String label, java.lang.String uri) { + super(dto, code, label, uri); + } public static boolean isSetOperation(String id) { return ProtectedIds.LL_COMMON_VESSEL_ACTIVITY_ID_FOR_SET.equals(id); } - public static boolean isSetOperation(VesselActivityReference reference) { - return reference != null && isSetOperation(reference.getId()); + public boolean isSetOperation() { + return isSetOperation(getId()); } - -} //VesselActivityLonglineHelper +} ===================================== dto/src/main/models/Observe-30-data-ll-observation.model ===================================== @@ -6,7 +6,7 @@ interface data.ll.observation.LonglinePositionAwareDto interface data.ll.observation.LonglinePositionSetDto -data.ll.observation.Activity > data.Openable >> data.ActivityAware | references=timeStamp,latitude,longitude,vesselActivityId,vesselActivityLabel,set +data.ll.observation.Activity > data.Openable >> data.ActivityAware | references=timeStamp,latitude,longitude,vesselActivity,set timeStamp + {*:1} Date latitude + {*:1} Float | notNull longitude + {*:1} Float | notNull ===================================== 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,relatedObservedActivity +data.ll.logbook.Activity > data.Openable >> data.ActivityAware | references=startTimeStamp,endTimeStamp,latitude,longitude,vesselActivity,set,sample,relatedObservedActivity startTimeStamp + {*:1} Date | notNull endTimeStamp + {*:1} Date | mayNotNull latitude + {*:1} Float | mayNotNull ===================================== persistence/src/main/java/fr/ird/observe/entities/data/ll/common/TripImpl.java ===================================== @@ -25,7 +25,7 @@ package fr.ird.observe.entities.data.ll.common; import fr.ird.observe.dto.data.DataDto; import fr.ird.observe.dto.data.ll.common.TripDto; import fr.ird.observe.dto.referential.ReferentialLocale; -import fr.ird.observe.dto.referential.ll.common.VesselActivityHelper; +import fr.ird.observe.entities.data.ActivityAware; /** * Created on 8/27/14. @@ -93,10 +93,10 @@ public class TripImpl extends TripAbstract { private int computeTotalFishingOperationsNumber() { int result = 0; if (isActivityLogbookNotEmpty()) { - result += activityLogbook.stream().filter(f -> VesselActivityHelper.isSetOperation(f.getVesselActivity().getTopiaId())).count(); + result += activityLogbook.stream().filter(ActivityAware::isSetOperation).count(); } if (isActivityObsNotEmpty()) { - result += activityObs.stream().filter(f -> VesselActivityHelper.isSetOperation(f.getVesselActivity().getTopiaId())).count(); + result += activityObs.stream().filter(ActivityAware::isSetOperation).count(); } return result; } ===================================== persistence/src/main/java/fr/ird/observe/entities/data/ll/logbook/ActivityImpl.java ===================================== @@ -29,6 +29,7 @@ import fr.ird.observe.dto.data.DataDto; import fr.ird.observe.dto.data.ll.logbook.ActivityDto; import fr.ird.observe.dto.data.ll.logbook.ActivityStubDto; import fr.ird.observe.dto.referential.ReferentialLocale; +import fr.ird.observe.dto.referential.ll.common.VesselActivityDto; import fr.ird.observe.entities.referential.ll.common.VesselActivity; import org.nuiton.util.DateUtil; @@ -85,10 +86,8 @@ public class ActivityImpl extends ActivityAbstract { @Override public void setVesselActivity(VesselActivity vesselActivity) { - super.setVesselActivity(vesselActivity); fireOnPostWrite("setOperation", null, isSetOperation()); - } @Override View it on GitLab: https://gitlab.com/ultreiaio/ird-observe/-/commit/c2eb9b53772afc1c6cf31b639d... -- View it on GitLab: https://gitlab.com/ultreiaio/ird-observe/-/commit/c2eb9b53772afc1c6cf31b639d... You're receiving this email because of your account on gitlab.com.