EnumerationProperty.java

package progen.experimenter.property;

import progen.context.ProGenContext;

/**
 * Implementación de una propiedad de experimentos que es una enumeración de
 * elementos.
 * 
 * @author jirsis
 * @since 2.0
 */
public class EnumerationProperty implements Property {
  /** El nombre de la propiedad a la que se le darán distintos valores. */
  private String label;
  /** Índice del valor actual. */
  private int index;
  /** Valores que puede tener la propiedad. */
  private String [] values;

  /**
   * Constructor genérico de la clase, que recibe el nombre de la propiedad de
   * la que se obtendrán distintos valores.
   * 
   * @param label
   *          El nombre de la propiedad.
   */
  public EnumerationProperty(String label) {
    this.label = label.replace("progen.experimenter", "progen");
    this.index = 0;
    values = ProGenContext.getMandatoryProperty(label).split("\\|");
    if (values.length > 1) {
      for (int i = 0; i < values.length; i++) {
        values[i] = values[i].trim();
      }
    } else {
      throw new IlegalPropertySeparatorException(label);
    }
  }

  @Override
  public String getLabel() {
    return label;
  }

  @Override
  public String getValue() {
    return values[index];
  }

  @Override
  public boolean hasNext() {
    return index < values.length - 1;
  }

  @Override
  public String nextValue() {
    String value = null;
    if (++index < values.length) {
      value = values[index];
    }
    return value;
  }

  @Override
  public void reset() {
    index = 0;
  }

  @Override
  public String toString() {
    final StringBuilder enumerationProperty = new StringBuilder();
    for (String value : values) {
      enumerationProperty.append(value).append(";");
    }
    enumerationProperty.append("[" + values[index] + "],");
    return enumerationProperty.toString();
  }
}