Tony CHEMIT pushed to branch develop at ultreiaio / ird-observe Commits: f6e4b306 by tchemit at 2020-04-16T09:19:29+02:00 Améliorer le dépliage dans l'arbre de navigation - Closes #1419 - - - - - 3 changed files: - client-datasource-editor-api/src/main/java/fr/ird/observe/client/datasource/editor/tree/navigation/NavigationTree.java - client-datasource-editor-api/src/main/java/fr/ird/observe/client/datasource/editor/tree/navigation/actions/NavigationConfigUIActionSupport.java - client-datasource-editor-api/src/main/java/fr/ird/observe/client/datasource/editor/tree/navigation/actions/NavigationConfigUIToggleShowActionSupport.java Changes: ===================================== client-datasource-editor-api/src/main/java/fr/ird/observe/client/datasource/editor/tree/navigation/NavigationTree.java ===================================== @@ -67,11 +67,6 @@ public class NavigationTree extends JXTree { private static final Logger log = LogManager.getLogger(NavigationTree.class); private final ImmutableList<SelectNodeStrategy> selectNodeStrategies; - /** - * To block node expand. - */ - private boolean skipExpand; - public NavigationTree() { super(new NavigationTreeModel(NavigationTreeModelInitializerApplicationComponent.value())); @@ -88,29 +83,8 @@ public class NavigationTree extends JXTree { @Override public void treeWillCollapse(TreeExpansionEvent event) throws ExpandVetoException { + //FIXME check this is working ? getSelectionModel().fireTreeWillCollapseEvent(event); -// if (!(getModel() instanceof NavigationTreeModel)) { -// return; -// } -// NavigationTreeNodeSupport node = (NavigationTreeNodeSupport) event.getPath().getLastPathComponent(); -// -// // le seul posant problème est la fermeture d'un noeud parent -// // du noeud courant : cela va changer la selection -// NavigationTreeNodeSupport selectedNode = getSelectedNode(); -// if (selectedNode == null) { -// // pas de noeud selectionne -// return; -// } -// -// if (selectedNode.equals(node) || !selectedNode.isNodeAncestor(node)) { -// return; -// } - //FIXME Move this in a listener -// boolean canChange = contentUIManager.closeSelectedContentUI(); -// if (!canChange) { -// throw new ExpandVetoException(event, "Can not collapse node " + event.getPath()); -// } - } }); addTreeSelectionListener(e -> { @@ -142,16 +116,7 @@ public class NavigationTree extends JXTree { } private void openNode(TreePath path) { -// TreePath path = e.getPath(); - NavigationTreeNodeSupport selectedNode = (NavigationTreeNodeSupport) path.getLastPathComponent(); - try { - getModel().open((NavigationTreeNodeSupport) path.getLastPathComponent()); - } finally { - if (!isSkipExpand() && !selectedNode.isLeaf()) { - log.info(String.format("will expand node: %s from selection.", path)); - SwingUtilities.invokeLater(() -> expandPath(path)); - } - } + getModel().open((NavigationTreeNodeSupport<?>) path.getLastPathComponent()); } @Override @@ -164,24 +129,17 @@ public class NavigationTree extends JXTree { return (NavigationTreeSelectionModel) super.getSelectionModel(); } - public boolean isSkipExpand() { - return skipExpand; - } - - public void setSkipExpand(boolean skipExpand) { - this.skipExpand = skipExpand; - } - public void addNavigationTreeSelectionListener(NavigationTreeSelectionListener x) { getSelectionModel().addNavigationTreeSelectionListener(x); } + @SuppressWarnings("unused") public void removeNavigationTreeSelectionListener(NavigationTreeSelectionListener x) { getSelectionModel().removeNavigationTreeSelectionListener(x); } - public NavigationTreeNodeSupport getSelectedNode() { - return isSelectionEmpty() ? null : (NavigationTreeNodeSupport) getSelectionPath().getLastPathComponent(); + public NavigationTreeNodeSupport<?> getSelectedNode() { + return isSelectionEmpty() || getSelectionPath() == null ? null : (NavigationTreeNodeSupport<?>) getSelectionPath().getLastPathComponent(); } /** @@ -204,18 +162,18 @@ public class NavigationTree extends JXTree { } /** - * Selects the given {@code node} in the registred tree. + * Selects the given {@code node} in the registered tree. * * @param node the node to select */ - public void selectNode(NavigationTreeNodeSupport node) { + public void selectNode(NavigationTreeNodeSupport<?> node) { log.info("try to select node [" + node + "]"); TreePath path = new TreePath(getModel().getPathToRoot(node)); setSelectionPath(path); SwingUtilities.invokeLater(() -> scrollPathToVisible(path)); } - public NavigationTreeNodeSupport getChild(NavigationTreeNodeSupport node, String id) { + public NavigationTreeNodeSupport<?> getChild(NavigationTreeNodeSupport<?> node, String id) { return node.findChildById(id); } @@ -239,20 +197,13 @@ public class NavigationTree extends JXTree { insertNode(parentNode, node, position); } - public void clearModel() { - getModel().clear(); - } - /** - * Sélectionne le noeud dans l'arbre de navigation. - * - * <b>Note:</b> cette méthode doit être appelée après un rechargement du - * modèle de navigation. + * Select initial node when data source just opened. */ public void selectInitialNode() { log.debug("Will select initial node..."); - NavigationTreeNodeSupport selectedNode = null; + NavigationTreeNodeSupport<?> selectedNode = null; for (SelectNodeStrategy selectNodeStrategy : selectNodeStrategies) { Optional<NavigationTreeNodeSupport<?>> optionalSelectedNode = selectNodeStrategy.get(); if (optionalSelectedNode.isPresent()) { @@ -267,28 +218,12 @@ public class NavigationTree extends JXTree { SwingUtilities.invokeLater(this::grabFocus); } -// public void reloadNodeSubTree(NavigationTreeNodeSupport node) { -// Objects.requireNonNull(node, "node is null, we can not reload its structure"); -// -// // 1. Let's clear node structure -// while (node.getChildCount() > 0) { -// removeNode((NavigationTreeNodeSupport) node.getFirstChild()); -// } -// -// // 3. Let's re-generate node's value by populating the node : this will call the child loaders. -// node.updateNode(); -// -// // Fix bug (if no child in parent node, it will not expand...) -// fireTreeExpanded(new TreePath(node.getPath())); -// -// } - public void reloadNode(MutableTreeNode node, boolean deep) { - log.debug("Will refresh (deep ? " + deep + ") node " + node); + log.debug(String.format("Will refresh (deep ? %s) node %s", deep, node)); getModel().nodeChanged(node); if (deep) { - // repaint childs nodes + // repaint children nodes @SuppressWarnings("unchecked") Enumeration<NavigationTreeNodeSupport<?>> e = (Enumeration<NavigationTreeNodeSupport<?>>) node.children(); while (e.hasMoreElements()) { @@ -299,24 +234,24 @@ public class NavigationTree extends JXTree { } - public void reloadSelectedNode(boolean refreshFromParent, boolean refreshChilds) { - NavigationTreeNodeSupport node = getSelectedNode(); + public void reloadSelectedNode(boolean refreshFromParent, boolean refreshChildren) { + NavigationTreeNodeSupport<?> node = getSelectedNode(); node.setLoaded(false); if (refreshFromParent) { node = node.getParent(); } - reloadNode(node, refreshChilds); + reloadNode(node, refreshChildren); } public <D extends IdDto, R extends DtoReference<D, R>> void addUnsavedNode(MultipleReferenceContainerNode<D, R> parentNode) { - ReferenceNode<D, R> result = parentNode.newChildNode(((NavigationTreeNodeSupport) parentNode).getId()); + ReferenceNode<D, R> result = parentNode.newChildNode(((NavigationTreeNodeSupport<?>) parentNode).getId()); insertNode(parentNode, result); afterAddUnsavedNode(parentNode, result); } public void addUnsavedNode(SingleReferenceContainerNode<?, ?> parentNode) { - ReferenceNode<?, ?> result = parentNode.newSingleChildNode(((NavigationTreeNodeSupport) parentNode).getId()); + ReferenceNode<?, ?> result = parentNode.newSingleChildNode(((NavigationTreeNodeSupport<?>) parentNode).getId()); insertNode(parentNode, result, parentNode.getChildCount()); afterAddUnsavedNode(parentNode, result); } @@ -326,7 +261,7 @@ public class NavigationTree extends JXTree { afterAddUnsavedNode(parentNode, result); } - private void afterAddUnsavedNode(MutableTreeNode parentNode, ReferenceNode result) { + private void afterAddUnsavedNode(MutableTreeNode parentNode, ReferenceNode<?,?> result) { // refresh parent node (render of parent can have changed) reloadNode(parentNode, true); @@ -342,7 +277,7 @@ public class NavigationTree extends JXTree { return getModel().getRoot(); } - public void updateNode(NavigationTreeNodeSupport node) { + public void updateNode(NavigationTreeNodeSupport<?> node) { node.updateNode(); getModel().nodeStructureChanged(node); } @@ -360,12 +295,12 @@ public class NavigationTree extends JXTree { getModel().nodeStructureChanged(parentNode); } - public NavigationTreeNodeSupport getReferentialNode(String name) { + public NavigationTreeNodeSupport<?> getReferentialNode(String name) { RootNavigationTreeNode root = getModel().getRoot(); return getModel().findNode(root, name); } - public NavigationTreeNodeSupport getEditNode(ObserveNavigationNode<?> editNode) { + public NavigationTreeNodeSupport<?> getEditNode(ObserveNavigationNode<?> editNode) { ImmutableList<ObserveNavigationNode<?>> nodesFromRoot = editNode.getNodesFromRoot(); NavigationTreeNodeSupport<?> result = getModel().getRoot(); for (ObserveNavigationNode<?> currentEditNode : nodesFromRoot) { @@ -386,20 +321,13 @@ public class NavigationTree extends JXTree { Class<R> referenceType = DtoModelHelper.getReferenceType(editNode.getType()); // got to container MultipleReferenceContainerNode<D, R> containerNode = MultipleReferenceContainerNode.downToReferenceContainerNode(referenceType, selectedNode); - if (!((NavigationTreeNodeSupport) containerNode).isLoaded()) { - ((NavigationTreeNodeSupport) containerNode).populateChildren(); + if (!((NavigationTreeNodeSupport<?>) containerNode).isLoaded()) { + ((NavigationTreeNodeSupport<?>) containerNode).populateChildren(); } // got to reference return ReferenceNode.downToReferenceNode(referenceType, editNode.getId(), containerNode); } - -// public void refreshSelectedNode() { -// NavigationTreeNodeSupport selectedNode = getSelectedNode(); -// selectedNode.reload(); -// getTreeModel().nodeChanged(selectedNode); -// } - interface SelectNodeStrategy extends Supplier<Optional<NavigationTreeNodeSupport<?>>> { } @@ -409,7 +337,7 @@ public class NavigationTree extends JXTree { public Optional<NavigationTreeNodeSupport<?>> get() { NavigationTreeNodeSupport<?> selectedNode = getModel().getRoot(); if (!selectedNode.isLeaf()) { - selectedNode = (NavigationTreeNodeSupport) selectedNode.getFirstChild(); + selectedNode = (NavigationTreeNodeSupport<?>) selectedNode.getFirstChild(); } return Optional.ofNullable(selectedNode); } ===================================== client-datasource-editor-api/src/main/java/fr/ird/observe/client/datasource/editor/tree/navigation/actions/NavigationConfigUIActionSupport.java ===================================== @@ -23,7 +23,6 @@ package fr.ird.observe.client.datasource.editor.tree.navigation.actions; */ import fr.ird.observe.client.configuration.WithClientConfig; -import fr.ird.observe.client.datasource.editor.tree.navigation.NavigationTree; import fr.ird.observe.client.datasource.editor.tree.navigation.NavigationUI; import org.nuiton.jaxx.runtime.swing.action.JComponentActionSupport; @@ -61,12 +60,6 @@ abstract class NavigationConfigUIActionSupport extends JComponentActionSupport<N } void selectFirstNode() { - NavigationTree tree = ui.getTree(); - tree.setSkipExpand(true); - try { - tree.setSelectionRow(0); - } finally { - tree.setSkipExpand(false); - } + ui.getTree().setSelectionRow(0); } } ===================================== client-datasource-editor-api/src/main/java/fr/ird/observe/client/datasource/editor/tree/navigation/actions/NavigationConfigUIToggleShowActionSupport.java ===================================== @@ -66,7 +66,7 @@ public abstract class NavigationConfigUIToggleShowActionSupport extends Navigati if (!tree.isSelectionEmpty()) { // Could not clear selection, means can't accept this action - log.info("Reject action: " + this + " since could not clear navigation selection."); + log.info(String.format("Reject action: %s since could not clear navigation selection.", this)); return; } View it on GitLab: https://gitlab.com/ultreiaio/ird-observe/-/commit/f6e4b3060433f9dc75c1d7ecce... -- View it on GitLab: https://gitlab.com/ultreiaio/ird-observe/-/commit/f6e4b3060433f9dc75c1d7ecce... You're receiving this email because of your account on gitlab.com.