org.kuali.rice.krad.uif.view
Class ViewIndex

java.lang.Object
  extended by org.kuali.rice.krad.uif.view.ViewIndex
All Implemented Interfaces:
Serializable

public class ViewIndex
extends Object
implements Serializable

Holds field indexes of a View instance for retrieval

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

Constructor Summary
ViewIndex()
          Constructs new instance
 
Method Summary
 void addInitialComponentStateIfNeeded(Component component)
          Adds a copy of the given component instance to the map of initial component states keyed
 void addSequenceValueToSnapshot(String componentId, int sequenceVal)
          Adds a sequence value to the id snapshot map for the given component id
 void clearIndexesAfterRender()
          Invoked after the view lifecycle or component refresh has run to clear indexes that are not needed for the post
 CollectionGroup getCollectionGroupByPath(String collectionPath)
          Retrieves a CollectionGroup instance from the index
 Map<String,CollectionGroup> getCollectionsIndex()
          Gets the Map that contains collection indexing information.
 Component getComponentById(String id)
          Retrieves a Component from the view index by Id
 Map<String,Map<String,String>> getComponentExpressionGraphs()
          Map of components with their associated expression graphs that will be used during the component refresh process
 DataField getDataFieldByPath(String propertyPath)
          Retrieves a DataField instance from the index
 DataField getDataFieldByPropertyName(String propertyName)
          Retrieves a DataField instance that has the given property name specified (note this is not the full binding path and first match is returned)
 Map<String,DataField> getDataFieldIndex()
          Gets the Map that contains attribute field indexing information.
 Map<String,PropertyEditor> getFieldPropertyEditors()
          Maintains configuration of properties that have been configured for the view (if render was set to true) and there corresponding PropertyEdtior (if configured)
 Map<String,Integer> getIdSequenceSnapshot()
          Map of components ids to starting id sequences used for the component refresh process
 Map<String,Component> getInitialComponentStates()
          Preserves initial state of components needed for doing component refreshes
 Map<String,PropertyEditor> getSecureFieldPropertyEditors()
          Maintains configuration of secure properties that have been configured for the view (if render was set to true) and there corresponding PropertyEdtior (if configured)
protected  void index(View view)
          Walks through the View tree and indexes all components found.
 void indexComponent(Component component)
          Adds an entry to the main index for the given component.
 void setInitialComponentStates(Map<String,Component> initialComponentStates)
          Setter for the map holding initial component states
 
Methods inherited from class java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
 

Constructor Detail

ViewIndex

public ViewIndex()
Constructs new instance

Method Detail

index

protected void index(View view)
Walks through the View tree and indexes all components found. All components are indexed by their IDs with the special indexing done for certain components

DataField instances are indexed by the attribute path. This is useful for retrieving the InputField based on the incoming request parameter

CollectionGroup instances are indexed by the collection path. This is useful for retrieving the CollectionGroup based on the incoming request parameter


indexComponent

public void indexComponent(Component component)
Adds an entry to the main index for the given component. If the component is of type DataField or CollectionGroup an entry is created in the corresponding indexes for those types as well. Then the #indexComponent method is called for each of the component's children

If the component is already contained in the indexes, it will be replaced

Special processing is done for DataField instances to register their property editor which will be used for form binding

Parameters:
component - - component instance to index

clearIndexesAfterRender

public void clearIndexesAfterRender()
Invoked after the view lifecycle or component refresh has run to clear indexes that are not needed for the post


getComponentById

public Component getComponentById(String id)
Retrieves a Component from the view index by Id

Parameters:
id - - id for the component to retrieve
Returns:
Component instance found in index, or null if no such component exists

getDataFieldByPath

public DataField getDataFieldByPath(String propertyPath)
Retrieves a DataField instance from the index

Parameters:
propertyPath - - full path of the data field (from the form)
Returns:
DataField instance for the path or Null if not found

getDataFieldByPropertyName

