[
https://issues.apache.org/jira/browse/TRINIDAD-2221?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=13233430#comment-13233430
]
Prakash Udupa commented on TRINIDAD-2221:
-----------------------------------------
See also related TRINIDAD-2239.
> 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
> Fix For: 2.0.0-beta-2
>
> Attachments: jira2221Main.diff
>
> Original Estimate: 24h
> Remaining Estimate: 24h
>
> 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