Package org.geoserver.web.scriptlet

Source Code of org.geoserver.web.scriptlet.RhinoConsolePage

package org.geoserver.web.scriptlet;

import java.util.ArrayList;
import java.util.List;
import java.util.Iterator;
import java.util.logging.Logger;

import org.apache.wicket.ajax.AjaxRequestTarget;
import org.apache.wicket.ajax.markup.html.form.AjaxButton;
import org.apache.wicket.markup.html.WebMarkupContainer;
import org.apache.wicket.markup.html.basic.Label;
import org.apache.wicket.markup.html.form.Button;
import org.apache.wicket.markup.html.form.Form;
import org.apache.wicket.markup.html.form.TextField;
import org.apache.wicket.markup.html.list.ListItem;
import org.apache.wicket.markup.html.list.ListView;
import org.apache.wicket.model.AbstractReadOnlyModel;
import org.apache.wicket.model.CompoundPropertyModel;
import org.apache.wicket.model.IModel;
import org.apache.wicket.model.Model;
import org.apache.wicket.model.PropertyModel;

import org.mozilla.javascript.Context;
import org.mozilla.javascript.Scriptable;
import org.mozilla.javascript.ScriptableObject;
import org.mozilla.javascript.WrappedException;

import org.geotools.util.logging.Logging;

import org.geoserver.web.GeoServerSecuredPage;

public class RhinoConsolePage extends GeoServerSecuredPage {
    private class Result implements java.io.Serializable {
        public String input, response;
        public boolean success = true;
    }

    private ScriptableObject scope;
    private List<Result> results = new ArrayList<Result>();
    private String prompt = "helo> ";

    private Result eval(String js) {
        Context cx = Context.enter();

        Result res = new Result();
        res.input = js;

        try {
            res.response = (String)
                cx.jsToJava(cx.evaluateString(scope, js, "<input>", 0, null), String.class);
        } catch(WrappedException e) {
            res.success = false;
            res.response = e.getMessage();
        }

        Context.exit();

        return res;
    }

    private static final Logger LOGGER = Logging.getLogger("org.geoserver.web.scriptlet");
    public RhinoConsolePage() {
        Context cx = Context.enter();
        scope = cx.initStandardObjects();
        Object wrappedCatalog = Context.javaToJS(getCatalog(), scope);
        ScriptableObject.putProperty(scope, "catalog", wrappedCatalog);
        Context.exit();

        final WebMarkupContainer container = new WebMarkupContainer("results-wrapper");
        final ListView resultsDisplay =
            new ListView("results", new PropertyModel(this, "results")) {
                protected void populateItem(ListItem item) {
                    item.add(new Label("javascript", new PropertyModel(item.getModel(), "input")));
                    item.add(new Label("result", new PropertyModel(item.getModel(), "response")));
                }
            };
        container.setOutputMarkupId(true);
        add(container);
        container.add(resultsDisplay);
        Form f = new Form("prompt-wrapper", new Model(this));
        f.setOutputMarkupId(true);
        add(f);
        f.add(new TextField("prompt", new PropertyModel(this, "prompt")));
        f.add(new AjaxButton("run", f) {
            protected void onSubmit(AjaxRequestTarget target, Form f) {
                results.add(eval(prompt));
                target.addComponent(container);
            }
        });
    }
}
TOP

Related Classes of org.geoserver.web.scriptlet.RhinoConsolePage

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.