
package de.ivu.elect.presentation.personenpruefung.action;

import java.util.ArrayList;
import java.util.Collection;

import org.primefaces.event.SelectEvent;

import de.ivu.elect.business.personenpruefung.entity.PersonenKonflikt;
import de.ivu.elect.jee.presentation.action.AbstractActionMenuModelBuilder;
import de.ivu.elect.jee.presentation.action.ActionEntry;

public abstract class AbstractPersonenKonfliktSearchActionMenu extends AbstractActionMenuModelBuilder<PersonenKonflikt> {

  private static final long serialVersionUID = 1L;

  public AbstractPersonenKonfliktSearchActionMenu() {
    super();
  }

  @Override
  public void onRowDblselect(SelectEvent event) {
    Object target = event.getObject();

    if (target != null && target instanceof PersonenKonflikt) {
      onRowDblselect(event, (PersonenKonflikt) target);
    }
  }

  private void onRowDblselect(SelectEvent event, PersonenKonflikt personenKonflikt) {
    for (AbstractPersonenKonfliktAufloesenAction personenKonfliktAufloesenAction : getPersonenKonfliktAufloesenActions()) {
      if (personenKonfliktAufloesenAction.getKonfliktArt().equals(personenKonflikt.getPersonenKonfliktArt())) {
        personenKonfliktAufloesenAction.onRowDblselect(event);

        return;
      }
    }

    throw new IllegalStateException("Keine Action für PersonenKonfliktArt " + personenKonflikt.getPersonenKonfliktArt() + " gefunden!");
  }

  private Collection<AbstractPersonenKonfliktAufloesenAction> getPersonenKonfliktAufloesenActions() {
    Collection<AbstractPersonenKonfliktAufloesenAction> result = new ArrayList<>();

    for (ActionEntry<PersonenKonflikt> action : getActionEntriesExklusiveProtokollActionSorted()) {
      if (action instanceof AbstractPersonenKonfliktAufloesenAction) {
        result.add((AbstractPersonenKonfliktAufloesenAction) action);
      }
    }

    return result;
  }
}
