org.kuali.rice.krad.uif.layout
Class TableLayoutManager

java.lang.Object
  extended by org.kuali.rice.krad.uif.component.ConfigurableBase
      extended by org.kuali.rice.krad.uif.layout.LayoutManagerBase
          extended by org.kuali.rice.krad.uif.layout.GridLayoutManager
              extended by org.kuali.rice.krad.uif.layout.TableLayoutManager
All Implemented Interfaces:
Serializable, Configurable, CollectionLayoutManager, LayoutManager

public class TableLayoutManager
extends GridLayoutManager
implements CollectionLayoutManager

Layout manager that works with CollectionGroup components and renders the collection as a Table

Based on the fields defined, the TableLayoutManager will dynamically create instances of the fields for each collection row. In addition, the manager can create standard fields like the action and sequence fields for each row. The manager supports options inherited from the GridLayoutManager such as rowSpan, colSpan, and cell width settings.

Author:
Kuali Rice Team (rice.collab@kuali.org)
See Also:
Serialized Form

Constructor Summary
TableLayoutManager()
           
 
Method Summary
protected  void addHeaderField(Field field, int column)
          Creates a new instance of the header field prototype and then sets the label to the short (if useShortLabels is set to true) or long label of the given component.
 void buildLine(View view, Object model, CollectionGroup collectionGroup, List<Field> lineFields, List<FieldGroup> subCollectionFields, String bindingPath, List<ActionField> actions, String idSuffix, Object currentLine, int lineIndex)
          Assembles the field instances for the collection line.
protected  void buildTableHeaderRows(CollectionGroup collectionGroup, List<Field> lineFields)
          Create the LabelField instances that will be used to render the table header
protected  int calculateNumberOfRows(List<? extends Field> items)
          Calculates how many rows will be needed per collection line to display the list of fields.
 FieldGroup getActionFieldPrototype()
          FieldGroup instance to serve as a prototype for the actions column.
 Group getAddLineGroup()
          When isSeparateAddLine() is true, this group will be used to render the add line
 List<Component> getComponentPrototypes()
          List of components that are maintained by the layout manager as prototypes for creating other component instances
 List<Component> getComponentsForLifecycle()
          List of components that are contained within the layout manager that should be sent through the lifecycle
 List<Field> getDataFields()
          List of Field instances that make up the tables body.
 LabelField getHeaderFieldPrototype()
          LabelField instance to use as a prototype for creating the tables header fields.
 List<LabelField> getHeaderFields()
          List of LabelField instances that should be rendered to make up the tables header
 int getNumberOfDataColumns()
           
 RichTable getRichTable()
          Widget associated with the table to add functionality such as sorting, paging, and export
 Field getSelectFieldPrototype()
          Field instance that serves as a prototype for creating the select field on each line when CollectionGroup.isRenderSelectField() is true
 Field getSequenceFieldPrototype()
          Field instance to serve as a prototype for the sequence field.
 String getSequencePropertyName()
          Attribute name to use as sequence value.
 FieldGroup getSubCollectionFieldGroupPrototype()
          Field group instance that is used as a prototype for creating the sub-collection field groups.
 Class<? extends Container> getSupportedContainer()
          Default Impl
 boolean isGenerateAutoSequence()
          Indicates whether the sequence field should be generated with the current line number
 boolean isRenderSequenceField()
          Indicates whether the sequence field should be rendered for the collection
 boolean isRepeatHeader()
          Indicates whether the header should be repeated before each collection row.
 boolean isSeparateAddLine()
          Indicates whether the add line should be rendered in a separate group, or as part of the table (first line)
 boolean isUseShortLabels()
          Indicates whether the short label for the collection field should be used as the table header or the regular label
 void performFinalize(View view, Object model, Container container)
          Sets up the final column count for rendering based on whether the sequence and action fields have been generated
 void performInitialization(View view, Object model, Container container)
          The following actions are performed: Sets sequence field prototype if auto sequence is true Initializes the prototypes
 void setActionFieldPrototype(FieldGroup actionFieldPrototype)
          Setter for the action field prototype
 void setAddLineGroup(Group addLineGroup)
          Setter for the add line Group
 void setGenerateAutoSequence(boolean generateAutoSequence)
          Setter for the generate auto sequence field
 void setHeaderFieldPrototype(LabelField headerFieldPrototype)
          Setter for the header field prototype
 void setNumberOfDataColumns(int numberOfDataColumns)
           
 void setRenderSequenceField(boolean renderSequenceField)
          Setter for the render sequence field indicator
 void setRepeatHeader(boolean repeatHeader)
          Setter for the repeat header indicator
 void setRichTable(RichTable richTable)
          Setter for the table tools widget
 void setSelectFieldPrototype(Field selectFieldPrototype)
          Setter for the prototype instance for select fields
 void setSeparateAddLine(boolean separateAddLine)
          Setter for the separate add line indicator
 void setSequenceFieldPrototype(Field sequenceFieldPrototype)
          Setter for the sequence field prototype
 void setSequencePropertyName(String sequencePropertyName)
          Setter for the sequence property name
 void setSubCollectionFieldGroupPrototype(FieldGroup subCollectionFieldGroupPrototype)
          Setter for the sub-collection field group prototype
 void setUseShortLabels(boolean useShortLabels)
          Setter for the use short label indicator
 
