diff artifact-database/src/main/java/org/dive4elements/artifactdatabase/rest/RestApp.java @ 562:05caf2e731d0

Allow to add additional restful services via configuration.
author gernotbelger
date Wed, 10 Oct 2018 20:07:58 +0200
parents 415df0fc4fa1
children
line wrap: on
line diff
--- a/artifact-database/src/main/java/org/dive4elements/artifactdatabase/rest/RestApp.java	Mon Sep 24 17:59:17 2018 +0200
+++ b/artifact-database/src/main/java/org/dive4elements/artifactdatabase/rest/RestApp.java	Wed Oct 10 20:07:58 2018 +0200
@@ -8,14 +8,14 @@
 
 package org.dive4elements.artifactdatabase.rest;
 
-import org.dive4elements.artifacts.ArtifactDatabase;
-
+import java.util.Map;
+import java.util.Map.Entry;
 import java.util.concurrent.ConcurrentMap;
 
+import org.dive4elements.artifacts.ArtifactDatabase;
 import org.restlet.Application;
 import org.restlet.Context;
 import org.restlet.Restlet;
-
 import org.restlet.routing.Router;
 
 /**
@@ -25,32 +25,21 @@
  *
  * @author <a href="mailto:sascha.teichmann@intevation.de">Sascha L. Teichmann</a>
  */
-public class RestApp
-extends      Application
-{
+public class RestApp extends Application {
+
     /**
      * The central artifact database instance to work with.
      */
-    protected ArtifactDatabase database;
-
-    /**
-     * Default constructor
-     */
-    public RestApp() {
-    }
-
-    public RestApp(Context context, ArtifactDatabase database) {
-        super(context);
-        this.database = database;
-    }
+    private final ArtifactDatabase database;
 
     /**
      * Constructor to create REST appliction bound to a specific
      * artifact database.
      *
-     * @param database The artifact database to be used.
+     * @param database
+     *            The artifact database to be used.
      */
-    public RestApp(ArtifactDatabase database) {
+    public RestApp(final ArtifactDatabase database) {
         this.database = database;
     }
 
@@ -63,35 +52,35 @@
     @Override
     public Restlet createRoot() {
 
-        Context context = getContext();
-
-        ConcurrentMap map = context.getAttributes();
-        map.put("database", database);
+        final Context context = getContext();
 
-        Router router = new Router(context);
+        final ConcurrentMap<String, Object> map = context.getAttributes();
+        map.put("database", this.database);
 
-        router.attach(ServicesResource.PATH,    ServicesResource.class);
-        router.attach(ServiceResource.PATH,     ServiceResource.class);
-        router.attach(FactoriesResource.PATH,   FactoriesResource.class);
-        router.attach(CreateResource.PATH,      CreateResource.class);
-        router.attach(ArtifactResource.PATH,    ArtifactResource.class);
+        final Router router = new Router(context);
+
+        router.attach(ServicesResource.PATH, ServicesResource.class);
+        router.attach(ServiceResource.PATH, ServiceResource.class);
+        router.attach(FactoriesResource.PATH, FactoriesResource.class);
+        router.attach(CreateResource.PATH, CreateResource.class);
+        router.attach(ArtifactResource.PATH, ArtifactResource.class);
         router.attach(ArtifactOutResource.PATH, ArtifactOutResource.class);
-        router.attach(ExportResource.PATH,      ExportResource.class);
-        router.attach(ImportResource.PATH,      ImportResource.class);
-        router.attach(CreateUserResource.PATH,  CreateUserResource.class);
-        router.attach(ListUsersResource.PATH,   ListUsersResource.class);
-        router.attach(UserResource.PATH,        UserResource.class);
-        router.attach(FindUserResource.PATH,    FindUserResource.class);
-        router.attach(
-            CreateCollectionResource.PATH, CreateCollectionResource.class);
-        router.attach(
-            ListCollectionsResource.PATH, ListCollectionsResource.class);
-        router.attach(
-            CollectionResource.PATH, CollectionResource.class);
-        router.attach(
-            CollectionOutResource.PATH, CollectionOutResource.class);
+        router.attach(ExportResource.PATH, ExportResource.class);
+        router.attach(ImportResource.PATH, ImportResource.class);
+        router.attach(CreateUserResource.PATH, CreateUserResource.class);
+        router.attach(ListUsersResource.PATH, ListUsersResource.class);
+        router.attach(UserResource.PATH, UserResource.class);
+        router.attach(FindUserResource.PATH, FindUserResource.class);
+        router.attach(CreateCollectionResource.PATH, CreateCollectionResource.class);
+        router.attach(ListCollectionsResource.PATH, ListCollectionsResource.class);
+        router.attach(CollectionResource.PATH, CollectionResource.class);
+        router.attach(CollectionOutResource.PATH, CollectionOutResource.class);
+
+        /* register any additional services */
+        final Map<String, Class<?>> restServices = this.database.getRestServices();
+        for (final Entry<String, Class<?>> entry : restServices.entrySet())
+            router.attach(entry.getKey(), entry.getValue());
 
         return router;
     }
-}
-// vim:set ts=4 sw=4 si et sta sts=4 fenc=utf8 :
+}
\ No newline at end of file

http://dive4elements.wald.intevation.org