Tony CHEMIT pushed to branch develop at ultreiaio / ird-observe Commits: 3d3fda15 by Tony Chemit at 2021-02-11T19:04:53+01:00 Problème de contexte d'édition lors de déplacement - Closes #1789 - - - - - 20b77f77 by Tony Chemit at 2021-02-11T19:06:32+01:00 Déplacement de marées pas effectif - Closes #1786 Revue pour le déplacement simple. - - - - - 5 changed files: - client/datasource/editor/api/src/main/java/fr/ird/observe/client/datasource/editor/api/content/actions/move/MoveExecutor.java - client/datasource/editor/api/src/main/java/fr/ird/observe/client/datasource/editor/api/content/actions/move/tree/DefaultMultipleMoveTreeAdapter.java - client/datasource/editor/api/src/main/java/fr/ird/observe/client/datasource/editor/api/content/actions/move/tree/DefaultSingleMoveTreeAdapter.java - client/datasource/editor/api/src/main/java/fr/ird/observe/client/datasource/editor/api/content/actions/move/tree/MoveTreeAdapter.java - client/datasource/editor/api/src/main/java/fr/ird/observe/client/datasource/editor/api/content/data/list/ContentListUINavigationNode.java 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; import fr.ird.observe.client.datasource.editor.api.content.actions.mode.ChangeMode; import fr.ird.observe.client.datasource.editor.api.content.actions.move.tree.MoveTreeAdapter; import fr.ird.observe.client.datasource.editor.api.navigation.NavigationTree; -import fr.ird.observe.dto.data.TripAware; import fr.ird.observe.toolkit.dto.navigation.edit.EditNode; import fr.ird.observe.toolkit.dto.navigation.edit.close.CloseEditNodeVetoException; import org.apache.logging.log4j.LogManager; @@ -103,13 +102,7 @@ public class MoveExecutor { } protected boolean close(MoveRequest request, EditNode<?> editNode, DataSourceEditor dataSourceEditor) { - if (TripAware.class.isAssignableFrom(request.getReferenceType())) { - // while moving trip, we do not close them - //FIXME Maybe this should be driven by request (with doClose parameter) - return true; - } - String id = request.getIds().iterator().next(); - if (editNode != null && Objects.equals(id, editNode.getId())) { + if (editNode != null && request.getIds().contains(editNode.getId())) { try { ChangeMode.closeData(dataSourceEditor, editNode); } 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 import fr.ird.observe.client.datasource.editor.api.content.data.list.ContentListUINavigationNode; import fr.ird.observe.client.datasource.editor.api.navigation.NavigationTree; import fr.ird.observe.client.datasource.editor.api.navigation.tree.NavigationNode; -import fr.ird.observe.client.datasource.editor.api.navigation.tree.root.RootNavigationNode; -import fr.ird.observe.dto.referential.common.ProgramReference; /** * Created on 15/10/2020. @@ -41,69 +39,24 @@ public class DefaultMultipleMoveTreeAdapter implements MoveTreeAdapter { @Override public void adaptTree(MoveRequest request, NavigationTree tree) { ImmutableSet<String> ids = request.getIds(); + // get old parent node ContentListUINavigationNode oldParentNode = (ContentListUINavigationNode) tree.getSelectedNode().upToReferenceContainerNode(request.getReferenceType()); - // get shared ancestor of tow parents + // get shared ancestor of two parents NavigationNode parentContainerNode = oldParentNode.upToReferenceContainerNode(request.getParentReferenceType()); // get new parent node - ContentListUINavigationNode newParentNode = getNewParentNode(request, parentContainerNode); + ContentListUINavigationNode newParentNode = MoveTreeAdapter.getNewParentNode(request, parentContainerNode); // update it newParentNode.addChildren(ids); // clean old paren node - cleanOldParentNode(tree, ids, oldParentNode); - - if (request.isSelectTarget()) { - // select new parent node - tree.selectSafeNode(newParentNode); - } else { - if (oldParentNode.getParent() == null) { - // limit case: select first node in tree (previous old parent node was removed) - tree.selectFirstNode(); - } - } - } + MoveTreeAdapter.cleanOldParentNode(tree, ids, oldParentNode); - protected void cleanOldParentNode(NavigationTree tree, ImmutableSet<String> ids, ContentListUINavigationNode oldParentNode) { - if (oldParentNode.getChildCount() == ids.size() && oldParentNode.getParent().isRoot()) { - RootNavigationNode root = (RootNavigationNode) oldParentNode.getParent(); - if (!root.getInitializer().getConfig().isLoadEmptyProgram()) { - // limit case : node will be empty, must remove it - root.remove(oldParentNode); - return; - } - } - // clean it - oldParentNode.removeChildren(ids); - - // reload node - oldParentNode.reloadNodeData(); - - // re-select the node (to update associated form) - tree.reSelectSafeNode(oldParentNode); + MoveTreeAdapter.doFinalSelect(request, tree, oldParentNode, newParentNode); } - protected ContentListUINavigationNode getNewParentNode(MoveRequest request, NavigationNode oldParentContainerNode) { - String newParentId = request.getNewParentId(); - if (oldParentContainerNode.isRoot()) { - RootNavigationNode root = (RootNavigationNode) oldParentContainerNode; - boolean loadEmptyProgram = root.getInitializer().getConfig().isLoadEmptyProgram(); - if (!loadEmptyProgram) { - NavigationNode result = root.findChildById(newParentId); - if (result == null) { - // limit case : node does not exist (was empty previously), need to create it - ProgramReference reference = root.getInitializer().getNavigationResult().getProgram(newParentId); - result = root.getCapability().createChildNode(reference); - int position = root.getCapability().getNodePosition(reference); - root.insert(result, position); - } - return (ContentListUINavigationNode) result; - } - } - return (ContentListUINavigationNode) oldParentContainerNode.downToReferenceNode(request.getParentTargetReferenceType(), newParentId); - } } \ 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; */ import fr.ird.observe.client.datasource.editor.api.content.actions.move.MoveRequest; +import fr.ird.observe.client.datasource.editor.api.content.data.list.ContentListUINavigationNode; import fr.ird.observe.client.datasource.editor.api.navigation.NavigationTree; import fr.ird.observe.client.datasource.editor.api.navigation.tree.NavigationNode; import fr.ird.observe.dto.reference.DtoReference; @@ -37,47 +38,32 @@ public class DefaultSingleMoveTreeAdapter implements MoveTreeAdapter { @Override public void adaptTree(MoveRequest request, NavigationTree tree) { + String id = request.getId(); Class<? extends DtoReference> parentReferenceType = request.getParentTargetReferenceType(); - // selected node - NavigationNode node = tree.getSelectedNode(); + Class<? extends DtoReference> referenceType = request.getReferenceType(); - Class<? extends DtoReference> referenceType = node.getScope().getMainReferenceType(); + // get old parent node + ContentListUINavigationNode oldParentNode = (ContentListUINavigationNode) tree.getSelectedNode().upToReferenceContainerNode(referenceType); - // up to old container reference node - NavigationNode oldChildContainerNode = node.upToReferenceContainerNode(referenceType); - - // remove node from old child container node - node.removeFromParent(); - - // reload old child container node - oldChildContainerNode.nodeChanged(); - - // up to old parent container node - NavigationNode oldParentContainerNode = oldChildContainerNode.upToReferenceContainerNode(parentReferenceType); + // get shared ancestor of two parents + NavigationNode parentContainerNode = oldParentNode.upToReferenceContainerNode(parentReferenceType); // dow to new parent node - NavigationNode newParentNode = oldParentContainerNode.downToReferenceNode(parentReferenceType, request.getNewParentId()); + ContentListUINavigationNode newParentNode = MoveTreeAdapter.getNewParentNode(request, parentContainerNode); // down to new child container node - NavigationNode newChildContainerNode = newParentNode.downToReferenceContainerNode(referenceType); - - // insert node into new child container node - newChildContainerNode.add(node); + ContentListUINavigationNode newChildContainerNode = (ContentListUINavigationNode) newParentNode.downToReferenceContainerNode(referenceType); - // reload new child container node - newChildContainerNode.nodeChanged(); + // update it + NavigationNode node = newChildContainerNode.addChildren(id); - // select final node parent (need to do this, otherwise next command has no effect (node stays the same) - tree.selectSafeNode(newChildContainerNode); - - // get back brand new node (otherwise tree model is broken) - node = newChildContainerNode.downToReferenceNode(referenceType, request.getId()); - - // select final node - tree.selectSafeNode(node); + // clean old paren node + MoveTreeAdapter.cleanOldParentNode(tree, request.getIds(), oldParentNode); node.getParent().refreshToRoot(); + + MoveTreeAdapter.doFinalSelect(request, tree, oldParentNode, node); } } ===================================== 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; * #L% */ +import com.google.common.collect.ImmutableSet; import fr.ird.observe.client.datasource.editor.api.content.actions.move.MoveRequest; +import fr.ird.observe.client.datasource.editor.api.content.data.list.ContentListUINavigationNode; import fr.ird.observe.client.datasource.editor.api.navigation.NavigationTree; +import fr.ird.observe.client.datasource.editor.api.navigation.tree.NavigationNode; +import fr.ird.observe.client.datasource.editor.api.navigation.tree.root.RootNavigationNode; +import fr.ird.observe.dto.referential.common.ProgramReference; /** * To adapt navigation tree after the move operation. @@ -37,4 +42,54 @@ public interface MoveTreeAdapter { void adaptTree(MoveRequest request, NavigationTree tree); + static void cleanOldParentNode(NavigationTree tree, ImmutableSet<String> ids, ContentListUINavigationNode oldParentNode) { + if (oldParentNode.getChildCount() == ids.size() && oldParentNode.getParent().isRoot()) { + RootNavigationNode root = (RootNavigationNode) oldParentNode.getParent(); + if (!root.getInitializer().getConfig().isLoadEmptyProgram()) { + // limit case : node will be empty, must remove it + root.remove(oldParentNode); + return; + } + } + // clean it + oldParentNode.removeChildren(ids); + + // reload node + oldParentNode.reloadNodeData(); + + // re-select the node (to update associated form) + tree.reSelectSafeNode(oldParentNode); + } + + static ContentListUINavigationNode getNewParentNode(MoveRequest request, NavigationNode oldParentContainerNode) { + String newParentId = request.getNewParentId(); + if (oldParentContainerNode.isRoot()) { + RootNavigationNode root = (RootNavigationNode) oldParentContainerNode; + boolean loadEmptyProgram = root.getInitializer().getConfig().isLoadEmptyProgram(); + if (!loadEmptyProgram) { + NavigationNode result = root.findChildById(newParentId); + if (result == null) { + // limit case : node does not exist (was empty previously), need to create it + ProgramReference reference = root.getInitializer().getNavigationResult().getProgram(newParentId); + result = root.getCapability().createChildNode(reference); + int position = root.getCapability().getNodePosition(reference); + root.insert(result, position); + } + return (ContentListUINavigationNode) result; + } + } + return (ContentListUINavigationNode) oldParentContainerNode.downToReferenceNode(request.getParentTargetReferenceType(), newParentId); + } + + static void doFinalSelect(MoveRequest request, NavigationTree tree,NavigationNode oldParentNode, NavigationNode newParentNode ) { + if (request.isSelectTarget()) { + // select new parent node + tree.selectSafeNode(newParentNode); + } else { + if (oldParentNode.getParent() == null) { + // limit case: select first node in tree (previous old parent node was removed) + tree.selectFirstNode(); + } + } + } } ===================================== 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 { } } } + public NavigationNode addChildren(String id) { + NavigationNode result=null; + ContentListUINavigationInitializer initializer = getInitializer(); + boolean notLoaded = isNotLoaded(); + reloadNodeData(); + List<? extends DataDtoReference> references = initializer.getReferences(); + ContentListUINavigationCapability<?> capability = getCapability(); + for (DataDtoReference reference : references) { + boolean idEquals = id.equals(reference.getId()); + if (notLoaded || idEquals) { + + NavigationNode childNode = capability.createChildNode(reference); + int nodePosition = capability.getNodePosition(reference); + insert(childNode, nodePosition); + if (idEquals) { + result = childNode; + } + } + } + return result; + } } View it on GitLab: https://gitlab.com/ultreiaio/ird-observe/-/compare/b4cc38f9f70524a924d4df25e... -- View it on GitLab: https://gitlab.com/ultreiaio/ird-observe/-/compare/b4cc38f9f70524a924d4df25e... You're receiving this email because of your account on gitlab.com.