Methods inherited from class org.kuali.rice.krad.uif.layout.GridLayoutManager
getFirstLineStyle, getNumberOfColumns, isApplyAlternatingRowStyles, isApplyDefaultCellWidths, isRenderAlternatingHeaderColumns, isSuppressLineWrapping, setApplyAlternatingRowStyles, setApplyDefaultCellWidths, setFirstLineStyle, setNumberOfColumns, setRenderAlternatingHeaderColumns, setSuppressLineWrapping
 
Methods inherited from class org.kuali.rice.krad.uif.layout.LayoutManagerBase
addStyleClass, getContext, getId, getPropertiesForReferenceCopy, getPropertyReplacers, getStyle, getStyleClasses, getStyleClassesAsString, getTemplate, performApplyModel, pushObjectToContext, setContext, setId, setPropertyReplacers, setStyle, setStyleClasses, setStyleClasses, setTemplate
 
Methods inherited from class org.kuali.rice.krad.uif.component.ConfigurableBase
getPropertyExpression, getPropertyExpressions, setPropertyExpressions
 
Methods inherited from class java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
 
Methods inherited from interface org.kuali.rice.krad.uif.layout.LayoutManager
addStyleClass, getContext, getId, getPropertiesForReferenceCopy, getPropertyReplacers, getStyle, getStyleClasses, getTemplate, performApplyModel, pushObjectToContext, setContext, setId, setPropertyReplacers, setStyle, setStyleClasses, setTemplate
 
Methods inherited from interface org.kuali.rice.krad.uif.component.Configurable
getPropertyExpression, getPropertyExpressions, setPropertyExpressions
 

Constructor Detail

TableLayoutManager

public TableLayoutManager()
Method Detail

performInitialization

public void performInitialization(View view,
                                  Object model,
                                  Container container)
The following actions are performed:

Specified by:
performInitialization in interface LayoutManager
Overrides:
performInitialization in class LayoutManagerBase
Parameters:
view - - View instance the layout manager is a part of
model - - the object instance containing the view data
container - - Container the layout manager applies to
See Also:
BoxLayoutManager.performInitialization(org.kuali.rice.krad.uif.view.View, java.lang.Object, org.kuali.rice.krad.uif.container.Container)

performFinalize

public void performFinalize(View view,
                            Object model,
                            Container container)
Sets up the final column count for rendering based on whether the sequence and action fields have been generated

Specified by:
performFinalize in interface LayoutManager
Overrides:
performFinalize in class GridLayoutManager
Parameters:
view - - view instance that should be finalized for rendering
model - - top level object containing the data
container - - Container the layout manager applies to
See Also:
LayoutManagerBase.performFinalize(org.kuali.rice.krad.uif.view.View, java.lang.Object, org.kuali.rice.krad.uif.container.Container)

buildLine

public void buildLine(View view,
                      Object model,
                      CollectionGroup collectionGroup,
                      List<Field> lineFields,
                      List<FieldGroup> subCollectionFields,
                      String bindingPath,
                      List<ActionField> actions,
                      String idSuffix,
                      Object currentLine,
                      int lineIndex)
Assembles the field instances for the collection line. The given sequence field prototype is copied for the line sequence field. Likewise a copy of the actionFieldPrototype is made and the given actions are set as the items for the action field. Finally the generated items are assembled together into the dataFields list with the given lineFields.

Specified by:
buildLine in interface CollectionLayoutManager
Parameters:
view - - view instance the collection belongs to
model - - object containing the data
collectionGroup - - collection group the layout manager applies to
lineFields - - the field instances for the collection line which were copied from the collection groups items, id and binding already updated
subCollectionFields - - group field instances for each sub collection of the current line
bindingPath - - binding path for the groups items (if DataBinding)
actions - - list of action instances for the collection line, with id and binding updated
idSuffix - - suffix to use for any generated items
currentLine - - object instance for the current line, or null if add line
lineIndex - - index of the collection line being iterated over, or -1 if the add line
See Also:
CollectionLayoutManager.buildLine(org.kuali.rice.krad.uif.view.View, java.lang.Object, org.kuali.rice.krad.uif.container.CollectionGroup, java.util.List, java.util.List, java.lang.String, java.util.List, java.lang.String, java.lang.Object, int)

