
package de.ivu.elect.dokumente.konverter;

import java.util.ArrayList;
import java.util.List;

import de.ivu.elect.business.dokumente.control.DokumentExtraFileOutput;
import de.ivu.elect.business.dokumente.control.DokumentKonverter;
import de.ivu.elect.business.dokumente.control.ElectDokumentContext;
import de.ivu.elect.business.dokumente.control.ProgressMonitor;
import de.ivu.elect.business.dokumente.entity.DokumentGenerierenProgress;
import de.ivu.elect.business.dokumente.entity.DokumentKonverterResult;


import static de.ivu.elect.business.dokumente.entity.DokumentKonverterResult.openOfficeFromList;

public abstract class AbstractListDokumentKonverter<E, Context extends ElectDokumentContext> extends AbstractDokumentKonverter<Context> implements DokumentKonverter<E, Context> {

  @Override
  public DokumentKonverterResult konvertiereInDokumentEingabe(List<E> entities, Context context, DokumentExtraFileOutput dokumentExtraFileOutput,
                                                              ProgressMonitor monitor) {
    List<Object> result = new ArrayList<>();
    int count = 0;
    int size = entities.size();
    for (E entity : entities) {
      if (monitor.isCanceled()) {
        return openOfficeFromList(result);
      }
      count++;
      result.add(konvertiere(entity, context, dokumentExtraFileOutput));
      monitor.progress(DokumentGenerierenProgress.MAPPE_ENTITY, count, size);
    }

    return openOfficeFromList(result);
  }

  protected abstract Object konvertiere(E entity, Context context, DokumentExtraFileOutput dokumentExtraFileOutput);
}
