
package de.ivu.elect.jee.protokollierung;

import java.util.Map;

import javax.persistence.PostLoad;
import javax.persistence.PostPersist;
import javax.persistence.PostRemove;
import javax.persistence.PostUpdate;

import de.ivu.elect.jee.entity.Entity;
import de.ivu.elect.jee.entity.customdata.CustomDataStorageEntity;

public class ProtokollCustomDataStorageEntityListener extends ProtokollEntityListener {

  @Override
  @PostLoad
  // Methode muss in dieser Klasse bleiben, da Annotation nicht vererbt wird
  public void postLoad(Object object) {
    super.postLoad(object);
  }

//  @Override
//  @PostRemove
//  // Methode muss in dieser Klasse bleiben, da Annotation nicht vererbt wird
//  public void postRemove(Object object) {
//    super.postRemove(object);
//  }

  @Override
  @PostPersist
  // Methode muss in dieser Klasse bleiben, da Annotation nicht vererbt wird
  public void postPersist(Object object) {
    super.postPersist(object);
  }

  @Override
  @PostUpdate
  // Methode muss in dieser Klasse bleiben, da Annotation nicht vererbt wird
  public void postUpdate(Object object) {
    super.postUpdate(object);
  }

  @Override
  protected void erzeugeAendernEintraege(Protokoll protokoll, Entity entity) {
    super.erzeugeAendernEintraege(protokoll, entity);
    CustomDataStorageEntity customDataEntity = (CustomDataStorageEntity) entity;
    Map<String, VorherNachherWert> werte = customDataEntity.getProtokollierteAttributeMitWertenVonCustomData();
    if (!werte.isEmpty()) {
      Eintrag.addAendernProtokollEintrag(protokoll, customDataEntity.getCustomData().getTechnicalEntity(), werte); // Änderungen zu fachlicher Entität speichern
    }

  }

  /**
   * Protokollieren für Änderungen ist genau dann aktiv, wenn es bei der fachlichen Entität aktiv ist
   */
  @Override
  protected boolean isProtokollierenFuerAenderungenAktiv(Entity entity) {
    if (super.isProtokollierenFuerAenderungenAktiv(entity)) {
      return true;
    }
    CustomDataStorageEntity customDataEntity = (CustomDataStorageEntity) entity;
    Map<String, VorherNachherWert> werte = customDataEntity.getProtokollierteAttributeMitWertenVonCustomData();
    return werte != null && !werte.isEmpty()
        && customDataEntity.getCustomData().getTechnicalEntity().isAenderungenProtokollieren();
  }
}
