From 5bb1ca2a97c774484b7ac1dfc4ed041e8d9a5db5 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Andreas=20Sch=C3=A4rtl?= <andreas@schaertl.me> Date: Thu, 21 May 2020 11:31:07 +0200 Subject: [PATCH] uloapi: set up json routes --- experimental/uloapi/pom.xml | 11 +++-- .../main/java/info/mathhub/uloapi/Main.java | 12 ----- .../main/java/info/mathhub/uloapi/Routes.java | 21 -------- .../java/info/mathhub/uloapi/query/Query.java | 7 +++ .../info/mathhub/uloapi/query/Statistics.java | 15 ++++++ .../info/mathhub/uloapi/rest/Filters.java | 13 +++++ .../mathhub/uloapi/rest/JsonTransformer.java | 17 +++++++ .../java/info/mathhub/uloapi/rest/Main.java | 19 ++++++++ .../java/info/mathhub/uloapi/rest/Routes.java | 48 +++++++++++++++++++ 9 files changed, 127 insertions(+), 36 deletions(-) delete mode 100644 experimental/uloapi/src/main/java/info/mathhub/uloapi/Main.java delete mode 100644 experimental/uloapi/src/main/java/info/mathhub/uloapi/Routes.java create mode 100644 experimental/uloapi/src/main/java/info/mathhub/uloapi/query/Query.java create mode 100644 experimental/uloapi/src/main/java/info/mathhub/uloapi/query/Statistics.java create mode 100644 experimental/uloapi/src/main/java/info/mathhub/uloapi/rest/Filters.java create mode 100644 experimental/uloapi/src/main/java/info/mathhub/uloapi/rest/JsonTransformer.java create mode 100644 experimental/uloapi/src/main/java/info/mathhub/uloapi/rest/Main.java create mode 100644 experimental/uloapi/src/main/java/info/mathhub/uloapi/rest/Routes.java diff --git a/experimental/uloapi/pom.xml b/experimental/uloapi/pom.xml index fc45168..f468e7e 100644 --- a/experimental/uloapi/pom.xml +++ b/experimental/uloapi/pom.xml @@ -18,7 +18,7 @@ <configuration> <archive> <manifest> - <mainClass>info.mathhub.uloapi.Main</mainClass> + <mainClass>info.mathhub.uloapi.rest.Main</mainClass> </manifest> </archive> <descriptorRefs> @@ -41,7 +41,7 @@ <artifactId>exec-maven-plugin</artifactId> <version>1.2.1</version> <configuration> - <mainClass>info.mathhub.uloapi.Main</mainClass> + <mainClass>info.mathhub.uloapi.rest.Main</mainClass> </configuration> </plugin> </plugins> @@ -51,7 +51,7 @@ <dependency> <groupId>com.sparkjava</groupId> <artifactId>spark-core</artifactId> - <version>2.5</version> + <version>2.9.1</version> </dependency> <dependency> <groupId>org.slf4j</groupId> @@ -68,5 +68,10 @@ <artifactId>logback-classic</artifactId> <version>1.2.3</version> </dependency> + <dependency> + <groupId>com.google.code.gson</groupId> + <artifactId>gson</artifactId> + <version>2.8.6</version> + </dependency> </dependencies> </project> \ No newline at end of file diff --git a/experimental/uloapi/src/main/java/info/mathhub/uloapi/Main.java b/experimental/uloapi/src/main/java/info/mathhub/uloapi/Main.java deleted file mode 100644 index 03e9e8c..0000000 --- a/experimental/uloapi/src/main/java/info/mathhub/uloapi/Main.java +++ /dev/null @@ -1,12 +0,0 @@ -package info.mathhub.uloapi; - -import static spark.Spark.*; - -public class Main { - private Main() {}; - - public static void main(String[] args) { - get("/", Routes.index); - get("/favicon.ico", Routes.createError(404)); - } -} diff --git a/experimental/uloapi/src/main/java/info/mathhub/uloapi/Routes.java b/experimental/uloapi/src/main/java/info/mathhub/uloapi/Routes.java deleted file mode 100644 index a1d9b2a..0000000 --- a/experimental/uloapi/src/main/java/info/mathhub/uloapi/Routes.java +++ /dev/null @@ -1,21 +0,0 @@ -package info.mathhub.uloapi; - -import spark.*; - -/** - * This class contains all routes of our application. - */ -public class Routes { - private Routes() {}; - - public static final Route index = (Request request, Response response) -> { - return "<h1>Index /</h1>"; - }; - - public static Route createError(int status) { - return (Request request, Response response) -> { - response.status(status); - return String.format("Error %d", status); - }; - } -} diff --git a/experimental/uloapi/src/main/java/info/mathhub/uloapi/query/Query.java b/experimental/uloapi/src/main/java/info/mathhub/uloapi/query/Query.java new file mode 100644 index 0000000..c3d8612 --- /dev/null +++ b/experimental/uloapi/src/main/java/info/mathhub/uloapi/query/Query.java @@ -0,0 +1,7 @@ +package info.mathhub.uloapi.query; + +public class Query { + public Statistics getStatistics() { + return new Statistics(10); + } +} diff --git a/experimental/uloapi/src/main/java/info/mathhub/uloapi/query/Statistics.java b/experimental/uloapi/src/main/java/info/mathhub/uloapi/query/Statistics.java new file mode 100644 index 0000000..f32b9db --- /dev/null +++ b/experimental/uloapi/src/main/java/info/mathhub/uloapi/query/Statistics.java @@ -0,0 +1,15 @@ +package info.mathhub.uloapi.query; + +/** + * Contains statistic information about the backing storage. + */ +public class Statistics { + /** + * The number of triplets in the backing storage. + */ + public long numTriplets; + + Statistics(int numTriplets) { + this.numTriplets = numTriplets; + } +} diff --git a/experimental/uloapi/src/main/java/info/mathhub/uloapi/rest/Filters.java b/experimental/uloapi/src/main/java/info/mathhub/uloapi/rest/Filters.java new file mode 100644 index 0000000..26fca38 --- /dev/null +++ b/experimental/uloapi/src/main/java/info/mathhub/uloapi/rest/Filters.java @@ -0,0 +1,13 @@ +package info.mathhub.uloapi.rest; + +import spark.Filter; +import spark.Request; +import spark.Response; + +public class Filters { + private Filters() {}; + + public static final Filter setJsonContentType = (Request request, Response response) -> { + response.type("application/json"); + }; +} diff --git a/experimental/uloapi/src/main/java/info/mathhub/uloapi/rest/JsonTransformer.java b/experimental/uloapi/src/main/java/info/mathhub/uloapi/rest/JsonTransformer.java new file mode 100644 index 0000000..cd28154 --- /dev/null +++ b/experimental/uloapi/src/main/java/info/mathhub/uloapi/rest/JsonTransformer.java @@ -0,0 +1,17 @@ +package info.mathhub.uloapi.rest; + +import com.google.gson.Gson; +import spark.ResponseTransformer; + +/** + * A {@link spark.ResponseTransformer} that converts everything to + * JSON. + */ +public class JsonTransformer implements ResponseTransformer { + private final Gson instance = new Gson(); + + @Override + public String render(Object model) throws Exception { + return this.instance.toJson(model); + } +} diff --git a/experimental/uloapi/src/main/java/info/mathhub/uloapi/rest/Main.java b/experimental/uloapi/src/main/java/info/mathhub/uloapi/rest/Main.java new file mode 100644 index 0000000..496dc5c --- /dev/null +++ b/experimental/uloapi/src/main/java/info/mathhub/uloapi/rest/Main.java @@ -0,0 +1,19 @@ +package info.mathhub.uloapi.rest; + +import static spark.Spark.*; + +/** + * Entry point of the JSON/REST API for the underlying ULO/RDF store. + */ +public class Main { + private Main() {}; + + public static void main(String[] args) { + get("/", Routes.index); + get("/statistics", Routes.statistics, new JsonTransformer()); + get("/name/:name", Routes.name, new JsonTransformer()); + notFound(Routes.notFound); + + after(Filters.setJsonContentType); + } +} diff --git a/experimental/uloapi/src/main/java/info/mathhub/uloapi/rest/Routes.java b/experimental/uloapi/src/main/java/info/mathhub/uloapi/rest/Routes.java new file mode 100644 index 0000000..a7ba8fc --- /dev/null +++ b/experimental/uloapi/src/main/java/info/mathhub/uloapi/rest/Routes.java @@ -0,0 +1,48 @@ +package info.mathhub.uloapi.rest; + +import info.mathhub.uloapi.query.Query; +import org.eclipse.jetty.http.HttpStatus; +import spark.*; + +import java.util.HashMap; +import java.util.Map; + +/** + * This class contains all routes of our application. + */ +public class Routes { + private Routes() {}; + + public static final Route index = (Request request, Response response) -> { + return "{}"; + }; + + public static final Route statistics = (Request request, Response response) -> { + return new Query().getStatistics(); + }; + + public static final Route name = (Request request, Response response) -> { + final Map<String, Object> json = new HashMap<>(); + + json.put("name", request.params(":name")); + json.put("attributes", request.attributes()); + json.put("ip", request.ip()); + + return json; + }; + + public static final Route notFound = (Request request, Response response) -> { + return createError(HttpStatus.NOT_FOUND_404); + }; + + public static final Route notAcceptable = (Request request, Response response) -> { + return createError(HttpStatus.NOT_ACCEPTABLE_406); + }; + + private static Route createError(int status) { + return (Request request, Response response) -> { + response.status(status); + return String.format("Error %d", status); + }; + } +} -- GitLab