001/*
002 * Licensed to the Apache Software Foundation (ASF) under one or more
003 * contributor license agreements.  See the NOTICE file distributed with
004 * this work for additional information regarding copyright ownership.
005 * The ASF licenses this file to You under the Apache License, Version 2.0
006 * (the "License"); you may not use this file except in compliance with
007 * the License.  You may obtain a copy of the License at
008 *
009 *      http://www.apache.org/licenses/LICENSE-2.0
010 *
011 * Unless required by applicable law or agreed to in writing, software
012 * distributed under the License is distributed on an "AS IS" BASIS,
013 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
014 * See the License for the specific language governing permissions and
015 * limitations under the License.
016 */
017package org.apache.wicket.util.visit;
018
019/**
020 * A filter that can be used to restrict the types of objects visited by the visitor
021 * 
022 * @author igor.vaynberg
023 */
024public interface IVisitFilter
025{
026        /**
027         * Controls whether or not the {@code object} will be visited
028         * 
029         * @param object
030         * @return {@code true} if the object should be visited
031         */
032        boolean visitObject(Object object);
033
034        /**
035         * Controls whether or not the {@code object}'s children will be visited
036         * 
037         * @param object
038         * @return {@code true} if the object's children should be visited
039         */
040        boolean visitChildren(Object object);
041
042        /**
043         * A visitor filter that allows all objects and their children to be visited
044         */
045        IVisitFilter ANY = new IVisitFilter()
046        {
047                /** {@inheritDoc} */
048                @Override
049                public boolean visitObject(final Object object)
050                {
051                        return true;
052                }
053
054                /** {@inheritDoc} */
055                @Override
056                public boolean visitChildren(final Object object)
057                {
058                        return true;
059                }
060        };
061}