public DataField getDataFieldByPropertyName(String propertyName)
Retrieves a DataField instance that has the given property name specified (note this is not the full binding path and first match is returned)

Parameters:
propertyName - - property name for field to retrieve
Returns:
DataField instance found or null if not found

getDataFieldIndex

public Map<String,DataField> getDataFieldIndex()
Gets the Map that contains attribute field indexing information. The Map key points to an attribute binding path, and the Map value is the DataField instance

Returns:
Map data fields index map

getCollectionsIndex

public Map<String,CollectionGroup> getCollectionsIndex()
Gets the Map that contains collection indexing information. The Map key gives the binding path to the collection, and the Map value givens the CollectionGroup instance

Returns:
Map collection index map

getCollectionGroupByPath

public CollectionGroup getCollectionGroupByPath(String collectionPath)
Retrieves a CollectionGroup instance from the index

Parameters:
collectionPath - - full path of the collection (from the form)
Returns:
CollectionGroup instance for the collection path or Null if not found

getInitialComponentStates

public Map<String,Component> getInitialComponentStates()
Preserves initial state of components needed for doing component refreshes

Some components, such as those that are nested or created in code cannot be requested from the spring factory to get new instances. For these a copy of the component in its initial state is set in this map which will be used when doing component refreshes (which requires running just that component's lifecycle)

Map entries are added during the perform initialize phase from ViewHelperService

Returns:
Map - map with key giving the factory id for the component and the value the component instance

addInitialComponentStateIfNeeded

public void addInitialComponentStateIfNeeded(Component component)
Adds a copy of the given component instance to the map of initial component states keyed

Component is only added if its factory id is not set yet (which would happen if it had a spring bean id and we can get the state from Spring). Once added the factory id will be set to the component id

Parameters:
component - - component instance to add

setInitialComponentStates

public void setInitialComponentStates(Map<String,Component> initialComponentStates)
Setter for the map holding initial component states

Parameters:
initialComponentStates -

getFieldPropertyEditors

public Map<String,PropertyEditor> getFieldPropertyEditors()
Maintains configuration of properties that have been configured for the view (if render was set to true) and there corresponding PropertyEdtior (if configured)

Information is pulled out of the View during the lifecycle so it can be used when a form post is done from the View. Note if a field is secure, it will be placed in the getSecureFieldPropertyEditors() map instead

Returns:
Map map of property path (full) to PropertyEditor

getSecureFieldPropertyEditors

public Map<String,PropertyEditor> getSecureFieldPropertyEditors()
Maintains configuration of secure properties that have been configured for the view (if render was set to true) and there corresponding PropertyEdtior (if configured)

Information is pulled out of the View during the lifecycle so it can be used when a form post is done from the View. Note if a field is non-secure, it will be placed in the getFieldPropertyEditors() map instead

Returns:
Map map of property path (full) to PropertyEditor

getIdSequenceSnapshot

public Map<String,Integer> getIdSequenceSnapshot()
Map of components ids to starting id sequences used for the component refresh process

Returns:
Map key is component id and value is id sequence value

addSequenceValueToSnapshot

public void addSequenceValueToSnapshot(String componentId,
                                       int sequenceVal)
Adds a sequence value to the id snapshot map for the given component id

Parameters:
componentId - - id for the component the id sequence value is associated it
sequenceVal - - current sequence value to insert into the snapshot

getComponentExpressionGraphs

public Map<String,Map<String,String>> getComponentExpressionGraphs()
Map of components with their associated expression graphs that will be used during the component refresh process

Because expressions that impact a component being refreshed might be on a parent component, a special map needs to be held around that contains expressions that apply to the component and all its nested components. This map is populated during the initial view processing and populating of the property expressions from the initial expression graphs

Returns:
Map> key is component id and value is expression graph map
See Also:
ExpressionUtils.populatePropertyExpressionsFromGraph(org.kuali.rice.krad.datadictionary.uif.UifDictionaryBean, boolean)


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