Package org.zkoss.pivot.impl
Class TabularPivotModel
- java.lang.Object
-
- org.zkoss.pivot.impl.AbstractPivotModel
-
- org.zkoss.pivot.impl.TabularPivotModel
-
- All Implemented Interfaces:
Serializable
,PivotModel
,PivotModelExt
,PivotModelExt.SortCtrl
public class TabularPivotModel extends AbstractPivotModel implements PivotModelExt, PivotModelExt.SortCtrl
An implementation of PivotModel, which takes raw data in the form of a two dimensional list.- Author:
- simonpai
- See Also:
- Serialized Form
-
-
Nested Class Summary
Nested Classes Modifier and Type Class Description protected static class
TabularPivotModel.CalculatorContextSpace
protected static interface
TabularPivotModel.RawDataRunner
-
Nested classes/interfaces inherited from interface org.zkoss.pivot.PivotModelExt
PivotModelExt.SortCtrl
-
-
Field Summary
Fields Modifier and Type Field Description protected TabularPivotModel.CalculatorContextSpace
_space
protected static int
_STD_CAL_TYPE_SIZE
protected static Comparator<PivotHeaderNode>
NODE_COMPARATOR
-
Constructor Summary
Constructors Constructor Description TabularPivotModel(Iterable<? extends List<?>> data, List<String> columns)
Constructor
-
Method Summary
All Methods Instance Methods Concrete Methods Deprecated Methods Modifier and Type Method Description void
addSupportedCalculator(ContextualCalculator<?> cal)
Register a customCalculator
supported in this model.protected ContextualCalculator<?>
cast(Calculator calc)
protected TabularPivotField
cast(PivotField field)
protected SimplePivotHeaderNode
cast(PivotHeaderNode node)
void
clearAllFields(boolean complete)
Remove all pivot fields from column, row, and data.void
clearSupportedCalculators()
Clear all registered customCalculator
supported in this model.protected ContextualCalculator<?>
getCalculator(SimplePivotHeaderNode rowNode, int rowCalIndex, SimplePivotHeaderNode colNode, int colCalIndex, int dataIndex)
protected CalculatorContextSignature
getCalculatorContextSignature()
Override this method to intervene the required signature for preparing source space.TabularPivotField[]
getColumnFields()
PivotHeaderTree
getColumnHeaderTree()
Return the header tree of columns.TabularPivotField[]
getDataFields()
TabularPivotField
getField(String fieldName)
Returns the pivot field from the specified field name, if any.TabularPivotField[]
getFields()
Return a list of all fields in the model.TabularPivotField[]
getFields(PivotField.Type type)
Return a list of pivot fields of the given type.Iterable<? extends List<?>>
getRawData()
Return the raw data collection.TabularPivotField[]
getRowFields()
PivotHeaderTree
getRowHeaderTree()
Return the header tree of rows.int
getSourceDataIndex(PivotField field)
Return the index of raw data columns the field corresponds to.Calculator[]
getSupportedCalculators()
Return a list of supported Calculators as options of Summary and Subtotals.Number
getValue(PivotHeaderNode rowNode, int rowCalIndex, PivotHeaderNode colNode, int colCalIndex, int dataIndex)
Get the calculated data summary at specific cell position.protected void
iterateRawData(SimplePivotHeaderTree colTree, SimplePivotHeaderTree rowTree, TabularPivotModel.RawDataRunner runner)
Override this method to provide a different implementation of raw data iteration.void
removeField(String fieldName)
Remove first field with given name from column, row, or data.void
removeField(PivotField field)
Remove the field from column, row, or data.void
removeSupportedCalculator(ContextualCalculator<?> cal)
Unregister a customCalculator
supported in this model.void
setFieldKeyComparator(String fieldName, Comparator<Object> comparator)
Set a comparator on a pivot field for node ordering.void
setFieldKeyComparator(PivotField field, Comparator<Object> comparator)
Set a comparator on a pivot field for node orderingvoid
setFieldKeyOrder(String fieldName, boolean ascending)
Set the ordering of keys on a field.void
setFieldKeyOrder(PivotField field, boolean ascending)
Set the node ordering of the field.void
setFieldSubtotals(String fieldName, Calculator[] subtotals)
Sets the subtotal calculators on a field, or null to show no subtotal.void
setFieldSubtotals(PivotField field, Calculator[] subtotals)
Set the subtotals on a field.void
setFieldSummary(String fieldName, Calculator summary)
Sets the summary calculator on a field, or null to use the default one.void
setFieldSummary(PivotField field, Calculator summary)
Set the summary on a field.void
setFieldType(String fieldName, PivotField.Type type)
Change the type of a pivot field.void
setFieldType(PivotField field, PivotField.Type type)
Change the type of a pivot field.void
setFieldType(PivotField field, PivotField.Type type, int index)
Change the type of a pivot field and insert it at the given level (in case of COLUMN or ROW) or display position (in case of DATA).protected boolean
shallReloadSourceSpace(CalculatorContextSignature current, CalculatorContextSignature required)
Override this method to determine whether to reload source space more aggressively than default setting.protected void
sortColumnTree(SimplePivotHeaderTree colTree)
Override this method to change the default node sorting in the column tree.protected void
sortRowTree(SimplePivotHeaderTree rowTree)
Override this method to change the default node sorting in the row tree.protected void
sortTrees()
Deprecated.As of release 2.3.0, replaced bysortRowTree(SimplePivotHeaderTree)
andsortColumnTree(SimplePivotHeaderTree)
protected void
updateContextSpace()
void
updateRawData()
Force to update the cached result in the model by rescanning the raw data.-
Methods inherited from class org.zkoss.pivot.impl.AbstractPivotModel
addPivotDataListener, fireEvent, removePivotDataListener
-
Methods inherited from class java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
-
Methods inherited from interface org.zkoss.pivot.PivotModel
addPivotDataListener, removePivotDataListener
-
-
-
-
Field Detail
-
_space
protected final TabularPivotModel.CalculatorContextSpace _space
-
_STD_CAL_TYPE_SIZE
protected static final int _STD_CAL_TYPE_SIZE
-
NODE_COMPARATOR
protected static final Comparator<PivotHeaderNode> NODE_COMPARATOR
-
-
Method Detail
-
setFieldType
public void setFieldType(String fieldName, PivotField.Type type)
Change the type of a pivot field. The field will be at the last level of column/row in case of COLUMN or ROW, and will be the last one in display order in case of DATA.- Parameters:
fieldName
- name of the field- See Also:
PivotField.Type
-
setFieldType
public void setFieldType(PivotField field, PivotField.Type type, int index)
Description copied from interface:PivotModelExt
Change the type of a pivot field and insert it at the given level (in case of COLUMN or ROW) or display position (in case of DATA).- Specified by:
setFieldType
in interfacePivotModelExt
index
- the tree level or display position- See Also:
PivotField.Type
-
setFieldType
public void setFieldType(PivotField field, PivotField.Type type)
Description copied from interface:PivotModelExt
Change the type of a pivot field. The field will be at the last level of column/row in case of COLUMN or ROW, and will be the last one in display order in case of DATA.- Specified by:
setFieldType
in interfacePivotModelExt
- See Also:
PivotField.Type
-
getSourceDataIndex
public int getSourceDataIndex(PivotField field)
Return the index of raw data columns the field corresponds to.
-
getRowFields
public final TabularPivotField[] getRowFields()
-
getColumnFields
public final TabularPivotField[] getColumnFields()
-
getDataFields
public final TabularPivotField[] getDataFields()
-
getFields
public TabularPivotField[] getFields(PivotField.Type type)
Description copied from interface:PivotModel
Return a list of pivot fields of the given type.- Specified by:
getFields
in interfacePivotModel
- See Also:
PivotField
,PivotField.Type
-
getFields
public TabularPivotField[] getFields()
Description copied from interface:PivotModel
Return a list of all fields in the model.- Specified by:
getFields
in interfacePivotModel
-
getField
public TabularPivotField getField(String fieldName)
Returns the pivot field from the specified field name, if any.Note: it only returns the first one matching with the field name.
-
removeField
public void removeField(String fieldName)
Remove first field with given name from column, row, or data. In other words, the field is set to PivotField.Type.UNUSED type.- See Also:
PivotField.Type
-
removeField
public void removeField(PivotField field)
Remove the field from column, row, or data. In other words, the field is set to PivotField.Type.UNUSED type.- See Also:
PivotField.Type
-
clearAllFields
public void clearAllFields(boolean complete)
Remove all pivot fields from column, row, and data. In other words, all field are set to PivotField.Type.UNUSED type- Parameters:
complete
- true to additionally remove custom summary, subtotals and group handlers- See Also:
PivotField.Type
-
setFieldKeyOrder
public void setFieldKeyOrder(String fieldName, boolean ascending)
Set the ordering of keys on a field.
-
setFieldKeyOrder
public void setFieldKeyOrder(PivotField field, boolean ascending)
Description copied from interface:PivotModelExt.SortCtrl
Set the node ordering of the field.- Specified by:
setFieldKeyOrder
in interfacePivotModelExt.SortCtrl
-
setFieldKeyComparator
public void setFieldKeyComparator(String fieldName, Comparator<Object> comparator)
Set a comparator on a pivot field for node ordering.- Parameters:
fieldName
- the field on which the comparator appliescomparator
- a comparator to sort field keys
-
setFieldKeyComparator
public void setFieldKeyComparator(PivotField field, Comparator<Object> comparator)
Description copied from interface:PivotModelExt.SortCtrl
Set a comparator on a pivot field for node ordering- Specified by:
setFieldKeyComparator
in interfacePivotModelExt.SortCtrl
comparator
- a comparator to sort field keys
-
updateRawData
public void updateRawData()
Force to update the cached result in the model by rescanning the raw data. This will calliterateRawData(SimplePivotHeaderTree, SimplePivotHeaderTree, RawDataRunner)
and hence trigger an iteration over the raw data.
-
getSupportedCalculators
public Calculator[] getSupportedCalculators()
Description copied from interface:PivotModelExt
Return a list of supported Calculators as options of Summary and Subtotals.- Specified by:
getSupportedCalculators
in interfacePivotModelExt
-
addSupportedCalculator
public void addSupportedCalculator(ContextualCalculator<?> cal)
Register a customCalculator
supported in this model. This will be reflected ingetSupportedCalculators()
and hence are aware byPivotFieldControl
.
-
removeSupportedCalculator
public void removeSupportedCalculator(ContextualCalculator<?> cal)
Unregister a customCalculator
supported in this model. This will be reflected ingetSupportedCalculators()
and hence are aware byPivotFieldControl
.
-
clearSupportedCalculators
public void clearSupportedCalculators()
Clear all registered customCalculator
supported in this model. This will be reflected ingetSupportedCalculators()
and hence are aware byPivotFieldControl
. This does not affect built-in calculators.
-
setFieldSummary
public void setFieldSummary(String fieldName, Calculator summary)
Sets the summary calculator on a field, or null to use the default one.
-
setFieldSummary
public void setFieldSummary(PivotField field, Calculator summary)
Description copied from interface:PivotModelExt
Set the summary on a field.- Specified by:
setFieldSummary
in interfacePivotModelExt
-
setFieldSubtotals
public void setFieldSubtotals(String fieldName, Calculator[] subtotals)
Sets the subtotal calculators on a field, or null to show no subtotal.
-
setFieldSubtotals
public void setFieldSubtotals(PivotField field, Calculator[] subtotals)
Description copied from interface:PivotModelExt
Set the subtotals on a field.- Specified by:
setFieldSubtotals
in interfacePivotModelExt
-
updateContextSpace
protected final void updateContextSpace()
-
sortRowTree
protected void sortRowTree(SimplePivotHeaderTree rowTree)
Override this method to change the default node sorting in the row tree. The implementation usually involves callingSimplePivotHeaderTree.sort(Comparator)
by providing a custom- Parameters:
rowTree
- the header tree to be sorted- Since:
- 2.3.0
-
sortColumnTree
protected void sortColumnTree(SimplePivotHeaderTree colTree)
Override this method to change the default node sorting in the column tree. The implementation usually involves callingSimplePivotHeaderTree.sort(Comparator)
by providing a custom- Parameters:
colTree
- the header tree to be sorted- Since:
- 2.3.0
-
sortTrees
@Deprecated protected void sortTrees()
Deprecated.As of release 2.3.0, replaced bysortRowTree(SimplePivotHeaderTree)
andsortColumnTree(SimplePivotHeaderTree)
-
iterateRawData
protected void iterateRawData(SimplePivotHeaderTree colTree, SimplePivotHeaderTree rowTree, TabularPivotModel.RawDataRunner runner)
Override this method to provide a different implementation of raw data iteration. For each iterated elementrow
, the following should be called:runner.run(row, rowTree, colTree);
-
getValue
public Number getValue(PivotHeaderNode rowNode, int rowCalIndex, PivotHeaderNode colNode, int colCalIndex, int dataIndex)
Description copied from interface:PivotModel
Get the calculated data summary at specific cell position.- Specified by:
getValue
in interfacePivotModel
- Parameters:
rowNode
- row node, root node means grand totalrowCalIndex
- row subtotal calculator index, -1 if not subtotalcolNode
- column node, root node means grand totalcolCalIndex
- column subtotal calculator index, -1 if not subtotaldataIndex
- index of data fields
-
getCalculator
protected final ContextualCalculator<?> getCalculator(SimplePivotHeaderNode rowNode, int rowCalIndex, SimplePivotHeaderNode colNode, int colCalIndex, int dataIndex)
-
getColumnHeaderTree
public PivotHeaderTree getColumnHeaderTree()
Description copied from interface:PivotModel
Return the header tree of columns.- Specified by:
getColumnHeaderTree
in interfacePivotModel
- See Also:
PivotHeaderTree
-
getRowHeaderTree
public PivotHeaderTree getRowHeaderTree()
Description copied from interface:PivotModel
Return the header tree of rows.- Specified by:
getRowHeaderTree
in interfacePivotModel
- See Also:
PivotHeaderTree
-
getCalculatorContextSignature
protected CalculatorContextSignature getCalculatorContextSignature()
Override this method to intervene the required signature for preparing source space.
-
shallReloadSourceSpace
protected boolean shallReloadSourceSpace(CalculatorContextSignature current, CalculatorContextSignature required)
Override this method to determine whether to reload source space more aggressively than default setting.- Parameters:
current
- the current source space signaturerequired
- the new required signature- Returns:
- true to for reloading source space
-
cast
protected TabularPivotField cast(PivotField field)
-
cast
protected SimplePivotHeaderNode cast(PivotHeaderNode node)
-
cast
protected ContextualCalculator<?> cast(Calculator calc)
-
-