/*
 * Copyright (c) 2006 Sun Microsystems, Inc.  All rights reserved.  U.S.
 * Government Rights - Commercial software.  Government users are subject
 * to the Sun Microsystems, Inc. standard license agreement and
 * applicable provisions of the FAR and its supplements.  Use is subject
 * to license terms.
 *
 * This distribution may include materials developed by third parties.
 * Sun, Sun Microsystems, the Sun logo, Java and J2EE are trademarks
 * or registered trademarks of Sun Microsystems, Inc. in the U.S. and
 * other countries.
 *
 * Copyright (c) 2006 Sun Microsystems, Inc. Tous droits reserves.
 *
 * Droits du gouvernement americain, utilisateurs gouvernementaux - logiciel
 * commercial. Les utilisateurs gouvernementaux sont soumis au contrat de
 * licence standard de Sun Microsystems, Inc., ainsi qu'aux dispositions
 * en vigueur de la FAR (Federal Acquisition Regulations) et des
 * supplements a celles-ci.  Distribue par des licences qui en
 * restreignent l'utilisation.
 *
 * Cette distribution peut comprendre des composants developpes par des
 * tierces parties. Sun, Sun Microsystems, le logo Sun, Java et J2EE
 * sont des marques de fabrique ou des marques deposees de Sun
 * Microsystems, Inc. aux Etats-Unis et dans d'autres pays.
 */


package com.sun.tutorial.javaee.dukesbank.web.template;

import javax.servlet.ServletException;
import javax.servlet.jsp.JspTagException;
import javax.servlet.jsp.PageContext;
import javax.servlet.jsp.tagext.SimpleTagSupport;


public class InsertTag extends SimpleTagSupport {
    private String definitionName = null;
    private String parameterName = null;

    public InsertTag() {
        super();
    }

    public void setParameter(String parameter) {
        this.parameterName = parameter;
    }

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

    public void doTag() throws JspTagException {
        Definition definition = null;
        Parameter parameter = null;
        boolean directInclude = false;
        PageContext context = (PageContext) getJspContext();

        // get the definition from the page context
        definition = (Definition) context.getAttribute(
                    definitionName,
                    context.APPLICATION_SCOPE);

        // get the parameter
        if ((parameterName != null) && (definition != null)) {
            parameter = (Parameter) definition.getParam(parameterName);
        }

        if (parameter != null) {
            directInclude = parameter.isDirect();
        }

        try {
            // if parameter is direct, print to out
            if (directInclude && (parameter != null)) {
                context.getOut()
                       .print(parameter.getValue());
            }
            // if parameter is indirect, include results of dispatching to page 
            else {
                if ((parameter != null) && (parameter.getValue() != null)) {
                    context.include(parameter.getValue());
                }
            }
        } catch (Exception ex) {
            Throwable rootCause = null;

            if (ex instanceof ServletException) {
                rootCause = ((ServletException) ex).getRootCause();
            }

            throw new JspTagException(
                ex.getMessage(),
                rootCause);
        }
    }
}
