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

Commits:

5 changed files:

Changes:

  • client/datasource/editor/api/src/main/java/fr/ird/observe/client/datasource/editor/api/content/actions/move/MoveExecutor.java
    ... ... @@ -27,7 +27,6 @@ import fr.ird.observe.client.datasource.editor.api.DataSourceEditor;
    27 27
     import fr.ird.observe.client.datasource.editor.api.content.actions.mode.ChangeMode;
    
    28 28
     import fr.ird.observe.client.datasource.editor.api.content.actions.move.tree.MoveTreeAdapter;
    
    29 29
     import fr.ird.observe.client.datasource.editor.api.navigation.NavigationTree;
    
    30
    -import fr.ird.observe.dto.data.TripAware;
    
    31 30
     import fr.ird.observe.toolkit.dto.navigation.edit.EditNode;
    
    32 31
     import fr.ird.observe.toolkit.dto.navigation.edit.close.CloseEditNodeVetoException;
    
    33 32
     import org.apache.logging.log4j.LogManager;
    
    ... ... @@ -103,13 +102,7 @@ public class MoveExecutor {
    103 102
         }
    
    104 103
     
    
    105 104
         protected boolean close(MoveRequest request, EditNode<?> editNode, DataSourceEditor dataSourceEditor) {
    
    106
    -        if (TripAware.class.isAssignableFrom(request.getReferenceType())) {
    
    107
    -            // while moving trip, we do not close them
    
    108
    -            //FIXME Maybe this should be driven by request (with doClose parameter)
    
    109
    -            return true;
    
    110
    -        }
    
    111
    -        String id = request.getIds().iterator().next();
    
    112
    -        if (editNode != null && Objects.equals(id, editNode.getId())) {
    
    105
    +        if (editNode != null && request.getIds().contains(editNode.getId())) {
    
    113 106
                 try {
    
    114 107
                     ChangeMode.closeData(dataSourceEditor, editNode);
    
    115 108
                 } catch (CloseEditNodeVetoException e) {
    

  • client/datasource/editor/api/src/main/java/fr/ird/observe/client/datasource/editor/api/content/actions/move/tree/DefaultMultipleMoveTreeAdapter.java
    ... ... @@ -27,8 +27,6 @@ import fr.ird.observe.client.datasource.editor.api.content.actions.move.MoveRequ
    27 27
     import fr.ird.observe.client.datasource.editor.api.content.data.list.ContentListUINavigationNode;
    
    28 28
     import fr.ird.observe.client.datasource.editor.api.navigation.NavigationTree;
    
    29 29
     import fr.ird.observe.client.datasource.editor.api.navigation.tree.NavigationNode;
    
    30
    -import fr.ird.observe.client.datasource.editor.api.navigation.tree.root.RootNavigationNode;
    
    31
    -import fr.ird.observe.dto.referential.common.ProgramReference;
    
    32 30
     
    
    33 31
     /**
    
    34 32
      * Created on 15/10/2020.
    
    ... ... @@ -41,69 +39,24 @@ public class DefaultMultipleMoveTreeAdapter implements MoveTreeAdapter {
    41 39
         @Override
    
    42 40
         public void adaptTree(MoveRequest request, NavigationTree tree) {
    
    43 41
             ImmutableSet<String> ids = request.getIds();
    
    42
    +
    
    44 43
             // get old parent node
    
    45 44
             ContentListUINavigationNode oldParentNode = (ContentListUINavigationNode) tree.getSelectedNode().upToReferenceContainerNode(request.getReferenceType());
    
    46 45
     
    
    47
    -        // get shared ancestor of tow parents
    
    46
    +        // get shared ancestor of two parents
    
    48 47
             NavigationNode parentContainerNode = oldParentNode.upToReferenceContainerNode(request.getParentReferenceType());
    
    49 48
     
    
    50 49
             // get new parent node
    
    51
    -        ContentListUINavigationNode newParentNode = getNewParentNode(request, parentContainerNode);
    
    50
    +        ContentListUINavigationNode newParentNode = MoveTreeAdapter.getNewParentNode(request, parentContainerNode);
    
    52 51
     
    
    53 52
             // update it
    
    54 53
             newParentNode.addChildren(ids);
    
    55 54
     
    
    56 55
             // clean old paren node
    
    57
    -        cleanOldParentNode(tree, ids, oldParentNode);
    
    58
    -
    
    59
    -        if (request.isSelectTarget()) {
    
    60
    -            // select new parent node
    
    61
    -            tree.selectSafeNode(newParentNode);
    
    62
    -        } else {
    
    63
    -            if (oldParentNode.getParent() == null) {
    
    64
    -                // limit case: select first node in tree (previous old parent node was removed)
    
    65
    -                tree.selectFirstNode();
    
    66
    -            }
    
    67
    -        }
    
    68
    -    }
    
    56
    +        MoveTreeAdapter.cleanOldParentNode(tree, ids, oldParentNode);
    
    69 57
     
    
    70
    -    protected void cleanOldParentNode(NavigationTree tree, ImmutableSet<String> ids, ContentListUINavigationNode oldParentNode) {
    
    71
    -        if (oldParentNode.getChildCount() == ids.size() && oldParentNode.getParent().isRoot()) {
    
    72
    -            RootNavigationNode root = (RootNavigationNode) oldParentNode.getParent();
    
    73
    -            if (!root.getInitializer().getConfig().isLoadEmptyProgram()) {
    
    74
    -                // limit case : node will be empty, must remove it
    
    75
    -                root.remove(oldParentNode);
    
    76
    -                return;
    
    77
    -            }
    
    78
    -        }
    
    79
    -        // clean it
    
    80
    -        oldParentNode.removeChildren(ids);
    
    81
    -
    
    82
    -        // reload node
    
    83
    -        oldParentNode.reloadNodeData();
    
    84
    -
    
    85
    -        // re-select the node (to update associated form)
    
    86
    -        tree.reSelectSafeNode(oldParentNode);
    
    58
    +        MoveTreeAdapter.doFinalSelect(request, tree, oldParentNode, newParentNode);
    
    87 59
         }
    
    88 60
     
    
    89
    -    protected ContentListUINavigationNode getNewParentNode(MoveRequest request, NavigationNode oldParentContainerNode) {
    
    90
    -        String newParentId = request.getNewParentId();
    
    91
    -        if (oldParentContainerNode.isRoot()) {
    
    92
    -            RootNavigationNode root = (RootNavigationNode) oldParentContainerNode;
    
    93
    -            boolean loadEmptyProgram = root.getInitializer().getConfig().isLoadEmptyProgram();
    
    94
    -            if (!loadEmptyProgram) {
    
    95
    -                NavigationNode result = root.findChildById(newParentId);
    
    96
    -                if (result == null) {
    
    97
    -                    // limit case : node does not exist (was empty previously), need to create it
    
    98
    -                    ProgramReference reference = root.getInitializer().getNavigationResult().getProgram(newParentId);
    
    99
    -                    result = root.getCapability().createChildNode(reference);
    
    100
    -                    int position = root.getCapability().getNodePosition(reference);
    
    101
    -                    root.insert(result, position);
    
    102
    -                }
    
    103
    -                return (ContentListUINavigationNode) result;
    
    104
    -            }
    
    105
    -        }
    
    106
    -        return (ContentListUINavigationNode) oldParentContainerNode.downToReferenceNode(request.getParentTargetReferenceType(), newParentId);
    
    107
    -    }
    
    108 61
     
    
    109 62
     }
    \ No newline at end of file

  • client/datasource/editor/api/src/main/java/fr/ird/observe/client/datasource/editor/api/content/actions/move/tree/DefaultSingleMoveTreeAdapter.java
    ... ... @@ -23,6 +23,7 @@ package fr.ird.observe.client.datasource.editor.api.content.actions.move.tree;
    23 23
      */
    
    24 24
     
    
    25 25
     import fr.ird.observe.client.datasource.editor.api.content.actions.move.MoveRequest;
    
    26
    +import fr.ird.observe.client.datasource.editor.api.content.data.list.ContentListUINavigationNode;
    
    26 27
     import fr.ird.observe.client.datasource.editor.api.navigation.NavigationTree;
    
    27 28
     import fr.ird.observe.client.datasource.editor.api.navigation.tree.NavigationNode;
    
    28 29
     import fr.ird.observe.dto.reference.DtoReference;
    
    ... ... @@ -37,47 +38,32 @@ public class DefaultSingleMoveTreeAdapter implements MoveTreeAdapter {
    37 38
     
    
    38 39
         @Override
    
    39 40
         public void adaptTree(MoveRequest request, NavigationTree tree) {
    
    41
    +        String id = request.getId();
    
    40 42
     
    
    41 43
             Class<? extends DtoReference> parentReferenceType = request.getParentTargetReferenceType();
    
    42 44
     
    
    43
    -        // selected node
    
    44
    -        NavigationNode node = tree.getSelectedNode();
    
    45
    +        Class<? extends DtoReference> referenceType = request.getReferenceType();
    
    45 46
     
    
    46
    -        Class<? extends DtoReference> referenceType = node.getScope().getMainReferenceType();
    
    47
    +        // get old parent node
    
    48
    +        ContentListUINavigationNode oldParentNode = (ContentListUINavigationNode) tree.getSelectedNode().upToReferenceContainerNode(referenceType);
    
    47 49
     
    
    48
    -        // up to old container reference node
    
    49
    -        NavigationNode oldChildContainerNode = node.upToReferenceContainerNode(referenceType);
    
    50
    -
    
    51
    -        // remove node from old child container node
    
    52
    -        node.removeFromParent();
    
    53
    -
    
    54
    -        // reload old child container node
    
    55
    -        oldChildContainerNode.nodeChanged();
    
    56
    -
    
    57
    -        // up to old parent container node
    
    58
    -        NavigationNode oldParentContainerNode = oldChildContainerNode.upToReferenceContainerNode(parentReferenceType);
    
    50
    +        // get shared ancestor of two parents
    
    51
    +        NavigationNode parentContainerNode = oldParentNode.upToReferenceContainerNode(parentReferenceType);
    
    59 52
     
    
    60 53
             // dow to new parent node
    
    61
    -        NavigationNode newParentNode = oldParentContainerNode.downToReferenceNode(parentReferenceType, request.getNewParentId());
    
    54
    +        ContentListUINavigationNode newParentNode = MoveTreeAdapter.getNewParentNode(request, parentContainerNode);
    
    62 55
     
    
    63 56
             // down to new child container node
    
    64
    -        NavigationNode newChildContainerNode = newParentNode.downToReferenceContainerNode(referenceType);
    
    65
    -
    
    66
    -        // insert node into new child container node
    
    67
    -        newChildContainerNode.add(node);
    
    57
    +        ContentListUINavigationNode newChildContainerNode = (ContentListUINavigationNode) newParentNode.downToReferenceContainerNode(referenceType);
    
    68 58
     
    
    69
    -        // reload new child container node
    
    70
    -        newChildContainerNode.nodeChanged();
    
    59
    +        // update it
    
    60
    +        NavigationNode node = newChildContainerNode.addChildren(id);
    
    71 61
     
    
    72
    -        // select final node parent (need to do this, otherwise next command has no effect (node stays the same)
    
    73
    -        tree.selectSafeNode(newChildContainerNode);
    
    74
    -
    
    75
    -        // get back brand new node (otherwise tree model is broken)
    
    76
    -        node = newChildContainerNode.downToReferenceNode(referenceType, request.getId());
    
    77
    -
    
    78
    -        // select final node
    
    79
    -        tree.selectSafeNode(node);
    
    62
    +        // clean old paren node
    
    63
    +        MoveTreeAdapter.cleanOldParentNode(tree, request.getIds(), oldParentNode);
    
    80 64
     
    
    81 65
             node.getParent().refreshToRoot();
    
    66
    +
    
    67
    +        MoveTreeAdapter.doFinalSelect(request, tree, oldParentNode, node);
    
    82 68
         }
    
    83 69
     }

  • client/datasource/editor/api/src/main/java/fr/ird/observe/client/datasource/editor/api/content/actions/move/tree/MoveTreeAdapter.java
    ... ... @@ -22,8 +22,13 @@ package fr.ird.observe.client.datasource.editor.api.content.actions.move.tree;
    22 22
      * #L%
    
    23 23
      */
    
    24 24
     
    
    25
    +import com.google.common.collect.ImmutableSet;
    
    25 26
     import fr.ird.observe.client.datasource.editor.api.content.actions.move.MoveRequest;
    
    27
    +import fr.ird.observe.client.datasource.editor.api.content.data.list.ContentListUINavigationNode;
    
    26 28
     import fr.ird.observe.client.datasource.editor.api.navigation.NavigationTree;
    
    29
    +import fr.ird.observe.client.datasource.editor.api.navigation.tree.NavigationNode;
    
    30
    +import fr.ird.observe.client.datasource.editor.api.navigation.tree.root.RootNavigationNode;
    
    31
    +import fr.ird.observe.dto.referential.common.ProgramReference;
    
    27 32
     
    
    28 33
     /**
    
    29 34
      * To adapt navigation tree after the move operation.
    
    ... ... @@ -37,4 +42,54 @@ public interface MoveTreeAdapter {
    37 42
     
    
    38 43
         void adaptTree(MoveRequest request, NavigationTree tree);
    
    39 44
     
    
    45
    +    static void cleanOldParentNode(NavigationTree tree, ImmutableSet<String> ids, ContentListUINavigationNode oldParentNode) {
    
    46
    +        if (oldParentNode.getChildCount() == ids.size() && oldParentNode.getParent().isRoot()) {
    
    47
    +            RootNavigationNode root = (RootNavigationNode) oldParentNode.getParent();
    
    48
    +            if (!root.getInitializer().getConfig().isLoadEmptyProgram()) {
    
    49
    +                // limit case : node will be empty, must remove it
    
    50
    +                root.remove(oldParentNode);
    
    51
    +                return;
    
    52
    +            }
    
    53
    +        }
    
    54
    +        // clean it
    
    55
    +        oldParentNode.removeChildren(ids);
    
    56
    +
    
    57
    +        // reload node
    
    58
    +        oldParentNode.reloadNodeData();
    
    59
    +
    
    60
    +        // re-select the node (to update associated form)
    
    61
    +        tree.reSelectSafeNode(oldParentNode);
    
    62
    +    }
    
    63
    +
    
    64
    +     static ContentListUINavigationNode getNewParentNode(MoveRequest request, NavigationNode oldParentContainerNode) {
    
    65
    +        String newParentId = request.getNewParentId();
    
    66
    +        if (oldParentContainerNode.isRoot()) {
    
    67
    +            RootNavigationNode root = (RootNavigationNode) oldParentContainerNode;
    
    68
    +            boolean loadEmptyProgram = root.getInitializer().getConfig().isLoadEmptyProgram();
    
    69
    +            if (!loadEmptyProgram) {
    
    70
    +                NavigationNode result = root.findChildById(newParentId);
    
    71
    +                if (result == null) {
    
    72
    +                    // limit case : node does not exist (was empty previously), need to create it
    
    73
    +                    ProgramReference reference = root.getInitializer().getNavigationResult().getProgram(newParentId);
    
    74
    +                    result = root.getCapability().createChildNode(reference);
    
    75
    +                    int position = root.getCapability().getNodePosition(reference);
    
    76
    +                    root.insert(result, position);
    
    77
    +                }
    
    78
    +                return (ContentListUINavigationNode) result;
    
    79
    +            }
    
    80
    +        }
    
    81
    +        return (ContentListUINavigationNode) oldParentContainerNode.downToReferenceNode(request.getParentTargetReferenceType(), newParentId);
    
    82
    +    }
    
    83
    +
    
    84
    +    static void doFinalSelect(MoveRequest request, NavigationTree tree,NavigationNode oldParentNode, NavigationNode newParentNode  ) {
    
    85
    +        if (request.isSelectTarget()) {
    
    86
    +            // select new parent node
    
    87
    +            tree.selectSafeNode(newParentNode);
    
    88
    +        } else {
    
    89
    +            if (oldParentNode.getParent() == null) {
    
    90
    +                // limit case: select first node in tree (previous old parent node was removed)
    
    91
    +                tree.selectFirstNode();
    
    92
    +            }
    
    93
    +        }
    
    94
    +    }
    
    40 95
     }

  • client/datasource/editor/api/src/main/java/fr/ird/observe/client/datasource/editor/api/content/data/list/ContentListUINavigationNode.java
    ... ... @@ -102,4 +102,25 @@ public abstract class ContentListUINavigationNode extends NavigationNode {
    102 102
                 }
    
    103 103
             }
    
    104 104
         }
    
    105
    +    public NavigationNode addChildren(String id) {
    
    106
    +        NavigationNode result=null;
    
    107
    +        ContentListUINavigationInitializer initializer = getInitializer();
    
    108
    +        boolean notLoaded = isNotLoaded();
    
    109
    +        reloadNodeData();
    
    110
    +        List<? extends DataDtoReference> references = initializer.getReferences();
    
    111
    +        ContentListUINavigationCapability<?> capability = getCapability();
    
    112
    +        for (DataDtoReference reference : references) {
    
    113
    +            boolean idEquals = id.equals(reference.getId());
    
    114
    +            if (notLoaded || idEquals) {
    
    115
    +
    
    116
    +                NavigationNode childNode = capability.createChildNode(reference);
    
    117
    +                int nodePosition = capability.getNodePosition(reference);
    
    118
    +                insert(childNode, nodePosition);
    
    119
    +                if (idEquals) {
    
    120
    +                    result = childNode;
    
    121
    +                }
    
    122
    +            }
    
    123
    +        }
    
    124
    +        return result;
    
    125
    +    }
    
    105 126
     }