comparison 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
comparison
equal deleted inserted replaced
561:1c2ce0501305 562:05caf2e731d0
6 * or visit http://www.gnu.org/licenses/ if it does not exist. 6 * or visit http://www.gnu.org/licenses/ if it does not exist.
7 */ 7 */
8 8
9 package org.dive4elements.artifactdatabase.rest; 9 package org.dive4elements.artifactdatabase.rest;
10 10
11 import org.dive4elements.artifacts.ArtifactDatabase; 11 import java.util.Map;
12 12 import java.util.Map.Entry;
13 import java.util.concurrent.ConcurrentMap; 13 import java.util.concurrent.ConcurrentMap;
14 14
15 import org.dive4elements.artifacts.ArtifactDatabase;
15 import org.restlet.Application; 16 import org.restlet.Application;
16 import org.restlet.Context; 17 import org.restlet.Context;
17 import org.restlet.Restlet; 18 import org.restlet.Restlet;
18
19 import org.restlet.routing.Router; 19 import org.restlet.routing.Router;
20 20
21 /** 21 /**
22 * This is the core REST application that binds the serveral resources 22 * This is the core REST application that binds the serveral resources
23 * used to manage the artifact database to the HTTP server provided 23 * used to manage the artifact database to the HTTP server provided
24 * by the Restlet framework. 24 * by the Restlet framework.
25 * 25 *
26 * @author <a href="mailto:sascha.teichmann@intevation.de">Sascha L. Teichmann</a> 26 * @author <a href="mailto:sascha.teichmann@intevation.de">Sascha L. Teichmann</a>
27 */ 27 */
28 public class RestApp 28 public class RestApp extends Application {
29 extends Application 29
30 {
31 /** 30 /**
32 * The central artifact database instance to work with. 31 * The central artifact database instance to work with.
33 */ 32 */
34 protected ArtifactDatabase database; 33 private final ArtifactDatabase database;
35
36 /**
37 * Default constructor
38 */
39 public RestApp() {
40 }
41
42 public RestApp(Context context, ArtifactDatabase database) {
43 super(context);
44 this.database = database;
45 }
46 34
47 /** 35 /**
48 * Constructor to create REST appliction bound to a specific 36 * Constructor to create REST appliction bound to a specific
49 * artifact database. 37 * artifact database.
50 * 38 *
51 * @param database The artifact database to be used. 39 * @param database
40 * The artifact database to be used.
52 */ 41 */
53 public RestApp(ArtifactDatabase database) { 42 public RestApp(final ArtifactDatabase database) {
54 this.database = database; 43 this.database = database;
55 } 44 }
56 45
57 /** 46 /**
58 * Overwrites the createRoot() method of Application to 47 * Overwrites the createRoot() method of Application to
61 * @return The root of the URL tree exposed by the HTTP server. 50 * @return The root of the URL tree exposed by the HTTP server.
62 */ 51 */
63 @Override 52 @Override
64 public Restlet createRoot() { 53 public Restlet createRoot() {
65 54
66 Context context = getContext(); 55 final Context context = getContext();
67 56
68 ConcurrentMap map = context.getAttributes(); 57 final ConcurrentMap<String, Object> map = context.getAttributes();
69 map.put("database", database); 58 map.put("database", this.database);
70 59
71 Router router = new Router(context); 60 final Router router = new Router(context);
72 61
73 router.attach(ServicesResource.PATH, ServicesResource.class); 62 router.attach(ServicesResource.PATH, ServicesResource.class);
74 router.attach(ServiceResource.PATH, ServiceResource.class); 63 router.attach(ServiceResource.PATH, ServiceResource.class);
75 router.attach(FactoriesResource.PATH, FactoriesResource.class); 64 router.attach(FactoriesResource.PATH, FactoriesResource.class);
76 router.attach(CreateResource.PATH, CreateResource.class); 65 router.attach(CreateResource.PATH, CreateResource.class);
77 router.attach(ArtifactResource.PATH, ArtifactResource.class); 66 router.attach(ArtifactResource.PATH, ArtifactResource.class);
78 router.attach(ArtifactOutResource.PATH, ArtifactOutResource.class); 67 router.attach(ArtifactOutResource.PATH, ArtifactOutResource.class);
79 router.attach(ExportResource.PATH, ExportResource.class); 68 router.attach(ExportResource.PATH, ExportResource.class);
80 router.attach(ImportResource.PATH, ImportResource.class); 69 router.attach(ImportResource.PATH, ImportResource.class);
81 router.attach(CreateUserResource.PATH, CreateUserResource.class); 70 router.attach(CreateUserResource.PATH, CreateUserResource.class);
82 router.attach(ListUsersResource.PATH, ListUsersResource.class); 71 router.attach(ListUsersResource.PATH, ListUsersResource.class);
83 router.attach(UserResource.PATH, UserResource.class); 72 router.attach(UserResource.PATH, UserResource.class);
84 router.attach(FindUserResource.PATH, FindUserResource.class); 73 router.attach(FindUserResource.PATH, FindUserResource.class);
85 router.attach( 74 router.attach(CreateCollectionResource.PATH, CreateCollectionResource.class);
86 CreateCollectionResource.PATH, CreateCollectionResource.class); 75 router.attach(ListCollectionsResource.PATH, ListCollectionsResource.class);
87 router.attach( 76 router.attach(CollectionResource.PATH, CollectionResource.class);
88 ListCollectionsResource.PATH, ListCollectionsResource.class); 77 router.attach(CollectionOutResource.PATH, CollectionOutResource.class);
89 router.attach( 78
90 CollectionResource.PATH, CollectionResource.class); 79 /* register any additional services */
91 router.attach( 80 final Map<String, Class<?>> restServices = this.database.getRestServices();
92 CollectionOutResource.PATH, CollectionOutResource.class); 81 for (final Entry<String, Class<?>> entry : restServices.entrySet())
82 router.attach(entry.getKey(), entry.getValue());
93 83
94 return router; 84 return router;
95 } 85 }
96 } 86 }
97 // vim:set ts=4 sw=4 si et sta sts=4 fenc=utf8 :

http://dive4elements.wald.intevation.org