SessionChangeManager - Need support for applying changes to a different 
component than the immediate target, need for supporting ChangeMarker
---------------------------------------------------------------------------------------------------------------------------------------------

                 Key: TRINIDAD-1015
                 URL: https://issues.apache.org/jira/browse/TRINIDAD-1015
             Project: MyFaces Trinidad
          Issue Type: Improvement
         Environment: Not applicable
            Reporter: Prakash Udupa N


Component changes that are added to SessionChangeManager are applied while the 
components are being created by the tag handlers. Specifically 
UIXComponentELTag._applyChanges() and UIXComponentELTag.doEndTag() does this 
job. Changes are applied only if the component was created newly during tag 
execution. UIComponentELTag.getCreated() is consulted for this purpose.

There are certain type of changes that are registered on a particular target 
component, but actually need to be applied on a different component to make the 
change effective.
Consider example of a MoveComponentChange specialization that moves components 
within the view tree. There are three participants in this change:
1. The component that is to be moved.
2. The parent at the destination of the move.
3. The neighboring sibling at the destination to be able to position the 
component rightly after the move.
At the outset this seems to be a change to be recorded against the component 
that is to be moved (i.e. #1). However, this change needs to be applied 
actually on the nearest common root parent of the tree that #1 and #2 belongs 
to.
During tag execution (createview/restoreview), the component for #1 gets 
created, however the common root never gets created. 
UIXComponentELTag.getCreated() returns false for the common root, as a result, 
from the current behavior in UIXComponentELTag._applyChanges(), this type of 
change never gets applied correctly.

Proposal is to:
a) Provide a ChangeMarker interface that clients could register against the 
immediately apparent target component (In the above example it is component in 
#1).
b) Improve UIXComponentELTag such that upon applying changes, if a ChangeMarker 
is encountered instead of a Change, do not apply any change, but ask the 
ChangeMarker for actual target. Subsequently mark the tag for the new target 
component as forcibly needing change. This ensures that the Change is correctly 
applied on the actual target at later point in time.
c) UIXComponentELTag, will consult getCreated() as well as check if a change 
application is forced while applying change. 

-- 
This message is automatically generated by JIRA.
-
You can reply to this email to add a comment to the issue online.

Reply via email to