/**
 * 
 * Programmieraufgabe P-6 (Schloss.java)
 *
 * @author Leonhard Fellermayr
 * @version 1.0
 */

public class Schloss {
	
	/* 1. Instanzvariablen */
	
	/**
	 *  @param EMPTY_STRING Konstante, die den leeren String reprŠsentiert.
	 *  @param givenSecret Geheime Kombination zum …ffnen des Schlosses
	 *  @param isOpen Zustand des Schlosses
	 *  @param triedKey Bisher eingegebene Buchstaben
	 */
	
	private final String EMPTY_STRING = "";
	private final String givenSecret;
	private boolean isOpen = false;
	private String triedKey = EMPTY_STRING;
	
	/* 2. Methoden */
	
	/** einstellen :: Stellt gewŸnschten Buchstaben am Rad ein bzw. fŸgt
	 *  diesen der String-Variable this.triedKey an.
	 * 
	 *  @param buchstabe Einzustellender Buchstabe
	 *  @return void
	 *  
	 */

	public void einstellen (char buchstabe) {
		this.triedKey += buchstabe;
	}
	
	/** oeffnen :: Versucht, das Schloss zu šffnen. Erfolgreich, falls
	 *  this.triedKey auf die geheime Kombination endet.
	 * 
	 *  @return void
	 *
	 */

	public void oeffnen () {
		this.isOpen = this.triedKey.endsWith (givenSecret);
	}

	/** istOffen :: Gibt den Wert von this.isOpen zurŸck.
	 * 
	 *  @return boolean
	 * 
	 */

	public boolean istOffen () {
		return (this.isOpen);
	}
	
	/** schliessen :: Schlie§t das Schloss durch Setzen von this.isOpen,
	 *  verwirft bisher eingestellte Buchstaben durch ZurŸcksetzen von
	 *  this.triedKey.
	 * 
	 *  @return void
	 *
	 */

	public void schliessen () {
		this.isOpen = false;
		this.triedKey = this.EMPTY_STRING;
	}

	/* 3. Konstruktor */
	
	/** Konstruktor Schloss :: Setzt this.isOpen auf false und Ÿbernimmt
	 *  die geheime Kombination in eine private Variable.
	 * 
	 *  @param secret Die geheime Kombination zum …ffnen des Schlosses
	 */
	
	public Schloss (String secret) {
		this.isOpen = false;
		this.givenSecret = secret;
	}
	
}
