
package de.ivu.elect.presentation.interfaces;

import de.ivu.elect.business.exchange.control.WebServiceErreichbarStatus;
import de.ivu.elect.business.exchange.control.WebServiceStatus;
import de.ivu.elect.business.personenregister.boundary.AbstractPersonenregisterErreichbarPruefer;
import de.ivu.elect.business.personenregister.entity.PersonenregisterErreichbarStatus;
import de.ivu.elect.presentation.personenregister.PersonenregisterStatusTestInterface;

public abstract class AbstractPersonenregisterStatusTestInterface extends AbstractInterfacesStatusTestView implements PersonenregisterStatusTestInterface {

  private static final long serialVersionUID = 1L;

  private PersonenregisterErreichbarStatus personenregisterErreichbarStatus;

  @Override
  public WebServiceStatus getWebServiceStatus() {
    return getErreichbarStatus().getWebServiceStatus();
  }

  @Override
  public WebServiceErreichbarStatus getErreichbarStatus() {
    if (personenregisterErreichbarStatus == null) {
      personenregisterErreichbarStatus = getErreichbarPruefer().getErreichbarStatus(getMandant());
    }

    return personenregisterErreichbarStatus;
  }

  @Override
  public String getInvocationExceptionMessage() {
    return getLocalizedMessageOrDefault(getInvocationException());
  }

  @Override
  public String getInvocationExceptionCauses() {
    return getRawCausesOrDefault(getInvocationException());
  }

  @Override
  public Exception getInvocationException() {
    return getErreichbarStatus().getException();
  }

  protected abstract AbstractPersonenregisterErreichbarPruefer getErreichbarPruefer();
}
