You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@myfaces.apache.org by ar...@apache.org on 2010/08/11 01:18:22 UTC
svn commit: r984260 [1/2] - in
/myfaces/trinidad/branches/anrobins_1.2.12.3_visitTree_3: ./
trinidad-api/src/main/java-templates/org/apache/myfaces/trinidad/component/
trinidad-api/src/main/java-templates/org/apache/myfaces/trinidad/component/core/layo...
Author: arobinson74
Date: Tue Aug 10 23:18:21 2010
New Revision: 984260
URL: http://svn.apache.org/viewvc?rev=984260&view=rev
Log:
After merge
Added:
myfaces/trinidad/branches/anrobins_1.2.12.3_visitTree_3/trinidad-api/src/main/java/org/apache/myfaces/trinidad/component/visit/VisitContextWrapper.java
- copied unchanged from r984257, myfaces/trinidad/branches/anrobins_1.2.12.3_visitTree_2/trinidad-api/src/main/java/org/apache/myfaces/trinidad/component/visit/VisitContextWrapper.java
Modified:
myfaces/trinidad/branches/anrobins_1.2.12.3_visitTree_3/ (props changed)
myfaces/trinidad/branches/anrobins_1.2.12.3_visitTree_3/trinidad-api/src/main/java-templates/org/apache/myfaces/trinidad/component/UIXGroupTemplate.java
myfaces/trinidad/branches/anrobins_1.2.12.3_visitTree_3/trinidad-api/src/main/java-templates/org/apache/myfaces/trinidad/component/UIXIteratorTemplate.java
myfaces/trinidad/branches/anrobins_1.2.12.3_visitTree_3/trinidad-api/src/main/java-templates/org/apache/myfaces/trinidad/component/UIXNavigationLevelTemplate.java
myfaces/trinidad/branches/anrobins_1.2.12.3_visitTree_3/trinidad-api/src/main/java-templates/org/apache/myfaces/trinidad/component/UIXNavigationPathTemplate.java
myfaces/trinidad/branches/anrobins_1.2.12.3_visitTree_3/trinidad-api/src/main/java-templates/org/apache/myfaces/trinidad/component/UIXNavigationTreeTemplate.java
myfaces/trinidad/branches/anrobins_1.2.12.3_visitTree_3/trinidad-api/src/main/java-templates/org/apache/myfaces/trinidad/component/UIXPageTemplate.java
myfaces/trinidad/branches/anrobins_1.2.12.3_visitTree_3/trinidad-api/src/main/java-templates/org/apache/myfaces/trinidad/component/UIXProcessTemplate.java
myfaces/trinidad/branches/anrobins_1.2.12.3_visitTree_3/trinidad-api/src/main/java-templates/org/apache/myfaces/trinidad/component/UIXShowDetailTemplate.java
myfaces/trinidad/branches/anrobins_1.2.12.3_visitTree_3/trinidad-api/src/main/java-templates/org/apache/myfaces/trinidad/component/UIXShowOneTemplate.java
myfaces/trinidad/branches/anrobins_1.2.12.3_visitTree_3/trinidad-api/src/main/java-templates/org/apache/myfaces/trinidad/component/UIXSwitcherTemplate.java
myfaces/trinidad/branches/anrobins_1.2.12.3_visitTree_3/trinidad-api/src/main/java-templates/org/apache/myfaces/trinidad/component/UIXTreeTableTemplate.java
myfaces/trinidad/branches/anrobins_1.2.12.3_visitTree_3/trinidad-api/src/main/java-templates/org/apache/myfaces/trinidad/component/UIXTreeTemplate.java
myfaces/trinidad/branches/anrobins_1.2.12.3_visitTree_3/trinidad-api/src/main/java-templates/org/apache/myfaces/trinidad/component/core/layout/CorePanelAccordionTemplate.java
myfaces/trinidad/branches/anrobins_1.2.12.3_visitTree_3/trinidad-api/src/main/java/org/apache/myfaces/trinidad/component/UIXCollection.java
myfaces/trinidad/branches/anrobins_1.2.12.3_visitTree_3/trinidad-api/src/main/java/org/apache/myfaces/trinidad/component/UIXComponent.java
myfaces/trinidad/branches/anrobins_1.2.12.3_visitTree_3/trinidad-api/src/main/java/org/apache/myfaces/trinidad/component/UIXComponentBase.java
myfaces/trinidad/branches/anrobins_1.2.12.3_visitTree_3/trinidad-api/src/main/java/org/apache/myfaces/trinidad/component/UIXHierarchy.java
myfaces/trinidad/branches/anrobins_1.2.12.3_visitTree_3/trinidad-api/src/main/java/org/apache/myfaces/trinidad/render/CoreRenderer.java
myfaces/trinidad/branches/anrobins_1.2.12.3_visitTree_3/trinidad-sandbox/sandbox-api/src/main/java-templates/org/apache/myfaces/trinidad/sandbox/component/ (props changed)
myfaces/trinidad/branches/anrobins_1.2.12.3_visitTree_3/trinidad-sandbox/sandbox-api/src/main/java/org/apache/myfaces/trinidad/sandbox/event/ (props changed)
Propchange: myfaces/trinidad/branches/anrobins_1.2.12.3_visitTree_3/
------------------------------------------------------------------------------
--- svn:mergeinfo (original)
+++ svn:mergeinfo Tue Aug 10 23:18:21 2010
@@ -3,5 +3,7 @@
/myfaces/trinidad/branches/1.2.12.2-branch:895708
/myfaces/trinidad/branches/1.2.9.1-branch:697924,699406,699496
/myfaces/trinidad/branches/TRINIDAD-1402:745675
+/myfaces/trinidad/branches/anrobins_1.2.12.3_visitTree:964963-966042
+/myfaces/trinidad/branches/anrobins_1.2.12.3_visitTree_2:966043-984257
/myfaces/trinidad/branches/jwaldman_StyleMap:754977-770778
/myfaces/trinidad/trunk:894885,915962,962582
Modified: myfaces/trinidad/branches/anrobins_1.2.12.3_visitTree_3/trinidad-api/src/main/java-templates/org/apache/myfaces/trinidad/component/UIXGroupTemplate.java
URL: http://svn.apache.org/viewvc/myfaces/trinidad/branches/anrobins_1.2.12.3_visitTree_3/trinidad-api/src/main/java-templates/org/apache/myfaces/trinidad/component/UIXGroupTemplate.java?rev=984260&r1=984259&r2=984260&view=diff
==============================================================================
--- myfaces/trinidad/branches/anrobins_1.2.12.3_visitTree_3/trinidad-api/src/main/java-templates/org/apache/myfaces/trinidad/component/UIXGroupTemplate.java (original)
+++ myfaces/trinidad/branches/anrobins_1.2.12.3_visitTree_3/trinidad-api/src/main/java-templates/org/apache/myfaces/trinidad/component/UIXGroupTemplate.java Tue Aug 10 23:18:21 2010
@@ -6,9 +6,9 @@
* to you under the Apache License, Version 2.0 (the
* "License"); you may not use this file except in compliance
* with the License. You may obtain a copy of the License at
- *
+ *
* http://www.apache.org/licenses/LICENSE-2.0
- *
+ *
* Unless required by applicable law or agreed to in writing,
* software distributed under the License is distributed on an
* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
@@ -19,6 +19,7 @@
package org.apache.myfaces.trinidad.component;
import java.io.IOException;
+
import java.util.List;
import javax.faces.component.UIComponent;
@@ -55,19 +56,37 @@ abstract public class UIXGroupTemplate e
) throws IOException
{
cpContext.pushGroup();
-
+
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
{
- cpContext.popGroup();
+ cpContext.popGroup();
}
}
Modified: myfaces/trinidad/branches/anrobins_1.2.12.3_visitTree_3/trinidad-api/src/main/java-templates/org/apache/myfaces/trinidad/component/UIXIteratorTemplate.java
URL: http://svn.apache.org/viewvc/myfaces/trinidad/branches/anrobins_1.2.12.3_visitTree_3/trinidad-api/src/main/java-templates/org/apache/myfaces/trinidad/component/UIXIteratorTemplate.java?rev=984260&r1=984259&r2=984260&view=diff
==============================================================================
--- myfaces/trinidad/branches/anrobins_1.2.12.3_visitTree_3/trinidad-api/src/main/java-templates/org/apache/myfaces/trinidad/component/UIXIteratorTemplate.java (original)
+++ myfaces/trinidad/branches/anrobins_1.2.12.3_visitTree_3/trinidad-api/src/main/java-templates/org/apache/myfaces/trinidad/component/UIXIteratorTemplate.java Tue Aug 10 23:18:21 2010
@@ -6,9 +6,9 @@
* to you under the Apache License, Version 2.0 (the
* "License"); you may not use this file except in compliance
* with the License. You may obtain a copy of the License at
- *
+ *
* http://www.apache.org/licenses/LICENSE-2.0
- *
+ *
* Unless required by applicable law or agreed to in writing,
* software distributed under the License is distributed on an
* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
@@ -21,25 +21,33 @@ package org.apache.myfaces.trinidad.comp
import java.io.IOException;
import java.util.AbstractMap;
+import java.util.Collection;
+import java.util.Collections;
+import java.util.HashSet;
import java.util.List;
import java.util.Map;
import java.util.Set;
import javax.faces.component.UIComponent;
import javax.faces.context.FacesContext;
+import javax.faces.event.AbortProcessingException;
import javax.faces.event.PhaseId;
import javax.faces.render.Renderer;
+
+import org.apache.myfaces.trinidad.component.visit.VisitCallback;
+import org.apache.myfaces.trinidad.component.visit.VisitContext;
import org.apache.myfaces.trinidad.model.CollectionModel;
import org.apache.myfaces.trinidad.model.LocalRowKeyIndex;
import org.apache.myfaces.trinidad.model.ModelUtils;
+import org.apache.myfaces.trinidad.render.ClientRowKeyManager;
/**
* This component iterates over some given data.
* Each child is repeatedly stamped as many times as necessary.
* Iteration is done starting at the index given by {@link #getFirst()}
* for as many indices as specified by {@link #getRows()}.
- * If {@link #getRows()} returns 0, then the iteration continues until
+ * If {@link #getRows()} returns 0, then the iteration continues until
* there are no more elements in the underlying data.
*/
public abstract class UIXIteratorTemplate extends UIXCollection implements FlattenedComponent, LocalRowKeyIndex
@@ -67,29 +75,53 @@ 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;
+
+ setupVisitingContext(context);
- Runner runner = new Runner(cpContext)
+ 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
+ {
+ Runner runner = new IndexedRunner(cpContext)
+ {
+ @Override
+ protected void process(
+ UIComponent kid,
+ ComponentProcessingContext cpContext
+ ) throws IOException
+ {
+ childProcessor.processComponent(context, cpContext, kid, callbackContext);
+ }
+ };
+
+ 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
{
- childProcessor.processComponent(context, cpContext, kid, callbackContext);
+ tearDownChildrenVisitingContext(context);
}
- };
- boolean processedChildren = runner.run();
- Exception exp = runner.exception;
- if (exp != null)
- {
- if (exp instanceof RuntimeException)
- throw (RuntimeException) exp;
-
- if (exp instanceof IOException)
- throw (IOException) exp;
- throw new IllegalStateException(exp);
}
-
+ finally
+ {
+ tearDownVisitingContext(context);
+ }
+
return processedChildren;
}
@@ -125,7 +157,7 @@ public abstract class UIXIteratorTemplat
}
else // this is not the table. it must be the iterator
{
- Runner runner = new Runner()
+ Runner runner = new IndexedRunner()
{
@Override
protected void process(UIComponent kid,
@@ -135,7 +167,7 @@ public abstract class UIXIteratorTemplat
}
};
runner.run();
- Exception exp = runner.exception;
+ Exception exp = runner.getException();
if (exp != null)
{
if (exp instanceof RuntimeException)
@@ -167,7 +199,7 @@ public abstract class UIXIteratorTemplat
public Object get(Object key)
{
// some of these keys are from <c:forEach>, ie:
- // javax.servlet.jsp.jstl.core.LoopTagStatus
+ // javax.servlet.jsp.jstl.core.LoopTagStatus
if ("begin".equals(key)) // from jstl
{
return Integer.valueOf(getFirst());
@@ -188,7 +220,7 @@ public abstract class UIXIteratorTemplat
}
return map.get(key);
}
-
+
@Override
public Set<Map.Entry<String, Object>> entrySet()
{
@@ -202,7 +234,7 @@ public abstract class UIXIteratorTemplat
CollectionModel current,
Object value)
{
- CollectionModel model = ModelUtils.toCollectionModel(value);
+ CollectionModel model = ModelUtils.toCollectionModel(value);
// initialize to -1. we need to do this incase some application logic
// changed this index. Also, some JSF1.0 RI classes were initially starting
// with a rowIndex of 0.
@@ -217,7 +249,7 @@ public abstract class UIXIteratorTemplat
final FacesContext context,
final PhaseId phaseId)
{
- Runner runner = new Runner()
+ Runner runner = new IndexedRunner()
{
@Override
protected void process(UIComponent kid, ComponentProcessingContext cpContext)
@@ -227,7 +259,140 @@ public abstract class UIXIteratorTemplat
};
runner.run();
}
-
+
+ // Extract the current row token from the clientId
+ private String _getClientToken(String clientIdPrefix, String cellClientId)
+ {
+ int tokenStartIndex = clientIdPrefix.length() + 1;
+ int tokenEndIndex = cellClientId.indexOf(':', tokenStartIndex);
+
+ if (tokenEndIndex != -1)
+ {
+ return cellClientId.substring(tokenStartIndex, tokenEndIndex);
+ }
+ else
+ {
+ return null;
+ }
+ }
+
+ @Override
+ protected boolean visitData(
+ final VisitContext visitContext,
+ final VisitCallback visitCallback)
+ {
+ Collection<String> subtreeIds = visitContext.getSubtreeIdsToVisit(this);
+
+ // create a special VisitContext that doesn't visit the Facets
+ // of column components since they aren't visited on each row
+ final VisitContext noColumnFacetContext = new NoColumnFacetsVisitContext(visitContext);
+
+ // runner to use to process the rows
+ Runner runner;
+
+ if (VisitContext.ALL_IDS.equals(subtreeIds))
+ {
+ // we're processing all of the rows, so use the indexed runner (plus, we can't call size() on
+ // the ALL_IDS collection, so we don't have a whole lot of choice here
+ runner = new IndexedRunner()
+ {
+ @Override
+ protected void process(UIComponent kid, ComponentProcessingContext cpContext)
+ {
+ if (kid.getChildCount() > 0)
+ {
+ for (UIComponent grandKid : kid.getChildren())
+ {
+ if (UIXComponent.visitTree(noColumnFacetContext, grandKid, visitCallback))
+ {
+ throw new AbortProcessingException();
+ }
+ }
+ }
+ }
+ };
+ }
+ else
+ {
+ // We are only visiting a subset of the tree, so figure out which rows to visit
+
+ String ourClientIdPrefix = getClientId(visitContext.getFacesContext());
+
+ int subtreeIdCount = subtreeIds.size();
+
+ // build up a set of the row keys to visit rather than iterating
+ // and visiting every row
+ Set<String> rowsToVisit;
+
+ if (subtreeIdCount > 1)
+ {
+ rowsToVisit = new HashSet<String>(subtreeIdCount);
+
+ for (String currClientId : subtreeIds)
+ {
+ String clientToken = _getClientToken(ourClientIdPrefix, currClientId);
+
+ if (clientToken != null)
+ {
+ rowsToVisit.add(clientToken);
+ }
+ }
+ }
+ else
+ {
+ String clientToken = _getClientToken(ourClientIdPrefix,
+ subtreeIds.iterator().next());
+
+ if (clientToken != null)
+ {
+ rowsToVisit = Collections.singleton(clientToken);
+ }
+ else
+ {
+ rowsToVisit = Collections.emptySet();
+ }
+ }
+
+ // we didn't visit any data
+ if (rowsToVisit.isEmpty())
+ return false;
+
+ // visit only the rows we need to
+ runner = new KeyedRunner(rowsToVisit)
+ {
+ @Override
+ protected void process(
+ UIComponent kid,
+ ComponentProcessingContext cpContext
+ ) throws IOException
+ {
+ if (kid.getChildCount() > 0)
+ {
+ for (UIComponent grandKid : kid.getChildren())
+ {
+ if (UIXComponent.visitTree(noColumnFacetContext, grandKid, visitCallback))
+ {
+ throw new AbortProcessingException();
+ }
+ }
+ }
+ }
+ };
+ }
+
+ try
+ {
+ runner.run();
+ }
+ finally
+ {
+ return (runner.getException() instanceof AbortProcessingException);
+ }
+ }
+
+ /**
+ * Abstract class for processing rows
+ */
private abstract class Runner implements ComponentProcessor<Object>
{
public Runner()
@@ -239,11 +404,81 @@ public abstract class UIXIteratorTemplat
{
_cpContext = cpContext;
}
-
+
+ public abstract boolean run();
+
+ /**
+ * Sets up the context for the child and processes it
+ */
+ public void processComponent(
+ FacesContext context,
+ ComponentProcessingContext cpContext,
+ UIComponent component,
+ Object callbackContext) throws IOException
+ {
+ try
+ {
+ process(component, cpContext);
+ }
+ catch (IOException ioe)
+ {
+ throw ioe;
+ }
+ catch (AbortProcessingException ape)
+ {
+ // we're done, so abort
+ _exception = ape;
+ throw ape;
+ }
+ catch (Exception e)
+ {
+ _exception = e;
+ }
+ }
+
+ public Exception getException()
+ {
+ return _exception;
+ }
+
+ protected abstract void process(UIComponent comp, ComponentProcessingContext cpContext)
+ throws Exception;
+
+ protected final ComponentProcessingContext getComponentProcessingContext()
+ {
+ return _cpContext;
+ }
+
+ public final void setException(Exception e)
+ {
+ _exception = e;
+ }
+
+ private Exception _exception = null;
+
+ private final ComponentProcessingContext _cpContext;
+ }
+
+ /**
+ * Class for visiting getRows() by index rows starting getFirst()
+ */
+ private abstract class IndexedRunner extends Runner
+ {
+ public IndexedRunner()
+ {
+ this(null);
+ }
+
+ public IndexedRunner(ComponentProcessingContext cpContext)
+ {
+ super(cpContext);
+ }
+
public final boolean run()
{
FacesContext context = FacesContext.getCurrentInstance();
-
+ ComponentProcessingContext cpContext = getComponentProcessingContext();
+
List<UIComponent> stamps = getStamps();
int oldIndex = getRowIndex();
int first = getFirst();
@@ -251,9 +486,9 @@ public abstract class UIXIteratorTemplat
int end = (rows <= 0) //show everything
? Integer.MAX_VALUE
: first + rows;
-
+
boolean processedChild = false;
-
+
try
{
for(int i=first; i<end; i++)
@@ -262,8 +497,8 @@ public abstract class UIXIteratorTemplat
if (isRowAvailable())
{
// latch processedChild the first time we process a child
- processedChild |= (_cpContext != null)
- ? UIXComponent.processFlattenedChildren(context, _cpContext, this, stamps, null)
+ processedChild |= (cpContext != null)
+ ? UIXComponent.processFlattenedChildren(context, cpContext, this, stamps, null)
: UIXComponent.processFlattenedChildren(context, this, stamps, null);
}
else
@@ -272,45 +507,70 @@ public abstract class UIXIteratorTemplat
}
catch (IOException e)
{
- exception = e;
+ setException(e);
}
finally
{
setRowIndex(oldIndex);
}
-
+
return processedChild;
}
+ }
- /**
- * Sets up the context for the child and processes it
- */
- public void processComponent(
- FacesContext context,
- ComponentProcessingContext cpContext,
- UIComponent component,
- Object callbackContext) throws IOException
+ /**
+ * Runner that visits the rows specified by the client row key tokens
+ */
+ private abstract class KeyedRunner extends Runner
+ {
+ public KeyedRunner(Iterable<String> clientKeys)
+ {
+ super();
+ _clientKeys = clientKeys;
+ }
+
+ public final boolean run()
{
+ FacesContext context = FacesContext.getCurrentInstance();
+
+ List<UIComponent> stamps = getStamps();
+ int oldIndex = getRowIndex();
+
+ boolean processedChild = false;
+
try
{
- process(component, cpContext);
+ // need to convert row key tokens to row keys
+ ClientRowKeyManager rowKeyManager = getClientRowKeyManager();
+
+ for(String clientKey : _clientKeys)
+ {
+ Object rowKey = rowKeyManager.getRowKey(context, UIXIterator.this, clientKey);
+
+ if (rowKey != null)
+ {
+ setRowKey(rowKey);
+ if (isRowAvailable())
+ {
+ // latch processedChild the first time we process a child
+ processedChild |= UIXComponent.processFlattenedChildren(context, this, stamps, null);
+ }
+ }
+ }
}
- catch (IOException ioe)
+ catch (IOException e)
{
- throw ioe;
+ setException(e);
}
- catch (Exception e)
+ finally
{
- exception = e;
+ setRowIndex(oldIndex);
}
- }
- protected abstract void process(UIComponent comp, ComponentProcessingContext cpContext)
- throws Exception;
-
- public Exception exception = null;
+ return processedChild;
+ }
- private final ComponentProcessingContext _cpContext;
+ private final Iterable<String> _clientKeys;
}
@Override
@@ -355,7 +615,7 @@ public abstract class UIXIteratorTemplat
first = 0;
else
{
- // scroll to the last page:
+ // scroll to the last page:
first = size - rows;
model.setRowIndex(first);
// make sure the row is indeed available:
@@ -375,5 +635,4 @@ public abstract class UIXIteratorTemplat
model.setRowIndex(oldIndex);
}
}
-
}
Modified: myfaces/trinidad/branches/anrobins_1.2.12.3_visitTree_3/trinidad-api/src/main/java-templates/org/apache/myfaces/trinidad/component/UIXNavigationLevelTemplate.java
URL: http://svn.apache.org/viewvc/myfaces/trinidad/branches/anrobins_1.2.12.3_visitTree_3/trinidad-api/src/main/java-templates/org/apache/myfaces/trinidad/component/UIXNavigationLevelTemplate.java?rev=984260&r1=984259&r2=984260&view=diff
==============================================================================
--- myfaces/trinidad/branches/anrobins_1.2.12.3_visitTree_3/trinidad-api/src/main/java-templates/org/apache/myfaces/trinidad/component/UIXNavigationLevelTemplate.java (original)
+++ myfaces/trinidad/branches/anrobins_1.2.12.3_visitTree_3/trinidad-api/src/main/java-templates/org/apache/myfaces/trinidad/component/UIXNavigationLevelTemplate.java Tue Aug 10 23:18:21 2010
@@ -6,9 +6,9 @@
* to you under the Apache License, Version 2.0 (the
* "License"); you may not use this file except in compliance
* with the License. You may obtain a copy of the License at
- *
+ *
* http://www.apache.org/licenses/LICENSE-2.0
- *
+ *
* Unless required by applicable law or agreed to in writing,
* software distributed under the License is distributed on an
* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
@@ -18,16 +18,21 @@
*/
package org.apache.myfaces.trinidad.component;
+import javax.faces.component.UIComponent;
import javax.faces.context.FacesContext;
import javax.faces.event.PhaseId;
+import org.apache.myfaces.trinidad.component.visit.VisitCallback;
+import org.apache.myfaces.trinidad.component.visit.VisitContext;
+
/**
* Base class for the NavigationLevel component.
*
* @version $Name: $ ($Revision$) $Date$
*/
-abstract public class UIXNavigationLevelTemplate extends UIXNavigationHierarchy
+abstract public class UIXNavigationLevelTemplate
+ extends UIXNavigationHierarchy
{
/**/ // Abstract methods implemented by code gen
/**/ abstract public int getLevel();
@@ -48,8 +53,52 @@ abstract public class UIXNavigationLevel
TableUtils.__processChildren(context, this, phaseId);
}
+ @Override
+ protected boolean visitChildren(
+ VisitContext visitContext,
+ VisitCallback callback)
+ {
+ boolean done = visitData(visitContext, callback);
+ if (!done)
+ {
+ // process the children
+ int childCount = getChildCount();
+ if (childCount > 0)
+ {
+ for (UIComponent child : getChildren())
+ {
+ done = UIXComponent.visitTree(visitContext, child, callback);
+
+ if (done)
+ break;
+ }
+ }
+ }
+ return done;
+ }
+ @Override
+ protected boolean visitData(
+ VisitContext visitContext,
+ VisitCallback callback)
+ {
+ Object oldKey = getRowKey();
+
+ boolean done;
+
+ HierarchyUtils.__setStartDepthPath(this, getLevel());
+
+ try
+ {
+ done = visitLevel(visitContext, callback, getStamps());
+ }
+ finally
+ {
+ setRowKey(oldKey);
+ }
+ return done;
+ }
}
Modified: myfaces/trinidad/branches/anrobins_1.2.12.3_visitTree_3/trinidad-api/src/main/java-templates/org/apache/myfaces/trinidad/component/UIXNavigationPathTemplate.java
URL: http://svn.apache.org/viewvc/myfaces/trinidad/branches/anrobins_1.2.12.3_visitTree_3/trinidad-api/src/main/java-templates/org/apache/myfaces/trinidad/component/UIXNavigationPathTemplate.java?rev=984260&r1=984259&r2=984260&view=diff
==============================================================================
--- myfaces/trinidad/branches/anrobins_1.2.12.3_visitTree_3/trinidad-api/src/main/java-templates/org/apache/myfaces/trinidad/component/UIXNavigationPathTemplate.java (original)
+++ myfaces/trinidad/branches/anrobins_1.2.12.3_visitTree_3/trinidad-api/src/main/java-templates/org/apache/myfaces/trinidad/component/UIXNavigationPathTemplate.java Tue Aug 10 23:18:21 2010
@@ -6,9 +6,9 @@
* to you under the Apache License, Version 2.0 (the
* "License"); you may not use this file except in compliance
* with the License. You may obtain a copy of the License at
- *
+ *
* http://www.apache.org/licenses/LICENSE-2.0
- *
+ *
* Unless required by applicable law or agreed to in writing,
* software distributed under the License is distributed on an
* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
@@ -25,33 +25,36 @@ import javax.faces.component.UIComponent
import javax.faces.context.FacesContext;
import javax.faces.event.PhaseId;
+import org.apache.myfaces.trinidad.component.visit.VisitCallback;
+import org.apache.myfaces.trinidad.component.visit.VisitContext;
+
/**
* Base class for the NavigationPath component.
*
* @version $Name: $ ($Revision$) $Date$
*/
-abstract public class UIXNavigationPathTemplate extends UIXNavigationHierarchy
+abstract public class UIXNavigationPathTemplate
+ extends UIXNavigationHierarchy
{
-
@Override
protected void processFacetsAndChildren(
FacesContext context,
- PhaseId phaseId)
+ PhaseId phaseId)
{
Object oldPath = getRowKey();
-
+
Object focusPath = getFocusRowKey();
-
+
if (focusPath != null )
{
- List<Object> paths =
+ List<Object> paths =
new ArrayList<Object>(getAllAncestorContainerRowKeys(focusPath));
-
+
paths.add(focusPath);
int focusPathSize = paths.size();
UIComponent nodeStamp = getFacet("nodeStamp");
-
+
if (nodeStamp != null)
{
for (int i = 0; i < focusPathSize; i++)
@@ -61,12 +64,84 @@ abstract public class UIXNavigationPathT
}
}
}
-
+
setRowKey(oldPath);
-
+
// process the children
TableUtils.__processChildren(context, this, phaseId);
- }
+ }
+
+
+ @Override
+ protected boolean visitChildren(
+ VisitContext visitContext,
+ VisitCallback callback)
+ {
+ boolean done = visitData(visitContext, callback);
+
+ if (!done)
+ {
+ // process the children
+ int childCount = getChildCount();
+ if (childCount > 0)
+ {
+ for (UIComponent child : getChildren())
+ {
+ done = UIXComponent.visitTree(visitContext, child, callback);
+
+ if (done)
+ break;
+ }
+ }
+ }
+
+ return done;
+ }
+
+ @Override
+ protected boolean visitData(
+ VisitContext visitContext,
+ VisitCallback callback)
+ {
+ Object focusPath = getFocusRowKey();
+ Object oldRowKey = null;
+
+ boolean done = false;
+
+ // start from the focused area
+ if (focusPath != null)
+ {
+ List<UIComponent> stamps = getStamps();
+
+ if (!stamps.isEmpty())
+ {
+ List<Object> paths = new ArrayList<Object>(getAllAncestorContainerRowKeys(focusPath));
+ paths.add(focusPath);
+
+ int focusPathSize = paths.size();
+
+ try
+ {
+ for (int i = 0; i < focusPathSize && !done; i++)
+ {
+ setRowKey(paths.get(i));
+
+ for (UIComponent stamp : stamps)
+ {
+ done = UIXComponent.visitTree(visitContext, stamp, callback);
+
+ if (done)
+ break;
+ }
+ }
+ }
+ finally
+ {
+ setRowKey(oldRowKey);
+ }
+ }
+ }
-
+ return done;
+ }
}
Modified: myfaces/trinidad/branches/anrobins_1.2.12.3_visitTree_3/trinidad-api/src/main/java-templates/org/apache/myfaces/trinidad/component/UIXNavigationTreeTemplate.java
URL: http://svn.apache.org/viewvc/myfaces/trinidad/branches/anrobins_1.2.12.3_visitTree_3/trinidad-api/src/main/java-templates/org/apache/myfaces/trinidad/component/UIXNavigationTreeTemplate.java?rev=984260&r1=984259&r2=984260&view=diff
==============================================================================
--- myfaces/trinidad/branches/anrobins_1.2.12.3_visitTree_3/trinidad-api/src/main/java-templates/org/apache/myfaces/trinidad/component/UIXNavigationTreeTemplate.java (original)
+++ myfaces/trinidad/branches/anrobins_1.2.12.3_visitTree_3/trinidad-api/src/main/java-templates/org/apache/myfaces/trinidad/component/UIXNavigationTreeTemplate.java Tue Aug 10 23:18:21 2010
@@ -29,6 +29,9 @@ import javax.faces.event.PhaseId;
import org.apache.myfaces.trinidad.bean.FacesBean;
import org.apache.myfaces.trinidad.bean.PropertyKey;
+import org.apache.myfaces.trinidad.component.visit.VisitCallback;
+import org.apache.myfaces.trinidad.component.visit.VisitContext;
+import org.apache.myfaces.trinidad.component.visit.VisitHint;
import org.apache.myfaces.trinidad.model.CollectionModel;
import org.apache.myfaces.trinidad.model.RowKeySet;
import org.apache.myfaces.trinidad.model.RowKeySetTreeImpl;
@@ -103,6 +106,43 @@ abstract public class UIXNavigationTreeT
}
@Override
+ protected boolean visitChildren(
+ VisitContext visitContext,
+ VisitCallback callback)
+ {
+ return visitData(visitContext, callback);
+ }
+
+ @Override
+ protected boolean visitData(
+ VisitContext visitContext,
+ VisitCallback callback)
+ {
+ Object oldRowKey = getRowKey();
+
+ // if we are only visiting rendered stamps, then pass in the disclosed row keys, otherwise
+ // pass in null, indicating that all row keys should be visited
+ RowKeySet disclosedRowKeys = (visitContext.getHints().contains(VisitHint.SKIP_UNRENDERED))
+ ? getDisclosedRowKeys()
+ : null;
+
+ boolean done;
+
+ HierarchyUtils.__setStartDepthPath(this, getStartLevel());
+
+ try
+ {
+ done = visitHierarchy(visitContext, callback, getStamps(), disclosedRowKeys);
+ }
+ finally
+ {
+ setRowKey(oldRowKey);
+ }
+
+ return done;
+ }
+
+ @Override
void __encodeBegin(FacesContext context) throws IOException
{
HierarchyUtils.__handleEncodeBegin(this, getDisclosedRowKeys());
Modified: myfaces/trinidad/branches/anrobins_1.2.12.3_visitTree_3/trinidad-api/src/main/java-templates/org/apache/myfaces/trinidad/component/UIXPageTemplate.java
URL: http://svn.apache.org/viewvc/myfaces/trinidad/branches/anrobins_1.2.12.3_visitTree_3/trinidad-api/src/main/java-templates/org/apache/myfaces/trinidad/component/UIXPageTemplate.java?rev=984260&r1=984259&r2=984260&view=diff
==============================================================================
--- myfaces/trinidad/branches/anrobins_1.2.12.3_visitTree_3/trinidad-api/src/main/java-templates/org/apache/myfaces/trinidad/component/UIXPageTemplate.java (original)
+++ myfaces/trinidad/branches/anrobins_1.2.12.3_visitTree_3/trinidad-api/src/main/java-templates/org/apache/myfaces/trinidad/component/UIXPageTemplate.java Tue Aug 10 23:18:21 2010
@@ -32,6 +32,9 @@ import javax.faces.event.PhaseId;
import org.apache.myfaces.trinidad.bean.FacesBean;
import org.apache.myfaces.trinidad.bean.PropertyKey;
+import org.apache.myfaces.trinidad.component.visit.VisitCallback;
+import org.apache.myfaces.trinidad.component.visit.VisitContext;
+import org.apache.myfaces.trinidad.component.visit.VisitHint;
import org.apache.myfaces.trinidad.model.CollectionModel;
import org.apache.myfaces.trinidad.model.RowKeySet;
import org.apache.myfaces.trinidad.model.RowKeySetTreeImpl;
@@ -49,6 +52,7 @@ abstract public class UIXPageTemplate ex
/**/ public abstract void setDisclosedRowKeys(RowKeySet state);
/**/ public abstract MethodBinding getRowDisclosureListener();
/**/ static public final PropertyKey DISCLOSED_ROW_KEYS_KEY = null;
+/**/ public abstract UIComponent getNodeStamp();
/**
* Sets the phaseID of UI events depending on the "immediate" property.
@@ -119,6 +123,89 @@ abstract public class UIXPageTemplate ex
}
@Override
+ protected boolean visitChildren(
+ VisitContext visitContext,
+ VisitCallback callback)
+ {
+ boolean done = visitData(visitContext, callback);
+
+ if (!done)
+ {
+ // process the children
+ int childCount = getChildCount();
+ if (childCount > 0)
+ {
+ for (UIComponent child : getChildren())
+ {
+ done = UIXComponent.visitTree(visitContext, child, callback);
+
+ if (done)
+ break;
+ }
+ }
+
+ // process the non-stamp facet children
+ if (!done)
+ {
+ // Visit the facets except for the node stamp
+ int facetCount = getFacetCount();
+
+ if (facetCount > 0)
+ {
+ UIComponent nodeStamp = getNodeStamp();
+
+ // if our only facet is the node stamp, we don't need to do this
+ if ((facetCount > 1) || (nodeStamp == null))
+ {
+ for (UIComponent facet : getFacets().values())
+ {
+ // ignore the nodeStamp facet, since it is stamped
+ if (facet != nodeStamp)
+ {
+ if (UIXComponent.visitTree(visitContext, facet, callback))
+ {
+ done = true;
+ break;
+ }
+ }
+ }
+ }
+ }
+ }
+ }
+
+ return done;
+ }
+
+ @Override
+ protected boolean visitData(
+ VisitContext visitContext,
+ VisitCallback callback)
+ {
+ Object oldPath = getRowKey();
+
+ // if we are only visiting rendered stamps, then pass in the disclosed row keys, otherwise
+ // pass in null, indicating that all row keys should be visited
+ RowKeySet disclosedRowKeys = (visitContext.getHints().contains(VisitHint.SKIP_UNRENDERED))
+ ? getDisclosedRowKeys()
+ : null;
+
+ setRowKey(null);
+
+ boolean done;
+
+ try
+ {
+ done = visitHierarchy(visitContext, callback, getStamps(), disclosedRowKeys);
+ }
+ finally
+ {
+ setRowKey(oldPath);
+ }
+
+ return done;
+ }
+ @Override
void __encodeBegin(FacesContext context) throws IOException
{
HierarchyUtils.__handleEncodeBegin(this, getDisclosedRowKeys());
Modified: myfaces/trinidad/branches/anrobins_1.2.12.3_visitTree_3/trinidad-api/src/main/java-templates/org/apache/myfaces/trinidad/component/UIXProcessTemplate.java
URL: http://svn.apache.org/viewvc/myfaces/trinidad/branches/anrobins_1.2.12.3_visitTree_3/trinidad-api/src/main/java-templates/org/apache/myfaces/trinidad/component/UIXProcessTemplate.java?rev=984260&r1=984259&r2=984260&view=diff
==============================================================================
--- myfaces/trinidad/branches/anrobins_1.2.12.3_visitTree_3/trinidad-api/src/main/java-templates/org/apache/myfaces/trinidad/component/UIXProcessTemplate.java (original)
+++ myfaces/trinidad/branches/anrobins_1.2.12.3_visitTree_3/trinidad-api/src/main/java-templates/org/apache/myfaces/trinidad/component/UIXProcessTemplate.java Tue Aug 10 23:18:21 2010
@@ -6,9 +6,9 @@
* to you under the Apache License, Version 2.0 (the
* "License"); you may not use this file except in compliance
* with the License. You may obtain a copy of the License at
- *
+ *
* http://www.apache.org/licenses/LICENSE-2.0
- *
+ *
* Unless required by applicable law or agreed to in writing,
* software distributed under the License is distributed on an
* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
@@ -18,35 +18,86 @@
*/
package org.apache.myfaces.trinidad.component;
+import javax.faces.component.UIComponent;
import javax.faces.context.FacesContext;
import javax.faces.event.PhaseId;
+import org.apache.myfaces.trinidad.component.visit.VisitCallback;
+import org.apache.myfaces.trinidad.component.visit.VisitContext;
+
/**
* Base class for the Process component, which shows the steps of a process.
*
* @version $Name: $ ($Revision$) $Date$
*/
-abstract public class UIXProcessTemplate extends UIXMenuHierarchy
+abstract public class UIXProcessTemplate
+ extends UIXMenuHierarchy
{
-
@Override
protected void processFacetsAndChildren(
FacesContext context,
PhaseId phaseId)
{
Object oldPath = getRowKey();
- Object focusPath = getFocusRowKey();
- setRowKey(focusPath);
- // process stamp for one level
- HierarchyUtils.__processLevel(context, phaseId, this);
- setRowKey(oldPath);
-
+ Object focusPath = getFocusRowKey();
+ setRowKey(focusPath);
+ // process stamp for one level
+ HierarchyUtils.__processLevel(context, phaseId, this);
+ setRowKey(oldPath);
+
// process the children
TableUtils.__processChildren(context, this, phaseId);
-
- }
-
-
+ }
+
+ @Override
+ protected boolean visitChildren(
+ VisitContext visitContext,
+ VisitCallback callback)
+ {
+ boolean done = visitData(visitContext, callback);
+
+ if (!done)
+ {
+ // process the children
+ int childCount = getChildCount();
+ if (childCount > 0)
+ {
+ for (UIComponent child : getChildren())
+ {
+ done = UIXComponent.visitTree(visitContext, child, callback);
+
+ if (done)
+ break;
+ }
+ }
+ }
+
+ return done;
+ }
+
+ @Override
+ protected boolean visitData(
+ VisitContext visitContext,
+ VisitCallback callback)
+ {
+ Object oldKey = getRowKey();
+
+ Object focusPath = getFocusRowKey();
+ setRowKey(focusPath);
+
+ boolean done;
+
+ try
+ {
+ done = visitLevel(visitContext, callback, getStamps());
+ }
+ finally
+ {
+ setRowKey(oldKey);
+ }
+
+ return done;
+ }
}
Modified: myfaces/trinidad/branches/anrobins_1.2.12.3_visitTree_3/trinidad-api/src/main/java-templates/org/apache/myfaces/trinidad/component/UIXShowDetailTemplate.java
URL: http://svn.apache.org/viewvc/myfaces/trinidad/branches/anrobins_1.2.12.3_visitTree_3/trinidad-api/src/main/java-templates/org/apache/myfaces/trinidad/component/UIXShowDetailTemplate.java?rev=984260&r1=984259&r2=984260&view=diff
==============================================================================
--- myfaces/trinidad/branches/anrobins_1.2.12.3_visitTree_3/trinidad-api/src/main/java-templates/org/apache/myfaces/trinidad/component/UIXShowDetailTemplate.java (original)
+++ myfaces/trinidad/branches/anrobins_1.2.12.3_visitTree_3/trinidad-api/src/main/java-templates/org/apache/myfaces/trinidad/component/UIXShowDetailTemplate.java Tue Aug 10 23:18:21 2010
@@ -6,9 +6,9 @@
* to you under the Apache License, Version 2.0 (the
* "License"); you may not use this file except in compliance
* with the License. You may obtain a copy of the License at
- *
+ *
* http://www.apache.org/licenses/LICENSE-2.0
- *
+ *
* Unless required by applicable law or agreed to in writing,
* software distributed under the License is distributed on an
* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
@@ -25,6 +25,9 @@ import javax.faces.event.AbortProcessing
import javax.faces.event.FacesEvent;
import javax.faces.event.PhaseId;
+import org.apache.myfaces.trinidad.component.visit.VisitCallback;
+import org.apache.myfaces.trinidad.component.visit.VisitContext;
+import org.apache.myfaces.trinidad.component.visit.VisitHint;
import org.apache.myfaces.trinidad.event.DisclosureEvent;
import org.apache.myfaces.trinidad.logging.TrinidadLogger;
@@ -85,12 +88,12 @@ abstract public class UIXShowDetailTempl
{
// Do not update the disclosed if "transient"
if (!isDisclosedTransient())
- {
+ {
// Expand or collapse this showDetail
boolean isDisclosed = ((DisclosureEvent) event).isExpanded();
- // If the component is already in that disclosure state, we
+ // If the component is already in that disclosure state, we
// have a renderer bug. Either it delivered an unnecessary event,
- // or even worse it set disclosed on its own instead of waiting
+ // or even worse it set disclosed on its own instead of waiting
// for the disclosure event to do that, which will lead to lifecycle
// problems. So in either case, warn the developer.
if (isDisclosed == isDisclosed())
@@ -101,12 +104,12 @@ abstract public class UIXShowDetailTempl
{
setDisclosed(isDisclosed);
}
-
+
//pu: Implicitly record a Change for 'disclosed' attribute
addAttributeChange("disclosed",
isDisclosed ? Boolean.TRUE : Boolean.FALSE);
}
-
+
if (isImmediate())
getFacesContext().renderResponse();
@@ -133,5 +136,16 @@ abstract public class UIXShowDetailTempl
super.queueEvent(e);
}
+ @Override
+ protected boolean visitChildren(
+ VisitContext visitContext,
+ VisitCallback callback)
+ {
+ return
+ (visitContext.getHints().contains(VisitHint.SKIP_UNRENDERED) == false ||
+ this.isDisclosed()) &&
+ super.visitChildren(visitContext, callback);
+ }
+
static private final TrinidadLogger _LOG = TrinidadLogger.createTrinidadLogger(UIXShowDetail.class);
}
Modified: myfaces/trinidad/branches/anrobins_1.2.12.3_visitTree_3/trinidad-api/src/main/java-templates/org/apache/myfaces/trinidad/component/UIXShowOneTemplate.java
URL: http://svn.apache.org/viewvc/myfaces/trinidad/branches/anrobins_1.2.12.3_visitTree_3/trinidad-api/src/main/java-templates/org/apache/myfaces/trinidad/component/UIXShowOneTemplate.java?rev=984260&r1=984259&r2=984260&view=diff
==============================================================================
--- myfaces/trinidad/branches/anrobins_1.2.12.3_visitTree_3/trinidad-api/src/main/java-templates/org/apache/myfaces/trinidad/component/UIXShowOneTemplate.java (original)
+++ myfaces/trinidad/branches/anrobins_1.2.12.3_visitTree_3/trinidad-api/src/main/java-templates/org/apache/myfaces/trinidad/component/UIXShowOneTemplate.java Tue Aug 10 23:18:21 2010
@@ -6,9 +6,9 @@
* to you under the Apache License, Version 2.0 (the
* "License"); you may not use this file except in compliance
* with the License. You may obtain a copy of the License at
- *
+ *
* http://www.apache.org/licenses/LICENSE-2.0
- *
+ *
* Unless required by applicable law or agreed to in writing,
* software distributed under the License is distributed on an
* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
@@ -19,22 +19,27 @@
package org.apache.myfaces.trinidad.component;
import java.io.IOException;
-import java.util.List;
import javax.faces.component.UIComponent;
import javax.faces.context.FacesContext;
import javax.faces.event.FacesEvent;
import javax.faces.event.PhaseId;
+import org.apache.myfaces.trinidad.component.visit.VisitCallback;
+import org.apache.myfaces.trinidad.component.visit.VisitContext;
+import org.apache.myfaces.trinidad.component.visit.VisitContextWrapper;
+import org.apache.myfaces.trinidad.component.visit.VisitHint;
+import org.apache.myfaces.trinidad.component.visit.VisitResult;
import org.apache.myfaces.trinidad.event.DisclosureEvent;
+
/**
* Base class for ShowOne component.
* @version $Name: $ ($Revision$) $Date$
*/
-abstract public class UIXShowOneTemplate extends UIXComponentBase
+abstract public class UIXShowOneTemplate
+ extends UIXComponentBase
{
-
@Override
@SuppressWarnings("unchecked")
public void queueEvent(FacesEvent e)
@@ -85,6 +90,26 @@ abstract public class UIXShowOneTemplate
super.queueEvent(e);
}
+ @Override
+ public boolean visitTree(
+ VisitContext visitContext,
+ VisitCallback callback)
+ {
+ if (visitContext.getHints().contains(VisitHint.SKIP_UNRENDERED))
+ {
+ // Filter which children to be visited so that only one show detail
+ // is visited for this show one component
+ visitContext = new PartialVisitContext(visitContext);
+ }
+ return super.visitTree(visitContext, callback);
+ }
+
+ protected boolean isChildSelected(
+ UIXShowDetail component)
+ {
+ return component.isDisclosed();
+ }
+
/**
* State passed to the UndisclosureCallback.
*/
@@ -145,5 +170,70 @@ abstract public class UIXShowOneTemplate
}
}
+ private class PartialVisitContext
+ extends VisitContextWrapper
+ {
+ PartialVisitContext(VisitContext wrapped)
+ {
+ _wrapped = wrapped;
+ }
+
+ public VisitContext getWrapped()
+ {
+ return _wrapped;
+ }
+
+ @Override
+ public VisitResult invokeVisitCallback(
+ UIComponent component,
+ VisitCallback visitCallback)
+ {
+ if (component instanceof UIXShowDetail)
+ {
+ UIXShowDetail showDetail = (UIXShowDetail)component;
+ if (_isShowDetailForCurrentComponent(showDetail))
+ {
+ if (_foundItemToRender || !isChildSelected(showDetail))
+ {
+ // We already visited the one to be shown
+ return VisitResult.REJECT;
+ }
+ else
+ {
+ _foundItemToRender = true;
+ }
+ }
+ }
+
+ return super.invokeVisitCallback(component, visitCallback);
+ }
+
+ private boolean _isShowDetailForCurrentComponent(
+ UIXShowDetail showDetail)
+ {
+ for (UIComponent parent = showDetail.getParent(); parent != null; parent = parent.getParent())
+ {
+ if (parent == UIXShowOne.this)
+ {
+ return true;
+ }
+
+ if (parent instanceof FlattenedComponent &&
+ ((FlattenedComponent)parent).isFlatteningChildren(getFacesContext()))
+ {
+ continue;
+ }
+
+ // The first-non flattened component is not the show one, do not filter it
+ return false;
+ }
+
+ return false;
+ }
+
+ private boolean _foundItemToRender;
+ private VisitContext _wrapped;
+ }
+
private final UndisclosureCallback _undisclosureCallback = new UndisclosureCallback();
}
Modified: myfaces/trinidad/branches/anrobins_1.2.12.3_visitTree_3/trinidad-api/src/main/java-templates/org/apache/myfaces/trinidad/component/UIXSwitcherTemplate.java
URL: http://svn.apache.org/viewvc/myfaces/trinidad/branches/anrobins_1.2.12.3_visitTree_3/trinidad-api/src/main/java-templates/org/apache/myfaces/trinidad/component/UIXSwitcherTemplate.java?rev=984260&r1=984259&r2=984260&view=diff
==============================================================================
--- myfaces/trinidad/branches/anrobins_1.2.12.3_visitTree_3/trinidad-api/src/main/java-templates/org/apache/myfaces/trinidad/component/UIXSwitcherTemplate.java (original)
+++ myfaces/trinidad/branches/anrobins_1.2.12.3_visitTree_3/trinidad-api/src/main/java-templates/org/apache/myfaces/trinidad/component/UIXSwitcherTemplate.java Tue Aug 10 23:18:21 2010
@@ -6,9 +6,9 @@
* to you under the Apache License, Version 2.0 (the
* "License"); you may not use this file except in compliance
* with the License. You may obtain a copy of the License at
- *
+ *
* http://www.apache.org/licenses/LICENSE-2.0
- *
+ *
* Unless required by applicable law or agreed to in writing,
* software distributed under the License is distributed on an
* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
@@ -23,6 +23,10 @@ import java.io.IOException;
import javax.faces.component.UIComponent;
import javax.faces.context.FacesContext;
+import org.apache.myfaces.trinidad.component.visit.VisitCallback;
+import org.apache.myfaces.trinidad.component.visit.VisitContext;
+import org.apache.myfaces.trinidad.component.visit.VisitHint;
+
/**
* Base class for the switcher componnet.
@@ -57,7 +61,6 @@ abstract public class UIXSwitcherTemplat
facet.processValidators(context);
}
-
/**
* Only process updates on the currently active facet.
*/
@@ -78,16 +81,36 @@ abstract public class UIXSwitcherTemplat
final ComponentProcessor<S> childProcessor,
final S callbackContext) throws IOException
{
+ setupVisitingContext(context);
+
UIComponent facet = _getFacet();
-
- if (facet != null)
- return UIXComponent.processFlattenedChildren(context,
- cpContext,
- childProcessor,
- facet,
- callbackContext);
- else
- return false;
+
+ try
+ {
+ if (facet != null)
+ {
+ setupChildrenVisitingContext(context);
+
+ try
+ {
+ return UIXComponent.processFlattenedChildren(context,
+ cpContext,
+ childProcessor,
+ facet,
+ callbackContext);
+ }
+ finally
+ {
+ tearDownChildrenVisitingContext(context);
+ }
+ }
+ else
+ return false;
+ }
+ finally
+ {
+ tearDownChildrenVisitingContext(context);
+ }
}
/**
@@ -112,7 +135,6 @@ abstract public class UIXSwitcherTemplat
__encodeRecursive(context, facet);
}
-
/**
* Override to return true.
*/
@@ -122,6 +144,26 @@ abstract public class UIXSwitcherTemplat
return true;
}
+ @Override
+ protected boolean visitChildren(
+ VisitContext visitContext,
+ VisitCallback callback)
+ {
+ if (visitContext.getHints().contains(VisitHint.SKIP_UNRENDERED))
+ {
+ UIComponent facet = _getFacet();
+ if (facet != null)
+ {
+ return UIXComponent.visitTree(visitContext, facet, callback);
+ }
+ return false;
+ }
+ else
+ {
+ return super.visitChildren(visitContext, callback);
+ }
+ }
+
private UIComponent _getFacet()
{
if (!isRendered())
@@ -141,7 +183,6 @@ abstract public class UIXSwitcherTemplat
return null;
}
-
}
Modified: myfaces/trinidad/branches/anrobins_1.2.12.3_visitTree_3/trinidad-api/src/main/java-templates/org/apache/myfaces/trinidad/component/UIXTreeTableTemplate.java
URL: http://svn.apache.org/viewvc/myfaces/trinidad/branches/anrobins_1.2.12.3_visitTree_3/trinidad-api/src/main/java-templates/org/apache/myfaces/trinidad/component/UIXTreeTableTemplate.java?rev=984260&r1=984259&r2=984260&view=diff
==============================================================================
--- myfaces/trinidad/branches/anrobins_1.2.12.3_visitTree_3/trinidad-api/src/main/java-templates/org/apache/myfaces/trinidad/component/UIXTreeTableTemplate.java (original)
+++ myfaces/trinidad/branches/anrobins_1.2.12.3_visitTree_3/trinidad-api/src/main/java-templates/org/apache/myfaces/trinidad/component/UIXTreeTableTemplate.java Tue Aug 10 23:18:21 2010
@@ -6,9 +6,9 @@
* to you under the Apache License, Version 2.0 (the
* "License"); you may not use this file except in compliance
* with the License. You may obtain a copy of the License at
- *
+ *
* http://www.apache.org/licenses/LICENSE-2.0
- *
+ *
* Unless required by applicable law or agreed to in writing,
* software distributed under the License is distributed on an
* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
@@ -36,6 +36,8 @@ import javax.faces.event.AbortProcessing
import javax.faces.event.FacesEvent;
import javax.faces.event.PhaseId;
+import org.apache.myfaces.trinidad.component.visit.VisitCallback;
+import org.apache.myfaces.trinidad.component.visit.VisitContext;
import org.apache.myfaces.trinidad.event.FocusEvent;
import org.apache.myfaces.trinidad.event.RangeChangeEvent;
import org.apache.myfaces.trinidad.event.RangeChangeListener;
@@ -59,9 +61,9 @@ abstract public class UIXTreeTableTempla
public void decode(FacesContext context)
{
_resetContainerClientIdCache();
- super.decode(context);
+ super.decode(context);
}
-
+
/**
* Override to update the container client id cache before validations
*/
@@ -71,16 +73,16 @@ abstract public class UIXTreeTableTempla
_resetContainerClientIdCache();
super.processValidators(context);
}
-
+
/**
* Override to update the container client id cache before updates
- */
+ */
@Override
public void processUpdates(FacesContext context)
{
_resetContainerClientIdCache();
super.processUpdates(context);
- }
+ }
/**
* Override to update the container client id cache before encode
@@ -101,7 +103,7 @@ abstract public class UIXTreeTableTempla
{
String id;
if (_containerClientIdCache == null || _isStampedChild(child))
- {
+ {
// call the UIXCollection getContainerClientId, which attaches currency string to the client id
id = getContainerClientId(context);
}
@@ -358,14 +360,14 @@ abstract public class UIXTreeTableTempla
phaseId,
this,
state,
- true);
+ true);
}
else
{
TableUtils.processStampedChildren(context, this, phaseId);
processComponent(context, nodeStamp, phaseId); // bug 4688568
-
+
if (state.isContained())
{
enterContainer();
@@ -383,6 +385,81 @@ abstract public class UIXTreeTableTempla
}
}
+
+ @Override
+ protected boolean visitChildren(
+ VisitContext visitContext,
+ VisitCallback callback)
+ {
+ // need to override to do the default since our superclass
+ // UIXTree does stuff here we don't want
+ return defaultVisitChildren(visitContext, callback);
+ }
+
+ @Override
+ protected boolean visitUnstampedFacets(
+ VisitContext visitContext,
+ VisitCallback callback)
+ {
+ // Visit the facets except for the node stamp
+ int facetCount = getFacetCount();
+
+ if (facetCount > 0)
+ {
+ UIComponent nodeStamp = getNodeStamp();
+
+ // if our only facet is the node stamp, we don't need to do this
+ if ((facetCount > 1) || (nodeStamp == null))
+ {
+ for (UIComponent facet : getFacets().values())
+ {
+ // ignore the nodeStamp facet, since it is stamped
+ if (facet != nodeStamp)
+ {
+ if (UIXComponent.visitTree(visitContext, facet, callback))
+ {
+ return true;
+ }
+ }
+ }
+ }
+ }
+
+ return false;
+ }
+
+ @Override
+ protected boolean visitData(
+ VisitContext visitContext,
+ VisitCallback callback)
+ {
+ Object focusedPath = getFocusRowKey();
+ Object oldRowKey = null;
+
+ // start from the focused area
+ if (focusedPath != null)
+ {
+ oldRowKey = getRowKey();
+ setRowKey(focusedPath);
+ }
+
+ boolean done;
+
+ try
+ {
+ done = super.visitData(new NoColumnFacetsVisitContext(visitContext), callback);
+ }
+ finally
+ {
+ if (focusedPath != null)
+ {
+ setRowKey(oldRowKey);
+ }
+ }
+
+ return done;
+ }
+
/**
* Gets the path of the parent
*/
@@ -422,7 +499,7 @@ abstract public class UIXTreeTableTempla
// cache nodeStamp header/footer items
TableUtils.cacheHeaderFooterFacets(nodeStamp, _containerClientIdCache);
// cache any nested columns in nodeStamp facet
- TableUtils.cacheColumnHeaderFooterFacets(nodeStamp, _containerClientIdCache);
+ TableUtils.cacheColumnHeaderFooterFacets(nodeStamp, _containerClientIdCache);
}
}
@@ -438,7 +515,7 @@ abstract public class UIXTreeTableTempla
return state;
}
-
+
/**
* Sets the internal state of this component.
* @param stampState the internal state is obtained from this object.
Modified: myfaces/trinidad/branches/anrobins_1.2.12.3_visitTree_3/trinidad-api/src/main/java-templates/org/apache/myfaces/trinidad/component/UIXTreeTemplate.java
URL: http://svn.apache.org/viewvc/myfaces/trinidad/branches/anrobins_1.2.12.3_visitTree_3/trinidad-api/src/main/java-templates/org/apache/myfaces/trinidad/component/UIXTreeTemplate.java?rev=984260&r1=984259&r2=984260&view=diff
==============================================================================
--- myfaces/trinidad/branches/anrobins_1.2.12.3_visitTree_3/trinidad-api/src/main/java-templates/org/apache/myfaces/trinidad/component/UIXTreeTemplate.java (original)
+++ myfaces/trinidad/branches/anrobins_1.2.12.3_visitTree_3/trinidad-api/src/main/java-templates/org/apache/myfaces/trinidad/component/UIXTreeTemplate.java Tue Aug 10 23:18:21 2010
@@ -31,6 +31,9 @@ import javax.faces.event.PhaseId;
import org.apache.myfaces.trinidad.bean.FacesBean;
import org.apache.myfaces.trinidad.bean.PropertyKey;
+import org.apache.myfaces.trinidad.component.visit.VisitCallback;
+import org.apache.myfaces.trinidad.component.visit.VisitContext;
+import org.apache.myfaces.trinidad.component.visit.VisitHint;
import org.apache.myfaces.trinidad.event.RowDisclosureEvent;
import org.apache.myfaces.trinidad.event.SelectionEvent;
import org.apache.myfaces.trinidad.model.CollectionModel;
@@ -149,6 +152,29 @@ abstract public class UIXTreeTemplate ex
}
@Override
+ protected boolean visitChildren(
+ VisitContext visitContext,
+ VisitCallback callback)
+ {
+ return visitData(visitContext, callback);
+ }
+
+ @Override
+ protected boolean visitData(
+ VisitContext visitContext,
+ VisitCallback callback)
+ {
+ // if we are only visiting rendered stamps, then pass in the disclosed row keys, otherwise
+ // pass in null, indicating that all row keys should be visited
+ RowKeySet disclosedRowKeys = (visitContext.getHints().contains(VisitHint.SKIP_UNRENDERED))
+ ? getDisclosedRowKeys()
+ : null;
+
+ return visitHierarchy(visitContext, callback, getStamps(), disclosedRowKeys);
+ }
+
+
+ @Override
void __init()
{
super.__init();
@@ -158,7 +184,6 @@ abstract public class UIXTreeTemplate ex
setSelectedRowKeys(new RowKeySetTreeImpl());
}
-
/**
* Gets the internal state of this component.
*/
Modified: myfaces/trinidad/branches/anrobins_1.2.12.3_visitTree_3/trinidad-api/src/main/java-templates/org/apache/myfaces/trinidad/component/core/layout/CorePanelAccordionTemplate.java
URL: http://svn.apache.org/viewvc/myfaces/trinidad/branches/anrobins_1.2.12.3_visitTree_3/trinidad-api/src/main/java-templates/org/apache/myfaces/trinidad/component/core/layout/CorePanelAccordionTemplate.java?rev=984260&r1=984259&r2=984260&view=diff
==============================================================================
--- myfaces/trinidad/branches/anrobins_1.2.12.3_visitTree_3/trinidad-api/src/main/java-templates/org/apache/myfaces/trinidad/component/core/layout/CorePanelAccordionTemplate.java (original)
+++ myfaces/trinidad/branches/anrobins_1.2.12.3_visitTree_3/trinidad-api/src/main/java-templates/org/apache/myfaces/trinidad/component/core/layout/CorePanelAccordionTemplate.java Tue Aug 10 23:18:21 2010
@@ -18,20 +18,29 @@
*/
package org.apache.myfaces.trinidad.component.core.layout;
+import java.util.List;
+
import javax.faces.component.UIComponent;
-import javax.faces.context.FacesContext;
-import javax.faces.el.MethodBinding;
import javax.faces.event.AbortProcessingException;
import javax.faces.event.FacesEvent;
-import javax.faces.event.PhaseId;
-import java.util.List;
-import org.apache.myfaces.trinidad.event.DisclosureEvent;
+import org.apache.myfaces.trinidad.component.FlattenedComponent;
+import org.apache.myfaces.trinidad.component.UIXPanel;
import org.apache.myfaces.trinidad.component.UIXShowDetail;
+import org.apache.myfaces.trinidad.component.visit.VisitCallback;
+import org.apache.myfaces.trinidad.component.visit.VisitContext;
+import org.apache.myfaces.trinidad.component.visit.VisitContextWrapper;
+import org.apache.myfaces.trinidad.component.visit.VisitHint;
+import org.apache.myfaces.trinidad.component.visit.VisitResult;
+import org.apache.myfaces.trinidad.event.DisclosureEvent;
+
-abstract public class CorePanelAccordion extends UIXPanel
+abstract public class CorePanelAccordionTemplate
+ extends UIXPanel
{
- /**
+/**/ public abstract boolean isDiscloseMany();
+
+ /**
* Queues an event recursively to the root component.
* @param event
* @throws javax.faces.event.AbortProcessingException
@@ -67,4 +76,91 @@ abstract public class CorePanelAccordion
super.queueEvent(event);
}
+ protected boolean isChildSelected(
+ UIXShowDetail component)
+ {
+ return component.isDisclosed();
+ }
+
+ @Override
+ public boolean visitTree(
+ VisitContext visitContext,
+ VisitCallback callback)
+ {
+ if (visitContext.getHints().contains(VisitHint.SKIP_UNRENDERED) &&
+ !isDiscloseMany())
+ {
+ // Filter which children to be visited so that only one show detail
+ // is visited for this accordion
+ visitContext = new PartialVisitContext(visitContext);
+ }
+ return super.visitTree(visitContext, callback);
+ }
+
+ private class PartialVisitContext
+ extends VisitContextWrapper
+ {
+ PartialVisitContext(
+ VisitContext wrapped)
+ {
+ _wrapped = wrapped;
+ }
+
+ public VisitContext getWrapped()
+ {
+ return _wrapped;
+ }
+
+ @Override
+ public VisitResult invokeVisitCallback(
+ UIComponent component,
+ VisitCallback visitCallback)
+ {
+ if (component instanceof UIXShowDetail)
+ {
+ UIXShowDetail showDetail = (UIXShowDetail)component;
+ if (_isShowDetailForCurrentComponent(showDetail))
+ {
+ if (_foundItemToRender || !isChildSelected(showDetail))
+ {
+ // We already visited the one to be shown
+ return VisitResult.REJECT;
+ }
+ else
+ {
+ _foundItemToRender = true;
+ }
+ }
+ }
+
+ return super.invokeVisitCallback(component, visitCallback);
+ }
+
+ private boolean _isShowDetailForCurrentComponent(
+ UIXShowDetail showDetail)
+ {
+ for (UIComponent parent = showDetail.getParent(); parent != null;
+ parent = parent.getParent())
+ {
+ if (parent == CorePanelAccordion.this)
+ {
+ return true;
+ }
+
+ if (parent instanceof FlattenedComponent &&
+ ((FlattenedComponent)parent).isFlatteningChildren(getFacesContext()))
+ {
+ continue;
+ }
+
+ // The first-non flattened component is not the show one, do not filter it
+ return false;
+ }
+
+ return false;
+ }
+
+ private boolean _foundItemToRender;
+ private VisitContext _wrapped;
+ }
}
\ No newline at end of file
Modified: myfaces/trinidad/branches/anrobins_1.2.12.3_visitTree_3/trinidad-api/src/main/java/org/apache/myfaces/trinidad/component/UIXCollection.java
URL: http://svn.apache.org/viewvc/myfaces/trinidad/branches/anrobins_1.2.12.3_visitTree_3/trinidad-api/src/main/java/org/apache/myfaces/trinidad/component/UIXCollection.java?rev=984260&r1=984259&r2=984260&view=diff
==============================================================================
--- myfaces/trinidad/branches/anrobins_1.2.12.3_visitTree_3/trinidad-api/src/main/java/org/apache/myfaces/trinidad/component/UIXCollection.java (original)
+++ myfaces/trinidad/branches/anrobins_1.2.12.3_visitTree_3/trinidad-api/src/main/java/org/apache/myfaces/trinidad/component/UIXCollection.java Tue Aug 10 23:18:21 2010
@@ -40,6 +40,10 @@ import javax.faces.render.Renderer;
import org.apache.myfaces.trinidad.bean.FacesBean;
import org.apache.myfaces.trinidad.bean.PropertyKey;
+import org.apache.myfaces.trinidad.component.visit.VisitCallback;
+import org.apache.myfaces.trinidad.component.visit.VisitContext;
+import org.apache.myfaces.trinidad.component.visit.VisitContextWrapper;
+import org.apache.myfaces.trinidad.component.visit.VisitResult;
import org.apache.myfaces.trinidad.event.SelectionEvent;
import org.apache.myfaces.trinidad.logging.TrinidadLogger;
import org.apache.myfaces.trinidad.model.CollectionModel;
@@ -1092,6 +1096,240 @@ public abstract class UIXCollection exte
}
/**
+ * <p>
+ * Override default children visiting code to visit the facets and facets of the columns
+ * before delegating to the <code>visitData</code> to visit the individual rows of data.
+ * </p><p>
+ * Subclasses should override this method if they wish to change the way in which the non-stamped
+ * children are visited. If they wish to change the wash the the stamped children are visited,
+ * they should override <code>visitData</code> instead.
+ * </p>
+ * @param visitContext
+ * @param callback
+ * @return <code>true</code> if all of the children to visit have been visited
+ * @see #visitData
+ */
+ @Override
+ protected boolean visitChildren(
+ VisitContext visitContext,
+ VisitCallback callback)
+ {
+ return defaultVisitChildren(visitContext, callback);
+ }
+
+ protected final boolean defaultVisitChildren(
+ VisitContext visitContext,
+ VisitCallback callback)
+ {
+ boolean doneVisiting;
+
+ // Clear out the row index if one is set so that
+ // we start from a clean slate.
+ int oldRowIndex = getRowIndex();
+ setRowIndex(-1);
+
+ try
+ {
+ // visit the unstamped children
+ doneVisiting = visitUnstampedFacets(visitContext, callback);
+
+ if (!doneVisiting)
+ {
+ doneVisiting = _visitStampedColumnFacets(visitContext, callback);
+
+ // visit the stamped children
+ if (!doneVisiting)
+ {
+ doneVisiting = visitData(visitContext, callback);
+ }
+ }
+ }
+ finally
+ {
+ // restore the original rowIndex
+ setRowIndex(oldRowIndex);
+ }
+
+ return doneVisiting;
+ }
+
+ /**
+ * Hook method for subclasses to override to change the behavior
+ * of how unstamped facets of the UIXCollection are visited. The
+ * Default implementation visits all of the facets of the
+ * UIXCollection.
+ */
+ protected boolean visitUnstampedFacets(
+ VisitContext visitContext,
+ VisitCallback callback)
+ {
+ // Visit the facets with no row
+ if (getFacetCount() > 0)
+ {
+ for (UIComponent facet : getFacets().values())
+ {
+ if (UIXComponent.visitTree(visitContext, facet, callback))
+ {
+ return true;
+ }
+ }
+ }
+
+ return false;
+ }
+
+
+ /**
+ * VistiContext that visits the facets of the UIXColumn children, including
+ * nested UIXColumn childrem
+ */
+ private static class ColumnFacetsOnlyVisitContext
+ extends VisitContextWrapper
+ {
+ public ColumnFacetsOnlyVisitContext(VisitContext wrappedContext)
+ {
+ _wrapped = wrappedContext;
+ }
+
+ @Override
+ public VisitContext getWrapped()
+ {
+ return _wrapped;
+ }
+
+ @Override
+ public VisitResult invokeVisitCallback(
+ UIComponent component,
+ VisitCallback callback)
+ {
+ if (component instanceof UIXColumn)
+ {
+ if (component.getFacetCount() > 0)
+ {
+ // visit the facet children without filtering for just UIXColumn children
+ for (UIComponent facetChild : component.getFacets().values())
+ {
+ if (UIXComponent.visitTree(getWrapped(), facetChild, callback))
+ return VisitResult.COMPLETE;
+ }
+
+ // visit the indexed children, recursively looking for more columns
+ for (UIComponent child : component.getChildren())
+ {
+ if (UIXComponent.visitTree(this, child, callback))
+ return VisitResult.COMPLETE;
+ }
+ }
+ }
+
+ // at this point, we either have already manually processed the UIXColumn's children, or
+ // the component wasn't a UIXColumn and shouldn't be processed
+ return VisitResult.REJECT;
+ }
+
+ private final VisitContext _wrapped;
+ }
+
+ /**
+ * VisitContext implementation that doesn't visit any of the Facets of
+ * UIXColumn children. This is used when stamping children
+ */
+ protected static final class NoColumnFacetsVisitContext extends VisitContextWrapper
+ {
+ NoColumnFacetsVisitContext(VisitContext wrapped)
+ {
+ _wrapped = wrapped;
+ }
+
+ @Override
+ public VisitContext getWrapped()
+ {
+ return _wrapped;
+ }
+
+ @Override
+ public VisitResult invokeVisitCallback(UIComponent component, VisitCallback callback)
+ {
+ if (component instanceof UIXColumn)
+ {
+ if (component.getChildCount() > 0)
+ {
+ // visit only the indexed children of the columns
+ for (UIComponent child : component.getChildren())
+ {
+ if (UIXComponent.visitTree(this, child, callback))
+ return VisitResult.COMPLETE;
+ }
+ }
+
+ return VisitResult.REJECT;
+ }
+ else
+ {
+ if (UIXComponent.visitTree(getWrapped(), component, callback))
+ return VisitResult.COMPLETE;
+ else
+ return VisitResult.REJECT;
+ }
+ }
+
+ private final VisitContext _wrapped;
+ }
+
+ /**
+ * Implementation used to visit each stamped row
+ */
+ private boolean _visitStampedColumnFacets(
+ VisitContext visitContext,
+ VisitCallback callback)
+ {
+ // visit the facets of the stamped columns
+ List<UIComponent> stamps = getStamps();
+
+ if (!stamps.isEmpty())
+ {
+ VisitContext columnVisitingContext = new ColumnFacetsOnlyVisitContext(visitContext);
+
+ for (UIComponent stamp : stamps)
+ {
+ if (UIXComponent.visitTree(columnVisitingContext, stamp, callback))
+ {
+ return true;
+ }
+ }
+ }
+
+ return false;
+ }
+
+
+ /**
+ * Visit the rows and children of the columns of the collection per row-index. This should
+ * not visit row index -1 (it will be perfomed in the visitTree method). The columns
+ * themselves should not be visited, only their children in this function.
+ * <p>
+ * Note that in Trinidad 1.2 this method does nothing, but it must be overridden. It is
+ * only being made empty in order to avoid an API change of forcing subclasses to implement
+ * this function, but visiting will not work without it being implemented. In Trinidad 2
+ * this method is abstract.
+ * </p>
+ *
+ * @param visitContext The visiting context
+ * @param callback The visit callback
+ * @return true if the visiting should stop
+ * @see #visitChildren(VisitContext, VisitCallback)
+ */
+ /*protected boolean visitData(
+ VisitContext visitContext,
+ VisitCallback callback)
+ {
+ return false;
+ }*/
+ protected abstract boolean visitData(
+ VisitContext visitContext,
+ VisitCallback callback);
+
+ /**
* Gets the CollectionModel to use with this component.
*
* @param createIfNull creates the collection model if necessary
@@ -1179,14 +1417,14 @@ public abstract class UIXCollection exte
};
}
-
+
//
// LocalRowKeyIndex implementation
//
/**
* Given a row index, check if a row is locally available
- * @param rowIndex index of row to check
+ * @param rowIndex index of row to check
* @return true if row is locally available
*/
public boolean isRowLocallyAvailable(int rowIndex)
@@ -1196,7 +1434,7 @@ public abstract class UIXCollection exte
/**
* Given a row key, check if a row is locally available
- * @param rowKey row key for the row to check
+ * @param rowKey row key for the row to check
* @return true if row is locally available
*/
public boolean isRowLocallyAvailable(Object rowKey)
@@ -1216,7 +1454,7 @@ public abstract class UIXCollection exte
/**
* Check if a range of rows is locally available starting from a row index
- * @param startIndex staring index for the range
+ * @param startIndex staring index for the range
* @param rowCount number of rows in the range
* @return true if range of rows is locally available
*/
@@ -1227,7 +1465,7 @@ public abstract class UIXCollection exte
/**
* Check if a range of rows is locally available starting from a row key
- * @param startRowKey staring row key for the range
+ * @param startRowKey staring row key for the range
* @param rowCount number of rows in the range
* @return true if range of rows is locally available
*/
@@ -1235,9 +1473,9 @@ public abstract class UIXCollection exte
{
return getCollectionModel().areRowsLocallyAvailable(startRowKey, rowCount);
}
-
+
/**
- * Convenient API to return a row count estimate. This method can be optimized
+ * Convenient API to return a row count estimate. This method can be optimized
* to avoid a data fetch which may be required to return an exact row count
* @return estimated row count
*/
@@ -1248,14 +1486,14 @@ public abstract class UIXCollection exte
/**
- * Helper API to determine if the row count returned from {@link #getEstimatedRowCount}
+ * Helper API to determine if the row count returned from {@link #getEstimatedRowCount}
* is EXACT, or an ESTIMATE
*/
public LocalRowKeyIndex.Confidence getEstimatedRowCountConfidence()
{
return getCollectionModel().getEstimatedRowCountConfidence();
}
-
+
/**
* clear all rows from the local cache
*/
@@ -1263,7 +1501,7 @@ public abstract class UIXCollection exte
{
getCollectionModel().clearLocalCache();
}
-
+
/**
* Clear the requested range of rows from the local cache
* @param startingIndex starting row index for the range to clear
@@ -1273,7 +1511,7 @@ public abstract class UIXCollection exte
{
getCollectionModel().clearCachedRows(startingIndex, rowsToClear);
}
-
+
/**
* Clear the requested range of rows from the local cache
* @param startingRowKey starting row key for the range to clear
@@ -1283,7 +1521,7 @@ public abstract class UIXCollection exte
{
getCollectionModel().clearCachedRows(startingRowKey, rowsToClear);
}
-
+
/**
* Clear a row from the local cache by row index
* @param index row index for the row to clear from the cache
@@ -1292,16 +1530,16 @@ public abstract class UIXCollection exte
{
getCollectionModel().clearCachedRow(index);
}
-
+
/**
* Clear a row from the local cache by row key
* @param rowKey row key for the row to clear from the cache
*/
public void clearCachedRow(Object rowKey)
{
- getCollectionModel().clearCachedRow(rowKey);
+ getCollectionModel().clearCachedRow(rowKey);
}
-
+
/**
* Indicates the caching strategy supported by the model
* @see LocalCachingStrategy
@@ -1311,7 +1549,7 @@ public abstract class UIXCollection exte
{
return getCollectionModel().getCachingStrategy();
}
-
+
/**
* override this method to place initialization code that must run