You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@myfaces.apache.org by bs...@apache.org on 2010/03/10 21:09:00 UTC
svn commit: r921543 - in
/myfaces/trinidad/branches/trinidad-2.0.x/trinidad-api/src/main:
java-templates/org/apache/myfaces/trinidad/component/
java/org/apache/myfaces/trinidad/component/
Author: bsullivan
Date: Wed Mar 10 20:08:59 2010
New Revision: 921543
URL: http://svn.apache.org/viewvc?rev=921543&view=rev
Log:
Add setup/tearDownChildrenVisitingContext support for invokeOnComoponent and processFlattenedChildren
Modified:
myfaces/trinidad/branches/trinidad-2.0.x/trinidad-api/src/main/java-templates/org/apache/myfaces/trinidad/component/UIXGroupTemplate.java
myfaces/trinidad/branches/trinidad-2.0.x/trinidad-api/src/main/java-templates/org/apache/myfaces/trinidad/component/UIXIteratorTemplate.java
myfaces/trinidad/branches/trinidad-2.0.x/trinidad-api/src/main/java-templates/org/apache/myfaces/trinidad/component/UIXSwitcherTemplate.java
myfaces/trinidad/branches/trinidad-2.0.x/trinidad-api/src/main/java/org/apache/myfaces/trinidad/component/UIXCollection.java
myfaces/trinidad/branches/trinidad-2.0.x/trinidad-api/src/main/java/org/apache/myfaces/trinidad/component/UIXComponent.java
myfaces/trinidad/branches/trinidad-2.0.x/trinidad-api/src/main/java/org/apache/myfaces/trinidad/component/UIXComponentBase.java
Modified: myfaces/trinidad/branches/trinidad-2.0.x/trinidad-api/src/main/java-templates/org/apache/myfaces/trinidad/component/UIXGroupTemplate.java
URL: http://svn.apache.org/viewvc/myfaces/trinidad/branches/trinidad-2.0.x/trinidad-api/src/main/java-templates/org/apache/myfaces/trinidad/component/UIXGroupTemplate.java?rev=921543&r1=921542&r2=921543&view=diff
==============================================================================
--- myfaces/trinidad/branches/trinidad-2.0.x/trinidad-api/src/main/java-templates/org/apache/myfaces/trinidad/component/UIXGroupTemplate.java (original)
+++ myfaces/trinidad/branches/trinidad-2.0.x/trinidad-api/src/main/java-templates/org/apache/myfaces/trinidad/component/UIXGroupTemplate.java Wed Mar 10 20:08:59 2010
@@ -58,12 +58,30 @@ abstract public class UIXGroupTemplate e
try
{
- // bump up the group depth and render all of the children
- return UIXComponent.processFlattenedChildren(context,
- cpContext,
- childProcessor,
- this.getChildren(),
- callBackContext);
+ setupVisitingContext(context);
+
+ try
+ {
+ setupChildrenVisitingContext(context);
+
+ try
+ {
+ // bump up the group depth and render all of the children
+ return UIXComponent.processFlattenedChildren(context,
+ cpContext,
+ childProcessor,
+ this.getChildren(),
+ callBackContext);
+ }
+ finally
+ {
+ tearDownChildrenVisitingContext(context);
+ }
+ }
+ finally
+ {
+ tearDownVisitingContext(context);
+ }
}
finally
{
Modified: myfaces/trinidad/branches/trinidad-2.0.x/trinidad-api/src/main/java-templates/org/apache/myfaces/trinidad/component/UIXIteratorTemplate.java
URL: http://svn.apache.org/viewvc/myfaces/trinidad/branches/trinidad-2.0.x/trinidad-api/src/main/java-templates/org/apache/myfaces/trinidad/component/UIXIteratorTemplate.java?rev=921543&r1=921542&r2=921543&view=diff
==============================================================================
--- myfaces/trinidad/branches/trinidad-2.0.x/trinidad-api/src/main/java-templates/org/apache/myfaces/trinidad/component/UIXIteratorTemplate.java (original)
+++ myfaces/trinidad/branches/trinidad-2.0.x/trinidad-api/src/main/java-templates/org/apache/myfaces/trinidad/component/UIXIteratorTemplate.java Wed Mar 10 20:08:59 2010
@@ -78,36 +78,57 @@ public abstract class UIXIteratorTemplat
final ComponentProcessor<S> childProcessor,
final S callbackContext) throws IOException
{
- // Mimic what would normally happen in the non-flattening case for encodeBegin():
- __processFlattenedChildrenBegin();
+ boolean processedChildren;
- Runner runner = new IndexedRunner(cpContext)
+ setupVisitingContext(context);
+
+ try
{
- @Override
- protected void process(UIComponent kid, ComponentProcessingContext cpContext) throws IOException
+ // Mimic what would normally happen in the non-flattening case for encodeBegin():
+ __processFlattenedChildrenBegin();
+
+ setupChildrenVisitingContext(context);
+
+ try
{
- kid.pushComponentToEL(context, null);
-
- try
+ Runner runner = new IndexedRunner(cpContext)
{
- childProcessor.processComponent(context, cpContext, kid, callbackContext);
- }
- finally
+ @Override
+ protected void process(UIComponent kid, ComponentProcessingContext cpContext) throws IOException
+ {
+ kid.pushComponentToEL(context, null);
+
+ try
+ {
+ childProcessor.processComponent(context, cpContext, kid, callbackContext);
+ }
+ finally
+ {
+ kid.popComponentFromEL(context);
+ }
+ }
+ };
+
+ processedChildren = runner.run();
+ Exception exp = runner.getException();
+ if (exp != null)
{
- kid.popComponentFromEL(context);
+ if (exp instanceof RuntimeException)
+ throw (RuntimeException) exp;
+
+ if (exp instanceof IOException)
+ throw (IOException) exp;
+ throw new IllegalStateException(exp);
}
}
- };
- boolean processedChildren = runner.run();
- Exception exp = runner.getException();
- if (exp != null)
- {
- if (exp instanceof RuntimeException)
- throw (RuntimeException) exp;
-
- if (exp instanceof IOException)
- throw (IOException) exp;
- throw new IllegalStateException(exp);
+ finally
+ {
+ tearDownChildrenVisitingContext(context);
+ }
+ }
+ finally
+ {
+ tearDownVisitingContext(context);
}
return processedChildren;
Modified: myfaces/trinidad/branches/trinidad-2.0.x/trinidad-api/src/main/java-templates/org/apache/myfaces/trinidad/component/UIXSwitcherTemplate.java
URL: http://svn.apache.org/viewvc/myfaces/trinidad/branches/trinidad-2.0.x/trinidad-api/src/main/java-templates/org/apache/myfaces/trinidad/component/UIXSwitcherTemplate.java?rev=921543&r1=921542&r2=921543&view=diff
==============================================================================
--- myfaces/trinidad/branches/trinidad-2.0.x/trinidad-api/src/main/java-templates/org/apache/myfaces/trinidad/component/UIXSwitcherTemplate.java (original)
+++ myfaces/trinidad/branches/trinidad-2.0.x/trinidad-api/src/main/java-templates/org/apache/myfaces/trinidad/component/UIXSwitcherTemplate.java Wed Mar 10 20:08:59 2010
@@ -78,16 +78,42 @@ abstract public class UIXSwitcherTemplat
final ComponentProcessor<S> childProcessor,
final S callbackContext) throws IOException
{
- UIComponent facet = _getFacet();
+ setupVisitingContext(context);
+
+ boolean abort;
- if (facet != null)
- return UIXComponent.processFlattenedChildren(context,
- cpContext,
- childProcessor,
- facet,
- callbackContext);
- else
- return false;
+ try
+ {
+ UIComponent facet = _getFacet();
+
+ if (facet != null)
+ {
+ setupChildrenVisitingContext(context);
+
+ try
+ {
+ abort = UIXComponent.processFlattenedChildren(context,
+ cpContext,
+ childProcessor,
+ facet,
+ callbackContext);
+ }
+ finally
+ {
+ tearDownChildrenVisitingContext(context);
+ }
+ }
+ else
+ {
+ abort = false;
+ }
+ }
+ finally
+ {
+ tearDownChildrenVisitingContext(context);
+ }
+
+ return abort;
}
/**
Modified: myfaces/trinidad/branches/trinidad-2.0.x/trinidad-api/src/main/java/org/apache/myfaces/trinidad/component/UIXCollection.java
URL: http://svn.apache.org/viewvc/myfaces/trinidad/branches/trinidad-2.0.x/trinidad-api/src/main/java/org/apache/myfaces/trinidad/component/UIXCollection.java?rev=921543&r1=921542&r2=921543&view=diff
==============================================================================
--- myfaces/trinidad/branches/trinidad-2.0.x/trinidad-api/src/main/java/org/apache/myfaces/trinidad/component/UIXCollection.java (original)
+++ myfaces/trinidad/branches/trinidad-2.0.x/trinidad-api/src/main/java/org/apache/myfaces/trinidad/component/UIXCollection.java Wed Mar 10 20:08:59 2010
@@ -1083,88 +1083,100 @@ public abstract class UIXCollection exte
ContextCallback callback)
throws FacesException
{
- String thisClientId = getClientId(context);
- if (clientId.equals(thisClientId))
- {
- if (!_getAndMarkFirstInvokeForRequest(context, clientId))
- {
- // Call _init() since _flushCachedModel() assumes that
- // selectedRowKeys and disclosedRowKeys are initialized to be non-null
- _init();
-
- _flushCachedModel();
- }
+ boolean invokedComponent;
- pushComponentToEL(context, null);
-
- try
- {
- callback.invokeContextCallback(context, this);
- }
- finally
- {
- popComponentFromEL(context);
- }
-
- return true;
- }
- // If we're on a row, set the currency, and invoke
- // inside
- int thisClientIdLength = thisClientId.length();
- if (clientId.startsWith(thisClientId) &&
- (clientId.charAt(thisClientIdLength) == NamingContainer.SEPARATOR_CHAR))
+ setupVisitingContext(context);
+
+ try
{
- setupVisitingContext(context);
-
- try
+ String thisClientId = getClientId(context);
+ if (clientId.equals(thisClientId))
{
- if (!_getAndMarkFirstInvokeForRequest(context, thisClientId))
+ if (!_getAndMarkFirstInvokeForRequest(context, clientId))
{
// Call _init() since _flushCachedModel() assumes that
// selectedRowKeys and disclosedRowKeys are initialized to be non-null
_init();
-
+
_flushCachedModel();
}
-
- String postId = clientId.substring(thisClientIdLength + 1);
- int sepIndex = postId.indexOf(NamingContainer.SEPARATOR_CHAR);
- // If there's no separator character afterwards, then this
- // isn't a row key
- if (sepIndex < 0)
- return invokeOnChildrenComponents(context, clientId, callback);
- else
+
+ pushComponentToEL(context, null);
+
+ try
{
- String currencyString = postId.substring(0, sepIndex);
- Object rowKey = getClientRowKeyManager().getRowKey(context, this, currencyString);
-
- // A non-null rowKey here means we are on a row and we should set currency, otherwise
- // the client id is for a non-stamped child component in the table/column header/footer.
- if (rowKey != null)
+ callback.invokeContextCallback(context, this);
+ }
+ finally
+ {
+ popComponentFromEL(context);
+ }
+
+ invokedComponent = true;
+ }
+ else
+ {
+ // If we're on a row, set the currency, and invoke
+ // inside
+ int thisClientIdLength = thisClientId.length();
+ if (clientId.startsWith(thisClientId) &&
+ (clientId.charAt(thisClientIdLength) == NamingContainer.SEPARATOR_CHAR))
+ {
+ if (!_getAndMarkFirstInvokeForRequest(context, thisClientId))
+ {
+ // Call _init() since _flushCachedModel() assumes that
+ // selectedRowKeys and disclosedRowKeys are initialized to be non-null
+ _init();
+
+ _flushCachedModel();
+ }
+
+ String postId = clientId.substring(thisClientIdLength + 1);
+ int sepIndex = postId.indexOf(NamingContainer.SEPARATOR_CHAR);
+ // If there's no separator character afterwards, then this
+ // isn't a row key
+ if (sepIndex < 0)
+ return invokeOnChildrenComponents(context, clientId, callback);
+ else
{
- Object oldRowKey = getRowKey();
- try
+ String currencyString = postId.substring(0, sepIndex);
+ Object rowKey = getClientRowKeyManager().getRowKey(context, this, currencyString);
+
+ // A non-null rowKey here means we are on a row and we should set currency, otherwise
+ // the client id is for a non-stamped child component in the table/column header/footer.
+ if (rowKey != null)
{
- setRowKey(rowKey);
- return invokeOnChildrenComponents(context, clientId, callback);
+ Object oldRowKey = getRowKey();
+ try
+ {
+ setRowKey(rowKey);
+ invokedComponent = invokeOnChildrenComponents(context, clientId, callback);
+ }
+ finally
+ {
+ // And restore the currency
+ setRowKey(oldRowKey);
+ }
}
- finally
+ else
{
- // And restore the currency
- setRowKey(oldRowKey);
+ invokedComponent = invokeOnChildrenComponents(context, clientId, callback);
}
}
- else
- return invokeOnChildrenComponents(context, clientId, callback);
}
- }
- finally
- {
- tearDownVisitingContext(context);
+ else
+ {
+ // clientId isn't in this subtree
+ invokedComponent = false;
+ }
}
}
-
- return false;
+ finally
+ {
+ tearDownVisitingContext(context);
+ }
+
+ return invokedComponent;
}
/**
Modified: myfaces/trinidad/branches/trinidad-2.0.x/trinidad-api/src/main/java/org/apache/myfaces/trinidad/component/UIXComponent.java
URL: http://svn.apache.org/viewvc/myfaces/trinidad/branches/trinidad-2.0.x/trinidad-api/src/main/java/org/apache/myfaces/trinidad/component/UIXComponent.java?rev=921543&r1=921542&r2=921543&view=diff
==============================================================================
--- myfaces/trinidad/branches/trinidad-2.0.x/trinidad-api/src/main/java/org/apache/myfaces/trinidad/component/UIXComponent.java (original)
+++ myfaces/trinidad/branches/trinidad-2.0.x/trinidad-api/src/main/java/org/apache/myfaces/trinidad/component/UIXComponent.java Wed Mar 10 20:08:59 2010
@@ -490,7 +490,7 @@ abstract public class UIXComponent exten
// to the component itself
if (rc != null)
{
- uixComponent._setupChildrenEncodingContext(context, rc);
+ uixComponent.setupChildrenEncodingContext(context, rc);
}
else
{
@@ -515,7 +515,7 @@ abstract public class UIXComponent exten
// teardown any context initialized above
if (rc != null)
{
- uixComponent._tearDownChildrenEncodingContext(context, rc);
+ uixComponent.tearDownChildrenEncodingContext(context, rc);
}
else
{
@@ -823,7 +823,7 @@ abstract public class UIXComponent exten
* @see #setupVisitingContext
* @see #tearDownVisitingContext
* @see #tearDownEncodingContext
- * @see CoreRenderer#setupEncodingContext
+ * @see org.apache.myfaces.trinidad.render.CoreRenderer#setupEncodingContext(FacesContext, RenderingContext, UIComponent)
*/
protected void setupEncodingContext(FacesContext context, RenderingContext rc)
{
@@ -844,10 +844,10 @@ abstract public class UIXComponent exten
* @param context The FacesContext
* @param rc RenderingContext to use for encoding
* @see #setupChildrenVisitingContext
- * @see #_tearDownChildrenEncodingContext
+ * @see #tearDownChildrenEncodingContext
* @see org.apache.myfaces.trinidad.render.CoreRenderer#setupChildrenEncodingContext
*/
- private void _setupChildrenEncodingContext(FacesContext context, RenderingContext rc)
+ protected void setupChildrenEncodingContext(FacesContext context, RenderingContext rc)
{
setupChildrenVisitingContext(context);
@@ -875,7 +875,7 @@ abstract public class UIXComponent exten
* @see #setupEncodingContext
* @see #tearDownVisitingContext
* @see #setupEncodingContext
- * @see CoreRenderer#tearDownEncodingContext
+ * @see org.apache.myfaces.trinidad.render.CoreRenderer#tearDownEncodingContext(FacesContext, RenderingContext, UIComponent)
*/
protected void tearDownEncodingContext(
FacesContext context,
@@ -903,10 +903,10 @@ abstract public class UIXComponent exten
* @param context The FacesContext
* @param rc RenderingContext to use for encoding
* @see #setupChildrenVisitingContext
- * @see #_tearDownChildrenEncodingContext
+ * @see #setupChildrenEncodingContext
* @see org.apache.myfaces.trinidad.render.CoreRenderer#setupChildrenEncodingContext
*/
- private void _tearDownChildrenEncodingContext(
+ protected void tearDownChildrenEncodingContext(
FacesContext context,
RenderingContext rc)
{
Modified: myfaces/trinidad/branches/trinidad-2.0.x/trinidad-api/src/main/java/org/apache/myfaces/trinidad/component/UIXComponentBase.java
URL: http://svn.apache.org/viewvc/myfaces/trinidad/branches/trinidad-2.0.x/trinidad-api/src/main/java/org/apache/myfaces/trinidad/component/UIXComponentBase.java?rev=921543&r1=921542&r2=921543&view=diff
==============================================================================
--- myfaces/trinidad/branches/trinidad-2.0.x/trinidad-api/src/main/java/org/apache/myfaces/trinidad/component/UIXComponentBase.java (original)
+++ myfaces/trinidad/branches/trinidad-2.0.x/trinidad-api/src/main/java/org/apache/myfaces/trinidad/component/UIXComponentBase.java Wed Mar 10 20:08:59 2010
@@ -1565,8 +1565,12 @@ abstract public class UIXComponentBase e
/**
* Convenience method to call <code>invokeOnComponent</code> on all of the
- * children of a component. This is useful when a component sometimes optimizes
- * away calling <code>invokeOnComponent</code> on its children
+ * children of a component, surrounding the invocation with calls to
+ * <code>setup/tearDownChildrenVisitingContext</code>.
+ * This is useful when a component sometimes optimizes
+ * away calling <code>invokeOnComponent</code> on its children.
+ * @see UIXComponent#setupChildrenVisitingContext
+ * @see UIXComponent#tearDownChildrenVisitingContext
*/
protected final boolean invokeOnChildrenComponents(
FacesContext context,
@@ -1574,15 +1578,25 @@ abstract public class UIXComponentBase e
ContextCallback callback)
throws FacesException
{
- Iterator<UIComponent> children = getFacetsAndChildren();
+ setupChildrenVisitingContext(context);
boolean found = false;
- while (children.hasNext() && !found)
+ try
{
- found = children.next().invokeOnComponent(context, clientId, callback);
+ Iterator<UIComponent> children = getFacetsAndChildren();
+
+
+ while (children.hasNext() && !found)
+ {
+ found = children.next().invokeOnComponent(context, clientId, callback);
+ }
}
-
+ finally
+ {
+ tearDownChildrenVisitingContext(context);
+ }
+
return found;
}
@@ -1593,7 +1607,7 @@ abstract public class UIXComponentBase e
* NamingContainer's children is skipped.
* </p>
* <p>Subclasses implementing NamingContainer should override
- * <code>invokeOnComponent</code> and delegate to this method.</p>
+ * <code>invokeOnComponent</code> and delegate to this method.
*/
protected final boolean invokeOnNamingContainerComponent(
FacesContext context,
@@ -1603,53 +1617,54 @@ abstract public class UIXComponentBase e
{
assert this instanceof NamingContainer : "Only use invokeOnNamingContainerComponent on NamingContainers";
- String thisClientId = getClientId(context);
+ boolean invokedComponent;
- if (clientId.equals(thisClientId))
+ setupVisitingContext(context);
+
+ try
{
- pushComponentToEL(context, null);
-
- try
+ String thisClientId = getClientId(context);
+
+ if (clientId.equals(thisClientId))
{
- // this is the component we want, so invoke the callback
- callback.invokeContextCallback(context, this);
+ pushComponentToEL(context, null);
+
+ try
+ {
+ // this is the component we want, so invoke the callback
+ callback.invokeContextCallback(context, this);
+ }
+ finally
+ {
+ popComponentFromEL(context);
+ }
+
+ invokedComponent = true;
}
- finally
+ else
{
- popComponentFromEL(context);
+ // if this is a NamingContainer, only traverse into it if the clientId we are looking for
+ // is inside of it
+ if ((!clientId.startsWith(thisClientId) ||
+ (clientId.charAt(thisClientId.length()) != NamingContainer.SEPARATOR_CHAR)))
+ {
+ invokedComponent = false;
+ }
+ else
+ {
+ // setup the children visiting context and iterate through children.
+ // We inline this code instead of calling super in order
+ // to avoid making an extra call to getClientId().
+ invokedComponent = invokeOnChildrenComponents(context, clientId, callback);
+ }
}
-
- return true;
}
- else
+ finally
{
- // if this is a NamingContainer, only traverse into it if the clientId we are looking for
- // is inside of it
- if ((!clientId.startsWith(thisClientId) ||
- (clientId.charAt(thisClientId.length()) != NamingContainer.SEPARATOR_CHAR)))
- {
- return false;
- }
-
- boolean invokedComponent = false;
-
- // set up the context for visiting the children
- setupVisitingContext(context);
-
- try
- {
- // iterate through children. We inline this code instead of calling super in order
- // to avoid making an extra call to getClientId().
- invokedComponent = invokeOnChildrenComponents(context, clientId, callback);
- }
- finally
- {
- // teardown the context now that we have visited the children
- tearDownVisitingContext(context);
- }
-
- return invokedComponent;
+ tearDownVisitingContext(context);
}
+
+ return invokedComponent;
}
/**
@@ -1665,45 +1680,47 @@ abstract public class UIXComponentBase e
ContextCallback callback)
throws FacesException
{
- String thisClientId = getClientId(context);
+ boolean invokedComponent;
+
+ // set up the context for visiting the children
+ setupVisitingContext(context);
- if (clientId.equals(thisClientId))
+ try
{
- pushComponentToEL(context, null);
-
- try
- {
- // this is the component we want, so invoke the callback
- callback.invokeContextCallback(context, this);
- }
- finally
+ String thisClientId = getClientId(context);
+
+ if (clientId.equals(thisClientId))
{
- popComponentFromEL(context);
+ pushComponentToEL(context, null);
+
+ try
+ {
+ // this is the component we want, so invoke the callback
+ callback.invokeContextCallback(context, this);
+ }
+ finally
+ {
+ popComponentFromEL(context);
+ }
+
+ // we found the component
+ invokedComponent = true;
}
-
- return true;
- }
- else
- {
- boolean invokedComponent = false;
-
- // set up the context for visiting the children
- setupVisitingContext(context);
-
- try
+ else
{
- // iterate through children. We inline this code instead of calling super in order
+ // set up the children visiting context to iterate through children. We inline this
+ // code instead of calling super in order
// to avoid making an extra call to getClientId().
invokedComponent = invokeOnChildrenComponents(context, clientId, callback);
}
- finally
- {
- // teardown the context now that we have visited the children
- tearDownVisitingContext(context);
- }
-
- return invokedComponent;
}
+ finally
+ {
+ // teardown the context now that we have visited the component
+ tearDownVisitingContext(context);
+ }
+
+ return invokedComponent;
}
// ------------------------- Client behavior holder methods -------------------------