[ 
https://issues.apache.org/jira/browse/TRINIDAD-2221?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=13212306#comment-13212306
 ] 

Blake Sullivan commented on TRINIDAD-2221:
------------------------------------------

I forgot to add that this requires that existing code that adds changes to 
components directly, switch to calling the new public or protected version of 
addComponentChange() for this to work.
                
> 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
>   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

        

Reply via email to