
package de.ivu.elect.presentation.benutzerverwaltung;

import java.util.HashSet;
import java.util.Map;
import java.util.Set;

import javax.enterprise.context.RequestScoped;
import javax.inject.Inject;
import javax.inject.Named;

import de.ivu.elect.business.benutzerverwaltung.entity.BenutzerEinsatzort;
import de.ivu.elect.business.benutzerverwaltung.entity.Rolle;
import de.ivu.elect.business.benutzerverwaltung.entity.RollePickListProperty;
import de.ivu.elect.business.benutzerverwaltung.entity.RolleTyp;
import de.ivu.elect.business.security.UseCasePermission;
import de.ivu.elect.jee.presentation.dynamicform.FormBuilder;
import de.ivu.elect.presentation.View;
import de.ivu.elect.presentation.benutzerverwaltung.form.BenutzerEinsatzortViewFormBuilder;
import de.ivu.elect.presentation.hilfe.OnlineHilfeId;

/**
 *  on 08.02.2017.
 */
@OnlineHilfeId(value = "662", mehrfachVergebenOk = true)
@RequestScoped
@Named(AbstractBenutzerEinsatzortCreateNoScopeView.COMPONENT_NAME)
@View(viewId = AbstractBenutzerEinsatzortCreateNoScopeView.VIEW_ID, useCase = UseCasePermission.BENUTZER_EINSATZORT_CREATE)
public class BenutzerEinsatzortCreateView extends AbstractBenutzerEinsatzortCreateView {

  private static final long serialVersionUID = 1L;

  @Inject
  private BenutzerEinsatzortViewFormBuilder benutzerEinsatzortViewFormBuilder;

  public BenutzerEinsatzortCreateView() {
    super();
  }

  @Override
  protected void setEntity(BenutzerEinsatzort entity) {
    entity.setMandant(getMandant());
    super.setEntity(entity);
  }

  @Override
  protected void addProperties(FormBuilder formBuilder, BenutzerEinsatzort entity) {
    benutzerEinsatzortViewFormBuilder.addProperties(formBuilder, entity);
  }

  @Override
  protected void callSave(BenutzerEinsatzort entity) {
    Map<RolleTyp, RollePickListProperty> rollenPropertiesNachTyp = benutzerEinsatzortViewFormBuilder.getRollenPropertiesNachTyp();
    if (!rollenPropertiesNachTyp.isEmpty()) {
      Set<Rolle> neueRollen = new HashSet<>();

      for (RollePickListProperty rollePickListProperty : rollenPropertiesNachTyp.values()) {
        neueRollen.addAll(rollePickListProperty.getZurgeordneteRollen());
      }
      entity.setRollen(neueRollen);
    }
    super.callSave(entity);
  }
}
