Package org.rendersnake.site.components

Source Code of org.rendersnake.site.components.TranslatorForm

package org.rendersnake.site.components;

import static org.rendersnake.HtmlAttributesFactory.align;
import static org.rendersnake.HtmlAttributesFactory.id;
import static org.rendersnake.HtmlAttributesFactory.type;

import java.io.ByteArrayInputStream;
import java.io.IOException;

import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

import org.apache.commons.lang.StringUtils;
import org.rendersnake.HtmlCanvas;
import org.rendersnake.Renderable;
import org.rendersnake.servlet.FormHandler;
import org.rendersnake.servlet.FormResponseAction;
import org.rendersnake.servlet.ServletUtils;
import org.rendersnake.site.HtmlToRenderSnakeTranslator;

public class TranslatorForm implements Renderable, FormHandler {

    public FormResponseAction handle(HttpServletRequest request, HttpServletResponse response) {
       
        boolean useTidy = "on".equals(request.getParameter("tidy"));
        String handle = request.getParameter("handle");
        if ("translate".equals(handle)) {
            ByteArrayInputStream input = new ByteArrayInputStream(request.getParameter("html").getBytes());
            HtmlToRenderSnakeTranslator translator = new HtmlToRenderSnakeTranslator();
            try {
                translator.translate(input,useTidy);
            } catch (Exception ex) {
                translator.errorMessage = ex.getMessage();
            }
            request.getSession().setAttribute("java", translator.isSuccess() ? translator.toJavaSource() : translator.errorMessage);
            request.getSession().setAttribute("html", request.getParameter("html"));
        }
        if ("back".equals(handle)) {
            request.getSession().setAttribute("java", null);
        }
        if (useTidy) {
            request.getSession().setAttribute("tidy", "on");
        } else {
            request.getSession().setAttribute("tidy", null);
        }
        return new FormResponseAction().redirectingTo("translator.html");
    }

    public void renderOn(HtmlCanvas html) throws IOException {

        html.h2().write("From HTML to Java")._h2();
        html.p().write("Developers who wish to create Renderable components from existing HTML pages or fragments,"
                + " can use the translator below to generate the corresponding Java source.")._p();
        html.p().write("Copy and paste your XHTML into the top textarea and hit the translate button."
                + " Make sure the XHTML is well-formed ; an error will be displayed otherwise.")._p();
        html.table().tr().td();
        this.renderFormOn(html);
        html._td()._tr()._table();
       
        this.renderStatisticsOn(html);
    }

    public void renderFormOn(HtmlCanvas html) throws IOException {// @formatter:off
        // either is empty, showing java or showing html
        String tidy = (String)ServletUtils.sessionFor(html).getAttribute("tidy");
        String checked = "on".equals(tidy) ? "checked" : null;
        String java = (String)ServletUtils.sessionFor(html).getAttribute("java");       
        String xhtml = (String)ServletUtils.sessionFor(html).getAttribute("html");
        boolean hasJava = !StringUtils.isEmpty(java);
        boolean hasHtml = !StringUtils.isEmpty(xhtml);
        if (!hasJava && !hasHtml) {
            hasHtml = true;
            xhtml = "<table id=\"sample\" class=\"title\">\n" +
                "    <tr>\n" +
                "       <td>renderSnake.org</td>\n" +
                "    </tr>\n" +
                "</table>";
        }       
        html.form(
                    id("translator")
                    .action("org.rendersnake.site.components.TranslatorForm")
                    .method("post"))
                .input(type("submit").value(!hasJava ? "Translate XHTML to Java" : "Back to XHTML"))
                .div(align("right")).content("rev.604")
                .input(type("checkbox").name("tidy").checked(checked))
                .write("use tidy").br()
                .input(type("hidden").name("handle").value(!hasJava ? "translate" : "back"))
                .textarea(
                     type("text")
                     .name("html")
                     .add("rows", "60", false)
                     .add("cols", "60", false))
                     .write(hasJava ? java : xhtml)
                ._textarea()._form();
    }

    private void renderStatisticsOn(HtmlCanvas html) throws IOException {
        html
        .h4().write("Statistics")._h4()
        .ul()
            .li().write(""+HtmlToRenderSnakeTranslator.TRANSLATIONS_OK+" succesful")._li()
            .li().write(""+HtmlToRenderSnakeTranslator.TRANSLATIONS_LINECOUNT+" source lines generated")._li()
            .li().write(""+HtmlToRenderSnakeTranslator.TRANSLATIONS_FAILED+" failed")._li()
        ._ul();       
    }
}
TOP

Related Classes of org.rendersnake.site.components.TranslatorForm

TOP
Copyright © 2018 www.massapi.com. All rights reserved.
All source code are property of their respective owners. Java is a trademark of Sun Microsystems, Inc and owned by ORACLE Inc. Contact coftware#gmail.com.