package coreservlets.tags;

import javax.servlet.jsp.*;
import javax.servlet.jsp.tagext.*;
import java.io.*;

/** Klasa obsługi znacznika else. Odczytuje ona
 *  instancję klasy IfTag i przetwarza swoją treść,
 *  jeżeli atrybut test klasy IfTag ma wartość false. Ponadto
 *  rzucany jest wyjątek JspTagException, jeżeli przodkiem
 *  znacznika nie jest instancja klasy IfTag.
 *  <P>
 *  Taken from Core Servlets and JavaServer Pages Volume II
 *  from Prentice Hall and Sun Microsystems Press,
 *  http://volume2.coreservlets.com/.
 *  (C) 2007 Marty Hall, Larry Brown, and Yaakov Chaikin;
 *  may be freely used or adapted.
 */
public class ElseTag extends SimpleTagSupport {
  public void doTag() throws JspException, IOException {
    // Odczytanie znacznika przodka (znacznika if)
	IfTag ifTag = null;
	try {
	  ifTag = (IfTag)getParent();
	}
	catch (ClassCastException cce) {
	  String msg =
	    "Błąd: 'else' musi się znajdować w 'if'.";
	  throw new JspTagException(msg);
	}

    if (ifTag != null) {
      // Decyzja, czy należy zwrócić treść znacznika else
      if (!ifTag.getTest()) {
        getJspBody().invoke(null);
      }
    } else {
      String msg =
        "Błąd: 'else' musi się znajdować w 'if'.";
      throw new JspTagException(msg);
    }
  }
}
