diff --git a/experimental/uloapi/pom.xml b/experimental/uloapi/pom.xml index fc4516873b8c7c05d087abdb3b7fae52cdc581fc..f468e7e9acbdc4bb021121a4782641a3646545bd 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 03e9e8c7e0df60fc59091524f355b488b2c07821..0000000000000000000000000000000000000000 --- 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 a1d9b2a63854e0d238e35d5c4609a832870086d0..0000000000000000000000000000000000000000 --- 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 0000000000000000000000000000000000000000..c3d861222bf8b3c884ab43102b30452eb1c34760 --- /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 0000000000000000000000000000000000000000..f32b9dbb4063094e28e3b677d17b2721cbbe45db --- /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 0000000000000000000000000000000000000000..26fca38491d15c921b4af8c9fca1bbdb7d025fc1 --- /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 0000000000000000000000000000000000000000..cd28154467659be765b3c30485523630481d6a45 --- /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 0000000000000000000000000000000000000000..496dc5c8dbb26f53a596c438d60363c043d04dc4 --- /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 0000000000000000000000000000000000000000..a7ba8fc0ac943b93847929d71c3144d7bb24c790 --- /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); + }; + } +}