buildTableHeaderRows

protected void buildTableHeaderRows(CollectionGroup collectionGroup,
                                    List<Field> lineFields)
Create the LabelField instances that will be used to render the table header

For each column, a copy of headerFieldPrototype is made that determines the label configuration. The actual label text comes from the field for which the header applies to. The first column is always the sequence (if enabled) and the last column contains the actions. Both the sequence and action header fields will span all rows for the header.

The headerFields list will contain the final list of header fields built

Parameters:
collectionGroup - - CollectionGroup container the table applies to
lineFields - - fields for the data columns from which the headers are pulled

addHeaderField

protected void addHeaderField(Field field,
                              int column)
Creates a new instance of the header field prototype and then sets the label to the short (if useShortLabels is set to true) or long label of the given component. After created the header field is added to the list making up the table header

Parameters:
field - - field instance the header field is being created for
column - - column number for the header, used for setting the id

calculateNumberOfRows

protected int calculateNumberOfRows(List<? extends Field> items)
Calculates how many rows will be needed per collection line to display the list of fields. Assumption is made that the total number of cells the fields take up is evenly divisible by the configured number of columns

Parameters:
items - - list of items that make up one collection line
Returns:
int number of rows

getSupportedContainer

public Class<? extends Container> getSupportedContainer()
Description copied from class: LayoutManagerBase
Default Impl

Specified by:
getSupportedContainer in interface LayoutManager
Overrides:
getSupportedContainer in class GridLayoutManager
Returns:
Class container class supported
See Also:
org.kuali.rice.krad.uif.layout.ContainerAware#getSupportedContainer()

getComponentsForLifecycle

public List<Component> getComponentsForLifecycle()
Description copied from interface: LayoutManager
List of components that are contained within the layout manager that should be sent through the lifecycle

Used by ViewHelperService for the various lifecycle callbacks

Specified by:
getComponentsForLifecycle in interface LayoutManager
Overrides:
getComponentsForLifecycle in class LayoutManagerBase
Returns:
List child components
See Also:
LayoutManagerBase.getComponentsForLifecycle()

getComponentPrototypes

public List<Component> getComponentPrototypes()
Description copied from interface: LayoutManager
List of components that are maintained by the layout manager as prototypes for creating other component instances

Prototypes are held for configuring how a component should be created during the lifecycle. An example of this are the fields in a collection group that are created for each collection record. They only participate in the initialize phase.

Specified by:
getComponentPrototypes in interface LayoutManager
Overrides:
getComponentPrototypes in class LayoutManagerBase
Returns:
List child component prototypes
See Also:
LayoutManager.getComponentPrototypes()

isUseShortLabels

public boolean isUseShortLabels()
Indicates whether the short label for the collection field should be used as the table header or the regular label

Returns:
boolean true if short label should be used, false if long label should be used

setUseShortLabels

public void setUseShortLabels(boolean useShortLabels)
Setter for the use short label indicator

Parameters:
useShortLabels -

isRepeatHeader

public boolean isRepeatHeader()
Indicates whether the header should be repeated before each collection row. If false the header is only rendered at the beginning of the table

Returns:
boolean true if header should be repeated, false if it should only be rendered once

setRepeatHeader

public void setRepeatHeader(boolean repeatHeader)
Setter for the repeat header indicator

Parameters:
repeatHeader -

getHeaderFieldPrototype

public LabelField getHeaderFieldPrototype()
LabelField instance to use as a prototype for creating the tables header fields. For each header field the prototype will be copied and adjusted as necessary

Returns:
LabelField instance to serve as prototype

setHeaderFieldPrototype

public void setHeaderFieldPrototype(LabelField headerFieldPrototype)
Setter for the header field prototype

Parameters:
headerFieldPrototype -

getHeaderFields

public List<LabelField> getHeaderFields()
List of LabelField instances that should be rendered to make up the tables header

Returns:
List of label field instances

isRenderSequenceField

public boolean isRenderSequenceField()
Indicates whether the sequence field should be rendered for the collection

Returns:
boolean true if sequence field should be rendered, false if not

setRenderSequenceField

public void setRenderSequenceField(boolean renderSequenceField)
Setter for the render sequence field indicator

Parameters:
renderSequenceField -

getSequencePropertyName

public String getSequencePropertyName()
Attribute name to use as sequence value. For each collection line the value of this field on the line will be retrieved and used as the sequence value

Returns:
String sequence property name

setSequencePropertyName

public void setSequencePropertyName(String sequencePropertyName)
Setter for the sequence property name

Parameters:
sequencePropertyName -

isGenerateAutoSequence

public boolean isGenerateAutoSequence()
Indicates whether the sequence field should be generated with the current line number

