package com.jayway.jsonpath.web.resource;
import com.jayway.jsonpath.JsonPath;
import com.jayway.jsonpath.web.bench.Bench;
import com.jayway.jsonpath.web.bench.Result;
import net.minidev.json.JSONStyle;
import net.minidev.json.JSONValue;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import javax.ws.rs.Consumes;
import javax.ws.rs.FormParam;
import javax.ws.rs.GET;
import javax.ws.rs.POST;
import javax.ws.rs.Path;
import javax.ws.rs.Produces;
import javax.ws.rs.QueryParam;
import javax.ws.rs.core.MediaType;
import javax.ws.rs.core.Response;
import java.util.Collections;
import java.util.HashMap;
import java.util.Map;
import java.util.ResourceBundle;
@Path("/")
@Produces(MediaType.TEXT_HTML)
public class ApiResource {
private static final Logger logger = LoggerFactory.getLogger(ApiResource.class);
static {
JSONValue.COMPRESSION = JSONStyle.LT_COMPRESS;
}
@GET
@Path("/info")
@Produces(MediaType.APPLICATION_JSON)
public Response info() {
Map<String, String> result = new HashMap<String, String>();
try {
ResourceBundle resource = ResourceBundle.getBundle("build-info");
result.put("version", resource.getString("version"));
result.put("timestamp", resource.getString("timestamp"));
} catch (Exception e){
result.put("version", "LOCAL");
result.put("timestamp", "NOW");
}
return Response.ok(result).build();
}
@GET
@Path("/validate")
@Produces(MediaType.APPLICATION_JSON)
public Response validate(@QueryParam("path") String path) {
int result = -1;
try {
JsonPath compiled = JsonPath.compile(path);
result = compiled.isDefinite() ? 0 : 1;
} catch (Exception e) {
}
return Response.ok(Collections.singletonMap("result", result)).build();
}
@POST
@Path("/eval")
@Consumes(MediaType.APPLICATION_FORM_URLENCODED)
@Produces(MediaType.APPLICATION_JSON)
public Response getTemplate(@FormParam("json") String json,
@FormParam("path") String path,
@FormParam("type") String type,
@FormParam("flagWrap") boolean flagWrap,
@FormParam("flagNullLeaf") boolean flagNullLeaf,
@FormParam("flagSuppress") boolean flagSuppress,
@FormParam("flagRequireProps") boolean flagRequireProps) {
boolean value = "VALUE".equalsIgnoreCase(type);
Map<String, Result> resultMap = new Bench(json, path, value, flagWrap, flagSuppress, flagNullLeaf, flagRequireProps).runAll();
return Response.ok(resultMap).build();
}
}