
package de.ivu.elect.business.gruppe.control;

import java.io.Serializable;

import de.ivu.elect.business.gruppe.entity.Gruppe;
import de.ivu.elect.business.gruppe.entity.GruppeSchluesselNormalisierungstyp;
import de.ivu.elect.business.konfiguration.entity.AbstractKonfigurationLoader;
import de.ivu.elect.business.konfiguration.entity.MandantKonfigurationWerte;
import de.ivu.elect.business.mandant.boundary.AbstractMandantDAO;
import de.ivu.elect.business.mandant.entity.AbstractMandant;
import de.ivu.elect.business.mandant.entity.EntityMitMandant;

public class PolitischeGruppeSchluesselNormalisierer implements Serializable {

  private static final long serialVersionUID = 1L;

  public void normalisiere(Gruppe gruppe, EntityMitMandant mandant, AbstractKonfigurationLoader konfigurationLoader, AbstractMandantDAO abstractMandantDAO) {
    if (gruppe.isPolitischeGruppe()) {
      gruppe.setSchluessel(normalisiere(gruppe.getSchluessel(), mandant, konfigurationLoader, abstractMandantDAO));
    }
  }

  public void normalisiere(Gruppe gruppe, AbstractKonfigurationLoader konfigurationLoader, AbstractMandantDAO abstractMandantDAO) {
    if (gruppe.isPolitischeGruppe()) {
      gruppe.setSchluessel(normalisiere(gruppe.getSchluessel(), gruppe, konfigurationLoader, abstractMandantDAO));
    }
  }

  public String normalisiere(String schluessel, EntityMitMandant mandant, AbstractKonfigurationLoader konfigurationLoader, AbstractMandantDAO abstractMandantDAO) {
    if (mandant==null || mandant.getMandant()==null) {
      // ELECT-12247
      return normalisiere(schluessel,
          konfigurationLoader.resolveEnumValue(AbstractMandant.getSystemMandant(abstractMandantDAO), MandantKonfigurationWerte.GRUPPE_SCHLUESSEL_NORMALISIEREN,
              GruppeSchluesselNormalisierungstyp.class));

    }
    return normalisiere(schluessel,
        konfigurationLoader.resolveEnumValue(mandant, MandantKonfigurationWerte.GRUPPE_SCHLUESSEL_NORMALISIEREN, GruppeSchluesselNormalisierungstyp.class));
  }

  protected String normalisiere(String schluessel, GruppeSchluesselNormalisierungstyp gruppeSchluesselNormalisierungstyp) {
    return gruppeSchluesselNormalisierungstyp.normalisiere(schluessel);
  }
}
