package com.cyster.taglib.template;

import java.io.IOException;
import javax.servlet.jsp.JspException;
import javax.servlet.jsp.JspWriter;
import javax.servlet.jsp.tagext.BodyTagSupport;
import javax.servlet.jsp.tagext.BodyContent;
import javax.servlet.jsp.PageContext;

public class SectionTag extends BodyTagSupport {
  private String name = "";

  public void setName(String name) {
    this.name = name;
  }

  public int doStartTag() throws JspException {
    if (name == null || name.equals("")) {
      throw new JspException("Section tag must have a name");
    }

    getTemplateApplicator().putFragmentsUptoSection(name, pageContext);

    return EVAL_BODY_INCLUDE;
  }


  public int doEndTag() throws JspException {
    BodyContent bodyContent = getBodyContent();

    return EVAL_PAGE;
  }

  private TemplateApplicator getTemplateApplicator() throws JspException {
    ApplyTag applyTag;
    try {
      applyTag = (ApplyTag)getParent();
    } catch(ClassCastException e) {
      throw new JspException(
        "A Template Section tag can only be used in a Template Apply Tag");
    }

    if (applyTag.getTemplateApplicator() == null) {
      throw new JspException(
        "Parent apply tag doesn't have a template applicator");
    }

    return applyTag.getTemplateApplicator();
  }
}