If set to true the sequence field prototype will be changed to a message field (if not already a message field) and the text will be set to the current line number

Returns:
boolean true if the sequence field should be generated from the line number, false if not

setGenerateAutoSequence

public void setGenerateAutoSequence(boolean generateAutoSequence)
Setter for the generate auto sequence field

Parameters:
generateAutoSequence -

getSequenceFieldPrototype

public Field getSequenceFieldPrototype()
Field instance to serve as a prototype for the sequence field. For each collection line this instance is copied and adjusted as necessary

Returns:
Attribute field instance

setSequenceFieldPrototype

public void setSequenceFieldPrototype(Field sequenceFieldPrototype)
Setter for the sequence field prototype

Parameters:
sequenceFieldPrototype -

getActionFieldPrototype

public FieldGroup getActionFieldPrototype()
FieldGroup instance to serve as a prototype for the actions column. For each collection line this instance is copied and adjusted as necessary. Note the actual actions for the group come from the collection groups actions List (org.kuali.rice.krad.uif.container.CollectionGroup.getActionFields()). The FieldGroup prototype is useful for setting styling of the actions column and for the layout of the action fields. Note also the label associated with the prototype is used for the action column header

Returns:
GroupField instance

setActionFieldPrototype

public void setActionFieldPrototype(FieldGroup actionFieldPrototype)
Setter for the action field prototype

Parameters:
actionFieldPrototype -

getSubCollectionFieldGroupPrototype

public FieldGroup getSubCollectionFieldGroupPrototype()
Description copied from interface: CollectionLayoutManager
Field group instance that is used as a prototype for creating the sub-collection field groups. For each sub-collection a copy of the prototype is made and the list will be passed to the layout manager buildLine method

Specified by:
getSubCollectionFieldGroupPrototype in interface CollectionLayoutManager
Returns:
GroupField instance to use as prototype
See Also:
CollectionLayoutManager.getSubCollectionFieldGroupPrototype()

setSubCollectionFieldGroupPrototype

public void setSubCollectionFieldGroupPrototype(FieldGroup subCollectionFieldGroupPrototype)
Setter for the sub-collection field group prototype

Parameters:
subCollectionFieldGroupPrototype -

getSelectFieldPrototype

public Field getSelectFieldPrototype()
Field instance that serves as a prototype for creating the select field on each line when CollectionGroup.isRenderSelectField() is true

This prototype can be used to set the control used for the select field (generally will be a checkbox control) in addition to styling and other setting. The binding path will be formed with using the CollectionGroup.getSelectPropertyName() or if not set the framework will use UifFormBase.getSelectedCollectionLines()

Returns:
Field select field prototype instance

setSelectFieldPrototype

public void setSelectFieldPrototype(Field selectFieldPrototype)
Setter for the prototype instance for select fields

Parameters:
selectFieldPrototype -

isSeparateAddLine

public boolean isSeparateAddLine()
Indicates whether the add line should be rendered in a separate group, or as part of the table (first line)

When separate add line is enabled, the fields for the add line will be placed in the getAddLineGroup(). This group can be used to configure the add line presentation. In addition to the fields, the header on the group (unless already set) will be set to CollectionGroup.getAddLineLabel() and the add line actions will be placed into the group's footer.

Returns:
boolean true if add line should be separated, false if it should be placed into the table

setSeparateAddLine

public void setSeparateAddLine(boolean separateAddLine)
Setter for the separate add line indicator

Parameters:
separateAddLine -

getAddLineGroup

public Group getAddLineGroup()
When isSeparateAddLine() is true, this group will be used to render the add line

This group can be used to configure how the add line will be rendered. For example the layout manager configured on the group will be used to rendered the add line fields. If the header (title) is not set on the group, it will be set from CollectionGroup.getAddLineLabel(). In addition, CollectionGroup.getAddLineActionFields() will be added to the group footer items.

Returns:
Group instance for the collection add line

setAddLineGroup

public void setAddLineGroup(Group addLineGroup)
Setter for the add line Group

Parameters:
addLineGroup -

getDataFields

public List<Field> getDataFields()
List of Field instances that make up the tables body. Pulled by the layout manager template to send through the Grid layout

Returns:
List table body fields

getRichTable

public RichTable getRichTable()
Widget associated with the table to add functionality such as sorting, paging, and export

Returns:
TableTools instance

setRichTable

public void setRichTable(RichTable richTable)
Setter for the table tools widget

Parameters:
richTable -

getNumberOfDataColumns

public int getNumberOfDataColumns()
Returns:
the numberOfDataColumns

setNumberOfDataColumns

public void setNumberOfDataColumns(int numberOfDataColumns)
Parameters:
numberOfDataColumns - the numberOfDataColumns to set


Copyright © 2005-2011 The Kuali Foundation. All Rights Reserved.