org.apache.wicket.util.visit.Visit.java Source code

Java tutorial

Introduction

Here is the source code for org.apache.wicket.util.visit.Visit.java

Source

/*
 * Licensed to the Apache Software Foundation (ASF) under one or more
 * contributor license agreements.  See the NOTICE file distributed with
 * this work for additional information regarding copyright ownership.
 * The ASF licenses this file 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 KIND, either express or implied.
 * See the License for the specific language governing permissions and
 * limitations under the License.
 */
package org.apache.wicket.util.visit;

/**
 * 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
    }

    private R result;
    private Action action = Action.CONTINUE;

    /** {@inheritDoc} */
    @Override
    public void stop() {
        stop(null);
    }

    /** {@inheritDoc} */
    @Override
    public void stop(final R result) {
        action = Action.STOP;
        this.result = result;
    }

    /** {@inheritDoc} */
    @Override
    public void dontGoDeeper() {
        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;
    }

    /**
     * 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;
    }
}