
package de.ivu.elect.business.datei.entity;

import de.ivu.elect.business.exchange.entity.ImportStatus;
import de.ivu.elect.business.mandant.entity.EntityMitMandant;
import de.ivu.elect.business.security.UseCasePermission;
import de.ivu.elect.business.security.control.ElectCommonPrincipal;

public abstract class AbstractDateiImport implements DateiImportBase, EntityMitMandant, EntityMitDatei {

  private static final long serialVersionUID = 1L;

  protected AbstractDateiImport() {
    super();
  }

  public void ablehnen() {
    setImportStatus(ImportStatus.ABGELEHNT);
  }

  public boolean isFormatFestlegenMoeglich() {
    return isHochgeladen() || isFormatFestgelegt();
  }

  public boolean isReImportMoeglich() {
    return isImportiert() || isAbgelehnt();
  }

  public boolean isHochgeladen() {
    return ImportStatus.HOCHGELADEN.equals(getImportStatus());
  }

  public boolean isImportierenMoeglich() {
    return ImportStatus.FORMAT_FESTGELEGT.equals(getImportStatus());
  }

  public boolean isFormatFestgelegt() {
    return ImportStatus.FORMAT_FESTGELEGT.equals(getImportStatus());
  }

  public boolean isImportiert() {
    return ImportStatus.IMPORTIERT.equals(getImportStatus());
  }

  public boolean isAbgelehnt() {
    return ImportStatus.ABGELEHNT.equals(getImportStatus());
  }

  public boolean isLoeschenMoeglich(ElectCommonPrincipal principal) {
    return !isImportiert() || principal.hasUseCasePermission(UseCasePermission.IMPORTIERTE_DATEIEN_LOESCHEN);
  }

  public boolean isAblehenMoeglich() {
    return isHochgeladen() || isFormatFestgelegt();
  }

  @Override
  public EntityMitMandant getParent() {
    return getDatei();
  }
}
