Author: awiner
Date: Mon Jan 22 14:32:08 2007
New Revision: 498834

URL: http://svn.apache.org/viewvc?view=rev&rev=498834
Log:
Add new, JSF 1.2 RequestContext API:  

  public abstract Set<UIComponent> getPartialTargets(UIComponent newTarget);

This API is necessary for JSF 1.2 invokeOnComponent()-based partial requests
(like Avatar) to make sure that partial targets of a component are also decoded.

Modified:
    
incubator/adffaces/branches/faces-1_2-070102/trinidad/trinidad-api/src/main/java/org/apache/myfaces/trinidad/context/RequestContext.java
    
incubator/adffaces/branches/faces-1_2-070102/trinidad/trinidad-impl/src/main/java/org/apache/myfaces/trinidadinternal/context/RequestContextImpl.java

Modified: 
incubator/adffaces/branches/faces-1_2-070102/trinidad/trinidad-api/src/main/java/org/apache/myfaces/trinidad/context/RequestContext.java
URL: 
http://svn.apache.org/viewvc/incubator/adffaces/branches/faces-1_2-070102/trinidad/trinidad-api/src/main/java/org/apache/myfaces/trinidad/context/RequestContext.java?view=diff&rev=498834&r1=498833&r2=498834
==============================================================================
--- 
incubator/adffaces/branches/faces-1_2-070102/trinidad/trinidad-api/src/main/java/org/apache/myfaces/trinidad/context/RequestContext.java
 (original)
+++ 
incubator/adffaces/branches/faces-1_2-070102/trinidad/trinidad-api/src/main/java/org/apache/myfaces/trinidad/context/RequestContext.java
 Mon Jan 22 14:32:08 2007
@@ -19,6 +19,7 @@
 import java.util.List;
 import java.util.Locale;
 import java.util.Map;
+import java.util.Set;
 import java.util.TimeZone;
 
 import javax.faces.component.UIComponent;
@@ -357,6 +358,11 @@
    */
   public abstract void addPartialTarget(UIComponent newTarget);
 
+  /**
+   * Returns the set of partial targets related to a given UIComponent.
+   */
+  public abstract Set<UIComponent> getPartialTargets(UIComponent newTarget);
+  
   /**
    * Adds a listener on a set of particular triggering components. If one of
    * the named components gets updated in response to a partial event, then

Modified: 
incubator/adffaces/branches/faces-1_2-070102/trinidad/trinidad-impl/src/main/java/org/apache/myfaces/trinidadinternal/context/RequestContextImpl.java
URL: 
http://svn.apache.org/viewvc/incubator/adffaces/branches/faces-1_2-070102/trinidad/trinidad-impl/src/main/java/org/apache/myfaces/trinidadinternal/context/RequestContextImpl.java?view=diff&rev=498834&r1=498833&r2=498834
==============================================================================
--- 
incubator/adffaces/branches/faces-1_2-070102/trinidad/trinidad-impl/src/main/java/org/apache/myfaces/trinidadinternal/context/RequestContextImpl.java
 (original)
+++ 
incubator/adffaces/branches/faces-1_2-070102/trinidad/trinidad-impl/src/main/java/org/apache/myfaces/trinidadinternal/context/RequestContextImpl.java
 Mon Jan 22 14:32:08 2007
@@ -479,6 +479,17 @@
     }
   }
 
+  /**
+   * Returns the set of partial targets related to a given UIComponent.
+   */
+  @Override
+  public Set<UIComponent> getPartialTargets(UIComponent source)
+  {
+    HashSet<UIComponent> set = new HashSet<UIComponent>();
+    _addPartialTargets(set, source);
+    return set;    
+  }
+  
   @Override
   public void addPartialTriggerListeners
     (UIComponent listener,
@@ -727,6 +738,33 @@
 
     return _partialListeners;
   }
+
+  //
+  // Recursively builds up the set of partial targets of
+  // a given component
+  //
+  private void _addPartialTargets(
+    Set<UIComponent> sofar, UIComponent from)
+  {
+    Map<UIComponent, Set<UIComponent>> pl = _getPartialListeners();
+    Set<UIComponent> listeners = pl.get(from);
+    if (listeners == null)
+      return;
+    
+    for (UIComponent target : listeners)
+    {
+      // If we haven't encountered this target yet, add
+      // it, and continue recursively.
+      if (!sofar.contains(target))
+      {
+        sofar.add(target);
+        _addPartialTargets(sofar, target);
+      }
+    }
+  }
+
+
+
 
   static private UIComponent _findRelativeComponent(
     UIComponent from,


Reply via email to