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

Commits:

14 changed files:

Changes:

  • client-core/src/main/java/fr/ird/observe/client/ui/actions/content/MoveActivityLonglineUIAction.java
    ... ... @@ -25,14 +25,10 @@ import fr.ird.observe.client.ObserveSwingApplicationContext;
    25 25
     import fr.ird.observe.client.ui.ObserveMainUI;
    
    26 26
     import fr.ird.observe.client.ui.tree.navigation.NavigationTree;
    
    27 27
     import fr.ird.observe.client.ui.tree.navigation.nodes.NavigationTreeNodeSupport;
    
    28
    -import fr.ird.observe.client.ui.tree.navigation.nodes.longline.TripLonglineNavigationTreeNode;
    
    29
    -import fr.ird.observe.client.ui.util.DecoratedNodeEntity;
    
    30 28
     import fr.ird.observe.dto.data.longline.ActivityLonglineDto;
    
    31 29
     import fr.ird.observe.dto.data.longline.TripLonglineReference;
    
    32
    -import fr.ird.observe.dto.decoration.ObserveI18nDecoratorHelper;
    
    33 30
     import fr.ird.observe.dto.decoration.decorators.DataReferenceDecorator;
    
    34 31
     
    
    35
    -import javax.swing.JOptionPane;
    
    36 32
     import java.util.Optional;
    
    37 33
     
    
    38 34
     import static io.ultreia.java4all.i18n.I18n.n;
    
    ... ... @@ -60,7 +56,7 @@ public class MoveActivityLonglineUIAction extends MoveSingleDataUIActionSupport
    60 56
         }
    
    61 57
     
    
    62 58
         @Override
    
    63
    -    Optional<String> getNewParentId(ObserveMainUI mainUI, NavigationTreeNodeSupport oldParentNode) {
    
    59
    +    Optional<String> getNewParentId(ObserveMainUI mainUI, NavigationTreeNodeSupport<?> oldParentNode) {
    
    64 60
             return chooseNewTripLongline(mainUI, oldParentNode);
    
    65 61
         }
    
    66 62
     
    
    ... ... @@ -76,44 +72,21 @@ public class MoveActivityLonglineUIAction extends MoveSingleDataUIActionSupport
    76 72
         }
    
    77 73
     
    
    78 74
         @Override
    
    79
    -    NavigationTreeNodeSupport getNewParentNode(NavigationTree treeHelper, NavigationTreeNodeSupport grandParentNode, String newParentId) {
    
    80
    -        NavigationTreeNodeSupport tripLonglineNode = treeHelper.getChild(grandParentNode, newParentId);
    
    81
    -        String activitiesNodeId = ObserveI18nDecoratorHelper.getTypePluralI18nKey(ActivityLonglineDto.class);
    
    82
    -        return treeHelper.getChild(tripLonglineNode, activitiesNodeId);
    
    75
    +    NavigationTreeNodeSupport<?> getNewParentNode(NavigationTree treeHelper, NavigationTreeNodeSupport<?> grandParentNode, String newParentId) {
    
    76
    +        NavigationTreeNodeSupport<?> parentNode = grandParentNode.findChildById(newParentId);
    
    77
    +        return parentNode.findChildByClass(ActivityLonglineDto.class);
    
    83 78
         }
    
    84 79
     
    
    85
    -    static Optional<String> chooseNewTripLongline(ObserveMainUI ui, NavigationTreeNodeSupport oldParentNode) {
    
    80
    +    static Optional<String> chooseNewTripLongline(ObserveMainUI mainUI, NavigationTreeNodeSupport<?> oldParentNode) {
    
    86 81
     
    
    87
    -        NavigationTreeNodeSupport programNode = oldParentNode.getParent();
    
    88
    -        String oldTripLonglineId = oldParentNode.getId();
    
    89
    -        int tripLonglineNb = programNode.getChildCount();
    
    82
    +        NavigationTreeNodeSupport<?> grandParentNode = oldParentNode.getParent();
    
    83
    +        String oldId = oldParentNode.getId();
    
    90 84
     
    
    91 85
             ObserveSwingApplicationContext applicationContext = ObserveSwingApplicationContext.get();
    
    92 86
             DataReferenceDecorator<TripLonglineReference> decorator = applicationContext.getDecoratorService().getDataReferenceDecorator(TripLonglineReference.class);
    
    93 87
     
    
    94
    -        //on crée un tableau avec une marée en moins car on ne propose pas la marée actuelle
    
    95
    -        DecoratedNodeEntity[] decoratedTripLonglines = new DecoratedNodeEntity[tripLonglineNb - 1];
    
    96
    -
    
    97
    -        int j = 0;
    
    98
    -        for (int i = 0; i < tripLonglineNb; i++) {
    
    99
    -
    
    100
    -            TripLonglineNavigationTreeNode tripLonglineNode = (TripLonglineNavigationTreeNode) programNode.getChildAt(i);
    
    101
    -
    
    102
    -            String tripLonglineId = tripLonglineNode.getId();
    
    103
    -
    
    104
    -            if (!oldTripLonglineId.equals(tripLonglineId)) {
    
    105
    -                decoratedTripLonglines[j++] = DecoratedNodeEntity.newDecoratedNodeEntity(tripLonglineNode, decorator);
    
    106
    -            }
    
    107
    -        }
    
    108
    -
    
    109
    -        Object decoratedTripLongline = JOptionPane.showInputDialog(ui,
    
    110
    -                                                                   t("observe.action.choose.tripLongline.message"),
    
    111
    -                                                                   t("observe.action.choose.tripLongline.title"),
    
    112
    -                                                                   JOptionPane.QUESTION_MESSAGE,
    
    113
    -                                                                   null,
    
    114
    -                                                                   decoratedTripLonglines,
    
    115
    -                                                                   null);
    
    116
    -        return Optional.ofNullable(decoratedTripLongline != null ? ((DecoratedNodeEntity) decoratedTripLongline).getId() : null);
    
    88
    +        return chooseCandidate(mainUI, grandParentNode, oldId, decorator, t("observe.action.choose.tripLongline.message"),
    
    89
    +                               t("observe.action.choose.tripLongline.title"));
    
    117 90
         }
    
    118 91
     
    
    119 92
     }

  • client-core/src/main/java/fr/ird/observe/client/ui/actions/content/MoveActivityLonglinesUIAction.java
    ... ... @@ -29,9 +29,9 @@ import fr.ird.observe.client.ui.content.data.longline.ActivityLonglinesUI;
    29 29
     import fr.ird.observe.client.ui.tree.navigation.NavigationTree;
    
    30 30
     import fr.ird.observe.client.ui.tree.navigation.nodes.NavigationTreeNodeSupport;
    
    31 31
     import fr.ird.observe.dto.data.longline.ActivityLonglineDto;
    
    32
    -import fr.ird.observe.dto.decoration.ObserveI18nDecoratorHelper;
    
    33 32
     
    
    34 33
     import java.util.List;
    
    34
    +import java.util.Objects;
    
    35 35
     import java.util.Optional;
    
    36 36
     
    
    37 37
     import static io.ultreia.java4all.i18n.I18n.n;
    
    ... ... @@ -64,22 +64,21 @@ public class MoveActivityLonglinesUIAction extends MoveMultipleDataUIActionSuppo
    64 64
         }
    
    65 65
     
    
    66 66
         @Override
    
    67
    -    Optional<String> getNewParentId(ObserveMainUI mainUI, NavigationTreeNodeSupport oldParentNode) {
    
    67
    +    Optional<String> getNewParentId(ObserveMainUI mainUI, NavigationTreeNodeSupport<?> oldParentNode) {
    
    68 68
             return MoveActivityLonglineUIAction.chooseNewTripLongline(getMainUI(), oldParentNode);
    
    69 69
         }
    
    70 70
     
    
    71 71
         @Override
    
    72
    -    void updateUI(ActivityLonglinesUI ui, NavigationTreeNodeSupport oldActivitiesNode, String tripLonglineId, ImmutableSet<String> activityIds, List<Integer> positions) {
    
    72
    +    void updateUI(ActivityLonglinesUI ui, NavigationTreeNodeSupport<?> oldActivitiesNode, String tripLonglineId, ImmutableSet<String> activityIds, List<Integer> positions) {
    
    73 73
     
    
    74 74
             ObserveSwingApplicationContext applicationContext = ObserveSwingApplicationContext.get();
    
    75 75
             ObserveOpenDataManager openDataManager = applicationContext.getOpenDataManager();
    
    76 76
             NavigationTree treeHelper = getMainUI().getNavigationUI().getTree();
    
    77 77
     
    
    78
    -        NavigationTreeNodeSupport oldTripLonglineNode = oldActivitiesNode.getParent();
    
    79
    -        NavigationTreeNodeSupport programNode = oldTripLonglineNode.getParent();
    
    80
    -        NavigationTreeNodeSupport newTripLonglineNode = treeHelper.getChild(programNode, tripLonglineId);
    
    81
    -        String activitiesNodeId = ObserveI18nDecoratorHelper.getTypePluralI18nKey(ActivityLonglineDto.class);
    
    82
    -        NavigationTreeNodeSupport newActivitiesNode = treeHelper.getChild(newTripLonglineNode, activitiesNodeId);
    
    78
    +        NavigationTreeNodeSupport<?> oldTripLonglineNode = Objects.requireNonNull(oldActivitiesNode.getParent());
    
    79
    +        NavigationTreeNodeSupport<?> programNode = Objects.requireNonNull(oldTripLonglineNode.getParent());
    
    80
    +        NavigationTreeNodeSupport<?> newTripLonglineNode = Objects.requireNonNull(programNode.findChildById(tripLonglineId));
    
    81
    +        NavigationTreeNodeSupport<?> newActivitiesNode = Objects.requireNonNull(newTripLonglineNode.findChildByClass(ActivityLonglineDto.class));
    
    83 82
     
    
    84 83
             // Let's check if we're moving an open activity
    
    85 84
             Optional<String> openActivity = activityIds
    
    ... ... @@ -93,7 +92,7 @@ public class MoveActivityLonglinesUIAction extends MoveMultipleDataUIActionSuppo
    93 92
             // Let's reload the sub tree of each activities node.
    
    94 93
             // As the change have already be done in database, we just call the child loaders to regenerate the activities nodes sub trees
    
    95 94
             treeHelper.reloadNodeSubTree(oldActivitiesNode);
    
    96
    -        treeHelper.reloadNodeSubTree(newActivitiesNode);
    
    95
    +        treeHelper.reloadNodeSubTree(newActivitiesNode, true);
    
    97 96
     
    
    98 97
             // Let's put the focus on the activities node which received the activities
    
    99 98
             treeHelper.selectSafeNode(newActivitiesNode);
    

  • client-core/src/main/java/fr/ird/observe/client/ui/actions/content/MoveActivitySeineUIAction.java
    ... ... @@ -25,14 +25,10 @@ import fr.ird.observe.client.ObserveSwingApplicationContext;
    25 25
     import fr.ird.observe.client.ui.ObserveMainUI;
    
    26 26
     import fr.ird.observe.client.ui.tree.navigation.NavigationTree;
    
    27 27
     import fr.ird.observe.client.ui.tree.navigation.nodes.NavigationTreeNodeSupport;
    
    28
    -import fr.ird.observe.client.ui.tree.navigation.nodes.seine.RouteSeineNavigationTreeNode;
    
    29
    -import fr.ird.observe.client.ui.util.DecoratedNodeEntity;
    
    30 28
     import fr.ird.observe.dto.data.seine.ActivitySeineDto;
    
    31 29
     import fr.ird.observe.dto.data.seine.RouteReference;
    
    32
    -import fr.ird.observe.dto.decoration.ObserveI18nDecoratorHelper;
    
    33 30
     import fr.ird.observe.dto.decoration.decorators.DataReferenceDecorator;
    
    34 31
     
    
    35
    -import javax.swing.JOptionPane;
    
    36 32
     import java.util.Optional;
    
    37 33
     
    
    38 34
     import static io.ultreia.java4all.i18n.I18n.n;
    
    ... ... @@ -60,7 +56,7 @@ public class MoveActivitySeineUIAction extends MoveSingleDataUIActionSupport {
    60 56
         }
    
    61 57
     
    
    62 58
         @Override
    
    63
    -    Optional<String> getNewParentId(ObserveMainUI mainUI, NavigationTreeNodeSupport oldParentNode) {
    
    59
    +    Optional<String> getNewParentId(ObserveMainUI mainUI, NavigationTreeNodeSupport<?> oldParentNode) {
    
    64 60
             return chooseNewRoute(mainUI, oldParentNode);
    
    65 61
         }
    
    66 62
     
    
    ... ... @@ -75,45 +71,21 @@ public class MoveActivitySeineUIAction extends MoveSingleDataUIActionSupport {
    75 71
         }
    
    76 72
     
    
    77 73
         @Override
    
    78
    -    NavigationTreeNodeSupport getNewParentNode(NavigationTree treeHelper, NavigationTreeNodeSupport grandParentNode, String newParentId) {
    
    79
    -        NavigationTreeNodeSupport routeNode = treeHelper.getChild(grandParentNode, newParentId);
    
    80
    -        String activitiesNodeId = ObserveI18nDecoratorHelper.getTypePluralI18nKey(ActivitySeineDto.class);
    
    81
    -        return treeHelper.getChild(routeNode, activitiesNodeId);
    
    74
    +    NavigationTreeNodeSupport<?> getNewParentNode(NavigationTree treeHelper, NavigationTreeNodeSupport<?> grandParentNode, String newParentId) {
    
    75
    +        NavigationTreeNodeSupport<?> parentNode = grandParentNode.findChildById(newParentId);
    
    76
    +        return parentNode.findChildByClass( ActivitySeineDto.class);
    
    82 77
         }
    
    83 78
     
    
    84
    -    static Optional<String> chooseNewRoute(ObserveMainUI mainUI, NavigationTreeNodeSupport oldParentNode) {
    
    79
    +    static Optional<String> chooseNewRoute(ObserveMainUI mainUI, NavigationTreeNodeSupport<?> oldParentNode) {
    
    85 80
     
    
    86
    -        NavigationTreeNodeSupport routesNode = oldParentNode.getParent();
    
    87
    -        String oldRouteId = oldParentNode.getId();
    
    88
    -        int routeNb = routesNode.getChildCount();
    
    81
    +        NavigationTreeNodeSupport<?> grandParentNode = oldParentNode.getParent();
    
    82
    +        String oldId = oldParentNode.getId();
    
    89 83
     
    
    90 84
             ObserveSwingApplicationContext applicationContext = ObserveSwingApplicationContext.get();
    
    91 85
             DataReferenceDecorator<RouteReference> decorator = applicationContext.getDecoratorService().getDataReferenceDecorator(RouteReference.class);
    
    92 86
     
    
    93
    -        //on crée un tableau avec une route en moins car on ne propose pas la route actuel
    
    94
    -        DecoratedNodeEntity[] decoratedRoutes = new DecoratedNodeEntity[routeNb - 1];
    
    95
    -
    
    96
    -        int j = 0;
    
    97
    -        for (int i = 0; i < routeNb; i++) {
    
    98
    -
    
    99
    -            RouteSeineNavigationTreeNode routeNode = (RouteSeineNavigationTreeNode) routesNode.getChildAt(i);
    
    100
    -
    
    101
    -            String routeId = routeNode.getId();
    
    102
    -
    
    103
    -            if (!oldRouteId.equals(routeId)) {
    
    104
    -                decoratedRoutes[j++] = DecoratedNodeEntity.newDecoratedNodeEntity(routeNode, decorator);
    
    105
    -            }
    
    106
    -        }
    
    107
    -
    
    108
    -        Object decoratedRoute = JOptionPane.showInputDialog(mainUI,
    
    109
    -                                                            t("observe.action.choose.route.message"),
    
    110
    -                                                            t("observe.action.choose.route.title"),
    
    111
    -                                                            JOptionPane.QUESTION_MESSAGE,
    
    112
    -                                                            null,
    
    113
    -                                                            decoratedRoutes,
    
    114
    -                                                            null);
    
    115
    -
    
    116
    -        return Optional.ofNullable(decoratedRoute != null ? ((DecoratedNodeEntity) decoratedRoute).getId() : null);
    
    87
    +        return chooseCandidate(mainUI, grandParentNode, oldId, decorator, t("observe.action.choose.route.message"),
    
    88
    +                               t("observe.action.choose.route.title"));
    
    117 89
         }
    
    118 90
     
    
    119 91
     }

  • client-core/src/main/java/fr/ird/observe/client/ui/actions/content/MoveActivitySeinesUIAction.java
    ... ... @@ -29,9 +29,9 @@ import fr.ird.observe.client.ui.content.data.seine.ActivitySeinesUI;
    29 29
     import fr.ird.observe.client.ui.tree.navigation.NavigationTree;
    
    30 30
     import fr.ird.observe.client.ui.tree.navigation.nodes.NavigationTreeNodeSupport;
    
    31 31
     import fr.ird.observe.dto.data.seine.ActivitySeineDto;
    
    32
    -import fr.ird.observe.dto.decoration.ObserveI18nDecoratorHelper;
    
    33 32
     
    
    34 33
     import java.util.List;
    
    34
    +import java.util.Objects;
    
    35 35
     import java.util.Optional;
    
    36 36
     
    
    37 37
     import static io.ultreia.java4all.i18n.I18n.n;
    
    ... ... @@ -59,7 +59,7 @@ public class MoveActivitySeinesUIAction extends MoveMultipleDataUIActionSupport<
    59 59
         }
    
    60 60
     
    
    61 61
         @Override
    
    62
    -    Optional<String> getNewParentId(ObserveMainUI mainUI, NavigationTreeNodeSupport oldParentNode) {
    
    62
    +    Optional<String> getNewParentId(ObserveMainUI mainUI, NavigationTreeNodeSupport<?> oldParentNode) {
    
    63 63
             return MoveActivitySeineUIAction.chooseNewRoute(getMainUI(), oldParentNode);
    
    64 64
         }
    
    65 65
     
    
    ... ... @@ -69,17 +69,16 @@ public class MoveActivitySeinesUIAction extends MoveMultipleDataUIActionSupport<
    69 69
         }
    
    70 70
     
    
    71 71
         @Override
    
    72
    -    void updateUI(ActivitySeinesUI ui, NavigationTreeNodeSupport oldParentNode, String newParentId, ImmutableSet<String> dataIds, List<Integer> positions) {
    
    72
    +    void updateUI(ActivitySeinesUI ui, NavigationTreeNodeSupport<?> oldParentNode, String newParentId, ImmutableSet<String> dataIds, List<Integer> positions) {
    
    73 73
     
    
    74 74
             ObserveSwingApplicationContext applicationContext = ObserveSwingApplicationContext.get();
    
    75 75
             ObserveOpenDataManager openDataManager = applicationContext.getOpenDataManager();
    
    76 76
             NavigationTree treeHelper = getMainUI().getNavigationUI().getTree();
    
    77 77
     
    
    78
    -        NavigationTreeNodeSupport oldRouteNode = oldParentNode.getParent();
    
    79
    -        NavigationTreeNodeSupport routesNode = oldRouteNode.getParent();
    
    80
    -        NavigationTreeNodeSupport newRouteNode = treeHelper.getChild(routesNode, newParentId);
    
    81
    -        String activitiesNodeId = ObserveI18nDecoratorHelper.getTypePluralI18nKey(ActivitySeineDto.class);
    
    82
    -        NavigationTreeNodeSupport newActivitiesNode = treeHelper.getChild(newRouteNode, activitiesNodeId);
    
    78
    +        NavigationTreeNodeSupport<?> oldRouteNode = Objects.requireNonNull(oldParentNode.getParent());
    
    79
    +        NavigationTreeNodeSupport<?> routesNode = Objects.requireNonNull(oldRouteNode.getParent());
    
    80
    +        NavigationTreeNodeSupport<?> newRouteNode = Objects.requireNonNull(routesNode.findChildById(newParentId));
    
    81
    +        NavigationTreeNodeSupport<?> newActivitiesNode = Objects.requireNonNull(newRouteNode.findChildByClass(ActivitySeineDto.class));
    
    83 82
     
    
    84 83
             // Let's check if we're moving an open activity
    
    85 84
             Optional<String> openActivity = dataIds
    
    ... ... @@ -93,7 +92,7 @@ public class MoveActivitySeinesUIAction extends MoveMultipleDataUIActionSupport<
    93 92
             // Let's reload the sub tree of each activities node.
    
    94 93
             // As the change have already be done in database, we just call the child loaders to regenerate the activities nodes sub trees
    
    95 94
             treeHelper.reloadNodeSubTree(oldParentNode);
    
    96
    -        treeHelper.reloadNodeSubTree(newActivitiesNode);
    
    95
    +        treeHelper.reloadNodeSubTree(newActivitiesNode, true);
    
    97 96
     
    
    98 97
             // Let's put the focus on the activities node which received the activities
    
    99 98
             treeHelper.selectSafeNode(newActivitiesNode);
    

  • client-core/src/main/java/fr/ird/observe/client/ui/actions/content/MoveMultipleDataUIActionSupport.java
    ... ... @@ -73,9 +73,9 @@ public abstract class MoveMultipleDataUIActionSupport<U extends ContentListUI<?,
    73 73
             @SuppressWarnings("unchecked") U ui = (U) ui1;
    
    74 74
     
    
    75 75
             NavigationTree treeHelper = getMainUI().getNavigationUI().getTree();
    
    76
    -        NavigationTreeNodeSupport node = treeHelper.getSelectedNode();
    
    76
    +        NavigationTreeNodeSupport<?> node = treeHelper.getSelectedNode();
    
    77 77
     
    
    78
    -        NavigationTreeNodeSupport oldParentNode = node.getParent().isRoot() ? node : node.getParent();
    
    78
    +        NavigationTreeNodeSupport<?> oldParentNode = node.getParent().isRoot() ? node : node.getParent();
    
    79 79
     
    
    80 80
             Optional<String> optionalNewParentId = getNewParentId(getMainUI(), oldParentNode);
    
    81 81
     
    
    ... ... @@ -90,10 +90,10 @@ public abstract class MoveMultipleDataUIActionSupport<U extends ContentListUI<?,
    90 90
     
    
    91 91
         }
    
    92 92
     
    
    93
    -    abstract Optional<String> getNewParentId(ObserveMainUI mainUI, NavigationTreeNodeSupport oldParentNode);
    
    93
    +    abstract Optional<String> getNewParentId(ObserveMainUI mainUI, NavigationTreeNodeSupport<?> oldParentNode);
    
    94 94
     
    
    95 95
         abstract List<Integer> moveData(ImmutableSet<String> dataIds, String newParentId);
    
    96 96
     
    
    97
    -    abstract void updateUI(U ui, NavigationTreeNodeSupport oldParentNode, String newParentId, ImmutableSet<String> dataIds, List<Integer> positions);
    
    97
    +    abstract void updateUI(U ui, NavigationTreeNodeSupport<?> oldParentNode, String newParentId, ImmutableSet<String> dataIds, List<Integer> positions);
    
    98 98
     
    
    99 99
     }

  • client-core/src/main/java/fr/ird/observe/client/ui/actions/content/MoveRouteUIAction.java
    ... ... @@ -25,14 +25,10 @@ import fr.ird.observe.client.ObserveSwingApplicationContext;
    25 25
     import fr.ird.observe.client.ui.ObserveMainUI;
    
    26 26
     import fr.ird.observe.client.ui.tree.navigation.NavigationTree;
    
    27 27
     import fr.ird.observe.client.ui.tree.navigation.nodes.NavigationTreeNodeSupport;
    
    28
    -import fr.ird.observe.client.ui.tree.navigation.nodes.seine.TripSeineNavigationTreeNode;
    
    29
    -import fr.ird.observe.client.ui.util.DecoratedNodeEntity;
    
    30 28
     import fr.ird.observe.dto.data.seine.RouteDto;
    
    31 29
     import fr.ird.observe.dto.data.seine.TripSeineReference;
    
    32
    -import fr.ird.observe.dto.decoration.ObserveI18nDecoratorHelper;
    
    33 30
     import fr.ird.observe.dto.decoration.decorators.DataReferenceDecorator;
    
    34 31
     
    
    35
    -import javax.swing.JOptionPane;
    
    36 32
     import java.util.Optional;
    
    37 33
     
    
    38 34
     import static io.ultreia.java4all.i18n.I18n.n;
    
    ... ... @@ -60,7 +56,7 @@ public class MoveRouteUIAction extends MoveSingleDataUIActionSupport {
    60 56
         }
    
    61 57
     
    
    62 58
         @Override
    
    63
    -    Optional<String> getNewParentId(ObserveMainUI mainUI, NavigationTreeNodeSupport oldParentNode) {
    
    59
    +    Optional<String> getNewParentId(ObserveMainUI mainUI, NavigationTreeNodeSupport<?> oldParentNode) {
    
    64 60
             return chooseNewTripSeine(mainUI, oldParentNode);
    
    65 61
         }
    
    66 62
     
    
    ... ... @@ -75,43 +71,20 @@ public class MoveRouteUIAction extends MoveSingleDataUIActionSupport {
    75 71
         }
    
    76 72
     
    
    77 73
         @Override
    
    78
    -    NavigationTreeNodeSupport getNewParentNode(NavigationTree treeHelper, NavigationTreeNodeSupport grandParentNode, String newParentId) {
    
    79
    -        NavigationTreeNodeSupport tripNode = treeHelper.getChild(grandParentNode, newParentId);
    
    80
    -        String routesNodeId = ObserveI18nDecoratorHelper.getTypePluralI18nKey(RouteDto.class);
    
    81
    -        return treeHelper.getChild(tripNode, routesNodeId);
    
    74
    +    NavigationTreeNodeSupport<?> getNewParentNode(NavigationTree treeHelper, NavigationTreeNodeSupport<?> grandParentNode, String newParentId) {
    
    75
    +        NavigationTreeNodeSupport<?> parentNode = grandParentNode.findChildById(newParentId);
    
    76
    +        return parentNode.findChildByClass(RouteDto.class);
    
    82 77
         }
    
    83 78
     
    
    84
    -    static Optional<String> chooseNewTripSeine(ObserveMainUI mainUI, NavigationTreeNodeSupport oldTripSeineNode) {
    
    85
    -        NavigationTreeNodeSupport programNode = oldTripSeineNode.getParent();
    
    86
    -        String oldTripSeineId = oldTripSeineNode.getId();
    
    87
    -        int tripSeineNb = programNode.getChildCount();
    
    79
    +    static Optional<String> chooseNewTripSeine(ObserveMainUI mainUI, NavigationTreeNodeSupport<?> oldParentNode) {
    
    80
    +        NavigationTreeNodeSupport<?> grandParentNode = oldParentNode.getParent();
    
    81
    +        String oldId = oldParentNode.getId();
    
    88 82
     
    
    89 83
             ObserveSwingApplicationContext applicationContext = ObserveSwingApplicationContext.get();
    
    90 84
             DataReferenceDecorator<TripSeineReference> decorator = applicationContext.getDecoratorService().getDataReferenceDecorator(TripSeineReference.class);
    
    91 85
     
    
    92
    -        //on crée un tableau avec une marée en moins car on ne propose pas la marée actuel
    
    93
    -        DecoratedNodeEntity[] decoratedTripSeines = new DecoratedNodeEntity[tripSeineNb - 1];
    
    94
    -
    
    95
    -        int j = 0;
    
    96
    -        for (int i = 0; i < tripSeineNb; i++) {
    
    97
    -
    
    98
    -            TripSeineNavigationTreeNode tripSeineNode = (TripSeineNavigationTreeNode) programNode.getChildAt(i);
    
    99
    -
    
    100
    -            String tripSeineId = tripSeineNode.getId();
    
    101
    -
    
    102
    -            if (!oldTripSeineId.equals(tripSeineId)) {
    
    103
    -                decoratedTripSeines[j++] = DecoratedNodeEntity.newDecoratedNodeEntity(tripSeineNode, decorator);
    
    104
    -            }
    
    105
    -        }
    
    106
    -
    
    107
    -        Object decoratedTripSeine = JOptionPane.showInputDialog(mainUI,
    
    108
    -                                                                t("observe.action.choose.tripSeine.message"),
    
    109
    -                                                                t("observe.action.choose.tripSeine.title"),
    
    110
    -                                                                JOptionPane.QUESTION_MESSAGE,
    
    111
    -                                                                null,
    
    112
    -                                                                decoratedTripSeines,
    
    113
    -                                                                null);
    
    114
    -        return Optional.ofNullable(decoratedTripSeine != null ? ((DecoratedNodeEntity) decoratedTripSeine).getId() : null);
    
    86
    +        return chooseCandidate(mainUI, grandParentNode, oldId, decorator, t("observe.action.choose.tripSeine.message"),
    
    87
    +                               t("observe.action.choose.tripSeine.title"));
    
    115 88
         }
    
    116 89
     
    
    117 90
     }

  • client-core/src/main/java/fr/ird/observe/client/ui/actions/content/MoveRoutesUIAction.java
    ... ... @@ -28,9 +28,9 @@ import fr.ird.observe.client.ui.content.data.seine.RoutesUI;
    28 28
     import fr.ird.observe.client.ui.tree.navigation.NavigationTree;
    
    29 29
     import fr.ird.observe.client.ui.tree.navigation.nodes.NavigationTreeNodeSupport;
    
    30 30
     import fr.ird.observe.dto.data.seine.RouteDto;
    
    31
    -import fr.ird.observe.dto.decoration.ObserveI18nDecoratorHelper;
    
    32 31
     
    
    33 32
     import java.util.List;
    
    33
    +import java.util.Objects;
    
    34 34
     import java.util.Optional;
    
    35 35
     
    
    36 36
     import static io.ultreia.java4all.i18n.I18n.n;
    
    ... ... @@ -58,7 +58,7 @@ public class MoveRoutesUIAction extends MoveMultipleDataUIActionSupport<RoutesUI
    58 58
         }
    
    59 59
     
    
    60 60
         @Override
    
    61
    -    Optional<String> getNewParentId(ObserveMainUI mainUI, NavigationTreeNodeSupport oldParentNode) {
    
    61
    +    Optional<String> getNewParentId(ObserveMainUI mainUI, NavigationTreeNodeSupport<?> oldParentNode) {
    
    62 62
             return MoveRouteUIAction.chooseNewTripSeine(getMainUI(), oldParentNode);
    
    63 63
         }
    
    64 64
     
    
    ... ... @@ -69,16 +69,15 @@ public class MoveRoutesUIAction extends MoveMultipleDataUIActionSupport<RoutesUI
    69 69
     
    
    70 70
     
    
    71 71
         @Override
    
    72
    -    void updateUI(RoutesUI ui, NavigationTreeNodeSupport oldRoutesNode, String tripSeineId, ImmutableSet<String> routeIds, List<Integer> positions) {
    
    72
    +    void updateUI(RoutesUI ui, NavigationTreeNodeSupport<?> oldRoutesNode, String tripSeineId, ImmutableSet<String> routeIds, List<Integer> positions) {
    
    73 73
     
    
    74 74
             ObserveOpenDataManager openDataManager = getOpenDataManager();
    
    75 75
             NavigationTree treeHelper = getMainUI().getNavigationUI().getTree();
    
    76 76
     
    
    77
    -        NavigationTreeNodeSupport oldTripSeineNode = oldRoutesNode.getParent();
    
    78
    -        NavigationTreeNodeSupport programNode = oldTripSeineNode.getParent();
    
    79
    -        NavigationTreeNodeSupport newTripSeineNode = treeHelper.getChild(programNode, tripSeineId);
    
    80
    -        String routesNodeId = ObserveI18nDecoratorHelper.getTypePluralI18nKey(RouteDto.class);
    
    81
    -        NavigationTreeNodeSupport newRoutesNode = treeHelper.getChild(newTripSeineNode, routesNodeId);
    
    77
    +        NavigationTreeNodeSupport<?> oldTripSeineNode = Objects.requireNonNull(oldRoutesNode.getParent());
    
    78
    +        NavigationTreeNodeSupport<?> programNode = Objects.requireNonNull(oldTripSeineNode.getParent());
    
    79
    +        NavigationTreeNodeSupport<?> newTripSeineNode = Objects.requireNonNull(programNode.findChildById(tripSeineId));
    
    80
    +        NavigationTreeNodeSupport<?> newRoutesNode = Objects.requireNonNull(newTripSeineNode.findChildByClass(RouteDto.class));
    
    82 81
     
    
    83 82
             // Let's check if we're moving an open route
    
    84 83
             Optional<String> openRoute = routeIds
    
    ... ... @@ -92,7 +91,7 @@ public class MoveRoutesUIAction extends MoveMultipleDataUIActionSupport<RoutesUI
    92 91
             // Let's reload the sub tree of each routes node.
    
    93 92
             // As the change have already be done in database, we just call the child loaders to regenerate the routes nodes sub trees
    
    94 93
             treeHelper.reloadNodeSubTree(oldRoutesNode);
    
    95
    -        treeHelper.reloadNodeSubTree(newRoutesNode);
    
    94
    +        treeHelper.reloadNodeSubTree(newRoutesNode, true);
    
    96 95
     
    
    97 96
             // 1. Select the newRoutesNode :
    
    98 97
             // only a selected node can be reloaded (@see fr.ird.observe.client.ui.tree.ObserveTreeBridge.canLoadChild).
    

  • client-core/src/main/java/fr/ird/observe/client/ui/actions/content/MoveSingleDataUIActionSupport.java
    ... ... @@ -28,10 +28,18 @@ import fr.ird.observe.client.ui.ObserveMainUI;
    28 28
     import fr.ird.observe.client.ui.actions.UIActionSupport;
    
    29 29
     import fr.ird.observe.client.ui.tree.navigation.NavigationTree;
    
    30 30
     import fr.ird.observe.client.ui.tree.navigation.nodes.NavigationTreeNodeSupport;
    
    31
    +import fr.ird.observe.client.ui.tree.navigation.nodes.ReferenceNavigationTreeNodeSupport;
    
    32
    +import fr.ird.observe.client.ui.util.DecoratedNodeEntity;
    
    33
    +import fr.ird.observe.dto.decoration.decorators.ObserveDecorator;
    
    31 34
     
    
    35
    +import javax.swing.JOptionPane;
    
    32 36
     import javax.swing.SwingUtilities;
    
    33 37
     import java.awt.event.ActionEvent;
    
    38
    +import java.util.ArrayList;
    
    39
    +import java.util.Enumeration;
    
    40
    +import java.util.List;
    
    34 41
     import java.util.Optional;
    
    42
    +import java.util.function.Predicate;
    
    35 43
     
    
    36 44
     /**
    
    37 45
      * Created by tchemit on 12/06/17.
    
    ... ... @@ -52,22 +60,22 @@ public abstract class MoveSingleDataUIActionSupport extends UIActionSupport {
    52 60
         public final void actionPerformed(ActionEvent e) {
    
    53 61
     
    
    54 62
             NavigationTree treeHelper = getMainUI().getNavigationUI().getTree();
    
    55
    -        NavigationTreeNodeSupport node = treeHelper.getSelectedNode();
    
    56
    -        NavigationTreeNodeSupport oldParentNode = node.getParent().getParent().equals(node.getRoot()) ? node.getParent() : node.getParent().getParent();
    
    63
    +        NavigationTreeNodeSupport<?> node = treeHelper.getSelectedNode();
    
    64
    +        NavigationTreeNodeSupport<?> oldParentNode = node.getParent().getParent().equals(node.getRoot()) ? node.getParent() : node.getParent().getParent();
    
    57 65
             Optional<String> optionalNewParentId = getNewParentId(getMainUI(), oldParentNode);
    
    58 66
     
    
    59 67
             optionalNewParentId.ifPresent(newParentId -> SwingUtilities.invokeLater(() -> apply(oldParentNode, node.getId(), newParentId)));
    
    60 68
         }
    
    61 69
     
    
    62
    -    abstract Optional<String> getNewParentId(ObserveMainUI mainUI, NavigationTreeNodeSupport oldParentNode);
    
    70
    +    abstract Optional<String> getNewParentId(ObserveMainUI mainUI, NavigationTreeNodeSupport<?> oldParentNode);
    
    63 71
     
    
    64
    -    private void apply(NavigationTreeNodeSupport oldParentNode, String dataId, String newParentId) {
    
    72
    +    private void apply(NavigationTreeNodeSupport<?> oldParentNode, String dataId, String newParentId) {
    
    65 73
     
    
    66 74
             NavigationTree treeHelper = getMainUI().getNavigationUI().getTree();
    
    67 75
     
    
    68
    -        NavigationTreeNodeSupport node = treeHelper.getSelectedNode();
    
    69
    -        NavigationTreeNodeSupport grandParentNode = oldParentNode.getParent();
    
    70
    -        NavigationTreeNodeSupport newParentNode = getNewParentNode(treeHelper, grandParentNode, newParentId);
    
    76
    +        NavigationTreeNodeSupport<?> node = treeHelper.getSelectedNode();
    
    77
    +        NavigationTreeNodeSupport<?> grandParentNode = oldParentNode.getParent();
    
    78
    +        NavigationTreeNodeSupport<?> newParentNode = getNewParentNode(treeHelper, grandParentNode, newParentId);
    
    71 79
     
    
    72 80
             closeNode(node.getId());
    
    73 81
     
    
    ... ... @@ -77,7 +85,7 @@ public abstract class MoveSingleDataUIActionSupport extends UIActionSupport {
    77 85
     
    
    78 86
             treeHelper.removeNode(node);
    
    79 87
     
    
    80
    -        NavigationTreeNodeSupport newNode = treeHelper.getChild(newParentNode, dataId);
    
    88
    +        NavigationTreeNodeSupport<?> newNode = treeHelper.getChild(newParentNode, dataId);
    
    81 89
     
    
    82 90
             if (newNode == null) {
    
    83 91
     
    
    ... ... @@ -95,5 +103,38 @@ public abstract class MoveSingleDataUIActionSupport extends UIActionSupport {
    95 103
     
    
    96 104
         abstract void closeNode(String dataId);
    
    97 105
     
    
    98
    -    abstract NavigationTreeNodeSupport getNewParentNode(NavigationTree treeHelper, NavigationTreeNodeSupport grandParentNode, String newParentId);
    
    106
    +    abstract NavigationTreeNodeSupport<?> getNewParentNode(NavigationTree treeHelper, NavigationTreeNodeSupport<?> grandParentNode, String newParentId);
    
    107
    +
    
    108
    +    static Optional<String> chooseCandidate(ObserveMainUI mainUI,
    
    109
    +                                            NavigationTreeNodeSupport<?> grandParentNode,
    
    110
    +                                            String oldId,
    
    111
    +                                            ObserveDecorator<?> decorator,
    
    112
    +                                            String title,
    
    113
    +                                            String message) {
    
    114
    +        return chooseCandidate(mainUI, grandParentNode, decorator, title, message, n -> n instanceof ReferenceNavigationTreeNodeSupport<?, ?> && !oldId.equals(n.getId()));
    
    115
    +    }
    
    116
    +
    
    117
    +    static Optional<String> chooseCandidate(ObserveMainUI mainUI,
    
    118
    +                                            NavigationTreeNodeSupport<?> grandParentNode,
    
    119
    +                                            ObserveDecorator<?> decorator,
    
    120
    +                                            String title,
    
    121
    +                                            String message,
    
    122
    +                                            Predicate<NavigationTreeNodeSupport<?>> filter) {
    
    123
    +        List<DecoratedNodeEntity> candidateList = new ArrayList<>();
    
    124
    +        Enumeration<?> children = grandParentNode.children();
    
    125
    +        while (children.hasMoreElements()) {
    
    126
    +            NavigationTreeNodeSupport<?> candidateNode = (NavigationTreeNodeSupport<?>) children.nextElement();
    
    127
    +            if (filter.test(candidateNode)) {
    
    128
    +                candidateList.add(DecoratedNodeEntity.newDecoratedNodeEntity((ReferenceNavigationTreeNodeSupport<?, ?>) candidateNode, decorator));
    
    129
    +            }
    
    130
    +        }
    
    131
    +        DecoratedNodeEntity selectedEntity = (DecoratedNodeEntity) JOptionPane.showInputDialog(mainUI,
    
    132
    +                                                                                               title,
    
    133
    +                                                                                               message,
    
    134
    +                                                                                               JOptionPane.QUESTION_MESSAGE,
    
    135
    +                                                                                               null,
    
    136
    +                                                                                               candidateList.toArray(new DecoratedNodeEntity[0]),
    
    137
    +                                                                                               null);
    
    138
    +        return Optional.ofNullable(selectedEntity).map(DecoratedNodeEntity::getId);
    
    139
    +    }
    
    99 140
     }

  • client-core/src/main/java/fr/ird/observe/client/ui/actions/content/MoveTripSeinesUIAction.java
    ... ... @@ -54,7 +54,7 @@ public class MoveTripSeinesUIAction extends MoveTripsUIAction<TripSeinesUI> {
    54 54
         @Override
    
    55 55
         protected void updateModelData(TripSeinesUI ui) {
    
    56 56
             TripSeinesUIModel model = ui.getModel();
    
    57
    -        List<TripSeineReference> data = new ArrayList(model.getData());
    
    57
    +        List<TripSeineReference> data = new ArrayList<>(model.getData());
    
    58 58
             data.removeAll(model.getSelectedDatas());
    
    59 59
             model.setData(data);
    
    60 60
         }
    

  • client-core/src/main/java/fr/ird/observe/client/ui/actions/content/MoveTripUIAction.java
    ... ... @@ -25,17 +25,14 @@ import fr.ird.observe.client.ObserveSwingApplicationContext;
    25 25
     import fr.ird.observe.client.ui.ObserveMainUI;
    
    26 26
     import fr.ird.observe.client.ui.tree.navigation.NavigationTree;
    
    27 27
     import fr.ird.observe.client.ui.tree.navigation.nodes.NavigationTreeNodeSupport;
    
    28
    +import fr.ird.observe.client.ui.tree.navigation.nodes.ReferenceNavigationTreeNodeSupport;
    
    28 29
     import fr.ird.observe.client.ui.tree.navigation.nodes.longline.ProgramLonglineNavigationTreeNode;
    
    29 30
     import fr.ird.observe.client.ui.tree.navigation.nodes.seine.ProgramSeineNavigationTreeNode;
    
    30
    -import fr.ird.observe.client.ui.util.DecoratedNodeEntity;
    
    31 31
     import fr.ird.observe.dto.IdHelper;
    
    32 32
     import fr.ird.observe.dto.decoration.decorators.ReferentialReferenceDecorator;
    
    33 33
     import fr.ird.observe.dto.referential.GearType;
    
    34 34
     import fr.ird.observe.dto.referential.ProgramReference;
    
    35 35
     
    
    36
    -import javax.swing.JOptionPane;
    
    37
    -import java.util.ArrayList;
    
    38
    -import java.util.List;
    
    39 36
     import java.util.Optional;
    
    40 37
     
    
    41 38
     import static io.ultreia.java4all.i18n.I18n.t;
    
    ... ... @@ -65,7 +62,7 @@ public abstract class MoveTripUIAction extends MoveSingleDataUIActionSupport {
    65 62
         }
    
    66 63
     
    
    67 64
         @Override
    
    68
    -    Optional<String> getNewParentId(ObserveMainUI mainUI, NavigationTreeNodeSupport oldParentNode) {
    
    65
    +    Optional<String> getNewParentId(ObserveMainUI mainUI, NavigationTreeNodeSupport<?> oldParentNode) {
    
    69 66
             return chooseNewProgram(mainUI, gearType, oldParentNode.getId());
    
    70 67
         }
    
    71 68
     
    
    ... ... @@ -88,58 +85,31 @@ public abstract class MoveTripUIAction extends MoveSingleDataUIActionSupport {
    88 85
         }
    
    89 86
     
    
    90 87
         @Override
    
    91
    -    NavigationTreeNodeSupport getNewParentNode(NavigationTree treeHelper, NavigationTreeNodeSupport grandParentNode, String newParentId) {
    
    92
    -        return treeHelper.getChild(grandParentNode, newParentId);
    
    88
    +    NavigationTreeNodeSupport<?> getNewParentNode(NavigationTree treeHelper, NavigationTreeNodeSupport<?> grandParentNode, String newParentId) {
    
    89
    +        return grandParentNode.findChildById(newParentId);
    
    93 90
         }
    
    94 91
     
    
    95
    -    static Optional<String> chooseNewProgram(ObserveMainUI mainUI, GearType gearType, String oldProgramId) {
    
    92
    +    static Optional<String> chooseNewProgram(ObserveMainUI mainUI, GearType gearType, String oldId) {
    
    96 93
     
    
    97 94
             NavigationTree treeHelper = mainUI.getNavigationUI().getTree();
    
    98 95
     
    
    99 96
             // racine
    
    100
    -        NavigationTreeNodeSupport rootNode = treeHelper.getRootNode();
    
    101
    -
    
    102
    -        //on crée un tableau avec un programme en moins car on ne propose pas le programme actuel
    
    103
    -        List<DecoratedNodeEntity> decoratedProgramList = new ArrayList<>();
    
    104
    -
    
    105
    -        ReferentialReferenceDecorator<ProgramReference> programDecorator = ObserveSwingApplicationContext.get().getDecoratorService().getReferentialReferenceDecorator(ProgramReference.class);
    
    106
    -
    
    107
    -        for (int i = 0, n = rootNode.getChildCount(); i < n; i++) {
    
    108
    -
    
    109
    -            NavigationTreeNodeSupport programNode = (NavigationTreeNodeSupport) rootNode.getChildAt(i);
    
    110
    -            String programId = programNode.getId();
    
    111
    -
    
    112
    -            // si le noeud programme n'est pas le même que le parent actuel
    
    113
    -            // si le noeud est bien un noeud de programme
    
    114
    -            if (programId != null && IdHelper.isProgramId(programId) && !oldProgramId.equals(programId)) {
    
    115
    -
    
    116
    -                if (programNode instanceof ProgramSeineNavigationTreeNode && GearType.seine == gearType) {
    
    117
    -
    
    118
    -                    ProgramSeineNavigationTreeNode node = (ProgramSeineNavigationTreeNode) programNode;
    
    119
    -                    decoratedProgramList.add(DecoratedNodeEntity.newDecoratedNodeEntity(node, programDecorator));
    
    120
    -
    
    121
    -                } else if (programNode instanceof ProgramLonglineNavigationTreeNode && GearType.longline == gearType) {
    
    122
    -
    
    123
    -                    ProgramLonglineNavigationTreeNode node = (ProgramLonglineNavigationTreeNode) programNode;
    
    124
    -                    decoratedProgramList.add(DecoratedNodeEntity.newDecoratedNodeEntity(node, programDecorator));
    
    125
    -
    
    126
    -                }
    
    127
    -
    
    128
    -            }
    
    129
    -        }
    
    130
    -
    
    131
    -        DecoratedNodeEntity[] decoratedPrograms =
    
    132
    -                decoratedProgramList.toArray(new DecoratedNodeEntity[0]);
    
    133
    -
    
    134
    -        DecoratedNodeEntity decoratedProgram = (DecoratedNodeEntity) JOptionPane.showInputDialog(mainUI,
    
    135
    -                                                                                                 t("observe.action.choose.program.message"),
    
    136
    -                                                                                                 t("observe.action.choose.program.title"),
    
    137
    -                                                                                                 JOptionPane.QUESTION_MESSAGE,
    
    138
    -                                                                                                 null,
    
    139
    -                                                                                                 decoratedPrograms,
    
    140
    -                                                                                                 null);
    
    141
    -
    
    142
    -        return Optional.ofNullable(decoratedProgram == null ? null : decoratedProgram.getId());
    
    97
    +        NavigationTreeNodeSupport<?> grandParentNode = treeHelper.getRootNode();
    
    98
    +
    
    99
    +        ReferentialReferenceDecorator<ProgramReference> decorator = ObserveSwingApplicationContext.get().getDecoratorService().getReferentialReferenceDecorator(ProgramReference.class);
    
    100
    +
    
    101
    +        return chooseCandidate(mainUI, grandParentNode, decorator, t("observe.action.choose.program.message"),
    
    102
    +                               t("observe.action.choose.program.title"),
    
    103
    +                               node -> {
    
    104
    +                                   if (!(node instanceof ReferenceNavigationTreeNodeSupport<?, ?>)) {
    
    105
    +                                       return false;
    
    106
    +                                   }
    
    107
    +                                   ReferenceNavigationTreeNodeSupport<?, ?> candidateNode = (ReferenceNavigationTreeNodeSupport<?, ?>) node;
    
    108
    +                                   String candidateId = candidateNode.getId();
    
    109
    +                                   return (candidateId != null && IdHelper.isProgramId(candidateId) && !oldId.equals(candidateId))
    
    110
    +                                           && ((candidateNode instanceof ProgramSeineNavigationTreeNode && GearType.seine == gearType)
    
    111
    +                                           || (candidateNode instanceof ProgramLonglineNavigationTreeNode && GearType.longline == gearType));
    
    112
    +                               });
    
    143 113
         }
    
    144 114
     
    
    145 115
     }

  • client-core/src/main/java/fr/ird/observe/client/ui/actions/content/MoveTripsUIAction.java
    ... ... @@ -66,12 +66,12 @@ public abstract class MoveTripsUIAction<U extends ContentListUI<?, ?, ?, ?>> ext
    66 66
         }
    
    67 67
     
    
    68 68
         @Override
    
    69
    -    Optional<String> getNewParentId(ObserveMainUI mainUI, NavigationTreeNodeSupport oldParentNode) {
    
    69
    +    Optional<String> getNewParentId(ObserveMainUI mainUI, NavigationTreeNodeSupport<?> oldParentNode) {
    
    70 70
             return MoveTripUIAction.chooseNewProgram(getMainUI(), gearType, oldParentNode.getId());
    
    71 71
         }
    
    72 72
     
    
    73 73
         @Override
    
    74
    -    void updateUI(U ui, NavigationTreeNodeSupport oldParentNode, String newParentId, ImmutableSet<String> dataIds, List<Integer> positions) {
    
    74
    +    void updateUI(U ui, NavigationTreeNodeSupport<?> oldParentNode, String newParentId, ImmutableSet<String> dataIds, List<Integer> positions) {
    
    75 75
     
    
    76 76
             String oldProgramId = oldParentNode.getId();
    
    77 77
     
    
    ... ... @@ -79,14 +79,14 @@ public abstract class MoveTripsUIAction<U extends ContentListUI<?, ?, ?, ?>> ext
    79 79
             ObserveOpenDataManager openDataManager = applicationContext.getOpenDataManager();
    
    80 80
             NavigationTree treeHelper = getMainUI().getNavigationUI().getTree();
    
    81 81
     
    
    82
    -        NavigationTreeNodeSupport rootNode = treeHelper.getRootNode();
    
    83
    -        NavigationTreeNodeSupport newProgramNode = treeHelper.getChild(rootNode, newParentId);
    
    82
    +        NavigationTreeNodeSupport<?> rootNode = treeHelper.getRootNode();
    
    83
    +        NavigationTreeNodeSupport<?> newProgramNode = rootNode.findChildById(newParentId);
    
    84 84
     
    
    85 85
             UnmodifiableIterator<String> iterator = dataIds.iterator();
    
    86 86
             for (Integer position : positions) {
    
    87 87
     
    
    88 88
                 String tripId = iterator.next();
    
    89
    -            NavigationTreeNodeSupport tripNode = treeHelper.getChild(oldParentNode, tripId);
    
    89
    +            NavigationTreeNodeSupport<?> tripNode = oldParentNode.findChildById(tripId);
    
    90 90
                 boolean wasOpen = tripNode.isOpen();
    
    91 91
                 treeHelper.removeNode(tripNode);
    
    92 92
     
    
    ... ... @@ -95,7 +95,7 @@ public abstract class MoveTripsUIAction<U extends ContentListUI<?, ?, ?, ?>> ext
    95 95
                     openDataManager.openProgram(newParentId);
    
    96 96
                 }
    
    97 97
     
    
    98
    -            NavigationTreeNodeSupport newTripNode = treeHelper.getChild(newProgramNode, tripId);
    
    98
    +            NavigationTreeNodeSupport<?> newTripNode = treeHelper.getChild(newProgramNode, tripId);
    
    99 99
     
    
    100 100
                 if (newTripNode == null) {
    
    101 101
     
    

  • client-core/src/main/java/fr/ird/observe/client/ui/tree/navigation/NavigationTree.java
    ... ... @@ -407,20 +407,17 @@ public class NavigationTree extends JXTree {
    407 407
             SwingUtilities.invokeLater(this::grabFocus);
    
    408 408
         }
    
    409 409
     
    
    410
    -    public void reloadNodeSubTree(NavigationTreeNodeSupport node) {
    
    411
    -        Objects.requireNonNull(node, "node is null, we can not reload its structure");
    
    410
    +    public void reloadNodeSubTree(NavigationTreeNodeSupport<?> node) {
    
    411
    +        reloadNodeSubTree(node, false);
    
    412
    +    }
    
    412 413
     
    
    413
    -        // 1. Let's clear node structure
    
    414
    -        while (node.getChildCount() > 0) {
    
    415
    -            removeNode((NavigationTreeNodeSupport) node.getFirstChild());
    
    414
    +    public void reloadNodeSubTree(NavigationTreeNodeSupport<?> node, boolean expand) {
    
    415
    +        Objects.requireNonNull(node, "node is null, we can not reload its structure");
    
    416
    +        getTreeModel().update(node);
    
    417
    +        if (expand) {
    
    418
    +            // Fix bug (if no child in parent node, it will not expand...)
    
    419
    +            fireTreeExpanded(new TreePath(node.getPath()));
    
    416 420
             }
    
    417
    -
    
    418
    -        // 3. Let's re-generate node's children by populating the node : this will call the child loaders.
    
    419
    -        node.updateNode();
    
    420
    -
    
    421
    -        // Fix bug (if no child in parent node, it will not expand...)
    
    422
    -        fireTreeExpanded(new TreePath(node.getPath()));
    
    423
    -
    
    424 421
         }
    
    425 422
     
    
    426 423
         public void reloadNode(NavigationTreeNodeSupport<?> node, boolean deep) {
    

  • client-core/src/main/java/fr/ird/observe/client/ui/tree/navigation/NavigationTreeModel.java
    ... ... @@ -79,6 +79,11 @@ public class NavigationTreeModel extends DefaultTreeModel {
    79 79
             super.reload(node);
    
    80 80
         }
    
    81 81
     
    
    82
    +    public <N extends NavigationTreeNodeSupport> void update(N node) {
    
    83
    +        node.updateNode();
    
    84
    +        super.reload(node);
    
    85
    +    }
    
    86
    +
    
    82 87
         public <N extends NavigationTreeNodeSupport> void open(N node) {
    
    83 88
             if (node instanceof WithChildsToReload) {
    
    84 89
                 boolean updated = node.populateChilds();
    

  • client-core/src/main/java/fr/ird/observe/client/ui/tree/navigation/nodes/NavigationTreeNodeSupport.java
    ... ... @@ -25,8 +25,8 @@ package fr.ird.observe.client.ui.tree.navigation.nodes;
    25 25
     import fr.ird.observe.client.ui.actions.content.SelectNodeUIAction;
    
    26 26
     import fr.ird.observe.client.ui.content.ContentUI;
    
    27 27
     import fr.ird.observe.client.ui.tree.ObserveTreeNodeSupport;
    
    28
    -import org.apache.logging.log4j.Logger;
    
    29 28
     import org.apache.logging.log4j.LogManager;
    
    29
    +import org.apache.logging.log4j.Logger;
    
    30 30
     import org.nuiton.jaxx.runtime.JAXXObject;
    
    31 31
     
    
    32 32
     import javax.swing.AbstractAction;
    
    ... ... @@ -163,9 +163,9 @@ public abstract class NavigationTreeNodeSupport<O> extends ObserveTreeNodeSuppor
    163 163
                 // au final le noeud est une feuille, donc ne convient pas
    
    164 164
                 return null;
    
    165 165
             }
    
    166
    -        Enumeration<NavigationTreeNodeSupport> children = children();
    
    166
    +        Enumeration<NavigationTreeNodeSupport<?>> children = children();
    
    167 167
             while (children.hasMoreElements()) {
    
    168
    -            NavigationTreeNodeSupport node = children.nextElement();
    
    168
    +            NavigationTreeNodeSupport<?> node = children.nextElement();
    
    169 169
                 if (childType.isAssignableFrom(node.getClass())) {
    
    170 170
                     return node;
    
    171 171
                 }
    
    ... ... @@ -187,10 +187,10 @@ public abstract class NavigationTreeNodeSupport<O> extends ObserveTreeNodeSuppor
    187 187
                 // au final le noeud est une feuille, donc ne convient pas
    
    188 188
                 return null;
    
    189 189
             }
    
    190
    -        Enumeration<NavigationTreeNodeSupport> children = children();
    
    190
    +        Enumeration<NavigationTreeNodeSupport<?>> children = children();
    
    191 191
             while (children.hasMoreElements()) {
    
    192
    -            NavigationTreeNodeSupport node = children.nextElement();
    
    193
    -            if (childType.isAssignableFrom((Class) node.getUserObject())) {
    
    192
    +            NavigationTreeNodeSupport<?> node = children.nextElement();
    
    193
    +            if (childType.isAssignableFrom(node.getDataType())) {
    
    194 194
                     return node;
    
    195 195
                 }
    
    196 196
             }