Package javarepl.console.rest

Source Code of javarepl.console.rest.RestConsoleResource

package javarepl.console.rest;

import com.googlecode.funclate.Model;
import com.googlecode.totallylazy.Mapper;
import com.googlecode.totallylazy.Option;
import com.googlecode.utterlyidle.MediaType;
import com.googlecode.utterlyidle.annotations.*;
import javarepl.console.ConsoleLog;
import javarepl.console.ConsoleResult;
import javarepl.rendering.ExpressionTemplate;

import static com.googlecode.funclate.Model.persistent.model;
import static javarepl.Utils.applicationVersion;
import static javarepl.completion.CompletionResult.methods.toJson;

public class RestConsoleResource {
    private final RestConsole console;
    private final RestConsoleExpressionReader expressionReader;

    public RestConsoleResource(RestConsole console, RestConsoleExpressionReader expressionReader) {
        this.console = console;
        this.expressionReader = expressionReader;
    }

    @GET
    @Path("version")
    @Produces(MediaType.APPLICATION_JSON)
    public Model version() {
        return model()
                .add("version", applicationVersion());
    }


    @GET
    @Path("status")
    @Produces(MediaType.APPLICATION_JSON)
    public Model status() {
        return model()
                .add("status", console.status());
    }

    @POST
    @Path("execute")
    @Produces(MediaType.APPLICATION_JSON)
    public Model execute(@FormParam("expression") String expr) {
        ConsoleResult result = console.execute(expr);

        return model()
                .add("expression", result.expression())
                .add("logs", result.logs().map(commandResultToModel()));
    }

    @POST
    @Path("readExpression")
    @Produces(MediaType.APPLICATION_JSON)
    public Model readExpression(@FormParam("line") String line) {
        Option<String> expression = expressionReader.readExpression(line);
        return expression.map(new Mapper<String, Model>() {
            public Model call(String expression) throws Exception {
                return model().add("expression", expression);
            }
        }).getOrElse(model());
    }

    @GET
    @Path("template")
    @Produces(MediaType.APPLICATION_JSON)
    public Model template(@QueryParam("expression") String expr) {
        ExpressionTemplate template = console.template(expr);
        return model()
                .add("template", template.template())
                .add("token", template.token());
    }

    @GET
    @Path("completions")
    @Produces(MediaType.APPLICATION_JSON)
    public String completions(@QueryParam("expression") String expr) {
        return toJson(console.completion(expr));
    }

    @GET
    @Path("history")
    @Produces(MediaType.APPLICATION_JSON)
    public Model history() {
        return model().add("history", console.history().items().toList());
    }

    private static Mapper<ConsoleLog, Model> commandResultToModel() {
        return new Mapper<ConsoleLog, Model>() {
            public Model call(ConsoleLog consoleLog) throws Exception {
                return model().add("type", consoleLog.type())
                        .add("message", consoleLog.message());
            }
        };
    }
}
TOP

Related Classes of javarepl.console.rest.RestConsoleResource

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.