it.tidalwave.bluebill.taxonomy.spi.DefaultTaxonomyTraverser Maven / Gradle / Ivy
/***********************************************************************************************************************
*
* blueBill Core - open source birding
* Copyright (C) 2009-2011 by Tidalwave s.a.s. (http://www.tidalwave.it)
*
***********************************************************************************************************************
*
* Licensed 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.
*
***********************************************************************************************************************
*
* WWW: http://bluebill.tidalwave.it
* SCM: https://java.net/hg/bluebill~core-src
*
**********************************************************************************************************************/
package it.tidalwave.bluebill.taxonomy.spi;
import javax.annotation.Nonnull;
import it.tidalwave.bluebill.taxonomy.Taxon;
import it.tidalwave.bluebill.taxonomy.Taxonomy;
import it.tidalwave.bluebill.taxonomy.TaxonomyTraverser;
import it.tidalwave.bluebill.taxonomy.TaxonomyVisitor;
/***********************************************************************************************************************
*
* A default implementation of {@link TaxonomyTraverser}.
*
* @author Fabrizio Giudici
* @version $Id$
*
**********************************************************************************************************************/
public final class DefaultTaxonomyTraverser implements TaxonomyTraverser
{
@Nonnull
private final Taxonomy taxonomy;
public DefaultTaxonomyTraverser (final @Nonnull Taxonomy taxonomy)
{
this.taxonomy = taxonomy;
}
public void accept (final @Nonnull TaxonomyVisitor visitor)
{
accept(taxonomy.getTopTaxon(), visitor);
}
public void accept (final @Nonnull Taxon taxon, final @Nonnull TaxonomyVisitor visitor)
{
visitor.preVisit(taxon);
visitor.visit(taxon);
for (final Taxon subTaxon : taxon.findSubTaxa().results())
{
accept(subTaxon, visitor);
}
visitor.postVisit(taxon);
}
}