- java.lang.Object
-
- org.nuiton.jaxx.runtime.swing.nav.NavHelper<M,U,B,N>
-
- Type Parameters:
U- Type of ui to bridge
- Direct Known Subclasses:
NavTreeHelper,NavTreeTableHelper
public abstract class NavHelper<M,U,B extends NavBridge<M,N>,N extends NavNode<M,N>> extends Object
Tree helper to deal with the build of trees and other usefull operations. A helper acts as an handler for atree. It owns thegetModel()of the#tree. Note: A helper can NOT be used to manage multi-trees.Internal states
Internal model
To create the model, use methodcreateModel(NavNode, Object...)given a root node. To obtain the model, use methodgetModel(). Note: The helper internal model can be different from the tree model, but must be the lowest model, other models must listen nicely this model to obtain model modification and selection notifications.Internal tree
As said before, a helper matches exactly one tree. To register the tree, use methodsetUI(Object, boolean, TreeSelectionListener). To obtain the tree, use methodgetUI().Internal data provider
To populate childs nodes and render nodes, we use aNavDataProvider. To register the data provider, use methodsetDataProvider(NavDataProvider). To obtain the data provider, use methodgetDataProvider().Internal listeners
Several listeners are used to manage the auto-loading of nodes in model :
This listener will load node's childs before node expands if the node is not loaded. See theexpandListenerNavNode.isLoaded()method.
To listen modification of the model, it will mainly repopulate nodes when required. See the methodtreeModelListenerpopulateNode(NavNode, Object[], boolean).
To listen modification of the selection, it will mainly expand paths if required. This is a requirement, since childs of a node should NOT be loaded, so when selects a node, always check the path from root to selected node are all fully loaded.selectionListenerModel methods
The helper offers some methods to modify and query the internal tree model.Model modification
createModel(NavNode, Object...)insertNode(NavNode, NavNode)removeNode(NavNode)moveNode(NavNode, NavNode, int)refreshNode(NavNode, boolean)loadAllNodes(NavNode, NavDataProvider)
Model selection modification
Model query
Child loadors factory
The class offers a factory ofNavNodeChildLoador, use the methodgetChildLoador(Class)to obtain the correct child loador given his type.- Since:
- 2.1
- Author:
- Tony Chemit - dev@tchemit.fr
- See Also:
NavNode,NavNodeChildLoador,AbstractNavTreeCellRenderer
-
-
Field Summary
Fields Modifier and Type Field Description protected static Set<? super NavNodeChildLoador<?,?,?,?,?>>childLoadorsCache of child loadors.protected NavDataProviderdataProviderThe shared data provider used to obtain datas to populate nodes and render them.protected TreeWillExpandListenerexpandListenerATreeWillExpandListenerused to listen when tree should expand.protected TreeSelectionListenerselectionListenerpour ouvrir les fils d'un noeud que l'on vient de sélectionner pour éviter d'avoir à faire des doubles clics.protected TreeModelListenertreeModelListenerpour recharger le rendu des noeuds (et charger les fils si nécessaires) lors d'une modification dans le modèle de l'arbre.
-
Method Summary
All Methods Static Methods Instance Methods Abstract Methods Concrete Methods Modifier and Type Method Description abstract voidaddSelectionPath(TreePath path)abstract voidaddSelectionPaths(TreePath[] paths)protected booleancheckModel()Checks if internal model was created.protected abstract McreateModel(N node, Object... extraArgs)Register a new root node.abstract voidexpandPath(TreePath pathToExpand)NfindNode(N node, String... ids)Finds a node from the given rootnode, applying the path given byids.protected BgetBridge()Obtains the bridge .NgetChild(N node, String id)Finds a node from the given rootnode, and return child searchedstatic <L extends NavNodeChildLoador<?,?,?,?,?>>
LgetChildLoador(Class<L> type)Obtains theNavNodeChildLoadorof the giventypefrom internal cache.protected static Set<? super NavNodeChildLoador<?,?,?,?,?>>getChildLoadors()protected NavDataProvidergetDataProvider()Obtains the attached data provider used to populate and render nodes.MgetModel()Obtains the model.protected NgetNode(TreePath path)Convinient method to objet the casted node of aTreePath.NgetRootNode()String[]getSelectedIds()Obtains the path of ids fro the root node to the selected node on the registred tree.abstract NgetSelectedNode()Obtains the selected node of the registred tree.abstract List<N>getSelectedNodes()Obtains the selected nodes of the registred tree.abstract TreeSelectionModelgetSelectionModel()abstract AbstractNavTreeCellRenderer<M,N>getTreeCellRenderer()Obtains theAbstractNavTreeCellRendererrenderer of the registred tree.UgetUI()Obtains the ui associated with model in helper.voidinsertNode(N parentNode, N newNode)Inserts the given node to the givenparentNode.voidinsertNode(N parentNode, N newNode, int position)Inserts the given node to the givenparentNode.abstract booleanisExpanded(TreePath pathToExpand)voidloadAllNodes(N node, NavDataProvider dataProvider)To load all nodes of a model.voidmoveNode(N parentNode, N node, int position)Moves the givennodeto the newposition.protected voidpopulateNode(N node, Object[] children, boolean recurse)Populates nodes.voidrefreshNode(N node, boolean deep)Refreshs the givennode.NremoveNode(N node)Removes the givennodefrom the registred tree model and returns his parent.abstract voidremoveSelectionPath(TreePath path)abstract voidremoveSelectionPaths(TreePath[] paths)abstract voidscrollPathToVisible(TreePath path)voidselectNode(String... path)Selects the node described by his givenpathof ids.voidselectNode(N node)Selects the givennodein the registred tree.voidselectNodes(List<N> nodes)Selects the givennodesin the registred tree.voidselectParentNode()Selects the parent of the currently selected node.voidsetDataProvider(NavDataProvider dataProvider)Registers thedataProviderfor the helper.abstract voidsetSelectionPath(TreePath path)protected voidsetUI(U ui)voidsetUI(U tree, boolean addExpandTreeListener)Registers the giventreefor this helper.voidsetUI(U tree, boolean addExpandTreeListener, boolean addOneClickSelectionListener, TreeSelectionListener listener)Registers the giventreefor this helper.abstract voidsetUI(U tree, boolean addExpandTreeListener, boolean addOneClickSelectionListener, TreeSelectionListener listener, TreeWillExpandListener willExpandListener)Registers the giventreefor this helper.voidsetUI(U tree, boolean addExpandTreeListener, TreeSelectionListener listener)Registers the giventreefor this helper.voidunSelectNode(N node)Unselects the givennodein the registred tree.voidunSelectNodes(List<N> nodes)Selects the givennodesin the registred tree.
-
-
-
Field Detail
-
dataProvider
protected NavDataProvider dataProvider
The shared data provider used to obtain datas to populate nodes and render them.
-
expandListener
protected final TreeWillExpandListener expandListener
ATreeWillExpandListenerused to listen when tree should expand. If so, the listener will load selected node childs if required (says when theNavNode.isLoaded()is sets tofalse).
-
selectionListener
protected final TreeSelectionListener selectionListener
pour ouvrir les fils d'un noeud que l'on vient de sélectionner pour éviter d'avoir à faire des doubles clics.
-
treeModelListener
protected final TreeModelListener treeModelListener
pour recharger le rendu des noeuds (et charger les fils si nécessaires) lors d'une modification dans le modèle de l'arbre.
-
childLoadors
protected static Set<? super NavNodeChildLoador<?,?,?,?,?>> childLoadors
Cache of child loadors.
-
-
Constructor Detail
-
NavHelper
public NavHelper(B bridge)
-
-
Method Detail
-
scrollPathToVisible
public abstract void scrollPathToVisible(TreePath path)
-
setSelectionPath
public abstract void setSelectionPath(TreePath path)
-
addSelectionPath
public abstract void addSelectionPath(TreePath path)
-
addSelectionPaths
public abstract void addSelectionPaths(TreePath[] paths)
-
removeSelectionPath
public abstract void removeSelectionPath(TreePath path)
-
removeSelectionPaths
public abstract void removeSelectionPaths(TreePath[] paths)
-
getSelectionModel
public abstract TreeSelectionModel getSelectionModel()
-
isExpanded
public abstract boolean isExpanded(TreePath pathToExpand)
-
expandPath
public abstract void expandPath(TreePath pathToExpand)
-
createModel
protected abstract M createModel(N node, Object... extraArgs)
Register a new root node. If internalgetModel()does not exists, creates a new one from his given rootnode, otherwise just set the new root on the existing model. Note: As a side-effect, the model will be keep in fieldgetModel()and thetreeModelListenerwill be registred on this model.- Parameters:
node- the root node of the new modelextraArgs- extra args to create initial model- Returns:
- the new model
-
getTreeCellRenderer
public abstract AbstractNavTreeCellRenderer<M,N> getTreeCellRenderer()
Obtains theAbstractNavTreeCellRendererrenderer of the registred tree.- Returns:
- the renderer of the registred tree or null if no tree was
registred nor the renderer is a
AbstractNavTreeCellRenderer.
-
getSelectedNode
public abstract N getSelectedNode()
Obtains the selected node of the registred tree.- Returns:
- the selected tree or
nullif no registred tree nor selection empty.
-
getSelectedNodes
public abstract List<N> getSelectedNodes()
Obtains the selected nodes of the registred tree.- Returns:
- the selected tree or
nullif no registred tree nor selection empty.
-
setUI
public abstract void setUI(U tree, boolean addExpandTreeListener, boolean addOneClickSelectionListener, TreeSelectionListener listener, TreeWillExpandListener willExpandListener)
Registers the giventreefor this helper. Note: as a side-effect, it will register (if required) theexpandListenerlistener and (if required) theselectionListener. Note : as a second side-effect, it will register the givenwillExpandListener(if not null) for the ui and do it BEFORE theexpandListener. The main idea here is to be able to block any expand (or collapse).- Parameters:
tree- the tree to registeraddExpandTreeListener- a flag to add expand listeneraddOneClickSelectionListener- a flag to expend when selectionlistener- the optional selection listener to addwillExpandListener- the optional will expand listener to add BEFORE the default expand tree listener (if he was required)- Since:
- 2.1.2
-
getChildLoadors
protected static Set<? super NavNodeChildLoador<?,?,?,?,?>> getChildLoadors()
-
getChildLoador
public static <L extends NavNodeChildLoador<?,?,?,?,?>> L getChildLoador(Class<L> type)
Obtains theNavNodeChildLoadorof the giventypefrom internal cache. Note: The loador will be instanciated if not found, and push in cache.- Type Parameters:
L- the type of loador to get- Parameters:
type- the type of loador to get- Returns:
- the loador from cache
-
getDataProvider
protected NavDataProvider getDataProvider()
Obtains the attached data provider used to populate and render nodes.- Returns:
- the attached data provider
-
getModel
public M getModel()
Obtains the model.- Returns:
- the internal tree model or
nullif none was created.
-
getBridge
protected B getBridge()
Obtains the bridge .- Returns:
- the internal bridge used by helper.
-
getUI
public U getUI()
Obtains the ui associated with model in helper.- Returns:
- the ui (or
nullif no ui attached)
-
getRootNode
public N getRootNode()
-
getSelectedIds
public String[] getSelectedIds()
Obtains the path of ids fro the root node to the selected node on the registred tree.- Returns:
- the array of ids from root node to selected node.
-
setUI
public void setUI(U tree, boolean addExpandTreeListener)
Registers the giventreefor this helper. Note: as a side-effect, it will register (if required) theexpandListenerlistener and theselectionListener.- Parameters:
tree- the tree to registeraddExpandTreeListener- a flag to add expand listener
-
setUI
public void setUI(U tree, boolean addExpandTreeListener, TreeSelectionListener listener)
Registers the giventreefor this helper. Note: as a side-effect, it will register (if required) theexpandListenerlistener and theselectionListener.- Parameters:
tree- the tree to registeraddExpandTreeListener- a flag to add expand listenerlistener- the optional selection listener to add
-
setUI
public void setUI(U tree, boolean addExpandTreeListener, boolean addOneClickSelectionListener, TreeSelectionListener listener)
Registers the giventreefor this helper. Note: as a side-effect, it will register (if required) theexpandListenerlistener and (if required) theselectionListener.- Parameters:
tree- the tree to registeraddExpandTreeListener- a flag to add expand listeneraddOneClickSelectionListener- a flag to expend when selectionlistener- the optional selection listener to add
-
setDataProvider
public void setDataProvider(NavDataProvider dataProvider)
Registers thedataProviderfor the helper. Node: As a side-effect, the provider will be propagate to the renderer of the registred tree (if any).- Parameters:
dataProvider- the data provider to use
-
insertNode
public void insertNode(N parentNode, N newNode)
Inserts the given node to the givenparentNode. The node will be added to his parent, then creation listeners will be fired.- Parameters:
parentNode- the parent node where to insert the new node *newNode- the node to insert
-
insertNode
public void insertNode(N parentNode, N newNode, int position)
Inserts the given node to the givenparentNode. The node will be added to his parent, then creation listeners will be fired.- Parameters:
parentNode- the parent node where to insert the new node *newNode- the node to insertposition- position of node is inserted
-
removeNode
public N removeNode(N node)
Removes the givennodefrom the registred tree model and returns his parent.- Parameters:
node- the node to remove- Returns:
- the parent node of the removed node.
-
moveNode
public void moveNode(N parentNode, N node, int position)
Moves the givennodeto the newposition.- Parameters:
parentNode- the parent nodenode- the node to moveposition- the new position of the node
-
refreshNode
public void refreshNode(N node, boolean deep)
Refreshs the givennode. If flagdeepis set totrue, then it will refresh recursively children nodes. Note:As a side-effect, evvery node involved will becomedirty.- Parameters:
node- the node to refreshdeep- un flag pour activer la repainte de la descendance du noeud- See Also:
NavNode.isDirty()
-
loadAllNodes
public void loadAllNodes(N node, NavDataProvider dataProvider)
To load all nodes of a model.- Parameters:
node- the root node to loaddataProvider- the data provider used to populate nodes
-
selectParentNode
public void selectParentNode() throws NullPointerExceptionSelects the parent of the currently selected node. Note: If selection is empty, then throws a NPE.- Throws:
NullPointerException- if selection is empty
-
selectNode
public void selectNode(N node)
Selects the givennodein the registred tree.- Parameters:
node- the node to select
-
selectNodes
public void selectNodes(List<N> nodes)
Selects the givennodesin the registred tree.- Parameters:
nodes- the nodes to select
-
unSelectNode
public void unSelectNode(N node)
Unselects the givennodein the registred tree.- Parameters:
node- the node to select
-
unSelectNodes
public void unSelectNodes(List<N> nodes)
Selects the givennodesin the registred tree.- Parameters:
nodes- the nodes to select
-
selectNode
public void selectNode(String... path)
Selects the node described by his givenpathof ids.- Parameters:
path- the absolute path of ids from root node to node to select.
-
findNode
public N findNode(N node, String... ids)
Finds a node from the given rootnode, applying the path given byids.- Parameters:
node- the starting nodeids- the path of ids to apply on the node.- Returns:
- the find node or
nullif no node matchs.
-
getChild
public N getChild(N node, String id)
Finds a node from the given rootnode, and return child searched- Parameters:
node- the starting nodeid- id of searched child- Returns:
- the find node or
nullif no node matchs.
-
checkModel
protected boolean checkModel()
Checks if internal model was created.- Returns:
trueif model was created,falseotherwise.
-
populateNode
protected void populateNode(N node, Object[] children, boolean recurse)
Populates nodes. Ifnodeis notnull, then populate it. Ifchildrenis notnull, then populate them, moreover ifrecurseis set totruethen do a recurse refresh on children.- Parameters:
node- the parent node to populate (optional)children- the child nodes to populate (optional)recurse- flag sets totrueif should do recurse refresh on givenchildrennodes.
-
getNode
protected N getNode(TreePath path)
Convinient method to objet the casted node of aTreePath.- Parameters:
path- the path contaning the node.- Returns:
- the casted node from the path.
-
setUI
protected void setUI(U ui)
-
-