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

import java.util.List;
import java.util.Map;

import de.ivu.elect.business.gebietsbaum.entity.Gebiet;
import de.ivu.elect.jee.entity.Entity;
import de.ivu.elect.jee.entity.EntityContainer;
import de.ivu.elect.jee.entity.tk.EntityTK;
import de.ivu.elect.jee.entity.tk.EntityUK;


import static org.apache.commons.lang3.StringUtils.isNotBlank;

@SuppressWarnings("rawtypes")
public class ErgebnisKonfliktLosoption implements Entity {

  private static final long serialVersionUID = 1L;

  private final Entity< ? , ? > entity;
  private final String losoptionName;
  private final Gebiet gebiet;

  public ErgebnisKonfliktLosoption(Entity< ? , ? > entity, String losoptionName, Gebiet gebiet) {
    this.entity = entity;
    this.losoptionName = losoptionName;
    this.gebiet = gebiet;
  }

  public boolean hasLosoptionName() {
    return isNotBlank(getLosoptionName());
  }

  public String getLosoptionName() {
    return losoptionName;
  }

  public boolean hasGebiet() {
    return getGebiet() != null;
  }

  public Gebiet getGebiet() {
    return gebiet;
  }

  @Override
  public Object getPk() {
    return entity.getPk();
  }

  @Override
  public Long getId() {
    return entity.getId();
  }

  @Override
  public EntityUK getUk() {
    return null;
  }

  @Override
  public Class getEntityClass() {
    return entity.getClass();
  }

  @Override
  public EntityTK getTk() {
    return entity.getTk();
  }

  @Override
  public String getEntityTechnicalName() {
    return entity.getEntityTechnicalName();
  }

  @Override
  public boolean isAenderungenProtokollieren() {
    return entity.isAenderungenProtokollieren();
  }

  @Override
  public Map getProtokollierteAttributeMitWerten() {
    return entity.getProtokollierteAttributeMitWerten();
  }


  @Override
  public void resetProtokollierteAttribute() {
    entity.resetProtokollierteAttribute();
  }

  @Override
  public List getFachlichAbhaengigeEntitaeten() {
    return entity.getFachlichAbhaengigeEntitaeten();
  }

  @Override
  public boolean isInstanceOf(Class clazz) {
    return entity.isInstanceOf(clazz);
  }

  @Override
  @SuppressWarnings("unchecked")
  public EntityContainer castTo(Class clazz) {
    return entity.castTo(clazz);
  }

  @Override
  public int hashCode() {
    final int prime = 31;
    int result = 1;

    result = prime * result + (entity == null ? 0 : entity.hashCode());

    return result;
  }

  @Override
  public boolean equals(Object obj) {
    if (this == obj) {
      return true;
    }

    if (obj == null) {
      return false;
    }

    if (getClass() != obj.getClass()) {
      return false;
    }

    ErgebnisKonfliktLosoption other = (ErgebnisKonfliktLosoption) obj;

    if (entity == null) {
      if (other.entity != null) {
        return false;
      }
    } else if (!entity.equals(other.entity)) {
      return false;
    }

    return true;
  }

  @Override
  public String getBaseClassName() {
    return getClass().getName();
  }

  @Override
  public void copyEntityAttributesToOtherEntity(Entity entity) {
    throw new UnsupportedOperationException();
  }

  @Override
  public void setProtokollierteAttributeMitWerten(Map map) {
    throw new UnsupportedOperationException();
  }


}
