Tony CHEMIT pushed to branch develop at ultreiaio / ird-observe

Commits:

19 changed files:

Changes:

  • client/src/main/java/fr/ird/observe/client/navigation/RouteCloseCallback.java
    ... ... @@ -43,6 +43,7 @@ import org.nuiton.util.DateUtil;
    43 43
     
    
    44 44
     import javax.swing.JOptionPane;
    
    45 45
     import javax.swing.tree.MutableTreeNode;
    
    46
    +import java.util.Objects;
    
    46 47
     
    
    47 48
     import static fr.ird.observe.client.ui.content.api.ContentUIHandler.getNavigationTree;
    
    48 49
     import static org.nuiton.i18n.I18n.t;
    
    ... ... @@ -75,7 +76,7 @@ public class RouteCloseCallback implements ObserveEditNodeCloseCallback {
    75 76
                 return;
    
    76 77
             }
    
    77 78
     
    
    78
    -        boolean activityFinDeVeilleFound = mainDataSource.getRouteService().isActivityFinDeVeilleFound(node.getId());
    
    79
    +        boolean activityFinDeVeilleFound = mainDataSource.getRouteService().isActivityFinDeVeilleFound(Objects.requireNonNull(node.getId()));
    
    79 80
     
    
    80 81
             // on doit vérifier qu'il existe une activité de fin de veille (type activity vessel == 16)
    
    81 82
     
    

  • client/src/main/java/fr/ird/observe/client/ui/ObserveKeyStrokes.java
    ... ... @@ -75,6 +75,7 @@ public abstract class ObserveKeyStrokes {
    75 75
         public static final KeyStroke KEY_STROKE_CONFIGURE_SYNCHRO_FROM_BOTH = KeyStroke.getKeyStroke("ctrl pressed C");
    
    76 76
     
    
    77 77
         public static final KeyStroke KEY_STROKE_COPY_VALUES_AND_SAVE = KeyStroke.getKeyStroke("ctrl pressed T");
    
    78
    +    public static final KeyStroke KEY_STROKE_CHOOSE_RELATED_OBSERVATION_ACTIVITY = KeyStroke.getKeyStroke("ctrl pressed T");
    
    78 79
         public static final KeyStroke KEY_STROKE_SELECT_TRANSSHIPMENT = KeyStroke.getKeyStroke("ctrl pressed T");
    
    79 80
         public static final KeyStroke KEY_STROKE_SAVE_TABLE_ENTRY = KeyStroke.getKeyStroke("ctrl pressed S");
    
    80 81
         public static final KeyStroke KEY_STROKE_PRESSED_ENTER = KeyStroke.getKeyStroke("pressed ENTER");
    

  • client/src/main/java/fr/ird/observe/client/ui/actions/content/api/data/open/CloseOpenDataUIAction.java
    ... ... @@ -33,16 +33,18 @@ import fr.ird.observe.client.ui.content.api.data.open.ContentOpenableUIModel;
    33 33
     import fr.ird.observe.client.ui.tree.navigation.NavigationTree;
    
    34 34
     import fr.ird.observe.client.ui.util.UIHelper;
    
    35 35
     import fr.ird.observe.dto.data.DataDto;
    
    36
    -import fr.ird.observe.dto.data.longline.TripLonglineDto;
    
    37
    -import fr.ird.observe.dto.data.seine.TripSeineDto;
    
    38 36
     import fr.ird.observe.dto.reference.DataDtoReference;
    
    39 37
     import fr.ird.observe.navigation.model.edit.CloseEditNodeRequest;
    
    40 38
     import fr.ird.observe.navigation.model.edit.CloseEditNodeVetoException;
    
    41 39
     import fr.ird.observe.navigation.model.edit.ObserveEditModelManager;
    
    42 40
     import fr.ird.observe.navigation.model.edit.ObserveEditNode;
    
    41
    +import org.apache.logging.log4j.LogManager;
    
    42
    +import org.apache.logging.log4j.Logger;
    
    43 43
     import org.nuiton.validator.NuitonValidatorScope;
    
    44 44
     
    
    45
    -import static fr.ird.observe.client.ui.content.api.ContentUIHandler.getNavigationTree;
    
    45
    +import javax.swing.tree.MutableTreeNode;
    
    46
    +import javax.swing.tree.TreeNode;
    
    47
    +
    
    46 48
     import static fr.ird.observe.client.ui.content.api.ContentUIHandler.removeAllMessages;
    
    47 49
     import static fr.ird.observe.dto.decoration.ObserveI18nDecoratorHelper.getTypeI18nKey;
    
    48 50
     import static org.nuiton.i18n.I18n.n;
    
    ... ... @@ -58,6 +60,7 @@ public class CloseOpenDataUIAction extends AbstractContentUIAction {
    58 60
     
    
    59 61
         public static final String ACTION_NAME = CloseOpenDataUIAction.class.getName();
    
    60 62
         private static final long serialVersionUID = 1L;
    
    63
    +    private static final Logger log = LogManager.getLogger(CloseOpenDataUIAction.class);
    
    61 64
     
    
    62 65
         public CloseOpenDataUIAction(ObserveMainUI mainUI) {
    
    63 66
             super(mainUI, ACTION_NAME,
    
    ... ... @@ -75,7 +78,12 @@ public class CloseOpenDataUIAction extends AbstractContentUIAction {
    75 78
             ObserveEditModelManager navigationEditManager = applicationContext.getNavigationEditManager();
    
    76 79
             CloseEditNodeRequest closeRequest = navigationEditManager.createCloseEditNodeRequest(nodeToClose);
    
    77 80
             navigationEditManager.applyCloseEditNodeRequest(closeRequest);
    
    78
    -        ObserveSwingApplicationContext.get().saveNavigationToConfig(false);
    
    81
    +        applicationContext.saveNavigationToConfig(false);
    
    82
    +        NavigationTree tree = applicationContext.getMainUI().getNavigationUI().getTree();
    
    83
    +        TreeNode[] path = tree.getSelectedNode().getPath();
    
    84
    +        MutableTreeNode nodeToReload = (MutableTreeNode) path[path.length - 1];
    
    85
    +        log.info("Will reload node and all his children: " + nodeToReload);
    
    86
    +        tree.reloadNode(nodeToReload, true);
    
    79 87
         }
    
    80 88
     
    
    81 89
         @SuppressWarnings("unchecked")
    
    ... ... @@ -110,8 +118,8 @@ public class CloseOpenDataUIAction extends AbstractContentUIAction {
    110 118
             removeAllMessages(ui);
    
    111 119
             ContentUIHandler.addMessage(ui, NuitonValidatorScope.INFO, getTypeI18nKey(bean.getClass()), t(model.getCloseMessage()));
    
    112 120
     
    
    113
    -        NavigationTree treeHelper = getNavigationTree();
    
    114
    -        treeHelper.reloadSelectedNode(bean instanceof TripSeineDto || bean instanceof TripLonglineDto, true);
    
    121
    +//        NavigationTree treeHelper = getNavigationTree();
    
    122
    +//        treeHelper.reloadSelectedNode(bean instanceof TripSeineDto || bean instanceof TripLonglineDto, true);
    
    115 123
             ui.getHandler().updateActions();
    
    116 124
     
    
    117 125
             ui.getHandler().grabFocusOnForm();
    

  • client/src/main/java/fr/ird/observe/client/ui/actions/content/api/data/open/CreateOpenDataUIAction.java
    ... ... @@ -49,17 +49,14 @@ public class CreateOpenDataUIAction extends AbstractContentUIAction {
    49 49
         public static void closeAndCreate(MultipleReferenceContainerNode<?, ?> parentNode, NavigationTree tree, ContentEditUIModel<?, ?> model) {
    
    50 50
             try {
    
    51 51
                 CloseOpenDataUIAction.closeData(model.getEditNode());
    
    52
    +            tree.addUnsavedNode(parentNode);
    
    52 53
             } catch (CloseEditNodeVetoException e1) {
    
    53 54
                 UIHelper.handlingError(e1);
    
    54
    -            return;
    
    55 55
             }
    
    56
    -
    
    57
    -        tree.addUnsavedNode(parentNode);
    
    58 56
         }
    
    59 57
     
    
    60 58
         @Override
    
    61 59
         protected void actionPerformed(ContentUI contentUI) {
    
    62
    -
    
    63 60
             MultipleReferenceContainerNode<?, ?> parentNode;
    
    64 61
             NavigationTree tree = getMainUI().getNavigationUI().getTree();
    
    65 62
             ContentEditUIModel<?, ?> model;
    

  • client/src/main/java/fr/ird/observe/client/ui/actions/content/api/data/open/MoveSingleDataUIActionSupport.java
    ... ... @@ -137,10 +137,6 @@ public abstract class MoveSingleDataUIActionSupport<ChildDto extends IdDto, Chil
    137 137
     
    
    138 138
         protected void closeNode(ObserveEditNode<?> editNode) throws CloseEditNodeVetoException {
    
    139 139
             CloseOpenDataUIAction.closeData(editNode);
    
    140
    -//        String id = editNode.getId();
    
    141
    -//        if (dataId.equals(id)) {
    
    142
    -//            editNode.setId(null);
    
    143
    -//        }
    
    144 140
         }
    
    145 141
     
    
    146 142
         protected void adaptNavigationTree(NavigationTree tree, R request, DtoReference newParentReference) {
    

  • client/src/main/java/fr/ird/observe/client/ui/actions/content/data/longline/ChooseRelatedObservedActivityUIAction.java
    1
    +package fr.ird.observe.client.ui.actions.content.data.longline;
    
    2
    +
    
    3
    +/*-
    
    4
    + * #%L
    
    5
    + * ObServe :: Client
    
    6
    + * %%
    
    7
    + * Copyright (C) 2008 - 2018 IRD, Code Lutin, Ultreia.io
    
    8
    + * %%
    
    9
    + * This program is free software: you can redistribute it and/or modify
    
    10
    + * it under the terms of the GNU General Public License as
    
    11
    + * published by the Free Software Foundation, either version 3 of the
    
    12
    + * License, or (at your option) any later version.
    
    13
    + *
    
    14
    + * This program is distributed in the hope that it will be useful,
    
    15
    + * but WITHOUT ANY WARRANTY; without even the implied warranty of
    
    16
    + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
    
    17
    + * GNU General Public License for more details.
    
    18
    + *
    
    19
    + * You should have received a copy of the GNU General Public
    
    20
    + * License along with this program.  If not, see
    
    21
    + * <http://www.gnu.org/licenses/gpl-3.0.html>.
    
    22
    + * #L%
    
    23
    + */
    
    24
    +
    
    25
    +import fr.ird.observe.client.ObserveSwingApplicationContext;
    
    26
    +import fr.ird.observe.client.ui.ObserveKeyStrokes;
    
    27
    +import fr.ird.observe.client.ui.ObserveMainUI;
    
    28
    +import fr.ird.observe.client.ui.actions.content.api.AbstractContentUIAction;
    
    29
    +import fr.ird.observe.client.ui.content.api.ContentUI;
    
    30
    +import fr.ird.observe.client.ui.content.data.longline.logbook.ActivityLonglineLogbookUI;
    
    31
    +import fr.ird.observe.client.ui.content.data.longline.logbook.ActivityLonglineLogbookUIModel;
    
    32
    +import fr.ird.observe.client.ui.content.ref.usage.UsageUIHandlerSupport;
    
    33
    +import fr.ird.observe.client.ui.util.UIHelper;
    
    34
    +import fr.ird.observe.dto.data.longline.ActivityLonglineLogbookDto;
    
    35
    +import fr.ird.observe.dto.data.longline.ActivityLonglineObsDto;
    
    36
    +import fr.ird.observe.dto.data.longline.ActivityLonglineObsReference;
    
    37
    +import fr.ird.observe.dto.data.pairing.ActivityLonglinePairingResult;
    
    38
    +import fr.ird.observe.dto.data.pairing.ActivityLonglinePairingResultItem;
    
    39
    +import fr.ird.observe.dto.decoration.ObserveI18nLabelsBuilder;
    
    40
    +import fr.ird.observe.services.service.actions.pairing.ActivityLonglinePairingConfig;
    
    41
    +import fr.ird.observe.services.service.actions.pairing.ActivityLonglinePairingEngine;
    
    42
    +import fr.ird.observe.services.service.actions.pairing.TripLonglinePairingContext;
    
    43
    +import org.apache.logging.log4j.LogManager;
    
    44
    +import org.apache.logging.log4j.Logger;
    
    45
    +import org.nuiton.decorator.JXPathDecorator;
    
    46
    +import org.nuiton.jaxx.widgets.select.BeanFilterableComboBox;
    
    47
    +
    
    48
    +import javax.swing.JButton;
    
    49
    +import javax.swing.JLabel;
    
    50
    +import javax.swing.JOptionPane;
    
    51
    +import javax.swing.JPanel;
    
    52
    +import java.awt.BorderLayout;
    
    53
    +import java.util.List;
    
    54
    +import java.util.Objects;
    
    55
    +import java.util.Optional;
    
    56
    +
    
    57
    +import static org.nuiton.i18n.I18n.n;
    
    58
    +import static org.nuiton.i18n.I18n.t;
    
    59
    +
    
    60
    +/**
    
    61
    + * Created by tchemit on 16/10/2018.
    
    62
    + *
    
    63
    + * @author Tony Chemit - dev@tchemit.fr
    
    64
    + */
    
    65
    +public class ChooseRelatedObservedActivityUIAction extends AbstractContentUIAction {
    
    66
    +
    
    67
    +    public static final String ACTION_NAME = ChooseRelatedObservedActivityUIAction.class.getName();
    
    68
    +    private static final Logger log = LogManager.getLogger(ChooseRelatedObservedActivityUIAction.class);
    
    69
    +
    
    70
    +    public ChooseRelatedObservedActivityUIAction(ObserveMainUI mainUI) {
    
    71
    +        super(mainUI, ACTION_NAME, n("observe.common.ActivityLonglineLogbookDto.action.chooseRelatedObservedActivity"), n("observe.common.ActivityLonglineLogbookDto.action.chooseRelatedObservedActivity"), "data-calcule", ObserveKeyStrokes.KEY_STROKE_CHOOSE_RELATED_OBSERVATION_ACTIVITY);
    
    72
    +    }
    
    73
    +
    
    74
    +    @Override
    
    75
    +    protected void actionPerformed(ContentUI contentUI) {
    
    76
    +
    
    77
    +        ActivityLonglineLogbookUI ui = (ActivityLonglineLogbookUI) contentUI;
    
    78
    +        ActivityLonglineLogbookUIModel model = ui.getModel();
    
    79
    +
    
    80
    +        ActivityLonglinePairingEngine pairingEngine = new ActivityLonglinePairingEngine(getServicesProvider(), ui.getConfig());
    
    81
    +
    
    82
    +        ActivityLonglineLogbookDto bean = model.getBean();
    
    83
    +
    
    84
    +        TripLonglinePairingContext pairingContext = pairingEngine.newTripContext(model.getSelectedParentId(), model.getAllActivityObs());
    
    85
    +
    
    86
    +        ActivityLonglinePairingResult activityLonglinePairingResult = pairingEngine.computeForActivityLogbook(pairingContext, bean);
    
    87
    +
    
    88
    +        Optional<ActivityLonglineObsReference> optionalActivityLonglineObs = askNewParent(activityLonglinePairingResult.getItems(), pairingEngine.getConfig());
    
    89
    +
    
    90
    +        if (optionalActivityLonglineObs.isPresent()) {
    
    91
    +            ActivityLonglineObsReference activityLonglineObs = optionalActivityLonglineObs.get();
    
    92
    +            log.info("will use new related activity obs: " + activityLonglineObs);
    
    93
    +            bean.setRelatedObservedActivity(activityLonglineObs);
    
    94
    +        }
    
    95
    +
    
    96
    +    }
    
    97
    +
    
    98
    +    private Optional<ActivityLonglineObsReference> askNewParent(List<ActivityLonglinePairingResultItem> pairingResult, ActivityLonglinePairingConfig pairingConfig) {
    
    99
    +
    
    100
    +        BeanFilterableComboBox<ActivityLonglinePairingResultItem> editor = new BeanFilterableComboBox<>();
    
    101
    +        editor.setI18nPrefix("observe.common.");
    
    102
    +        editor.setBeanType(ActivityLonglinePairingResultItem.class);
    
    103
    +        editor.setI18nLabelBuilder(ObserveI18nLabelsBuilder.createFromReferenceType(ActivityLonglineObsDto.class));
    
    104
    +
    
    105
    +        editor.init((JXPathDecorator<ActivityLonglinePairingResultItem>) ObserveSwingApplicationContext.get().getDecoratorService().getDecoratorByType(ActivityLonglinePairingResultItem.class), pairingResult);
    
    106
    +
    
    107
    +//        JComboBox combobox = editor.getCombobox();
    
    108
    +//        @SuppressWarnings("unchecked") ListCellRenderer toolTipRenderer = new ComboBoxListCellRenderer(combobox.getRenderer());
    
    109
    +//        combobox.setRenderer(toolTipRenderer);
    
    110
    +
    
    111
    +        String continueActionText = t("observe.choice.continue");
    
    112
    +        Object[] options = {continueActionText, t("observe.choice.cancel")};
    
    113
    +        JPanel panel = new JPanel(new BorderLayout());
    
    114
    +        panel.add(BorderLayout.NORTH, new JLabel(t("observe.common.ActivityLonglineLogbookDto.action.chooseRelatedObservedActivity.message",
    
    115
    +                                                   pairingConfig.getLonglineActivityPairingMaxTime(), pairingConfig.getLonglineActivityPairingMaxDistance())));
    
    116
    +        panel.add(BorderLayout.CENTER, editor);
    
    117
    +
    
    118
    +        JOptionPane pane = new JOptionPane(panel, JOptionPane.QUESTION_MESSAGE, JOptionPane.DEFAULT_OPTION, null, options, options[0]);
    
    119
    +
    
    120
    +        JButton jButton = UsageUIHandlerSupport.findButton(pane, continueActionText);
    
    121
    +        Objects.requireNonNull(jButton);
    
    122
    +        jButton.setEnabled(false);
    
    123
    +        editor.addPropertyChangeListener("selectedItem", evt -> jButton.setEnabled(evt.getNewValue() != null));
    
    124
    +
    
    125
    +        int response = UIHelper.askUser(ObserveSwingApplicationContext.get().getMainUI(), pane, t("observe.common.ActivityLonglineLogbookDto.action.chooseRelatedObservedActivity.title"), options);
    
    126
    +
    
    127
    +        ActivityLonglinePairingResultItem newActivityLonglineObs = null;
    
    128
    +        switch (response) {
    
    129
    +            case 0:
    
    130
    +                newActivityLonglineObs = editor.getComboBoxModel().getSelectedItem();
    
    131
    +                log.info(String.format("Selected new related observed activity id: %s", newActivityLonglineObs));
    
    132
    +                break;
    
    133
    +            default:
    
    134
    +                log.info("Use cancel choice of related observed activity");
    
    135
    +        }
    
    136
    +        return Optional.ofNullable(newActivityLonglineObs).map(ActivityLonglinePairingResultItem::getObservationActivity);
    
    137
    +    }
    
    138
    +
    
    139
    +}
    
    140
    +

  • client/src/main/java/fr/ird/observe/client/ui/content/data/longline/logbook/ActivityLonglineLogbookUI.jaxx
    ... ... @@ -41,6 +41,7 @@
    41 41
         fr.ird.observe.client.ui.actions.content.data.longline.delete.DeleteActivityLonglineLogbookUIAction
    
    42 42
         fr.ird.observe.client.ui.actions.content.data.longline.move.MoveSingleActivityLonglineLogbookUIAction
    
    43 43
         fr.ird.observe.client.ui.actions.content.data.longline.save.SaveActivityLonglineLogbookUIAction
    
    44
    +    fr.ird.observe.client.ui.actions.content.data.longline.ChooseRelatedObservedActivityUIAction
    
    44 45
     
    
    45 46
         fr.ird.observe.dto.data.pairing.ActivityLonglinePairingResultItem
    
    46 47
     
    
    ... ... @@ -190,7 +191,10 @@
    190 191
               <JLabel id='relatedObservedActivityLabel'/>
    
    191 192
             </cell>
    
    192 193
             <cell anchor='east' fill="both">
    
    193
    -          <BeanFilterableComboBox id='relatedObservedActivity' genericType='ActivityLonglinePairingResultItem' constructorParams='this'/>
    
    194
    +          <JPanel layout="{new BorderLayout()}">
    
    195
    +            <BeanFilterableComboBox id='relatedObservedActivity' genericType='ActivityLonglineObsReference' constructorParams='this' constraints='BorderLayout.CENTER'/>
    
    196
    +            <JButton id='chooseRelatedObservedActivity' constraints='BorderLayout.EAST'/>
    
    197
    +          </JPanel>
    
    194 198
             </cell>
    
    195 199
           </row>
    
    196 200
     
    

  • client/src/main/java/fr/ird/observe/client/ui/content/data/longline/logbook/ActivityLonglineLogbookUI.jcss
    ... ... @@ -84,10 +84,8 @@
    84 84
     
    
    85 85
     #relatedObservedActivity {
    
    86 86
       _listNoLoad:true;
    
    87
    -  bean:{model};
    
    88
    -  property:activityObs;
    
    89
    -  data:{model.getActivityObsCandidates()};
    
    90
    -  selectedItem:{model.getActivityObs()};
    
    87
    +  data:{model.getActivityObs()};
    
    88
    +  selectedItem:{bean.getRelatedObservedActivity()};
    
    91 89
     }
    
    92 90
     
    
    93 91
     #reopen {
    
    ... ... @@ -119,3 +117,9 @@
    119 117
       enabled:{!model.isModified() && model.isValid() && model.isSetOperation() && ! bean.isHasSetLongline()};
    
    120 118
       _observeAction:{AddActivityLonglineLogbookSetUIAction.ACTION_NAME};
    
    121 119
     }
    
    120
    +
    
    121
    +#chooseRelatedObservedActivity {
    
    122
    +  visible:{!model.isReadingMode()};
    
    123
    +  enabled:{model.isValid()};
    
    124
    +  _observeAction:{ChooseRelatedObservedActivityUIAction.ACTION_NAME};
    
    125
    +}
    \ No newline at end of file

  • client/src/main/java/fr/ird/observe/client/ui/content/data/longline/logbook/ActivityLonglineLogbookUIHandler.java
    ... ... @@ -22,44 +22,19 @@ package fr.ird.observe.client.ui.content.data.longline.logbook;
    22 22
      * #L%
    
    23 23
      */
    
    24 24
     
    
    25
    -import com.google.common.collect.ImmutableSet;
    
    26 25
     import fr.ird.observe.client.ui.content.api.data.open.ContentOpenableUIHandler;
    
    27
    -import fr.ird.observe.client.ui.content.api.data.open.ContentOpenableUIInitializer;
    
    28 26
     import fr.ird.observe.client.ui.content.api.ui.ObserveLayoutFocusTraversalPolicy;
    
    29 27
     import fr.ird.observe.dto.data.longline.ActivityLonglineLogbookDto;
    
    30 28
     import fr.ird.observe.dto.data.longline.ActivityLonglineLogbookReference;
    
    31
    -import fr.ird.observe.dto.data.longline.ActivityLonglineObsDto;
    
    32 29
     import fr.ird.observe.dto.data.longline.ActivityLonglineObsReference;
    
    33
    -import fr.ird.observe.dto.data.pairing.ActivityLonglinePairingResult;
    
    34
    -import fr.ird.observe.dto.data.pairing.ActivityLonglinePairingResultItem;
    
    35
    -import fr.ird.observe.dto.decoration.ObserveI18nDecoratorHelper;
    
    36
    -import fr.ird.observe.dto.decoration.ObserveI18nLabelsBuilder;
    
    37 30
     import fr.ird.observe.dto.form.Form;
    
    38
    -import fr.ird.observe.services.service.actions.pairing.ActivityLonglinePairingEngine;
    
    39
    -import fr.ird.observe.services.service.actions.pairing.TripLonglinePairingContext;
    
    40
    -import org.apache.commons.lang3.StringUtils;
    
    41 31
     import org.apache.logging.log4j.LogManager;
    
    42 32
     import org.apache.logging.log4j.Logger;
    
    43
    -import org.nuiton.decorator.Decorator;
    
    44
    -import org.nuiton.decorator.JXPathDecorator;
    
    45 33
     import org.nuiton.jaxx.runtime.spi.UIHandler;
    
    46
    -import org.nuiton.jaxx.widgets.select.BeanFilterableComboBox;
    
    47 34
     
    
    48
    -import javax.swing.JComboBox;
    
    49
    -import javax.swing.JComponent;
    
    50
    -import javax.swing.JLabel;
    
    51
    -import javax.swing.JList;
    
    52
    -import javax.swing.KeyStroke;
    
    53
    -import javax.swing.ListCellRenderer;
    
    54 35
     import java.awt.Component;
    
    55 36
     import java.awt.Container;
    
    56
    -import java.awt.Dimension;
    
    57
    -import java.awt.event.KeyEvent;
    
    58
    -import java.beans.PropertyChangeListener;
    
    59
    -import java.util.Collections;
    
    60
    -import java.util.Optional;
    
    61
    -
    
    62
    -import static org.nuiton.i18n.I18n.t;
    
    37
    +import java.util.List;
    
    63 38
     
    
    64 39
     /**
    
    65 40
      * Created on 8/29/14.
    
    ... ... @@ -69,65 +44,13 @@ import static org.nuiton.i18n.I18n.t;
    69 44
      */
    
    70 45
     class ActivityLonglineLogbookUIHandler extends ContentOpenableUIHandler<ActivityLonglineLogbookDto, ActivityLonglineLogbookReference, ActivityLonglineLogbookUI> implements UIHandler<ActivityLonglineLogbookUI> {
    
    71 46
     
    
    72
    -    private static final ImmutableSet<String> PAIRING_PROPERTIES = ImmutableSet.of(
    
    73
    -            ActivityLonglineLogbookDto.PROPERTY_LATITUDE,
    
    74
    -            ActivityLonglineLogbookDto.PROPERTY_LONGITUDE,
    
    75
    -            ActivityLonglineLogbookDto.PROPERTY_TIME_STAMP,
    
    76
    -            ActivityLonglineLogbookUIModel.PROPERTY_VALID);
    
    77
    -
    
    78 47
         private static final Logger log = LogManager.getLogger(ActivityLonglineLogbookUIHandler.class);
    
    79
    -    private final PropertyChangeListener onRecomputePairing;
    
    80
    -    private final PropertyChangeListener onActivityObsChanged;
    
    81
    -    private ActivityLonglinePairingEngine pairingEngine;
    
    82
    -    private boolean adjusting;
    
    83
    -
    
    84
    -    ActivityLonglineLogbookUIHandler() {
    
    85
    -        onRecomputePairing = e -> onRecomputePairing(e.getPropertyName());
    
    86
    -        onActivityObsChanged = e -> onActivityObsChanged();
    
    87
    -    }
    
    88 48
     
    
    89 49
         @Override
    
    90 50
         public ActivityLonglineLogbookUIModel getModel() {
    
    91 51
             return ui.getModel();
    
    92 52
         }
    
    93 53
     
    
    94
    -    @Override
    
    95
    -    protected ContentOpenableUIInitializer<ActivityLonglineLogbookUI> createContentUIInitializer(ActivityLonglineLogbookUI ui) {
    
    96
    -        return new ContentOpenableUIInitializer<ActivityLonglineLogbookUI>(ui) {
    
    97
    -
    
    98
    -            @SuppressWarnings("unchecked")
    
    99
    -            protected void init(BeanFilterableComboBox comboBox) {
    
    100
    -                if (!"relatedObservedActivity".equals(comboBox.getName())) {
    
    101
    -                    super.init(comboBox);
    
    102
    -                    return;
    
    103
    -                }
    
    104
    -
    
    105
    -                comboBox.getCombobox().getInputMap(JComponent.WHEN_ANCESTOR_OF_FOCUSED_COMPONENT).put(KeyStroke.getKeyStroke(KeyEvent.VK_F4, 0), "none");
    
    106
    -                Class referenceType = comboBox.getBeanType();
    
    107
    -                comboBox.setI18nLabelBuilder(ObserveI18nLabelsBuilder.createFromReferenceType(ActivityLonglineObsDto.class));
    
    108
    -                comboBox.setI18nPrefix("observe.common.");
    
    109
    -                comboBox.setMinimumSize(new Dimension(0, 24));
    
    110
    -
    
    111
    -                if (StringUtils.isEmpty(comboBox.getProperty())) {
    
    112
    -                    comboBox.setProperty(comboBox.getName());
    
    113
    -                }
    
    114
    -
    
    115
    -                log.info("Init relatedObservedActivity comboBox");
    
    116
    -                Decorator decorator = decoratorService.getDecoratorByType(referenceType);
    
    117
    -
    
    118
    -                String entityLabel = t(ObserveI18nDecoratorHelper.getTypeI18nKey(ActivityLonglineObsDto.class));
    
    119
    -                comboBox.setPopupTitleText(t("observe.common.DataDto.type", entityLabel));
    
    120
    -
    
    121
    -                comboBox.init((JXPathDecorator) decorator, Collections.emptyList());
    
    122
    -
    
    123
    -                JComboBox combobox = comboBox.getCombobox();
    
    124
    -
    
    125
    -                @SuppressWarnings("unchecked") ListCellRenderer toolTipRenderer = new ComboBoxListCellRenderer(combobox.getRenderer());
    
    126
    -                combobox.setRenderer(toolTipRenderer);
    
    127
    -            }
    
    128
    -        };
    
    129
    -    }
    
    130
    -
    
    131 54
         @Override
    
    132 55
         protected ObserveLayoutFocusTraversalPolicy<ActivityLonglineLogbookUI> createFocusTraversalPolicy() {
    
    133 56
             return new ObserveLayoutFocusTraversalPolicy<ActivityLonglineLogbookUI>() {
    
    ... ... @@ -148,101 +71,6 @@ class ActivityLonglineLogbookUIHandler extends ContentOpenableUIHandler<Activity
    148 71
             };
    
    149 72
         }
    
    150 73
     
    
    151
    -    @Override
    
    152
    -    public void afterInit(ActivityLonglineLogbookUI ui) {
    
    153
    -        super.afterInit(ui);
    
    154
    -        pairingEngine = getDataSource().newActivityLonglinePairingEngine(ui.getConfig());
    
    155
    -    }
    
    156
    -
    
    157
    -    private void onRecomputePairing(String propertyName) {
    
    158
    -        if (adjusting || !PAIRING_PROPERTIES.contains(propertyName)) {
    
    159
    -            return;
    
    160
    -        }
    
    161
    -        log.info(prefix + "Need to recompute pairing data.");
    
    162
    -        ActivityLonglineLogbookUIModel model = getModel();
    
    163
    -        if (!model.isValid()) {
    
    164
    -            log.info(prefix + "Reject: model is not valid.");
    
    165
    -            return;
    
    166
    -        }
    
    167
    -        adjusting = true;
    
    168
    -        try {
    
    169
    -            ActivityLonglineLogbookDto bean = model.getBean();
    
    170
    -            ActivityLonglinePairingResult activityLonglinePairingResult = pairingEngine.computeForActivityLogbook(model.getPairingContext(), bean);
    
    171
    -            ActivityLonglinePairingResultItem pairingActivityObs = model.getActivityObs();
    
    172
    -            ActivityLonglineObsReference relatedObservedActivity = model.getBean().getRelatedObservedActivity();
    
    173
    -
    
    174
    -            model.setActivityObsCandidates(activityLonglinePairingResult.getItems());
    
    175
    -
    
    176
    -            if (pairingActivityObs == null) {
    
    177
    -
    
    178
    -                if (relatedObservedActivity != null) {
    
    179
    -                    // use dto value
    
    180
    -                    Optional<ActivityLonglinePairingResultItem> first = model.getActivityObsCandidates().stream().filter(e -> e.getObservationActivity().equals(relatedObservedActivity)).findFirst();
    
    181
    -                    if (!first.isPresent()) {
    
    182
    -                        // Should never occurs ?
    
    183
    -                        bean.setRelatedObservedActivity(null);
    
    184
    -                    } else {
    
    185
    -                        pairingActivityObs = first.get();
    
    186
    -                        model.setActivityObs(pairingActivityObs);
    
    187
    -                        bean.setRelatedObservedActivity(pairingActivityObs.getObservationActivity());
    
    188
    -                    }
    
    189
    -                }
    
    190
    -            } else {
    
    191
    -                if (!model.getActivityObsCandidates().contains(pairingActivityObs)) {
    
    192
    -                    // can not keep this pairing,
    
    193
    -                    model.setActivityObs(null);
    
    194
    -                    bean.setRelatedObservedActivity(null);
    
    195
    -                } else {
    
    196
    -                    // keep this pairing
    
    197
    -                    // use pairing value
    
    198
    -                    bean.setRelatedObservedActivity(pairingActivityObs.getObservationActivity());
    
    199
    -                }
    
    200
    -            }
    
    201
    -        } finally {
    
    202
    -            adjusting = false;
    
    203
    -        }
    
    204
    -    }
    
    205
    -
    
    206
    -    private void onActivityObsChanged() {
    
    207
    -        if (adjusting) {
    
    208
    -            return;
    
    209
    -        }
    
    210
    -        adjusting = true;
    
    211
    -        try {
    
    212
    -            ActivityLonglineLogbookUIModel model = getModel();
    
    213
    -            ActivityLonglinePairingResultItem activityObs = model.getActivityObs();
    
    214
    -            model.getBean().setRelatedObservedActivity(activityObs == null ? null : activityObs.getObservationActivity());
    
    215
    -        } finally {
    
    216
    -            adjusting = false;
    
    217
    -        }
    
    218
    -    }
    
    219
    -
    
    220
    -    @Override
    
    221
    -    protected void onOpenBeforeOpenModel() {
    
    222
    -        ActivityLonglineLogbookUIModel model = getModel();
    
    223
    -        ActivityLonglineLogbookDto bean = model.getBean();
    
    224
    -        model.removePropertyChangeListener(ActivityLonglineLogbookUIModel.PROPERTY_VALID, onRecomputePairing);
    
    225
    -        bean.removePropertyChangeListener(ActivityLonglineLogbookDto.PROPERTY_LATITUDE, onRecomputePairing);
    
    226
    -        bean.removePropertyChangeListener(ActivityLonglineLogbookDto.PROPERTY_LONGITUDE, onRecomputePairing);
    
    227
    -        bean.removePropertyChangeListener(ActivityLonglineLogbookDto.PROPERTY_TIME_STAMP, onRecomputePairing);
    
    228
    -        bean.removePropertyChangeListener("activityObs", onActivityObsChanged);
    
    229
    -
    
    230
    -        super.onOpenBeforeOpenModel();
    
    231
    -    }
    
    232
    -
    
    233
    -    @Override
    
    234
    -    protected void onOpenAfterOpenModel() {
    
    235
    -        super.onOpenAfterOpenModel();
    
    236
    -        ActivityLonglineLogbookUIModel model = getModel();
    
    237
    -        ActivityLonglineLogbookDto bean = model.getBean();
    
    238
    -        model.addPropertyChangeListener(ActivityLonglineLogbookUIModel.PROPERTY_VALID, onRecomputePairing);
    
    239
    -        bean.addPropertyChangeListener(ActivityLonglineLogbookDto.PROPERTY_LATITUDE, onRecomputePairing);
    
    240
    -        bean.addPropertyChangeListener(ActivityLonglineLogbookDto.PROPERTY_LONGITUDE, onRecomputePairing);
    
    241
    -        bean.addPropertyChangeListener(ActivityLonglineLogbookDto.PROPERTY_TIME_STAMP, onRecomputePairing);
    
    242
    -        bean.addPropertyChangeListener("activityObs", onActivityObsChanged);
    
    243
    -        onRecomputePairing(ActivityLonglineLogbookUIModel.PROPERTY_VALID);
    
    244
    -    }
    
    245
    -
    
    246 74
         @Override
    
    247 75
         protected void onOpenModel() {
    
    248 76
             super.onOpenModel();
    
    ... ... @@ -260,37 +88,8 @@ class ActivityLonglineLogbookUIHandler extends ContentOpenableUIHandler<Activity
    260 88
                 form = getActivityLonglineLogbookService().loadForm(activityId);
    
    261 89
             }
    
    262 90
     
    
    263
    -        TripLonglinePairingContext pairingContext = pairingEngine.newTripContext(tripId);
    
    264
    -        model.openForm(form, pairingContext);
    
    91
    +        List<ActivityLonglineObsReference> allActivityLonglineObs = getActivityLonglineObsService().getActivityLonglineByTripLongline(tripId).toList();
    
    92
    +        model.openForm(form, allActivityLonglineObs);
    
    265 93
         }
    
    266 94
     
    
    267
    -
    
    268
    -    private static class ComboBoxListCellRenderer<E extends ActivityLonglinePairingResultItem> implements ListCellRenderer<E> {
    
    269
    -
    
    270
    -        private final ListCellRenderer<? super E> renderer;
    
    271
    -
    
    272
    -        ComboBoxListCellRenderer(ListCellRenderer<? super E> renderer) {
    
    273
    -            this.renderer = renderer;
    
    274
    -        }
    
    275
    -
    
    276
    -        @Override
    
    277
    -        public Component getListCellRendererComponent(JList<? extends E> list,
    
    278
    -                                                      E value,
    
    279
    -                                                      int index,
    
    280
    -                                                      boolean isSelected,
    
    281
    -                                                      boolean cellHasFocus) {
    
    282
    -            Component comp = renderer.getListCellRendererComponent(
    
    283
    -                    list,
    
    284
    -                    value,
    
    285
    -                    index,
    
    286
    -                    isSelected,
    
    287
    -                    cellHasFocus
    
    288
    -            );
    
    289
    -            if (comp instanceof JLabel) {
    
    290
    -                JLabel jcomp = (JLabel) comp;
    
    291
    -                jcomp.setToolTipText(jcomp.getText());
    
    292
    -            }
    
    293
    -            return comp;
    
    294
    -        }
    
    295
    -    }
    
    296 95
     }

  • client/src/main/java/fr/ird/observe/client/ui/content/data/longline/logbook/ActivityLonglineLogbookUIModel.java
    ... ... @@ -22,20 +22,23 @@ package fr.ird.observe.client.ui.content.data.longline.logbook;
    22 22
      * #L%
    
    23 23
      */
    
    24 24
     
    
    25
    +import com.google.common.collect.ImmutableList;
    
    25 26
     import fr.ird.observe.client.ui.content.api.data.open.ContentOpenableUIModel;
    
    26 27
     import fr.ird.observe.dto.data.longline.ActivityLonglineLogbookDto;
    
    27 28
     import fr.ird.observe.dto.data.longline.ActivityLonglineLogbookReference;
    
    28
    -import fr.ird.observe.dto.data.pairing.ActivityLonglinePairingResultItem;
    
    29
    +import fr.ird.observe.dto.data.longline.ActivityLonglineObsReference;
    
    29 30
     import fr.ird.observe.dto.form.Form;
    
    30 31
     import fr.ird.observe.dto.referential.longline.VesselActivityLonglineHelper;
    
    31 32
     import fr.ird.observe.dto.referential.longline.VesselActivityLonglineReference;
    
    32
    -import fr.ird.observe.services.service.actions.pairing.TripLonglinePairingContext;
    
    33
    +import org.apache.logging.log4j.LogManager;
    
    34
    +import org.apache.logging.log4j.Logger;
    
    33 35
     import org.nuiton.i18n.I18n;
    
    34 36
     import org.nuiton.util.DateUtil;
    
    35 37
     
    
    36
    -import java.util.ArrayList;
    
    38
    +import java.util.Collections;
    
    37 39
     import java.util.Date;
    
    38 40
     import java.util.List;
    
    41
    +import java.util.stream.Collectors;
    
    39 42
     
    
    40 43
     /**
    
    41 44
      * Created on 9/26/14.
    
    ... ... @@ -45,22 +48,26 @@ import java.util.List;
    45 48
      */
    
    46 49
     public class ActivityLonglineLogbookUIModel extends ContentOpenableUIModel<ActivityLonglineLogbookDto, ActivityLonglineLogbookReference> {
    
    47 50
     
    
    48
    -    public static final String PROPERTY_SET_OPERATION = "setOperation";
    
    49 51
         public static final String PROPERTY_DATE = "date";
    
    50 52
         public static final String PROPERTY_TIME = "time";
    
    53
    +    private static final String PROPERTY_SET_OPERATION = "setOperation";
    
    51 54
         private static final long serialVersionUID = 1L;
    
    52
    -
    
    53
    -    private TripLonglinePairingContext pairingContext;
    
    54
    -    private List<ActivityLonglinePairingResultItem> activityObsCandidates;
    
    55
    -    private ActivityLonglinePairingResultItem activityObs;
    
    55
    +    private static final Logger log = LogManager.getLogger(ActivityLonglineLogbookUIModel.class);
    
    56
    +    private List<ActivityLonglineObsReference> allActivityObs;
    
    57
    +    private List<ActivityLonglineObsReference> activityObs;
    
    58
    +    private boolean opening = false;
    
    56 59
     
    
    57 60
         public ActivityLonglineLogbookUIModel() {
    
    58 61
             super(ActivityLonglineLogbookDto.class, I18n.n("observe.common.ActivityLonglineLogbookDto.message.not.open"));
    
    59 62
     
    
    60 63
             getBean().addPropertyChangeListener(ActivityLonglineLogbookDto.PROPERTY_VESSEL_ACTIVITY_LONGLINE, evt -> {
    
    61 64
                 boolean oldValue = VesselActivityLonglineHelper.isSetOperation((VesselActivityLonglineReference) evt.getOldValue());
    
    62
    -            boolean newValue = VesselActivityLonglineHelper.isSetOperation((VesselActivityLonglineReference) evt.getNewValue());
    
    65
    +            VesselActivityLonglineReference vesselActivityLonglineReference = (VesselActivityLonglineReference) evt.getNewValue();
    
    66
    +            boolean newValue = VesselActivityLonglineHelper.isSetOperation(vesselActivityLonglineReference);
    
    63 67
                 firePropertyChange(PROPERTY_SET_OPERATION, oldValue, newValue);
    
    68
    +            if (!opening) {
    
    69
    +                updateActivityObs();
    
    70
    +            }
    
    64 71
             });
    
    65 72
         }
    
    66 73
     
    
    ... ... @@ -94,31 +101,45 @@ public class ActivityLonglineLogbookUIModel extends ContentOpenableUIModel<Activ
    94 101
             }
    
    95 102
         }
    
    96 103
     
    
    97
    -    public void openForm(Form<ActivityLonglineLogbookDto> form, TripLonglinePairingContext pairingContext) {
    
    98
    -        this.pairingContext = pairingContext;
    
    99
    -        super.openForm(form);
    
    100
    -    }
    
    101
    -
    
    102
    -    public TripLonglinePairingContext getPairingContext() {
    
    103
    -        return pairingContext;
    
    104
    +    public void openForm(Form<ActivityLonglineLogbookDto> form, List<ActivityLonglineObsReference> allActivityObs) {
    
    105
    +        this.allActivityObs = ImmutableList.copyOf(allActivityObs);
    
    106
    +        opening = true;
    
    107
    +        try {
    
    108
    +            super.openForm(form);
    
    109
    +        } finally {
    
    110
    +            opening = false;
    
    111
    +        }
    
    112
    +        updateActivityObs();
    
    104 113
         }
    
    105 114
     
    
    106
    -    public List<ActivityLonglinePairingResultItem> getActivityObsCandidates() {
    
    107
    -        return activityObsCandidates;
    
    115
    +    public List<ActivityLonglineObsReference> getActivityObs() {
    
    116
    +        return activityObs;
    
    108 117
         }
    
    109 118
     
    
    110
    -    public void setActivityObsCandidates(List<ActivityLonglinePairingResultItem> activityObsCandidates) {
    
    111
    -        this.activityObsCandidates = activityObsCandidates == null ? null : new ArrayList<>(activityObsCandidates);
    
    112
    -        firePropertyChange("activityObsCandidates", null, this.activityObsCandidates);
    
    119
    +    public void setActivityObs(List<ActivityLonglineObsReference> activityObs) {
    
    120
    +        // only used for jaxx binding
    
    113 121
         }
    
    114 122
     
    
    115
    -    public ActivityLonglinePairingResultItem getActivityObs() {
    
    116
    -        return activityObs;
    
    123
    +    public List<ActivityLonglineObsReference> getAllActivityObs() {
    
    124
    +        return allActivityObs;
    
    117 125
         }
    
    118 126
     
    
    119
    -    public void setActivityObs(ActivityLonglinePairingResultItem activityObs) {
    
    120
    -        ActivityLonglinePairingResultItem oldValue = getActivityObs();
    
    121
    -        this.activityObs = activityObs;
    
    122
    -        firePropertyChange("activityObs", oldValue, activityObs);
    
    127
    +    private void updateActivityObs() {
    
    128
    +        log.info(getPrefix() + "Will update release observed actities...");
    
    129
    +        ActivityLonglineLogbookDto bean = getBean();
    
    130
    +        if (allActivityObs == null || bean.getVesselActivityLonglineId() == null) {
    
    131
    +            activityObs = Collections.emptyList();
    
    132
    +        } else {
    
    133
    +            String vesselActivityLonglineId = bean.getVesselActivityLonglineId();
    
    134
    +            activityObs = allActivityObs.stream().filter(e -> vesselActivityLonglineId.equals(e.getVesselActivityLonglineId())).collect(Collectors.toList());
    
    135
    +        }
    
    136
    +        log.info(getPrefix() + "Found " + activityObs.size() + " related observed activities.");
    
    137
    +        ActivityLonglineObsReference relatedObservedActivity = bean.getRelatedObservedActivity();
    
    138
    +        boolean removeRelatedObservedActivity = !opening && relatedObservedActivity != null && !activityObs.contains(relatedObservedActivity);
    
    139
    +        firePropertyChange("activityObs", null, activityObs);
    
    140
    +        if (removeRelatedObservedActivity) {
    
    141
    +            log.info(getPrefix() + "Removed not matching related observed activity: " + relatedObservedActivity);
    
    142
    +            bean.setRelatedObservedActivity(null);
    
    143
    +        }
    
    123 144
         }
    
    124 145
     }

  • client/src/main/resources/i18n/client_en_GB.properties
    ... ... @@ -363,6 +363,9 @@ observe.common.ActivityLogbookDto.action.goToOpen.short=Logbook - Open activity
    363 363
     observe.common.ActivityLogbookDto.action.goToOpen.tip=Go to open activity (Logbook)
    
    364 364
     observe.common.ActivityLonglineLogbookDto.action.addSet=Add the fishing operation
    
    365 365
     observe.common.ActivityLonglineLogbookDto.action.addSet.tip=Add the fishing operation associated with this activity
    
    366
    +observe.common.ActivityLonglineLogbookDto.action.chooseRelatedObservedActivity=Choose activity
    
    367
    +observe.common.ActivityLonglineLogbookDto.action.chooseRelatedObservedActivity.message=Choose an activity beyoung the universe of possible ones (time minus than %s (minutes) and distance minus than %s (km))\:
    
    368
    +observe.common.ActivityLonglineLogbookDto.action.chooseRelatedObservedActivity.title=Choose the related observed activity
    
    366 369
     observe.common.ActivityLonglineLogbookDto.action.moves=Change trip
    
    367 370
     observe.common.ActivityLonglineLogbookDto.action.moves.tip=Change trip of activities
    
    368 371
     observe.common.ActivityLonglineLogbookDto.list.message.none=< No activity for current trip >
    

  • client/src/main/resources/i18n/client_es_ES.properties
    ... ... @@ -363,6 +363,9 @@ observe.common.ActivityLogbookDto.action.goToOpen.short=Logbook - Open activity
    363 363
     observe.common.ActivityLogbookDto.action.goToOpen.tip=Go to open activity (Logbook) \#TODO
    
    364 364
     observe.common.ActivityLonglineLogbookDto.action.addSet=Añadir la operación de pesca
    
    365 365
     observe.common.ActivityLonglineLogbookDto.action.addSet.tip=Añadir la operación de pesca asociada a esta actividad
    
    366
    +observe.common.ActivityLonglineLogbookDto.action.chooseRelatedObservedActivity=Choose activity \#TODO
    
    367
    +observe.common.ActivityLonglineLogbookDto.action.chooseRelatedObservedActivity.message=Choose an activity beyoung the universe of possible ones (time minus than %s (minutes) and distance minus than %s (km))\: \#TODO
    
    368
    +observe.common.ActivityLonglineLogbookDto.action.chooseRelatedObservedActivity.title=Choose the related observed activity \#TODO
    
    366 369
     observe.common.ActivityLonglineLogbookDto.action.moves=Cambiar de marea
    
    367 370
     observe.common.ActivityLonglineLogbookDto.action.moves.tip=Cambiar la marea de las actividades seleccionas
    
    368 371
     observe.common.ActivityLonglineLogbookDto.list.message.none=< Ninguna actividad por la marea actual >
    

  • client/src/main/resources/i18n/client_fr_FR.properties
    ... ... @@ -363,6 +363,9 @@ observe.common.ActivityLogbookDto.action.goToOpen.short=Livre de bord - Activit
    363 363
     observe.common.ActivityLogbookDto.action.goToOpen.tip=Accéder à l'activité ouverte (Livre de bord)
    
    364 364
     observe.common.ActivityLonglineLogbookDto.action.addSet=Ajouter l'opération de pêche
    
    365 365
     observe.common.ActivityLonglineLogbookDto.action.addSet.tip=Ajouter l'opération de pêche associée à cette activité
    
    366
    +observe.common.ActivityLonglineLogbookDto.action.chooseRelatedObservedActivity=Choisir l'activité
    
    367
    +observe.common.ActivityLonglineLogbookDto.action.chooseRelatedObservedActivity.message=Veuillez choisir une activité parmis celles possible (durée de moins de %s minutes et distance moins de %s kms) \:
    
    368
    +observe.common.ActivityLonglineLogbookDto.action.chooseRelatedObservedActivity.title=Choisir l'activité d'observation associée
    
    366 369
     observe.common.ActivityLonglineLogbookDto.action.moves=Changer de marée
    
    367 370
     observe.common.ActivityLonglineLogbookDto.action.moves.tip=Changer la marée des activités sélectionnées
    
    368 371
     observe.common.ActivityLonglineLogbookDto.list.message.none=< Aucune activité pour la marée courante >
    

  • dto/src/main/java/fr/ird/observe/dto/data/longline/ActivityLonglineAware.java
    ... ... @@ -51,4 +51,6 @@ public interface ActivityLonglineAware extends ObserveDto {
    51 51
         Float getLatitude();
    
    52 52
     
    
    53 53
         Float getLongitude();
    
    54
    +
    
    55
    +    String getVesselActivityLonglineId();
    
    54 56
     }

  • dto/src/main/java/fr/ird/observe/dto/data/longline/ActivityLonglineLogbookDto.java
    ... ... @@ -70,4 +70,8 @@ public class ActivityLonglineLogbookDto extends GeneratedActivityLonglineLogbook
    70 70
             return ActivityLonglineAware.newGPSPoint(this);
    
    71 71
         }
    
    72 72
     
    
    73
    +    @Override
    
    74
    +    public String getVesselActivityLonglineId() {
    
    75
    +        return vesselActivityLongline == null ? null : vesselActivityLongline.getId();
    
    76
    +    }
    
    73 77
     }

  • dto/src/main/java/fr/ird/observe/dto/data/longline/ActivityLonglineObsDto.java
    ... ... @@ -69,4 +69,9 @@ public class ActivityLonglineObsDto extends GeneratedActivityLonglineObsDto impl
    69 69
         public GPSPoint getGPSPoint() {
    
    70 70
             return ActivityLonglineAware.newGPSPoint(this);
    
    71 71
         }
    
    72
    +
    
    73
    +    @Override
    
    74
    +    public String getVesselActivityLonglineId() {
    
    75
    +        return vesselActivityLongline == null ? null : vesselActivityLongline.getId();
    
    76
    +    }
    
    72 77
     }

  • dto/src/main/java/fr/ird/observe/navigation/model/edit/ObserveEditModelManager.java
    ... ... @@ -179,11 +179,11 @@ public class ObserveEditModelManager {
    179 179
             log.debug("Will close edit node from incoming: " + node);
    
    180 180
             ObserveEditNode realEditNode = editModel.forNodeType(node.getClass()).orElseThrow(IllegalStateException::new);
    
    181 181
             log.info("Close edit node: " + node);
    
    182
    -        realEditNode.setId(null);
    
    183 182
             for (ObserveEditNodeCloseCallback c : closeCallbacks.get(node.getClass())) {
    
    184 183
                 log.info("Apply callback on closed edit node: " + realEditNode + " - " + c);
    
    185 184
                 c.onEditNodeClosed(node, adjusting);
    
    186 185
             }
    
    186
    +        realEditNode.setId(null);
    
    187 187
         }
    
    188 188
     
    
    189 189
         private void openNode(ObserveEditNode<?> node, boolean adjusting) {
    

  • services/src/main/java/fr/ird/observe/services/service/actions/pairing/ActivityLonglinePairingEngine.java
    ... ... @@ -33,6 +33,7 @@ import fr.ird.observe.dto.data.pairing.TripLonglinePairingResult;
    33 33
     import fr.ird.observe.services.ObserveServicesProvider;
    
    34 34
     
    
    35 35
     import java.util.ArrayList;
    
    36
    +import java.util.Collection;
    
    36 37
     import java.util.Date;
    
    37 38
     import java.util.List;
    
    38 39
     import java.util.Set;
    
    ... ... @@ -53,11 +54,13 @@ public class ActivityLonglinePairingEngine {
    53 54
             this.config = config;
    
    54 55
         }
    
    55 56
     
    
    56
    -    public TripLonglinePairingContext newTripContext(String tripLonglineId) {
    
    57
    -        Set<ActivityLonglineObsReference> activityLonglineObsReferenceSet = servicesProvider.getActivityLonglineObsService().getActivityLonglineByTripLongline(tripLonglineId).toSet();
    
    58
    -        return new TripLonglinePairingContext(config, tripLonglineId, ImmutableList.copyOf(activityLonglineObsReferenceSet));
    
    57
    +    public ActivityLonglinePairingConfig getConfig() {
    
    58
    +        return config;
    
    59 59
         }
    
    60 60
     
    
    61
    +    public TripLonglinePairingContext newTripContext(String tripLonglineId, Collection<ActivityLonglineObsReference> allActivityLonglineObs) {
    
    62
    +        return new TripLonglinePairingContext(config, tripLonglineId, ImmutableList.copyOf(allActivityLonglineObs));
    
    63
    +    }
    
    61 64
     
    
    62 65
         public TripLonglinePairingResult computeForTrip(TripLonglinePairingContext context) {
    
    63 66
             ImmutableMap.Builder<ActivityLonglineLogbookReference, ActivityLonglinePairingResult> resultBuilder = ImmutableMap.builder();
    
    ... ... @@ -70,7 +73,7 @@ public class ActivityLonglinePairingEngine {
    70 73
         }
    
    71 74
     
    
    72 75
         public ActivityLonglinePairingResult computeForActivityLogbook(TripLonglinePairingContext context, ActivityLonglineAware activityLonglineLogbook) {
    
    73
    -        ImmutableList<ActivityLonglineObsReference> activityLonglineObsList = context.getActivityLonglineObsList();
    
    76
    +        ImmutableList<ActivityLonglineObsReference> activityLonglineObsList = context.getActivityLonglineObsList(activityLonglineLogbook.getVesselActivityLonglineId());
    
    74 77
             List<ActivityLonglinePairingResultItem> itemBuilder = new ArrayList<>(activityLonglineObsList.size());
    
    75 78
             long longlineActivityPairingMaxTime = context.getConfig().getLonglineActivityPairingMaxTime();
    
    76 79
             long longlineActivityPairingMaxDistance = context.getConfig().getLonglineActivityPairingMaxDistance();
    

  • services/src/main/java/fr/ird/observe/services/service/actions/pairing/TripLonglinePairingContext.java
    ... ... @@ -26,6 +26,8 @@ import com.google.common.collect.ImmutableList;
    26 26
     import fr.ird.observe.dto.ObserveDto;
    
    27 27
     import fr.ird.observe.dto.data.longline.ActivityLonglineObsReference;
    
    28 28
     
    
    29
    +import java.util.stream.Collectors;
    
    30
    +
    
    29 31
     /**
    
    30 32
      * Created by tchemit on 15/10/2018.
    
    31 33
      *
    
    ... ... @@ -35,28 +37,24 @@ public class TripLonglinePairingContext implements ObserveDto {
    35 37
     
    
    36 38
         private final ActivityLonglinePairingConfig config;
    
    37 39
         private final String tripLonglineId;
    
    38
    -    private final ImmutableList<ActivityLonglineObsReference> activityLonglineObsList;
    
    40
    +    private final ImmutableList<ActivityLonglineObsReference> allActivityLonglineObs;
    
    39 41
     
    
    40
    -    public TripLonglinePairingContext(ActivityLonglinePairingConfig config, String tripLonglineId, ImmutableList<ActivityLonglineObsReference> activityLonglineObsList) {
    
    42
    +    public TripLonglinePairingContext(ActivityLonglinePairingConfig config, String tripLonglineId, ImmutableList<ActivityLonglineObsReference> allActivityLonglineObs) {
    
    41 43
             this.config = config;
    
    42 44
             this.tripLonglineId = tripLonglineId;
    
    43
    -        this.activityLonglineObsList = activityLonglineObsList;
    
    45
    +        this.allActivityLonglineObs = allActivityLonglineObs;
    
    44 46
         }
    
    45 47
     
    
    46 48
         public ActivityLonglinePairingConfig getConfig() {
    
    47 49
             return config;
    
    48 50
         }
    
    49 51
     
    
    50
    -
    
    51
    -    public ImmutableList<ActivityLonglineObsReference> getActivityLonglineObsList() {
    
    52
    -        return activityLonglineObsList;
    
    52
    +    public ImmutableList<ActivityLonglineObsReference> getActivityLonglineObsList(String vesselActivityLonglineId) {
    
    53
    +        return ImmutableList.copyOf(allActivityLonglineObs.stream().filter(e -> vesselActivityLonglineId.equals(e.getVesselActivityLonglineId())).collect(Collectors.toList()));
    
    53 54
         }
    
    54 55
     
    
    55 56
         public String getTripLonglineId() {
    
    56 57
             return tripLonglineId;
    
    57 58
         }
    
    58 59
     
    
    59
    -    public boolean isEnabled() {
    
    60
    -        return !activityLonglineObsList.isEmpty();
    
    61
    -    }
    
    62 60
     }