Class AbstractTreeModel<E>
- java.lang.Object
-
- org.zkoss.zul.AbstractTreeModel<E>
-
- All Implemented Interfaces:
java.io.Serializable,Openable<E>,Pageable,Selectable<E>,TreeOpenableModel,TreeSelectableModel,PageableModel,TreeModel<E>
- Direct Known Subclasses:
DefaultTreeModel
public abstract class AbstractTreeModel<E> extends java.lang.Object implements TreeModel<E>, TreeSelectableModel, TreeOpenableModel, Selectable<E>, Openable<E>, java.io.Serializable, PageableModel
A skeletal implementation forTreeModel.AbstractTreeModelimplements bothTreeSelectableModelandTreeOpenableModel. In other words, it stores the selection and open states, such thatTreeand other UI can interact with.In additions,
AbstractTreeModelalso implementsSelectableandOpenableto simplify the access (and provides backward compatibility to ZK 5 and earlier). However, these two interfaces are optional and designed for application.Treeand all ZK core don't access it at all.For introduction, please refer to ZK Developer's Reference: Tree Model.
- Since:
- 3.0.0
- Author:
- jumperchen, tomyeh
- See Also:
- Serialized Form
-
-
Nested Class Summary
Nested Classes Modifier and Type Class Description static classAbstractTreeModel.DefaultSelectionControl<E>A default selection control implementation forAbstractTreeModel, by default it assumes all elements are selectable.protected static classAbstractTreeModel.PathRepresents a tree path.
-
Field Summary
Fields Modifier and Type Field Description protected java.util.Set<AbstractTreeModel.Path>_opensThe open information.protected java.util.Set<AbstractTreeModel.Path>_selectionThe selection.-
Fields inherited from interface org.zkoss.zul.PageableModel
INTERNAL_EVENT
-
-
Constructor Summary
Constructors Constructor Description AbstractTreeModel(E root)Creates aAbstractTreeModel.
-
Method Summary
All Methods Instance Methods Concrete Methods Modifier and Type Method Description booleanaddOpenObject(E child)Add the specified object into the collection of opened objects.booleanaddOpenPath(int[] path)Adds path to the current open.booleanaddOpenPaths(int[][] paths)Adds paths to the current Open.voidaddPagingEventListener(PagingListener listener)Adds a listener to the list of listeners to be notified when a PagingEvent happens outside of standard Paging componentbooleanaddSelectionPath(int[] path)Adds path to the current selection.booleanaddSelectionPaths(int[][] paths)Adds paths to the current selection.booleanaddToSelection(E child)Add the specified object into selection.voidaddTreeDataListener(TreeDataListener l)Add a listener to the tree that's notified each time a change to the data model occursprotected voidafterSort(java.lang.Object ctx)A utility that the deriving class can call to restore the states saved bybeforeSort()protected java.lang.ObjectbeforeSort()A utility that the deriving class can call to save the states before sorting the model.voidclearOpen()Empties the current open path.voidclearSelection()Empties the current selection.java.lang.Objectclone()voidfireEvent(int evtType, int[] path, int indexFrom, int indexTo)Fires aTreeDataEventfor all registered listenervoidfireEvent(int evtType, int[] path, int indexFrom, int indexTo, int[] affectedPath)Has the same functionality withfireEvent(int, int[], int, int), while this is used for node removal onlyvoidfireEvent(int evtType, int[] path, int indexFrom, int indexTo, int[][] affectedPaths)Has the same functionality withfireEvent(int, int[], int, int), while this is used for node removal onlyprotected voidfireOpenChanged(int[] path)Fires aTreeDataEventfor all registered listener when open status has changed.protected voidfireSelectionChanged(int[] path)Fires aTreeDataEventfor all registered listener when selection status has changed.intgetActivePage()Returns the active page (starting from 0).EgetChild(int[] path)Returns the child at the given path where the path indicates the child is placed in the whole tree.intgetIndexOfChild(E parent, E child)Returns the index of child in parent.intgetOpenCount()Returns the number of paths that are opened.java.util.Set<E>getOpenObjects()Returns the objects that are opened.int[]getOpenPath()Returns the first path in the open.int[][]getOpenPaths()Returns the paths in the open.intgetPageCount()Returns the number of pages.intgetPageSize()Returns the number of items per page.int[]getPath(E child)Returns the path from the specified child.EgetRoot()Return the root of the tree model.java.util.Set<E>getSelection()Returns the current selection.SelectionControlgetSelectionControl()Returns the selection control for the selection model, if any.intgetSelectionCount()Returns the number of paths that are selected.int[]getSelectionPath()Returns the first path in the selection.int[][]getSelectionPaths()Returns the paths in the selection.intgetTotalSize()Returns the total number of items.java.util.List<TreeDataListener>getTreeDataListeners()Returns all listeners.booleanisMultiple()Returns whether the current selection mode is multiple.booleanisObjectOpened(java.lang.Object child)Returns whether the specified object be opened.booleanisOpenEmpty()Returns true if the open is currently empty.booleanisPathOpened(int[] path)Returns true if the path,path, is in the current open.booleanisPathSelected(int[] path)Returns true if the path,path, is in the current selection.booleanisSelected(java.lang.Object child)Returns whether an object is selected.booleanisSelectionEmpty()Returns true if the selection is currently empty.booleanremoveFromSelection(java.lang.Object child)Remove the specified object from selection.booleanremoveOpenObject(java.lang.Object child)Remove the specified object from selection.booleanremoveOpenPath(int[] path)Removes path from the open.booleanremoveOpenPaths(int[][] paths)Removes paths from the open.voidremovePagingEventListener(PagingListener listener)Removes a listener from the list of listeners to be notified when a PagingEvent happens outside of standard Paging componentbooleanremoveSelectionPath(int[] path)Removes path from the selection.booleanremoveSelectionPaths(int[][] paths)Removes paths from the selection.voidremoveTreeDataListener(TreeDataListener l)Remove a listener to the tree that's notified each time a change to the data model occursvoidsetActivePage(int pg)Sets the active page (starting from 0).voidsetMultiple(boolean multiple)Sets the selection mode to be multiple.voidsetOpenObjects(java.util.Collection<? extends E> opened)Replace the current set of opened objects with the given set.voidsetPageSize(int size)Sets the number of items per page.voidsetSelection(java.util.Collection<? extends E> selection)Replace the current selection with the given set.voidsetSelectionControl(SelectionControl ctrl)Sets the selection control for the selection model-
Methods inherited from class java.lang.Object
equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
-
Methods inherited from interface org.zkoss.zul.TreeModel
getChild, getChildCount, isLeaf
-
-
-
-
Field Detail
-
_selection
protected java.util.Set<AbstractTreeModel.Path> _selection
The selection.
-
_opens
protected java.util.Set<AbstractTreeModel.Path> _opens
The open information.
-
-
Constructor Detail
-
AbstractTreeModel
public AbstractTreeModel(E root)
Creates aAbstractTreeModel.- Parameters:
root- root of tree
-
-
Method Detail
-
setSelectionControl
public void setSelectionControl(SelectionControl ctrl)
Description copied from interface:SelectableSets the selection control for the selection model- Specified by:
setSelectionControlin interfaceSelectable<E>
-
getSelectionControl
public SelectionControl getSelectionControl()
Description copied from interface:SelectableReturns the selection control for the selection model, if any.- Specified by:
getSelectionControlin interfaceSelectable<E>
-
getTreeDataListeners
public java.util.List<TreeDataListener> getTreeDataListeners()
Description copied from interface:TreeModelReturns all listeners.- Specified by:
getTreeDataListenersin interfaceTreeModel<E>
-
getRoot
public E getRoot()
Return the root of the tree model.
-
fireEvent
public void fireEvent(int evtType, int[] path, int indexFrom, int indexTo)Fires aTreeDataEventfor all registered listenerNote: you can invoke this method only in an event listener.
- Since:
- 6.0.0
-
fireEvent
public void fireEvent(int evtType, int[] path, int indexFrom, int indexTo, int[] affectedPath)Has the same functionality withfireEvent(int, int[], int, int), while this is used for node removal only- Since:
- 7.0.5
-
fireEvent
public void fireEvent(int evtType, int[] path, int indexFrom, int indexTo, int[][] affectedPaths)Has the same functionality withfireEvent(int, int[], int, int), while this is used for node removal only- Since:
- 10.0.0
-
fireSelectionChanged
protected void fireSelectionChanged(int[] path)
Fires aTreeDataEventfor all registered listener when selection status has changed.- Since:
- 6.0.0
-
fireOpenChanged
protected void fireOpenChanged(int[] path)
Fires aTreeDataEventfor all registered listener when open status has changed.- Since:
- 6.0.0
-
getIndexOfChild
public int getIndexOfChild(E parent, E child)
Returns the index of child in parent. If either parent or child is null, returns -1. If either parent or child don't belong to this tree model, returns -1.The default implementation iterates through all children of
parentby invoking, and check ifchildis part of them. You could override it if you have a better algorithm.getChild(int[])- Specified by:
getIndexOfChildin interfaceTreeModel<E>- Parameters:
parent- a node in the tree, obtained from this data sourcechild- the node we are interested in- Returns:
- the index of the child in the parent, or -1 if either child or parent are null or don't belong to this tree model
- Since:
- 5.0.6
-
getChild
public E getChild(int[] path)
Description copied from interface:TreeModelReturns the child at the given path where the path indicates the child is placed in the whole tree.
-
getPath
public int[] getPath(E child)
Returns the path from the specified child. This implementation looks for the child by traversing every possible child (deep-first). It is suggested to override this method for better performance, if there is a better algorithm.
-
addTreeDataListener
public void addTreeDataListener(TreeDataListener l)
Description copied from interface:TreeModelAdd a listener to the tree that's notified each time a change to the data model occurs- Specified by:
addTreeDataListenerin interfaceTreeModel<E>- Parameters:
l- the listener to add
-
removeTreeDataListener
public void removeTreeDataListener(TreeDataListener l)
Description copied from interface:TreeModelRemove a listener to the tree that's notified each time a change to the data model occurs- Specified by:
removeTreeDataListenerin interfaceTreeModel<E>- Parameters:
l- the listener to remove
-
setMultiple
public void setMultiple(boolean multiple)
Description copied from interface:TreeSelectableModelSets the selection mode to be multiple.- Specified by:
setMultiplein interfaceSelectable<E>- Specified by:
setMultiplein interfaceTreeSelectableModel
-
isMultiple
public boolean isMultiple()
Description copied from interface:TreeSelectableModelReturns whether the current selection mode is multiple.- Specified by:
isMultiplein interfaceSelectable<E>- Specified by:
isMultiplein interfaceTreeSelectableModel- See Also:
TreeSelectableModel.setMultiple(boolean)
-
addSelectionPath
public boolean addSelectionPath(int[] path)
Description copied from interface:TreeSelectableModelAdds path to the current selection. If path is not currently in the selection the TreeDataListeners are notified. This has no effect ifpathis null.- Specified by:
addSelectionPathin interfaceTreeSelectableModel- Parameters:
path- the new path to add to the current selection- Returns:
- whether it is added successfully
-
addSelectionPaths
public boolean addSelectionPaths(int[][] paths)
Description copied from interface:TreeSelectableModelAdds paths to the current selection. If any of the paths in paths are not currently in the selection the TreeDataListeners are notified. This has no effect ifpathsis null.- Specified by:
addSelectionPathsin interfaceTreeSelectableModel- Parameters:
paths- the new paths to add to the current selection- Returns:
- whether it is added successfully
-
removeSelectionPath
public boolean removeSelectionPath(int[] path)
Description copied from interface:TreeSelectableModelRemoves path from the selection. If path is in the selection The TreeDataListeners are notified. This has no effect ifpathis null.- Specified by:
removeSelectionPathin interfaceTreeSelectableModel- Parameters:
path- the path to remove from the selection- Returns:
- true if it was unselected successfully
-
removeSelectionPaths
public boolean removeSelectionPaths(int[][] paths)
Description copied from interface:TreeSelectableModelRemoves paths from the selection. If any of the paths inpathsare in the selection, the TreeDataListeners are notified. This method has no effect ifpathsis null.- Specified by:
removeSelectionPathsin interfaceTreeSelectableModel- Parameters:
paths- the path to remove from the selection- Returns:
- true if one of the paths was unselected successfully
-
isPathSelected
public boolean isPathSelected(int[] path)
Description copied from interface:TreeSelectableModelReturns true if the path,path, is in the current selection.- Specified by:
isPathSelectedin interfaceTreeSelectableModel
-
getSelectionPath
public int[] getSelectionPath()
Description copied from interface:TreeSelectableModelReturns the first path in the selection. How first is defined is up to implementors.- Specified by:
getSelectionPathin interfaceTreeSelectableModel
-
getSelectionPaths
public int[][] getSelectionPaths()
Description copied from interface:TreeSelectableModelReturns the paths in the selection. This will return null (or an empty array) if nothing is currently selected.- Specified by:
getSelectionPathsin interfaceTreeSelectableModel
-
getSelectionCount
public int getSelectionCount()
Description copied from interface:TreeSelectableModelReturns the number of paths that are selected.- Specified by:
getSelectionCountin interfaceTreeSelectableModel
-
isSelectionEmpty
public boolean isSelectionEmpty()
Description copied from interface:TreeSelectableModelReturns true if the selection is currently empty.- Specified by:
isSelectionEmptyin interfaceSelectable<E>- Specified by:
isSelectionEmptyin interfaceTreeSelectableModel
-
clearSelection
public void clearSelection()
Description copied from interface:TreeSelectableModelEmpties the current selection. If this represents a change in the current selection, the selection listeners are notified.- Specified by:
clearSelectionin interfaceSelectable<E>- Specified by:
clearSelectionin interfaceTreeSelectableModel
-
addOpenPath
public boolean addOpenPath(int[] path)
Description copied from interface:TreeOpenableModelAdds path to the current open. If path is not currently in the open the TreeDataListeners are notified. This has no effect ifpathis null.- Specified by:
addOpenPathin interfaceTreeOpenableModel- Parameters:
path- the new path to add to the current open- Returns:
- whether it is added successfully
-
addOpenPaths
public boolean addOpenPaths(int[][] paths)
Description copied from interface:TreeOpenableModelAdds paths to the current Open. If any of the paths in paths are not currently in the Open the TreeDataListeners are notified. This has no effect ifpathsis null.- Specified by:
addOpenPathsin interfaceTreeOpenableModel- Parameters:
paths- the new paths to add to the current Open- Returns:
- whether an of the paths is added successfully
-
removeOpenPath
public boolean removeOpenPath(int[] path)
Description copied from interface:TreeOpenableModelRemoves path from the open. If path is in the open The TreeDataListeners are notified. This has no effect ifpathis null.- Specified by:
removeOpenPathin interfaceTreeOpenableModel- Parameters:
path- the path to remove from the open- Returns:
- true if it was closed successfully
-
removeOpenPaths
public boolean removeOpenPaths(int[][] paths)
Description copied from interface:TreeOpenableModelRemoves paths from the open. If any of the paths inpathsare in the open, the TreeDataListeners are notified. This method has no effect ifpathsis null.- Specified by:
removeOpenPathsin interfaceTreeOpenableModel- Parameters:
paths- the path to remove from the open- Returns:
- true if one of the paths was closed successfully
-
isPathOpened
public boolean isPathOpened(int[] path)
Description copied from interface:TreeOpenableModelReturns true if the path,path, is in the current open.- Specified by:
isPathOpenedin interfaceTreeOpenableModel
-
getOpenPath
public int[] getOpenPath()
Description copied from interface:TreeOpenableModelReturns the first path in the open. How first is defined is up to implementors.- Specified by:
getOpenPathin interfaceTreeOpenableModel
-
getOpenPaths
public int[][] getOpenPaths()
Description copied from interface:TreeOpenableModelReturns the paths in the open. This will return null (or an empty array) if nothing is currently opened.- Specified by:
getOpenPathsin interfaceTreeOpenableModel
-
getOpenCount
public int getOpenCount()
Description copied from interface:TreeOpenableModelReturns the number of paths that are opened.- Specified by:
getOpenCountin interfaceTreeOpenableModel
-
isOpenEmpty
public boolean isOpenEmpty()
Description copied from interface:TreeOpenableModelReturns true if the open is currently empty.- Specified by:
isOpenEmptyin interfaceOpenable<E>- Specified by:
isOpenEmptyin interfaceTreeOpenableModel
-
clearOpen
public void clearOpen()
Description copied from interface:TreeOpenableModelEmpties the current open path. If this represents a change in the current open, theTreeDataListenerlisteners are notified.- Specified by:
clearOpenin interfaceOpenable<E>- Specified by:
clearOpenin interfaceTreeOpenableModel
-
beforeSort
protected java.lang.Object beforeSort()
A utility that the deriving class can call to save the states before sorting the model.Default: saves the selection and open states.
For example,
DefaultTreeModel.sort(java.util.Comparator<org.zkoss.zul.TreeNode<E>>, boolean)invokes it to preserve the selection to the same objects (rather than the same paths).- Since:
- 6.0.0
-
afterSort
protected void afterSort(java.lang.Object ctx)
A utility that the deriving class can call to restore the states saved bybeforeSort()- Since:
- 6.0.0
-
getSelection
public java.util.Set<E> getSelection()
Description copied from interface:SelectableReturns the current selection. It is readonly. Don't modify it directly- Specified by:
getSelectionin interfaceSelectable<E>- Returns:
- the current selection.
-
setSelection
public void setSelection(java.util.Collection<? extends E> selection)
Description copied from interface:SelectableReplace the current selection with the given set.If this represents a change to the current selection then notify each ListDataListener, including UI.
- Specified by:
setSelectionin interfaceSelectable<E>
-
isSelected
public boolean isSelected(java.lang.Object child)
Description copied from interface:SelectableReturns whether an object is selected.- Specified by:
isSelectedin interfaceSelectable<E>
-
addToSelection
public boolean addToSelection(E child)
Description copied from interface:SelectableAdd the specified object into selection.If this represents a change to the current selection then notify each ListDataListener, including UI.
- Specified by:
addToSelectionin interfaceSelectable<E>- Parameters:
child- the object to be as selection.- Returns:
- true if it is added successfully; false if
objis not part of the data, or was already selected.
-
removeFromSelection
public boolean removeFromSelection(java.lang.Object child)
Description copied from interface:SelectableRemove the specified object from selection.If this represents a change to the current selection then notify each ListDataListener, including UI.
- Specified by:
removeFromSelectionin interfaceSelectable<E>- Parameters:
child- the object to be remove from selection.- Returns:
- whether it is removed successfully
-
getOpenObjects
public java.util.Set<E> getOpenObjects()
Description copied from interface:OpenableReturns the objects that are opened. It is readonly. Don't modify it directly- Specified by:
getOpenObjectsin interfaceOpenable<E>
-
setOpenObjects
public void setOpenObjects(java.util.Collection<? extends E> opened)
Description copied from interface:OpenableReplace the current set of opened objects with the given set.- Specified by:
setOpenObjectsin interfaceOpenable<E>
-
isObjectOpened
public boolean isObjectOpened(java.lang.Object child)
Description copied from interface:OpenableReturns whether the specified object be opened.- Specified by:
isObjectOpenedin interfaceOpenable<E>
-
addOpenObject
public boolean addOpenObject(E child)
Description copied from interface:OpenableAdd the specified object into the collection of opened objects.- Specified by:
addOpenObjectin interfaceOpenable<E>- Parameters:
child- the object to be as selection.- Returns:
- true if it is added successfully; false if
objis not part of the data, or was already opened.
-
removeOpenObject
public boolean removeOpenObject(java.lang.Object child)
Description copied from interface:OpenableRemove the specified object from selection.- Specified by:
removeOpenObjectin interfaceOpenable<E>- Parameters:
child- the object to be remove from selection.- Returns:
- whether it is removed successfully
-
clone
public java.lang.Object clone()
- Overrides:
clonein classjava.lang.Object
-
getPageSize
public int getPageSize()
Description copied from interface:PageableReturns the number of items per page.Default: 20.
- Specified by:
getPageSizein interfacePageable
-
setPageSize
public void setPageSize(int size) throws org.zkoss.zk.ui.WrongValueExceptionDescription copied from interface:PageableSets the number of items per page.- Specified by:
setPageSizein interfacePageable- Throws:
org.zkoss.zk.ui.WrongValueException
-
getTotalSize
public int getTotalSize()
Returns the total number of items.
Note: the entire tree will be traversed once to count the number of tree nodes, although the result will be cached until the model has changed (open/add/remove/etc.), it is still a VERY EXPENSIVE operation, please @Override to provide your own implementation for better performance- Specified by:
getTotalSizein interfacePageableModel- Returns:
- number of total size, or 0 if the model is empty
- Since:
- 10.0.0
-
getPageCount
public int getPageCount()
Returns the number of pages. Note: there is at least one page even no item at all.
Note: the entire tree will be traversed once to count the number of tree nodes, although the result will be cached until the model has changed (open/add/remove/etc.), it is still a VERY EXPENSIVE operation, please @Override to provide your own implementation for better performance- Specified by:
getPageCountin interfacePageable- Returns:
- number of pages, or 1 if the model is empty
- Since:
- 8.0.0
-
getActivePage
public int getActivePage()
Description copied from interface:PageableReturns the active page (starting from 0).- Specified by:
getActivePagein interfacePageable
-
setActivePage
public void setActivePage(int pg) throws org.zkoss.zk.ui.WrongValueExceptionDescription copied from interface:PageableSets the active page (starting from 0).- Specified by:
setActivePagein interfacePageable- Throws:
org.zkoss.zk.ui.WrongValueException
-
addPagingEventListener
public void addPagingEventListener(PagingListener listener)
Description copied from interface:PageableModelAdds a listener to the list of listeners to be notified when a PagingEvent happens outside of standard Paging component- Specified by:
addPagingEventListenerin interfacePageableModel
-
removePagingEventListener
public void removePagingEventListener(PagingListener listener)
Description copied from interface:PageableModelRemoves a listener from the list of listeners to be notified when a PagingEvent happens outside of standard Paging component- Specified by:
removePagingEventListenerin interfacePageableModel
-
-