
package de.ivu.elect.business.sitzberechnung.control.varianten;

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

public abstract class AbstractVergleicher<E> {

  protected int anzahlVerglichenerWerte = 0;
  protected List<E> werte = new ArrayList<>();

  public void add(E neuerWert) {
    anzahlVerglichenerWerte++;
    for (E sitze : werte) {
      if (isGleich(sitze, neuerWert)) {
        return;
      }
    }
    werte.add(neuerWert);
  }

  /**
   * Fasste die gesammelten Werte sinnvoll zusammen. Im ersten Wurf ist das <code>null</code> die Werte nicht eindeutig
   * sind,
   * 
   * @return
   */
  public E getMergedValue(int erwarteteAnzahlVerglichenerWerte) {
    if (this.anzahlVerglichenerWerte == erwarteteAnzahlVerglichenerWerte && werte.size() == 1) {
      return werte.iterator().next();
    } else {
      return null;
    }

  }

  abstract boolean isGleich(E alterWert, E neuerWert);

}
