
package de.ivu.elect.presentation.person.form;

import java.util.List;

import javax.inject.Inject;

import de.ivu.elect.business.entschaedigung.entity.Entschaedigung;
import de.ivu.elect.business.person.entity.Personendaten;
import de.ivu.elect.jee.presentation.dynamicform.FormBuilder;
import de.ivu.elect.presentation.ViewFormBuilder;
import de.ivu.elect.presentation.entschaedigung.form.EntschaedigungViewFormBuilder;

public abstract class AbstractPersonendatenEntschaedigungViewFormBuilder<E extends Personendaten> extends ViewFormBuilder {

  private static final long serialVersionUID = 1L;

  @Inject
  private transient PersonendatenViewFormBuilder personendatenViewFormBuilder;

  @Inject
  private transient EntschaedigungViewFormBuilder entschaedigungViewFormBuilder;

  protected AbstractPersonendatenEntschaedigungViewFormBuilder() {
    super();
  }

  public void addProperties(FormBuilder formBuilder, E personendaten, List<Entschaedigung> entschaedigungen, boolean readonly) {
    addPersonendatenPropertiesSeparator(formBuilder, personendaten);
    addPersonendatenProperties(formBuilder, personendaten, true);

    addKontoverbindungProperties(formBuilder, personendaten, readonly);

    addEinsatzPropertiesSeparator(formBuilder, personendaten);
    addEinsatzProperties(formBuilder, personendaten, true);

    addEntschaedigungPropertiesSeparator(formBuilder, personendaten, entschaedigungen);
    addEntschaedigungProperties(formBuilder, personendaten, entschaedigungen, readonly);
  }

  protected abstract void addPersonendatenPropertiesSeparator(FormBuilder formBuilder, E personendaten);

  protected void addPersonendatenProperties(FormBuilder formBuilder, E personendaten, boolean readonly) {
    personendatenViewFormBuilder.addBasicPersonendatenProperties(formBuilder, personendaten, true);
  }

  protected void addKontoverbindungProperties(FormBuilder formBuilder, E personendaten, boolean readonly) {
    personendatenViewFormBuilder.addDefaultKontoverbindungProperties(formBuilder, personendaten, personendaten.getKontoverbindung(), readonly);
  }

  protected abstract void addEinsatzPropertiesSeparator(FormBuilder formBuilder, E personendaten);

  protected abstract void addEinsatzProperties(FormBuilder formBuilder, E personendaten, boolean readonly);

  protected void addEntschaedigungPropertiesSeparator(FormBuilder formBuilder, E personendaten, List<Entschaedigung> entschaedigungen) {
    entschaedigungViewFormBuilder.addPropertiesSeparator(formBuilder);
  }

  protected void addEntschaedigungProperties(FormBuilder formBuilder, E personendaten, List<Entschaedigung> entschaedigungen, boolean readonly) {
    entschaedigungViewFormBuilder.addProperties(formBuilder, personendaten, entschaedigungen, readonly);
  }
}
