
package de.ivu.elect.presentation.gebietsbaum.tree;

import java.io.Serializable;

import javax.inject.Inject;

import de.ivu.elect.business.gebietsbaum.boundary.GebietSessionSelect;
import de.ivu.elect.business.gebietsbaum.entity.Gebiet;
import de.ivu.elect.business.wahl.boundary.WahlSessionSelector;
import de.ivu.elect.business.wahl.boundary.WahlterminSessionSelect;
import de.ivu.elect.business.wahl.entity.Wahl;
import de.ivu.elect.business.wahl.entity.Wahltermin;
import de.ivu.elect.presentation.security.GebietSecurity;

public abstract class AbstractGebietsbaumTreeBuilder implements Serializable {

  private static final long serialVersionUID = 1L;

  @Inject
  protected transient WahlSessionSelector wahlSelect;

  @Inject
  protected transient WahlterminSessionSelect wahlterminSelect;

  @Inject
  protected transient GebietSessionSelect gebietSelect;

  @Inject
  protected transient GebietsbaumTreeNodeIconResolver gebietsbaumTreeNodeIconResolver;

  @Inject
  protected transient GebietSecurity gebietSecurity;

  public abstract boolean isDynamic();

  public abstract GebietsbaumTreeModel buildModel();

  protected GebietsbaumTreeModel buildEmptyModel() {
    return new GebietsbaumTreeModel(null, null);
  }

  protected boolean isWahlSelected() {
    return wahlSelect.isSelected();
  }

  protected Wahl getWahlSelected() {
    return wahlSelect.getEntity();
  }

  protected boolean isWahlterminSelected() {
    return wahlterminSelect.isSelected();
  }

  protected Wahltermin getWahlterminSelected() {
    return wahlterminSelect.getEntity();
  }

  protected boolean isGebietSelected() {
    return gebietSelect.isSelected();
  }

  protected Gebiet getGebietSelected() {
    return gebietSelect.getEntity();
  }

  public abstract void reset();
}
