
package de.ivu.elect.exchange.gebietsbaum.mapper;

import java.io.Serializable;
import java.util.Map;

import javax.inject.Inject;

import de.ivu.elect.business.gebietsbaum.boundary.GebietFactory;
import de.ivu.elect.business.gebietsbaum.entity.Gebiet;
import de.ivu.elect.business.gebietsbaum.entity.Gebietsart;
import de.ivu.elect.interfaces.core.GebietReferenz;
import de.ivu.elect.interfaces.core.GruppeReferenz;

public class GebietMapperUtil implements Serializable {

  private static final long serialVersionUID = 1L;

  @Inject
  private transient GebietFactory gebietFactory;

  public GebietMapperUtil() {
    super();
  }

  public GebietMapperUtil(GebietFactory gebietFactory) {
    super();

    this.gebietFactory = gebietFactory;
  }

  public GruppeReferenz createGruppeReferenz(String schluessel) {
    GruppeReferenz result = new GruppeReferenz();
    result.setSchluessel(schluessel);

    return result;
  }

  public GebietReferenz createGebietReferenz(String nummer, String gebietsart) {
    GebietReferenz result = new GebietReferenz();
    result.setNummer(nummer);
    result.setGebietsart(gebietsart);

    return result;
  }

  public GebietReferenz createGebietReferenz(Gebiet gebiet) {
    return createGebietReferenz(gebiet.getNummer(), gebiet.getGebietsart().getName());
  }

  public Gebiet createGebiet(GebietReferenz gebietReferenz, Map<GebietReferenz, Gebiet> gebieteNachReferenz) {
    if (gebietReferenz == null) {
      return null;
    }

    Gebiet result = gebieteNachReferenz.get(gebietReferenz);

    if (result == null) {
      Gebietsart gebietsart = new Gebietsart();
      gebietsart.setName(gebietReferenz.getGebietsart());

      result = gebietFactory.create();
      result.setNummer(gebietReferenz.getNummer());
      result.setGebietsart(gebietsart);

      gebieteNachReferenz.put(gebietReferenz, result);
    }

    return result;
  }
}
