You are viewing a plain text version of this content. The canonical link for it is here.
Posted to dev@myfaces.apache.org by "Blake Sullivan (Commented) (JIRA)" <de...@myfaces.apache.org> on 2012/02/21 03:27:34 UTC

[jira] [Commented] (TRINIDAD-2221) Allow ancestor components to transform and filter ComponentChanges added by their descendants

    [ 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