package yacs.domain;

import java.util.*;

/**
 * <p>Klasse zur Repräsentation einer symbolischen finiten Domäne.</p>
 *
 * <p>Copyright (C) 2005  Wolfgang Runte
 * <br><br>
 * This library is free software; you can redistribute it and/or
 * modify it under the terms of the GNU Lesser General Public
 * License as published by the Free Software Foundation; either
 * version 2.1 of the License, or (at your option) any later version.
 * <br><br>
 * This library is distributed in the hope that it will be useful,
 * but WITHOUT ANY WARRANTY; without even the implied warranty of
 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
 * Lesser General Public License for more details.
 * <br><br>
 * You should have received a copy of the GNU Lesser General Public
 * License along with this library; if not, write to the Free Software
 * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301
 * USA</p>
 *
 * @author Wolfgang Runte (woru@tzi.org)
 * @version YACS 0.1.1
 */
public class SymbolicFDDomain extends Domain {

// ********** private attributs **********

// ********** public attributs **********

// ********** private methods **********

  /**
   * Fügt die übergebene Liste zu den Elementen der Domäne hinzu. Die Liste muss
   * <code>Strings</code> enthalten.
   * @param domain List
   */
  private void addAll(List domain) {
    Iterator it = domain.iterator();
    while (it.hasNext()) {
      this.add(new SymbolicFDElement((String)it.next()));
    }
  }

// ********** public methods **********

  /**
   * Konstruktor -- Instantiiert eine Domäne mit symbolischen FD-Elementen.
   */
  public SymbolicFDDomain() {
    super();
  }

  /**
   * Konstruktor -- Die Domäne wird mit einem Wert (hier: <code>String</code>)
   * instantiiert.
   * @param value String
   */
  public SymbolicFDDomain(String value) {
    this();
    this.add(new SymbolicFDElement(value));
  }

  /**
   * Vereinfacht das Hinzufügen von Elementen zu Domäne, indem lediglich ein
   * <code>String</code> übergeben werden muss. Liefert <code>true</code>
   * zurück, wenn dies erfolgreich war, <code>false</code> wenn nicht (Wert
   * bereits vorhanden).
   * @param value String
   * @return boolean
   */
  public boolean add(String value) {
    return this.add(new SymbolicFDElement(value));
  }

  /**
   * Vereinfachte Abfragemöglichkeit, ob ein Element mit einem bestimmten Wert
   * (hier: <code>String</code>) in der Domäne enthalten ist.
   * @param value String
   * @return boolean
   */
  public boolean contains(String value) {
    //return this.containsValue(value);
    return this.domain.containsValue(value);
  }

}
