001package io.ebeaninternal.dbmigration.model.visitor;
002
003import io.ebeaninternal.api.SpiEbeanServer;
004import io.ebeaninternal.server.deploy.BeanDescriptor;
005import io.ebeaninternal.server.deploy.visitor.BeanPropertyVisitor;
006import io.ebeaninternal.server.deploy.visitor.VisitProperties;
007
008import java.util.List;
009
010/**
011 * Makes use of BeanVisitor and PropertyVisitor to navigate BeanDescriptors
012 * and their properties.
013 */
014public class VisitAllUsing extends VisitProperties {
015
016  private final BeanVisitor visitor;
017
018  private final List<BeanDescriptor<?>> descriptors;
019
020  /**
021   * Visit all the descriptors for a given server.
022   */
023  public VisitAllUsing(BeanVisitor visitor, SpiEbeanServer server) {
024    this(visitor, server.getBeanDescriptors());
025  }
026
027  /**
028   * Visit all the descriptors in the list.
029   */
030  public VisitAllUsing(BeanVisitor visitor, List<BeanDescriptor<?>> descriptors) {
031    this.visitor = visitor;
032    this.descriptors = descriptors;
033  }
034
035  public void visitAllBeans() {
036    for (BeanDescriptor<?> desc : descriptors) {
037      if (desc.isBaseTable()) {
038        visitBean(desc, visitor);
039      }
040    }
041  }
042
043  /**
044   * Visit the bean using a visitor.
045   */
046  protected void visitBean(BeanDescriptor<?> desc, BeanVisitor visitor) {
047    BeanPropertyVisitor propertyVisitor = visitor.visitBean(desc);
048    if (propertyVisitor != null) {
049      visitProperties(desc, propertyVisitor);
050    }
051  }
052
053}