org.zkoss.pivot.impl
Class TabularPivotModel

java.lang.Object
  extended by org.zkoss.pivot.impl.AbstractPivotModel
      extended by org.zkoss.pivot.impl.TabularPivotModel
All Implemented Interfaces:
java.io.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
protected static class TabularPivotModel.CalculatorContextSpace
           
protected static interface TabularPivotModel.RawDataRunner
           
 
Nested classes/interfaces inherited from interface org.zkoss.pivot.PivotModelExt
PivotModelExt.SortCtrl
 
Field Summary
protected  TabularPivotModel.CalculatorContextSpace _space
           
protected static int _STD_CAL_TYPE_SIZE
           
protected static java.util.Comparator<PivotHeaderNode> NODE_COMPARATOR
           
 
Constructor Summary
TabularPivotModel(java.lang.Iterable<? extends java.util.List<?>> data, java.util.List<java.lang.String> columns)
          Constructor
 
Method Summary
 void addSupportedCalculator(ContextualCalculator<?> cal)
          Register a custom Calculator 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 custom Calculator 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(java.lang.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.
 java.lang.Iterable<? extends java.util.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.
 java.lang.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(PivotField field)
          Remove the field from column, row, or data.
 void removeField(java.lang.String fieldName)
          Remove first field with given name from column, row, or data.
 void removeSupportedCalculator(ContextualCalculator<?> cal)
          Unregister a custom Calculator supported in this model.
 void setFieldKeyComparator(PivotField field, java.util.Comparator<java.lang.Object> comparator)
          Set a comparator on a pivot field for node ordering
 void setFieldKeyComparator(java.lang.String fieldName, java.util.Comparator<java.lang.Object> comparator)
          Set a comparator on a pivot field for node ordering.
 void setFieldKeyOrder(PivotField field, boolean ascending)
          Set the node ordering of the field.
 void setFieldKeyOrder(java.lang.String fieldName, boolean ascending)
          Set the ordering of keys on a field.
 void setFieldSubtotals(PivotField field, Calculator[] subtotals)
          Set the subtotals on a field.
 void setFieldSubtotals(java.lang.String fieldName, Calculator[] subtotals)
          Sets the subtotal calculators on a field, or null to show no subtotal.
 void setFieldSummary(PivotField field, Calculator summary)
          Set the summary on a field.
 void setFieldSummary(java.lang.String fieldName, Calculator summary)
          Sets the summary calculator on a field, or null to use the default one.
 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).
 void setFieldType(java.lang.String fieldName, PivotField.Type type)
          Change the type of a pivot field.
protected  boolean shallReloadSourceSpace(CalculatorContextSignature current, CalculatorContextSignature required)
          Override this method to determine whether to reload source space more aggressively than default setting.
protected  void sortTrees()
          Override this method to change the default node sorting in row/column trees.
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 java.util.Comparator<PivotHeaderNode> NODE_COMPARATOR
Constructor Detail

TabularPivotModel

public TabularPivotModel(java.lang.Iterable<? extends java.util.List<?>> data,
                         java.util.List<java.lang.String> columns)
Constructor

Parameters:
data - a matrix data <row<column<cell>>>
columns - a list of column fields according to the matrix data in order.
Method Detail

getRawData

public java.lang.Iterable<? extends java.util.List<?>> getRawData()
Return the raw data collection.


setFieldType

public void setFieldType(java.lang.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 interface PivotModelExt
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 interface PivotModelExt
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 interface PivotModel
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 interface PivotModel

getField

public TabularPivotField getField(java.lang.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(java.lang.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(java.lang.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 interface PivotModelExt.SortCtrl

setFieldKeyComparator

public void setFieldKeyComparator(java.lang.String fieldName,
                                  java.util.Comparator<java.lang.Object> comparator)
Set a comparator on a pivot field for node ordering.

Parameters:
fieldName - the field on which the comparator applies
comparator - a comparator to sort field keys

setFieldKeyComparator

public void setFieldKeyComparator(PivotField field,
                                  java.util.Comparator<java.lang.Object> comparator)
Description copied from interface: PivotModelExt.SortCtrl
Set a comparator on a pivot field for node ordering

Specified by:
setFieldKeyComparator in interface PivotModelExt.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 call iterateRawData(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 interface PivotModelExt

addSupportedCalculator

public void addSupportedCalculator(ContextualCalculator<?> cal)
Register a custom Calculator supported in this model. This will be reflected in getSupportedCalculators() and hence are aware by PivotFieldControl.


removeSupportedCalculator

public void removeSupportedCalculator(ContextualCalculator<?> cal)
Unregister a custom Calculator supported in this model. This will be reflected in getSupportedCalculators() and hence are aware by PivotFieldControl.


clearSupportedCalculators

public void clearSupportedCalculators()
Clear all registered custom Calculator supported in this model. This will be reflected in getSupportedCalculators() and hence are aware by PivotFieldControl. This does not affect built-in calculators.


setFieldSummary

public void setFieldSummary(java.lang.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 interface PivotModelExt

setFieldSubtotals

public void setFieldSubtotals(java.lang.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 interface PivotModelExt

updateContextSpace

protected final void updateContextSpace()

sortTrees

protected void sortTrees()
Override this method to change the default node sorting in row/column trees.


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 element row, the following should be called: runner.run(row, rowTree, colTree);


getValue

public java.lang.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 interface PivotModel
Parameters:
rowNode - row node, root node means grand total
rowCalIndex - row subtotal calculator index, -1 if not subtotal
colNode - column node, root node means grand total
colCalIndex - column subtotal calculator index, -1 if not subtotal
dataIndex - 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 interface PivotModel
See Also:
PivotHeaderTree

getRowHeaderTree

public PivotHeaderTree getRowHeaderTree()
Description copied from interface: PivotModel
Return the header tree of rows.

Specified by:
getRowHeaderTree in interface PivotModel
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 signature
required - 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)


Copyright © 2012. All Rights Reserved.