You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@wicket.apache.org by iv...@apache.org on 2010/03/25 23:31:14 UTC
svn commit: r927613 - in /wicket/trunk/wicket-util: .settings/
src/main/java/org/apache/wicket/util/visit/
Author: ivaynberg
Date: Thu Mar 25 22:31:13 2010
New Revision: 927613
URL: http://svn.apache.org/viewvc?rev=927613&view=rev
Log:
javadoc for visitor stuff
Modified:
wicket/trunk/wicket-util/.settings/org.eclipse.jdt.core.prefs
wicket/trunk/wicket-util/src/main/java/org/apache/wicket/util/visit/ClassVisitFilter.java
wicket/trunk/wicket-util/src/main/java/org/apache/wicket/util/visit/IVisit.java
wicket/trunk/wicket-util/src/main/java/org/apache/wicket/util/visit/IVisitFilter.java
wicket/trunk/wicket-util/src/main/java/org/apache/wicket/util/visit/IVisitor.java
wicket/trunk/wicket-util/src/main/java/org/apache/wicket/util/visit/Visit.java
wicket/trunk/wicket-util/src/main/java/org/apache/wicket/util/visit/Visits.java
Modified: wicket/trunk/wicket-util/.settings/org.eclipse.jdt.core.prefs
URL: http://svn.apache.org/viewvc/wicket/trunk/wicket-util/.settings/org.eclipse.jdt.core.prefs?rev=927613&r1=927612&r2=927613&view=diff
==============================================================================
--- wicket/trunk/wicket-util/.settings/org.eclipse.jdt.core.prefs (original)
+++ wicket/trunk/wicket-util/.settings/org.eclipse.jdt.core.prefs Thu Mar 25 22:31:13 2010
@@ -1,6 +1,26 @@
-#Sun Mar 21 09:29:23 EET 2010
-eclipse.preferences.version=1
-org.eclipse.jdt.core.compiler.codegen.targetPlatform=1.5
-org.eclipse.jdt.core.compiler.compliance=1.5
-org.eclipse.jdt.core.compiler.problem.forbiddenReference=warning
-org.eclipse.jdt.core.compiler.source=1.5
+#Thu Mar 25 09:04:49 PDT 2010
+eclipse.preferences.version=1
+org.eclipse.jdt.core.compiler.codegen.inlineJsrBytecode=enabled
+org.eclipse.jdt.core.compiler.codegen.targetPlatform=1.5
+org.eclipse.jdt.core.compiler.codegen.unusedLocal=preserve
+org.eclipse.jdt.core.compiler.compliance=1.5
+org.eclipse.jdt.core.compiler.debug.lineNumber=generate
+org.eclipse.jdt.core.compiler.debug.localVariable=generate
+org.eclipse.jdt.core.compiler.debug.sourceFile=generate
+org.eclipse.jdt.core.compiler.doc.comment.support=enabled
+org.eclipse.jdt.core.compiler.problem.assertIdentifier=error
+org.eclipse.jdt.core.compiler.problem.enumIdentifier=error
+org.eclipse.jdt.core.compiler.problem.forbiddenReference=warning
+org.eclipse.jdt.core.compiler.problem.invalidJavadoc=warning
+org.eclipse.jdt.core.compiler.problem.invalidJavadocTags=enabled
+org.eclipse.jdt.core.compiler.problem.invalidJavadocTagsDeprecatedRef=enabled
+org.eclipse.jdt.core.compiler.problem.invalidJavadocTagsNotVisibleRef=enabled
+org.eclipse.jdt.core.compiler.problem.invalidJavadocTagsVisibility=public
+org.eclipse.jdt.core.compiler.problem.missingJavadocComments=warning
+org.eclipse.jdt.core.compiler.problem.missingJavadocCommentsOverriding=disabled
+org.eclipse.jdt.core.compiler.problem.missingJavadocCommentsVisibility=public
+org.eclipse.jdt.core.compiler.problem.missingJavadocTagDescription=all_standard_tags
+org.eclipse.jdt.core.compiler.problem.missingJavadocTags=warning
+org.eclipse.jdt.core.compiler.problem.missingJavadocTagsOverriding=disabled
+org.eclipse.jdt.core.compiler.problem.missingJavadocTagsVisibility=public
+org.eclipse.jdt.core.compiler.source=1.5
Modified: wicket/trunk/wicket-util/src/main/java/org/apache/wicket/util/visit/ClassVisitFilter.java
URL: http://svn.apache.org/viewvc/wicket/trunk/wicket-util/src/main/java/org/apache/wicket/util/visit/ClassVisitFilter.java?rev=927613&r1=927612&r2=927613&view=diff
==============================================================================
--- wicket/trunk/wicket-util/src/main/java/org/apache/wicket/util/visit/ClassVisitFilter.java (original)
+++ wicket/trunk/wicket-util/src/main/java/org/apache/wicket/util/visit/ClassVisitFilter.java Thu Mar 25 22:31:13 2010
@@ -1,19 +1,33 @@
package org.apache.wicket.util.visit;
+/**
+ * {@link IVisitFilter} that restricts visitors to only visiting objects of the
+ * specified class
+ *
+ * @author igor.vaynberg
+ */
public class ClassVisitFilter implements IVisitFilter
{
private final Class<?> clazz;
+ /**
+ * Constructor
+ *
+ * @param clazz
+ * class of objects that visitors should be restricted to
+ */
public ClassVisitFilter(Class<?> clazz)
{
this.clazz = clazz;
}
+ /** {@inheritDoc} */
public boolean visitChildren(Object object)
{
return true;
}
+ /** {@inheritDoc} */
public boolean visitObject(Object object)
{
return clazz.isAssignableFrom(object.getClass());
Modified: wicket/trunk/wicket-util/src/main/java/org/apache/wicket/util/visit/IVisit.java
URL: http://svn.apache.org/viewvc/wicket/trunk/wicket-util/src/main/java/org/apache/wicket/util/visit/IVisit.java?rev=927613&r1=927612&r2=927613&view=diff
==============================================================================
--- wicket/trunk/wicket-util/src/main/java/org/apache/wicket/util/visit/IVisit.java (original)
+++ wicket/trunk/wicket-util/src/main/java/org/apache/wicket/util/visit/IVisit.java Thu Mar 25 22:31:13 2010
@@ -1,10 +1,31 @@
package org.apache.wicket.util.visit;
+/**
+ * Allows visitors to control the visit/traversal
+ *
+ * @author igor.vaynberg
+ *
+ * @param <R>
+ * type of object the visitor is expected to return, if none use
+ * {@link Void}
+ */
public interface IVisit<R>
{
+ /**
+ * Stops the visit/traversal
+ */
void stop();
+ /**
+ * Stops the visit/traversal and returns {@code result}
+ *
+ * @param result
+ */
void stop(R result);
+ /**
+ * Prevents the visitor from visiting any children of the object currently
+ * visited
+ */
void dontGoDeeper();
}
Modified: wicket/trunk/wicket-util/src/main/java/org/apache/wicket/util/visit/IVisitFilter.java
URL: http://svn.apache.org/viewvc/wicket/trunk/wicket-util/src/main/java/org/apache/wicket/util/visit/IVisitFilter.java?rev=927613&r1=927612&r2=927613&view=diff
==============================================================================
--- wicket/trunk/wicket-util/src/main/java/org/apache/wicket/util/visit/IVisitFilter.java (original)
+++ wicket/trunk/wicket-util/src/main/java/org/apache/wicket/util/visit/IVisitFilter.java Thu Mar 25 22:31:13 2010
@@ -1,22 +1,45 @@
package org.apache.wicket.util.visit;
+/**
+ * A filter that can be used to restrict the types of objects visited by the
+ * visitor
+ *
+ * @author igor.vaynberg
+ */
public interface IVisitFilter
{
+ /**
+ * Controls whether or not the {@code object} will be visited
+ *
+ * @param object
+ * @return {@code true} if the object should be visited
+ */
boolean visitObject(Object object);
+ /**
+ * Controls whether or not the {@code object}'s children will be visited
+ *
+ * @param object
+ * @return {@code true} if the object's children should be visited
+ */
boolean visitChildren(Object object);
+ /**
+ * A visitor filter that allows all objects and their children to be visited
+ */
public static IVisitFilter ANY = new IVisitFilter()
{
+ /** {@inheritDoc} */
public boolean visitObject(Object object)
{
return true;
}
+ /** {@inheritDoc} */
public boolean visitChildren(Object object)
{
return true;
}
};
-
+
}
Modified: wicket/trunk/wicket-util/src/main/java/org/apache/wicket/util/visit/IVisitor.java
URL: http://svn.apache.org/viewvc/wicket/trunk/wicket-util/src/main/java/org/apache/wicket/util/visit/IVisitor.java?rev=927613&r1=927612&r2=927613&view=diff
==============================================================================
--- wicket/trunk/wicket-util/src/main/java/org/apache/wicket/util/visit/IVisitor.java (original)
+++ wicket/trunk/wicket-util/src/main/java/org/apache/wicket/util/visit/IVisitor.java Thu Mar 25 22:31:13 2010
@@ -2,24 +2,23 @@ package org.apache.wicket.util.visit;
/**
- * Generic component visitor interface for component traversals.
+ * Generic visitor interface for traversals.
*
* @param <T>
- * The component
+ * type of object to be visited
+ * @param <R>
+ * type of value the visitor should return as the result of the
+ * visit/traversal
*/
public interface IVisitor<T, R>
{
/**
- * Called at each component in a visit.
+ * Called at each object in a visit.
*
- * @param component
- * The component
- * @param traversal
- * An {@link IVisit} which state will be modified depending on
- * the visitation. CONTINUE_TRAVERSAL (null) if the traversal
- * should continue, or a non-null return value for the traversal
- * method if it should stop. If no return value is useful, the
- * generic non-null value STOP_TRAVERSAL can be used.
+ * @param object
+ * Object being visited
+ * @param visit
+ * Object used to control the visit/traversal
*/
- public void component(T component, IVisit<R> visit);
+ public void component(T object, IVisit<R> visit);
}
\ No newline at end of file
Modified: wicket/trunk/wicket-util/src/main/java/org/apache/wicket/util/visit/Visit.java
URL: http://svn.apache.org/viewvc/wicket/trunk/wicket-util/src/main/java/org/apache/wicket/util/visit/Visit.java?rev=927613&r1=927612&r2=927613&view=diff
==============================================================================
--- wicket/trunk/wicket-util/src/main/java/org/apache/wicket/util/visit/Visit.java (original)
+++ wicket/trunk/wicket-util/src/main/java/org/apache/wicket/util/visit/Visit.java Thu Mar 25 22:31:13 2010
@@ -1,50 +1,85 @@
package org.apache.wicket.util.visit;
-public class Visit<R> implements IVisit<R>
- {
- private static enum Action {
- CONTINUE, CONTINUE_BUT_DONT_GO_DEEPER, STOP;
- }
-
- private R result;
- private Action action = Action.CONTINUE;
- public void stop()
- {
- stop(null);
- }
+/**
+ * Implementation of {@link IVisit} used by traversal algorithms
+ *
+ * @author igor.vaynberg
+ *
+ * @param <R>
+ * type of object that should be returned by the visit/traversal
+ */
+public class Visit<R> implements IVisit<R>
+{
+ private static enum Action {
+ CONTINUE, CONTINUE_BUT_DONT_GO_DEEPER, STOP;
+ }
- public void stop(R result)
- {
- action = Action.STOP;
- this.result = result;
- }
+ private R result;
+ private Action action = Action.CONTINUE;
- public void dontGoDeeper()
- {
- action = Action.CONTINUE_BUT_DONT_GO_DEEPER;
- }
+ /** {@inheritDoc} */
+ public void stop()
+ {
+ stop(null);
+ }
- public boolean isStopped()
- {
- return action == Action.STOP;
- }
+ /** {@inheritDoc} */
+ public void stop(R result)
+ {
+ action = Action.STOP;
+ this.result = result;
+ }
- public boolean isContinue()
- {
- return action == Action.CONTINUE;
- }
+ /** {@inheritDoc} */
+ public void dontGoDeeper()
+ {
+ action = Action.CONTINUE_BUT_DONT_GO_DEEPER;
+ }
- public boolean isDontGoDeeper()
- {
- return action == Action.CONTINUE_BUT_DONT_GO_DEEPER;
- }
+ /**
+ * Checks if the visit/traversal has been stopped
+ *
+ * @return {@code true} if the visit/traversal has been stopped
+ */
+ public boolean isStopped()
+ {
+ return action == Action.STOP;
+ }
- public R getResult()
- {
- return result;
- }
+ /**
+ * Checks if the visit/traversal should continue
+ *
+ * @return {@code true} if the visit/traversal should continue
+ */
+ public boolean isContinue()
+ {
+ return action == Action.CONTINUE;
+ }
+ /**
+ * Checks if the visit/traversal has been stopped from visiting children of
+ * the currently visited object
+ *
+ * @return {@code true} if the visit/traversal should not visit children of
+ * the currently visited object
+ */
+ public boolean isDontGoDeeper()
+ {
+ return action == Action.CONTINUE_BUT_DONT_GO_DEEPER;
+ }
+ /**
+ * Gets the result of the visit/traversal. This value is set using
+ * {@link #stop(Object)} or remains {@code null} if visit/traversal has
+ * ended in any other way
+ *
+ * @return value that should be returned to the method that initiated the
+ * visit/traversal
+ */
+ public R getResult()
+ {
+ return result;
}
-
\ No newline at end of file
+
+}
Modified: wicket/trunk/wicket-util/src/main/java/org/apache/wicket/util/visit/Visits.java
URL: http://svn.apache.org/viewvc/wicket/trunk/wicket-util/src/main/java/org/apache/wicket/util/visit/Visits.java?rev=927613&r1=927612&r2=927613&view=diff
==============================================================================
--- wicket/trunk/wicket-util/src/main/java/org/apache/wicket/util/visit/Visits.java (original)
+++ wicket/trunk/wicket-util/src/main/java/org/apache/wicket/util/visit/Visits.java Thu Mar 25 22:31:13 2010
@@ -3,11 +3,38 @@ package org.apache.wicket.util.visit;
import java.util.Iterator;
+/**
+ * Utility class that contains visitor/traversal related code
+ */
public class Visits
{
- // TODO replace class argument with IVisitFilter
- public static final <S, R> R visitChildren(Iterable<?> container,
- final IVisitor<S, R> visitor, IVisitFilter filter)
+ /** Constructor */
+ private Visits()
+ {
+
+ }
+
+ /**
+ * Visits children of the specified {@link Iterable} pre-order (parent
+ * first). Children are determined by calling {@link Iterable#iterator()}.
+ *
+ * @param <S>
+ * the type of object that will be visited, notice that {@code
+ * container} is not declared as {@code Iterable<S>} because it
+ * may return a generalization of {@code S}
+ * @param <R>
+ * the type of object that should be returned from the visitor,
+ * use {@link Void} if no return value is needed
+ * @param container
+ * object whose children will be visited
+ * @param visitor
+ * the visitor
+ * @param filter
+ * filter used to limit the types of objects that will be visited
+ * @return return value from the {@code visitor} or {@code null} if none
+ */
+ public static final <S, R> R visitChildren(Iterable<?> container, final IVisitor<S, R> visitor,
+ IVisitFilter filter)
{
Visit<R> visit = new Visit<R>();
visitChildren(container, visitor, filter, visit);
@@ -15,7 +42,7 @@ public class Visits
}
- private static final <S, R> void visitChildren(Iterable<?> container,
+ private static final <S, R> void visitChildren(Iterable<?> container,
final IVisitor<S, R> visitor, IVisitFilter filter, Visit<R> visit)
{
if (visitor == null)
@@ -51,10 +78,11 @@ public class Visits
}
// If child is a container
- if (!visit.isDontGoDeeper() && (child instanceof Iterable<?>)&&filter.visitChildren(child))
+ if (!visit.isDontGoDeeper() && (child instanceof Iterable<?>)
+ && filter.visitChildren(child))
{
// visit the children in the container
- visitChildren((Iterable<?>)child, visitor, filter, visit);
+ visitChildren((Iterable<?>)child, visitor, filter, visit);
if (visit.isStopped())
{
@@ -67,46 +95,72 @@ public class Visits
}
/**
- * Traverses all child components in this container, calling the visitor's
- * visit method at each one.
+ * Visits children of the specified {@link Iterable} pre-order (parent
+ * first). Children are determined by calling {@link Iterable#iterator()}.
*
+ * @param <S>
+ * the type of object that will be visited, notice that {@code
+ * container} is not declared as {@code Iterable<S>} because it
+ * may return a generalization of {@code S}
+ * @param <R>
+ * the type of object that should be returned from the visitor,
+ * use {@link Void} if no return value is needed
+ * @param container
+ * object whose children will be visited
* @param visitor
- * The visitor to call back to
- * @return The return value from a visitor which halted the traversal, or
- * null if the entire traversal occurred
+ * the visitor
+ * @return return value from the {@code visitor} or {@code null} if none
*/
- public static final <S, R> R visitChildren(Iterable<?> visitable, final IVisitor<S, R> visitor)
+ public static final <S, R> R visitChildren(Iterable<?> container, final IVisitor<S, R> visitor)
{
- return visitChildren(visitable, visitor, IVisitFilter.ANY);
+ return visitChildren(container, visitor, IVisitFilter.ANY);
}
/**
- * Visits any form components inside component if it is a container, or
- * component itself if it is itself a form component
- *
- * @param component
- * starting point of the traversal
- *
+ * Visits the specified object and any of its children using a post-order
+ * (child first) traversal. Children are determined by calling
+ * {@link Iterable#iterator()} if the object implements {@link Iterable}.
+ *
+ * @param <S>
+ * the type of object that will be visited, notice that {@code
+ * container} is not declared as {@code Iterable<S>} because it
+ * may return a generalization of {@code S}
+ * @param <R>
+ * the type of object that should be returned from the visitor,
+ * use {@link Void} if no return value is needed
+ * @param root
+ * root object that will be visited
* @param visitor
- * The visitor to call
+ * the visitor
+ * @return return value from the {@code visitor} or {@code null} if none
*/
- public static final <S, R> R visitComponentsPostOrder(Iterable<?> component,
+ public static final <S, R> R visitComponentsPostOrder(S root,
final org.apache.wicket.util.visit.IVisitor<S, R> visitor)
{
- return visitComponentsPostOrder(component, visitor, IVisitFilter.ANY);
+ return visitComponentsPostOrder(root, visitor, IVisitFilter.ANY);
}
/**
- * Visits any form components inside component if it is a container, or
- * component itself if it is itself a form component
- *
- * @param component
- * starting point of the traversal
- *
+ * Visits the specified object and any of its children using a post-order
+ * (child first) traversal. Children are determined by calling
+ * {@link Iterable#iterator()} if the object implements {@link Iterable}.
+ *
+ * @param <S>
+ * the type of object that will be visited, notice that {@code
+ * container} is not declared as {@code Iterable<S>} because it
+ * may return a generalization of {@code S}
+ * @param <R>
+ * the type of object that should be returned from the visitor,
+ * use {@link Void} if no return value is needed
+ * @param root
+ * root object that will be visited
* @param visitor
- * The visitor to call
+ * the visitor
+ * @param filter
+ * filter used to limit the types of objects that will be visited
+ * @return return value from the {@code visitor} or {@code null} if none
*/
- public static final <S, R> R visitComponentsPostOrder(Object component,
+ public static final <S, R> R visitComponentsPostOrder(Object root,
final org.apache.wicket.util.visit.IVisitor<S, R> visitor, IVisitFilter filter)
{
if (visitor == null)
@@ -115,16 +169,11 @@ public class Visits
}
Visit<R> visit = new Visit<R>();
- visitComponentsPostOrderHelper(component, visitor, filter, visit);
+ visitComponentsPostOrderHelper(root, visitor, filter, visit);
return visit.getResult();
}
- /**
- *
- * @param component
- * @param visitor
- * @return Object
- */
+
private static final <S, R> void visitComponentsPostOrderHelper(Object component,
final org.apache.wicket.util.visit.IVisitor<S, R> visitor, IVisitFilter filter,
Visit<R> visit)
@@ -142,7 +191,7 @@ public class Visits
final Object child = iterator.next();
if (child instanceof Iterable<?>)
{
- visitComponentsPostOrderHelper((Iterable<?>)child, visitor, filter,
+ visitComponentsPostOrderHelper(child, visitor, filter,
childTraversal);
if (childTraversal.isStopped())
{