public class LazyNodeTreeContentProvider extends PageFlowScopeAdapter implements ISelectableTreeContentProvider, IRefreshableContentProvider, ISortableTableContentProvider, IFilterableTableContentProvider
INode
roots,
optimized for asynchronous usage.Modifier and Type | Class and Description |
---|---|
protected class |
LazyNodeTreeContentProvider.BreadthFirstTreeWalker
Iterates over the tree in breadth-first order, returning
INode s. |
protected class |
LazyNodeTreeContentProvider.DepthFirstTreeWalker
Iterates over the tree in depth-first order, returning
INode s. |
protected static class |
LazyNodeTreeContentProvider.NodeComparator
Compares two nodes using column sorting info.
|
protected static class |
LazyNodeTreeContentProvider.NodeFilterableValueDecorator
Filter value decorator for wrapped nodes, using a binding expression to calculate the value.
|
protected static class |
LazyNodeTreeContentProvider.NodeIdsIterator
Iterates over a list of
INode s, returning each node's id. |
protected class |
LazyNodeTreeContentProvider.ReverseDepthFirstTreeWalker
Iterates over the tree in reverse-depth-first order, returning
INode s. |
Modifier and Type | Field and Description |
---|---|
protected int |
m_count
Current total nodes, or -1 if total unknown.
|
protected INode |
m_current
Current node.
|
protected String |
m_filter
Filter expression; null by default (indicating no filter).
|
protected boolean |
m_filterable
True if this table can filter rows; false by default.
|
protected Map<String,List<INode>> |
m_filteredChildren
|
protected ValueExpression |
m_filterValue
Value binding used to calculate row filter value.
|
protected int |
m_index
Current index in depth-first order, or -1 if index unknown.
|
protected Map<String,INode> |
m_nodes
|
protected List<INode> |
m_roots
List of
INode roots. |
protected SelectableTreeContentProviderHelper |
m_selectableHelper |
protected ISortInfo |
m_sort
Current sort info.
|
protected Map<String,List<INode>> |
m_sortedChildren
|
protected TreeContentProviderHelper |
m_treeHelper |
protected String |
m_var
Row variable.
|
protected static ISortInfo |
NO_SORT |
fExpireWithPageFlow
Constructor and Description |
---|
LazyNodeTreeContentProvider()
New tree provider.
|
LazyNodeTreeContentProvider(INode root)
New tree provider backed by single
INode root. |
LazyNodeTreeContentProvider(List list)
New tree provider backed by a list of
INode roots. |
Modifier and Type | Method and Description |
---|---|
protected INode |
findNodeById(String id)
Returns node with specified id or null.
|
Iterator<String> |
getChildIds()
String ids of child rows, in order. |
protected List<? extends INode> |
getChildren(INode parent)
List children for given parent node id.
|
INode |
getCurrent()
Current node or null.
|
Object |
getCurrentRow()
Returns wrapped current row object.
|
int |
getDepth()
Depth of current row.
|
String |
getFilter()
Filter expression.
|
boolean |
getHasChildren()
True if current row has children.
|
boolean[] |
getLastChildAncestors()
ITreeContentProvider.isLastChild() value of ancestors to the current row,
from the root to the current row's parent. |
boolean |
getNeedRefresh()
Returns
true when IRefreshable.isAutoRefresh() is on and the result properties need to be refreshed from
the data source by executing IRefreshable.refresh() method. |
Collection<String> |
getOpenIds()
Collection of
String ids of open rows. |
String |
getParentId()
Id of parent row.
|
Object[] |
getPropertyKeys()
Returns list of properties supported by this content provider.
|
Iterator<String> |
getRootIds()
String ids of root rows, in order. |
List<INode> |
getRoots()
List of
INode roots or null. |
int |
getRowCount()
Walks tree to determine row count.
|
ValueBinding |
getRowFilterValueBinding()
Deprecated.
use
getRowFilterValueExpression() instead |
ValueExpression |
getRowFilterValueExpression()
Value-binding which calculates the value to filter for the current row.
|
String |
getRowId()
Returns unique identifier for the current row.
|
int |
getRowIndex()
Walks tree to determine row index.
|
int |
getRowSelectedCount()
Returns number of selected rows.
|
Collection<String> |
getRowSelectedIds()
Returns collection of
String ids of the selected rows. |
Collection<String> |
getRowUnselectedIds()
Returns collection of
String ids of the un-selected rows
(all other rows are selected implicitly)
May be empty or contain non-existent ids; never null, never contains null. |
String |
getRowVariable()
Returns row variable name.
|
protected List<INode> |
getSiblings(INode current)
Lists the sibling
INode s of the current node. |
ISortInfo |
getSort()
Returns current sort info.
|
Class<?> |
getType(Object propertyKey)
Returns java type of the given property
|
Collection<String> |
getUnopenIds()
Collection of
String ids of un-open rows
(all other rows are open implicitly). |
boolean |
getUseUnopenModel()
True if it's more effecient to use the un-open model
(
ITreeContentProvider.getUnopenIds() ) rather than the open model (ITreeContentProvider.getOpenIds() ). |
boolean |
getUseUnselectedModel()
Returns true if it's more effecient to use unselected model
(ie
ISelectableTableContentProvider.getRowUnselectedIds() rather than ISelectableTableContentProvider.getRowSelectedIds() ). |
Object |
getValue(Object propertyKey)
Returns value of the given property
|
boolean |
hasProperty(Object propertyKey)
Checks if the given property is supported by this content provider
|
boolean |
isAddressable()
Checks if this content provider truly is addressable.
|
boolean |
isAutoRefresh()
Returns
true if the provider is currenlty in auto-refresh mode |
boolean |
isFilterable()
True if this provider truely is filterable.
|
boolean |
isFirstChild()
True if current row is first child of parent
(not whether or not current row is first row in tree).
|
boolean |
isLastChild()
True if current row is last child of parent
(not whether or not current row is last row in tree).
|
boolean |
isOpen()
True if current row is open.
|
boolean |
isReadOnly(Object propertyKey) |
boolean |
isRowAvailable()
Return a flag indicating whether there is rowData available at the
current rowIndex.
|
boolean |
isRowMixed()
True if row selection state is mixed.
|
boolean |
isRowSelected()
Returns
true if current row is selected. |
boolean |
isVisible()
True if ancestors of current row are all open.
|
void |
openTreeNodes(int depth)
setOpenToDepth() optimization
|
void |
refresh()
(Re)loads data from the data source.
|
void |
setAutoRefresh(boolean autorefresh)
Sets auto refresh mode on.
|
void |
setCurrent(INode current)
Current node or null.
|
void |
setFilter(String filter)
Filter expression.
|
void |
setFilterable(boolean filterable)
True if this provider truely is filterable.
|
void |
setNeedRefresh(boolean needRefresh)
Tells the provider that the input parameters have changed and the output results need to be refreshed the next time any
output property is requested via
IContentProvider.getValue(Object) . |
void |
setOpen(boolean open)
True if current row is open.
|
void |
setOpenIds(Collection<String> ids)
Collection of
String ids of open rows. |
void |
setOpenToDepth(int depth)
Sets tree open to the specified depth.
|
void |
setRoots(List<? extends INode> roots)
List of
INode roots or null. |
void |
setRowById(String id)
Selects current row by its id.
|
void |
setRowFilterValueBinding(ValueBinding binding)
Deprecated.
use
setRowFilterValueExpression(ValueExpression) instead |
void |
setRowFilterValueBindingAsString(String binding)
Deprecated.
use
setRowFilterValueExpressionAsString(String) instead |
void |
setRowFilterValueExpression(ValueExpression binding)
Value-binding which calculates the value to filter for the current row.
|
void |
setRowFilterValueExpressionAsString(String binding)
Value-binding (in string form) which calculates the value to filter for the current row.
|
void |
setRowIndex(int rowIndex)
Walks tree to set row index.
|
void |
setRowSelected(boolean selected)
Sets the selection status for the current row.
|
void |
setRowSelectedIds(Collection ids)
Sets new selection using a collection of
String ids of the rows to select. |
void |
setRowUnselectedIds(Collection ids)
Unselects rows using a collection of
String ids of the un-selected rows
(all other rows are selected implicitly). |
void |
setRowVariable(String var)
Sets row variable name to use for accessing row specific data.
|
void |
setSort(ISortInfo sort)
Sets new sort info, re-sorting the table (if necessary).
|
void |
setUnopenIds(Collection<String> ids)
Collection of
String ids of un-open rows
(all other rows are open implicitly). |
void |
setValue(Object propertyKey,
Object value) |
boolean |
supportsAutoRefresh()
Returns true if this content provider supports auto refresh feature.
|
String |
toString()
Returns string representation of content.
|
getExpireWithPageFlow, setExpireWithPageFlow
protected static final ISortInfo NO_SORT
protected SelectableTreeContentProviderHelper m_selectableHelper
protected TreeContentProviderHelper m_treeHelper
protected INode m_current
protected int m_index
protected int m_count
protected String m_var
protected ISortInfo m_sort
protected boolean m_filterable
protected String m_filter
protected ValueExpression m_filterValue
public LazyNodeTreeContentProvider()
INode
roots must be set via setRoots(java.util.List<? extends com.webmethods.caf.faces.data.tree.INode>)
.public LazyNodeTreeContentProvider(INode root)
INode
root.root
- Single INode
root.public String toString()
IContentProvider
toString
in interface IContentProvider
toString
in class Object
String
representation of the wrapped contentpublic Object[] getPropertyKeys()
IContentProvider
Object[0]
,
never null.getPropertyKeys
in interface IContentProvider
String
or Integer
public Class<?> getType(Object propertyKey) throws PropertyNotFoundException
IContentProvider
getType
in interface IContentProvider
propertyKey
- the property key of type String
or Integer
Class
PropertyNotFoundException
- if property is not supportedpublic Object getValue(Object propertyKey) throws ELException, PropertyNotFoundException
IContentProvider
getValue
in interface IContentProvider
propertyKey
- the property key of type String
or Integer
null
PropertyNotFoundException
- if property is not supportedELException
public boolean hasProperty(Object propertyKey)
IContentProvider
hasProperty
in interface IContentProvider
propertyKey
- property key of type String
or Integer
true
if property is supportedpublic boolean isReadOnly(Object propertyKey) throws ELException, PropertyNotFoundException
ELException
PropertyNotFoundException
public void setValue(Object propertyKey, Object value) throws ELException, PropertyNotFoundException
ELException
PropertyNotFoundException
public void refresh()
IRefreshable
refresh
in interface IRefreshable
public boolean supportsAutoRefresh()
IRefreshable
supportsAutoRefresh
in interface IRefreshable
IRefreshable.setAutoRefresh(boolean)
public void setAutoRefresh(boolean autorefresh) throws ContentProviderException
IRefreshable
Sets auto refresh mode on. When auto refresh mode is on, the provider calls IRefreshable.getNeedRefresh()
to determine whether the refresh needs to be done before returning any result properties. If it returns
true
, the provider calls IRefreshable.refresh()
method to updated the result properties.
setAutoRefresh
in interface IRefreshable
autorefresh
- true to turn it onContentProviderException
- if autorefresh is true because this class doesn't support auto refresh.IRefreshable.supportsAutoRefresh()
,
IRefreshable.getNeedRefresh()
,
IRefreshable.setNeedRefresh(boolean)
public boolean isAutoRefresh()
IRefreshable
true
if the provider is currenlty in auto-refresh modeisAutoRefresh
in interface IRefreshable
public boolean getNeedRefresh()
IRefreshable
Returns true
when IRefreshable.isAutoRefresh()
is on and the result properties need to be refreshed from
the data source by executing IRefreshable.refresh()
method.
Implementations may return an accurate value from this method if they can track the changes to the input parameter
properties or they may require the clients to call IRefreshable.setNeedRefresh(boolean)
explicitely.
getNeedRefresh
in interface IRefreshable
public void setNeedRefresh(boolean needRefresh)
IRefreshable
IContentProvider.getValue(Object)
.setNeedRefresh
in interface IRefreshable
needRefresh
- true
if the input parameters have changedContentProviderException
- if needRefresh is true because this class doesn't support auto refresh.public boolean isRowAvailable()
ITableContentProvider
isRowAvailable
in interface ITableContentProvider
DataModel.isRowAvailable()
public int getRowCount()
getRowCount
in interface ITableContentProvider
DataModel.getRowCount()
public int getRowIndex()
getRowIndex
in interface ITableContentProvider
DataModel.getRowIndex()
public void setRowIndex(int rowIndex)
setRowIndex
in interface ITableContentProvider
DataModel.getRowIndex()
public void openTreeNodes(int depth)
ISelectableTreeContentProvider
openTreeNodes
in interface ISelectableTreeContentProvider
public String getRowVariable()
ITableContentProvider
Returns row variable name.
If specified row variable can be used to access current row data for the provider internal needs, like sorting or addressing.
getRowVariable
in interface ITableContentProvider
ITableContentProvider.setRowVariable(String)
public void setRowVariable(String var)
ITableContentProvider
Sets row variable name to use for accessing row specific data. For
example, if the provider wrapps an array of a data objects with
id
property and the variable name is item
, then
the provider implementation can access id
property of each
record as item.id
.
This property should set only once at the provider initialization time
setRowVariable
in interface ITableContentProvider
public Object getCurrentRow()
ITableContentProvider
Returns wrapped current row object. Can be null
if not data
is available
getCurrentRow
in interface ITableContentProvider
ITableContentProvider.isRowAvailable()
public boolean isAddressable()
IAddressableTableContentProvider
isAddressable
in interface IAddressableTableContentProvider
public String getRowId()
IAddressableTableContentProvider
getRowId
in interface IAddressableTableContentProvider
public void setRowById(String id)
IAddressableTableContentProvider
setRowIndex(-1)
).setRowById
in interface IAddressableTableContentProvider
id
- row id to find and make currentpublic boolean isRowSelected()
ISelectableTableContentProvider
true
if current row is selected.isRowSelected
in interface ISelectableTableContentProvider
public void setRowSelected(boolean selected)
ISelectableTableContentProvider
setRowSelected
in interface ISelectableTableContentProvider
selected
- true
to select current row; false
to unselect.public int getRowSelectedCount()
ISelectableTableContentProvider
getRowSelectedCount
in interface ISelectableTableContentProvider
public Collection<String> getRowSelectedIds()
ISelectableTableContentProvider
String
ids of the selected rows.
May be empty or contain non-existent ids; never null, never contains null.getRowSelectedIds
in interface ISelectableTableContentProvider
public void setRowSelectedIds(Collection ids)
ISelectableTableContentProvider
String
ids of the rows to select.
May be empty or contain non-existent ids; never null, never contains null.setRowSelectedIds
in interface ISelectableTableContentProvider
ids
- the collection of String
row idspublic boolean getUseUnselectedModel()
ISelectableTableContentProvider
ISelectableTableContentProvider.getRowUnselectedIds()
rather than ISelectableTableContentProvider.getRowSelectedIds()
).getUseUnselectedModel
in interface ISelectableTableContentProvider
public Collection<String> getRowUnselectedIds()
ISelectableTableContentProvider
String
ids of the un-selected rows
(all other rows are selected implicitly)
May be empty or contain non-existent ids; never null, never contains null.getRowUnselectedIds
in interface ISelectableTableContentProvider
public void setRowUnselectedIds(Collection ids)
ISelectableTableContentProvider
String
ids of the un-selected rows
(all other rows are selected implicitly).
May be empty or contain non-existent ids; never null, never contains null.setRowUnselectedIds
in interface ISelectableTableContentProvider
ids
- collection of String
row idspublic boolean isRowMixed()
ISelectableTreeContentProvider
isRowMixed
in interface ISelectableTreeContentProvider
public ISortInfo getSort()
ISortableTableContentProvider
getSort
in interface ISortableTableContentProvider
public void setSort(ISortInfo sort)
ISortableTableContentProvider
setSort
in interface ISortableTableContentProvider
sort
- Sort info, must not be null.public Iterator<String> getRootIds()
ITreeContentProvider
String
ids of root rows, in order. Empty iterator (not null) if tree is empty.getRootIds
in interface ITreeContentProvider
public int getDepth()
ITreeContentProvider
getDepth
in interface ITreeContentProvider
public String getParentId()
ITreeContentProvider
getParentId
in interface ITreeContentProvider
public Iterator<String> getChildIds()
ITreeContentProvider
String
ids of child rows, in order. Empty iterator (not null) if row has no children.
Child depth must be exactly one more than current depth.getChildIds
in interface ITreeContentProvider
public boolean getHasChildren()
ITreeContentProvider
getHasChildren
in interface ITreeContentProvider
public boolean isFirstChild()
ITreeContentProvider
isFirstChild
in interface ITreeContentProvider
public boolean isLastChild()
ITreeContentProvider
isLastChild
in interface ITreeContentProvider
public boolean[] getLastChildAncestors()
ITreeContentProvider
ITreeContentProvider.isLastChild()
value of ancestors to the current row,
from the root to the current row's parent.
Zero-length array (non-null) for root.getLastChildAncestors
in interface ITreeContentProvider
public boolean isOpen()
ITreeContentProvider
isOpen
in interface ITreeContentProvider
public void setOpen(boolean open)
ITreeContentProvider
setOpen
in interface ITreeContentProvider
public boolean isVisible()
ITreeContentProvider
isVisible
in interface ITreeContentProvider
public Collection<String> getOpenIds()
ITreeContentProvider
String
ids of open rows.
May be empty or contain non-existent ids; never null, never contains null.getOpenIds
in interface ITreeContentProvider
public void setOpenIds(Collection<String> ids)
ITreeContentProvider
String
ids of open rows.
May be empty or contain non-existent ids; never null, never contains null.setOpenIds
in interface ITreeContentProvider
public boolean getUseUnopenModel()
ITreeContentProvider
ITreeContentProvider.getUnopenIds()
) rather than the open model (ITreeContentProvider.getOpenIds()
).getUseUnopenModel
in interface ITreeContentProvider
public Collection<String> getUnopenIds()
ITreeContentProvider
String
ids of un-open rows
(all other rows are open implicitly).
May be empty or contain non-existent ids; never null, never contains null.getUnopenIds
in interface ITreeContentProvider
public void setUnopenIds(Collection<String> ids)
ITreeContentProvider
String
ids of un-open rows
(all other rows are open implicitly).
May be empty or contain non-existent ids; never null, never contains null.setUnopenIds
in interface ITreeContentProvider
public boolean isFilterable()
IFilterableTableContentProvider
isFilterable
in interface IFilterableTableContentProvider
public String getFilter()
IFilterableTableContentProvider
getFilter
in interface IFilterableTableContentProvider
public void setFilter(String filter)
IFilterableTableContentProvider
setFilter
in interface IFilterableTableContentProvider
public void setOpenToDepth(int depth)
depth
- Depth to which to open.
0 = none, 1 = roots, 2 = roots + children of roots, etc.public INode getCurrent()
public void setCurrent(INode current)
public void setFilterable(boolean filterable)
@Deprecated public ValueBinding getRowFilterValueBinding()
getRowFilterValueExpression()
instead@Deprecated public void setRowFilterValueBinding(ValueBinding binding)
setRowFilterValueExpression(ValueExpression)
insteadpublic ValueExpression getRowFilterValueExpression()
public void setRowFilterValueExpression(ValueExpression binding)
@Deprecated public void setRowFilterValueBindingAsString(String binding)
setRowFilterValueExpressionAsString(String)
insteadpublic void setRowFilterValueExpressionAsString(String binding)
protected List<? extends INode> getChildren(INode parent)