Allow ancestor components to transform and filter ComponentChanges added by
their descendants
---------------------------------------------------------------------------------------------
Key: TRINIDAD-2221
URL: https://issues.apache.org/jira/browse/TRINIDAD-2221
Project: MyFaces Trinidad
Issue Type: Bug
Components: Components
Affects Versions: 2.0.0-beta-2
Reporter: Blake Sullivan
Assignee: Blake Sullivan
Priority: Minor
Components currently directly add changes to the ChangeManager. This causes
issues with composition, where an ancestor may wish to modify the behavior of
its implementation children. The proposal is to add new protected and public
apis to UIXComponentBase:
/**
* Adds a change for a Component, or the Component's subtree, returning the
change actually added,
* or <code>null</code>, if no change was added. The proposed change may be
rejected by the
* component itself, one of its ancestors, or the ChangeManager
implementation.
* @param change The change to add for this component
* @return The ComponentChange actually added, or
* <code>null</code> if no change was added.
*/
public final ComponentChange addComponentChange(ComponentChange change)
{
return addComponentChange(this, change);
}
/**
* Called when adding a change to a Component, or the Component's subtree.
* The default implementation delegates the call to the parent, if possible,
otherwise
* it adds the change to the ChangeManager directly.
* Subclasses can override this method to among other things, filter or
transform the changes.
* @param component The component that the change is for
* @param change The change to add for this component
* @return The ComponentChange actually added, or
* <code>null</code> if no change was added.
*/
protected ComponentChange addComponentChange(UIComponent component,
ComponentChange change)
The also make the current addAttributeChange a convenience function:
/**
* Convenience function for
* <code>addComponentChange(new AttributeComponentChange(attributeName,
attributeValue));</code>
* This function is not <code>final</code> for backwards compatibility
reasons, however,
* existing subclassers whould override <code>addComponentChange</code>
instead.
* @param attributeName
* @param attributeValue
* @see #addComponentChange(UIComponent, ComponentChange)
*/
protected void addAttributeChange(
String attributeName,
Object attributeValue)
{
addComponentChange(new AttributeComponentChange(attributeName,
attributeValue));
}
--
This message is automatically generated by JIRA.
If you think it was sent incorrectly, please contact your JIRA administrators:
https://issues.apache.org/jira/secure/ContactAdministrators!default.jspa
For more information on JIRA, see: http://www.atlassian.com/software/jira