package org.apache.tiles.autotag.velocity.test;

import java.io.IOException;
import java.io.Writer;

import org.apache.tiles.autotag.core.runtime.ModelBody;
import org.apache.tiles.autotag.core.runtime.AutotagRuntime;
import org.apache.tiles.request.Request;
import org.apache.velocity.context.InternalContextAdapter;
import org.apache.velocity.runtime.directive.Directive;
import org.apache.velocity.runtime.parser.node.Node;

/**
 * Documentation of the DoStuff class.
 */
public class DoStuffDirective extends Directive {

    /**
     * The template model.
     */
    private org.apache.tiles.autotag.template.DoStuffTemplate model = new org.apache.tiles.autotag.template.DoStuffTemplate();

    /** {@inheritDoc} */
    @Override
    public String getName() {
        return "tldtest_doStuff";
    }

    /** {@inheritDoc} */
    @Override
    public int getType() {
        return BLOCK;
    }

    /** {@inheritDoc} */
    @Override
    public boolean render(InternalContextAdapter context, Writer writer, Node node)
            throws IOException {
        AutotagRuntime runtime = new org.apache.tiles.autotag.velocity.test.Runtime();
        if (runtime instanceof Directive) {
            ((Directive) runtime).render(context, writer, node);
        }
        Request request = runtime.createRequest();
        ModelBody modelBody = runtime.createModelBody();
        model.execute(
            (java.lang.String) runtime.getParameter("one", null),
            (java.lang.Integer) runtime.getParameter("two", 0),
            (java.lang.Boolean) runtime.getParameter("three", false),
            request, modelBody
        );
        return true;
    }
}
