public class TableTreeContentProvider extends PageFlowScopeAdapter implements ITreeContentProvider, IRefreshableContentProvider, ISortableTableContentProvider, IFilterableTableContentProvider, ISelectableTableContentProvider, ITransactionalContentProvider, IUpdateableTableContentProvider
IAddressableTableContentProvider
to an ITreeContentProvider
.
The table content provider must provide the rows in proper depth-first tree order
(contrast this with other tree providers, such as ListTreeContentProvider
,
which are able to automatically re-order rows into depth-first tree order).
For each of the following properties, either the getter method must be overriden,
or this instance must be supplied with the corresponding --FieldName
property:
IRefreshableContentProvider
,
ISortableTableContentProvider
, ISelectableTableContentProvider
, ITransactionalContentProvider
,
IFilterableTableContentProvider
, or IUpdateableTableContentProvider
functionality, if used.Modifier and Type | Field and Description |
---|---|
protected String |
m_childIdsFieldName |
protected String |
m_depthFieldName |
protected String |
m_firstChildFieldName |
protected String |
m_hasChildrenFieldName |
protected TreeContentProviderHelper |
m_helper |
protected String |
m_lastChildFieldName |
protected String |
m_parentIdFieldName |
protected String |
m_rootIdsFieldName |
protected IAddressableTableContentProvider |
m_table |
fExpireWithPageFlow
Constructor and Description |
---|
TableTreeContentProvider()
Default constructor which doesn't do any intialization.
|
TableTreeContentProvider(IAddressableTableContentProvider table)
Construct new instance and initialize table.
|
TableTreeContentProvider(IAddressableTableContentProvider table,
String rootIdsFieldName,
String depthFieldName,
String parentIdFieldName,
String childIdsFieldName,
String hasChildrenFieldName,
String firstChildFieldName,
String lastChildFieldName)
Construct new instance and initialize instance variables.
|
Modifier and Type | Method and Description |
---|---|
void |
applyChanges()
Commits changes back to the data source.
|
void |
cancelChanges()
Reverts all changes made since the last
ITransactionalContentProvider.applyChanges() call. |
void |
createRow()
Appends the template row to the table data.
|
void |
deleteRow()
Deletes currently positioned row
|
boolean |
getCanTemplateRow()
True if provider can be put into template row state.
|
Iterator<String> |
getChildIds()
String ids of child rows, in order. |
String |
getChildIdsFieldName() |
Object |
getCurrentRow()
Returns wrapped current row object.
|
int |
getDepth()
Depth of current row.
|
String |
getDepthFieldName() |
String |
getFilter()
Filter expression.
|
String |
getFirstChildFieldName() |
boolean |
getHasChildren()
True if current row has children.
|
String |
getHasChildrenFieldName() |
boolean[] |
getLastChildAncestors()
ITreeContentProvider.isLastChild() value of ancestors to the current row,
from the root to the current row's parent. |
String |
getLastChildFieldName() |
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.
|
String |
getParentIdFieldName() |
Object[] |
getPropertyKeys()
Returns list of properties supported by this content provider.
|
Iterator<String> |
getRootIds()
String ids of root rows, in order. |
String |
getRootIdsFieldName() |
int |
getRowCount()
Return the number of rows of data objects represented by this DataModel.
|
String |
getRowId()
Returns unique identifier for the current row.
|
int |
getRowIndex()
Return the zero-relative index of the currently selected row.
|
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.
|
ISortInfo |
getSort()
Returns current sort info.
|
IAddressableTableContentProvider |
getTable() |
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)
Returns true if the given property is readonly.
|
boolean |
isRowAvailable()
Return a flag indicating whether there is rowData available at the
current rowIndex.
|
boolean |
isRowSelected()
Returns
true if current row is selected. |
boolean |
isTemplateRow()
Is provider in state where it returns properties for template pseudo-row.
|
boolean |
isVisible()
True if ancestors of current row are all open.
|
void |
refresh()
(Re)loads data from the data source.
|
void |
setAutoRefresh(boolean autorefresh)
Sets auto refresh mode on.
|
void |
setCanTemplateRow(boolean value)
True if provider can be put into template row state.
|
void |
setChildIdsFieldName(String childIdsFieldName) |
void |
setCurrentRow(Object row)
Sets new current row object
|
void |
setDepthFieldName(String depthFieldName) |
void |
setFilter(String filter)
Filter expression.
|
void |
setFirstChildFieldName(String firstChildFieldName) |
void |
setHasChildrenFieldName(String hasChildrenFieldName) |
void |
setLastChildFieldName(String lastChildFieldName) |
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 |
setParentIdFieldName(String parentIdFieldName) |
void |
setRootIdsFieldName(String rootIdsFieldName) |
void |
setRowById(String id)
Selects current row by its id.
|
void |
setRowIndex(int rowIndex)
Set the zero-relative index of the currently selected row, or -1 to
indicate that we are not positioned on a row.
|
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 |
setTable(IAddressableTableContentProvider table) |
void |
setTemplateRow()
Sets provider to state where it returns properties for template pseudo-row.
|
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)
Sets new value of the given property
|
boolean |
supportsAutoRefresh()
Returns true if this content provider supports auto refresh feature.
|
getExpireWithPageFlow, setExpireWithPageFlow
protected IAddressableTableContentProvider m_table
protected TreeContentProviderHelper m_helper
protected String m_rootIdsFieldName
protected String m_depthFieldName
protected String m_parentIdFieldName
protected String m_childIdsFieldName
protected String m_hasChildrenFieldName
protected String m_firstChildFieldName
protected String m_lastChildFieldName
public TableTreeContentProvider()
public TableTreeContentProvider(IAddressableTableContentProvider table)
table
- public TableTreeContentProvider(IAddressableTableContentProvider table, String rootIdsFieldName, String depthFieldName, String parentIdFieldName, String childIdsFieldName, String hasChildrenFieldName, String firstChildFieldName, String lastChildFieldName)
table
- rootIdsFieldName
- depthFieldName
- parentIdFieldName
- childIdsFieldName
- hasChildrenFieldName
- firstChildFieldName
- lastChildFieldName
- public 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
IUpdateableContentProvider
Returns true if the given property is readonly. If it is readonly, IUpdateableContentProvider.setValue(Object, Object)
will
definitely fail.
isReadOnly
in interface IUpdateableContentProvider
propertyKey
- property key of type String
or Integer
PropertyNotFoundException
ELException
public void setValue(Object propertyKey, Object value) throws ELException, PropertyNotFoundException
IUpdateableContentProvider
Sets new value of the given property
setValue
in interface IUpdateableContentProvider
propertyKey
- property key of type String
or Integer
value
- new property valuePropertyNotFoundException
- if property is not foundELException
public void applyChanges() throws ContentProviderException
ITransactionalContentProvider
Commits changes back to the data source.
applyChanges
in interface ITransactionalContentProvider
ContentProviderException
- if error happens during commitpublic void cancelChanges() throws ContentProviderException
ITransactionalContentProvider
Reverts all changes made since the last ITransactionalContentProvider.applyChanges()
call.
cancelChanges
in interface ITransactionalContentProvider
ContentProviderException
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
true
when the output properties are not up-to-date with the current input parameters, i.e. IRefreshable.refresh()
needs to be executed manually or automatically.public void setNeedRefresh(boolean needRefresh)
IRefreshable
IContentProvider.getValue(Object)
.setNeedRefresh
in interface IRefreshable
needRefresh
- true
if the input parameters have changedpublic void refresh() throws ContentProviderException
IRefreshable
refresh
in interface IRefreshable
ContentProviderException
- if error loading data from the data sourcepublic 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 auto refresh mode is not supportedIRefreshable.supportsAutoRefresh()
,
IRefreshable.getNeedRefresh()
,
IRefreshable.setNeedRefresh(boolean)
public boolean supportsAutoRefresh()
IRefreshable
supportsAutoRefresh
in interface IRefreshable
IRefreshable.setAutoRefresh(boolean)
public int getRowCount()
ITableContentProvider
Return -1, if the number of rows is unknown, or no wrappedData is available.
getRowCount
in interface ITableContentProvider
ITableContentProvider.getRowCount()
public int getRowIndex()
ITableContentProvider
If we are not currently positioned on a row, or no wrappedData is available, return -1.
getRowIndex
in interface ITableContentProvider
ITableContentProvider.getRowIndex()
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.getRowVariable()
public boolean isRowAvailable()
ITableContentProvider
isRowAvailable
in interface ITableContentProvider
ITableContentProvider.isRowAvailable()
public void setRowIndex(int rowIndex)
ITableContentProvider
setRowIndex
in interface ITableContentProvider
ITableContentProvider.setRowIndex(int)
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
ITableContentProvider.setRowVariable(String)
public Object getCurrentRow()
ITableContentProvider
Returns wrapped current row object. Can be null
if not data
is available
getCurrentRow
in interface ITableContentProvider
ITableContentProvider.getCurrentRow()
public boolean isAddressable()
IAddressableTableContentProvider
isAddressable
in interface IAddressableTableContentProvider
true
if addressable.IAddressableTableContentProvider.isAddressable()
public String getRowId()
IAddressableTableContentProvider
getRowId
in interface IAddressableTableContentProvider
IAddressableTableContentProvider.getRowId()
public void setRowById(String id)
IAddressableTableContentProvider
setRowIndex(-1)
).setRowById
in interface IAddressableTableContentProvider
id
- row id to find and make currentIAddressableTableContentProvider.setRowById(String)
public boolean getCanTemplateRow()
IUpdateableTableContentProvider
getCanTemplateRow
in interface IUpdateableTableContentProvider
IUpdateableTableContentProvider.getCanTemplateRow()
public void setCanTemplateRow(boolean value)
IUpdateableTableContentProvider
setCanTemplateRow
in interface IUpdateableTableContentProvider
IUpdateableTableContentProvider.setCanTemplateRow(boolean)
public boolean isTemplateRow()
IUpdateableTableContentProvider
ITableContentProvider.isRowAvailable()
returns false.
Setting the row index or id to any value removes provider from this state.isTemplateRow
in interface IUpdateableTableContentProvider
IUpdateableTableContentProvider.isTemplateRow()
public void setTemplateRow()
IUpdateableTableContentProvider
ITableContentProvider.isRowAvailable()
returns false.
Setting the row index or id to any value removes provider from this state.setTemplateRow
in interface IUpdateableTableContentProvider
IUpdateableTableContentProvider.setTemplateRow()
public void setCurrentRow(Object row)
IUpdateableTableContentProvider
setCurrentRow
in interface IUpdateableTableContentProvider
row
- new row object to replace object returned by ITableContentProvider.getCurrentRow()
IUpdateableTableContentProvider.setCurrentRow(Object)
public void createRow() throws ContentProviderException
IUpdateableTableContentProvider
Appends the template row to the table data.
createRow
in interface IUpdateableTableContentProvider
ContentProviderException
- if error happens during creationIUpdateableTableContentProvider.createRow()
public void deleteRow() throws ContentProviderException
IUpdateableTableContentProvider
Deletes currently positioned row
deleteRow
in interface IUpdateableTableContentProvider
ContentProviderException
- if error happens during deletionIUpdateableTableContentProvider.deleteRow()
public ISortInfo getSort()
ISortableTableContentProvider
getSort
in interface ISortableTableContentProvider
ISortableTableContentProvider.getSort()
public void setSort(ISortInfo sort)
ISortableTableContentProvider
setSort
in interface ISortableTableContentProvider
sort
- Sort info, must not be null.ISortableTableContentProvider.setSort(ISortInfo)
public int getRowSelectedCount()
ISelectableTableContentProvider
getRowSelectedCount
in interface ISelectableTableContentProvider
ISelectableTableContentProvider.getRowSelectedCount()
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
ISelectableTableContentProvider.getRowSelectedIds()
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
ISelectableTableContentProvider.getRowUnselectedIds()
public boolean getUseUnselectedModel()
ISelectableTableContentProvider
ISelectableTableContentProvider.getRowUnselectedIds()
rather than ISelectableTableContentProvider.getRowSelectedIds()
).getUseUnselectedModel
in interface ISelectableTableContentProvider
ISelectableTableContentProvider.getUseUnselectedModel()
public boolean isRowSelected()
ISelectableTableContentProvider
true
if current row is selected.isRowSelected
in interface ISelectableTableContentProvider
ISelectableTableContentProvider.isRowSelected()
public void setRowSelected(boolean selected)
ISelectableTableContentProvider
setRowSelected
in interface ISelectableTableContentProvider
selected
- true
to select current row; false
to unselect.ISelectableTableContentProvider.setRowSelected(boolean)
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 idsISelectableTableContentProvider.setRowSelectedIds(Collection)
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 idsISelectableTableContentProvider.setRowUnselectedIds(Collection)
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 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 IAddressableTableContentProvider getTable()
public void setTable(IAddressableTableContentProvider table)
public String getRootIdsFieldName()
public void setRootIdsFieldName(String rootIdsFieldName)
public String getChildIdsFieldName()
public void setChildIdsFieldName(String childIdsFieldName)
public String getDepthFieldName()
public void setDepthFieldName(String depthFieldName)
public String getFirstChildFieldName()
public void setFirstChildFieldName(String firstChildFieldName)
public String getHasChildrenFieldName()
public void setHasChildrenFieldName(String hasChildrenFieldName)
public String getLastChildFieldName()
public void setLastChildFieldName(String lastChildFieldName)
public String getParentIdFieldName()
public void setParentIdFieldName(String parentIdFieldName)