annotate 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
rev   line source
100
933bbc9fc11f Added license file and license headers.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents: 88
diff changeset
1 /*
933bbc9fc11f Added license file and license headers.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents: 88
diff changeset
2 * Copyright (c) 2010 by Intevation GmbH
933bbc9fc11f Added license file and license headers.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents: 88
diff changeset
3 *
933bbc9fc11f Added license file and license headers.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents: 88
diff changeset
4 * This program is free software under the LGPL (>=v2.1)
933bbc9fc11f Added license file and license headers.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents: 88
diff changeset
5 * Read the file LGPL.txt coming with the software for details
933bbc9fc11f Added license file and license headers.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents: 88
diff changeset
6 * or visit http://www.gnu.org/licenses/ if it does not exist.
933bbc9fc11f Added license file and license headers.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents: 88
diff changeset
7 */
933bbc9fc11f Added license file and license headers.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents: 88
diff changeset
8
475
415df0fc4fa1 Fixed maven group ids
Sascha L. Teichmann <teichmann@intevation.de>
parents: 473
diff changeset
9 package org.dive4elements.artifactdatabase.rest;
19
1259d192e3c3 * New configuration based on config directory
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
10
562
05caf2e731d0 Allow to add additional restful services via configuration.
gernotbelger
parents: 475
diff changeset
11 import java.util.Map;
05caf2e731d0 Allow to add additional restful services via configuration.
gernotbelger
parents: 475
diff changeset
12 import java.util.Map.Entry;
20
ff666592c1c3 Added factory listing '/factories' to web app.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 19
diff changeset
13 import java.util.concurrent.ConcurrentMap;
ff666592c1c3 Added factory listing '/factories' to web app.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 19
diff changeset
14
562
05caf2e731d0 Allow to add additional restful services via configuration.
gernotbelger
parents: 475
diff changeset
15 import org.dive4elements.artifacts.ArtifactDatabase;
19
1259d192e3c3 * New configuration based on config directory
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
16 import org.restlet.Application;
79
f69e5b87f05f Implementation to export artifacts as xml (applied patch from issue208 by SLT).
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents: 77
diff changeset
17 import org.restlet.Context;
19
1259d192e3c3 * New configuration based on config directory
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
18 import org.restlet.Restlet;
1259d192e3c3 * New configuration based on config directory
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
19 import org.restlet.routing.Router;
1259d192e3c3 * New configuration based on config directory
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
20
1259d192e3c3 * New configuration based on config directory
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
21 /**
88
69c84cf7c5d7 Added javadoc to the REST package of the artifact database (complete).
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 80
diff changeset
22 * This is the core REST application that binds the serveral resources
69c84cf7c5d7 Added javadoc to the REST package of the artifact database (complete).
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 80
diff changeset
23 * used to manage the artifact database to the HTTP server provided
69c84cf7c5d7 Added javadoc to the REST package of the artifact database (complete).
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 80
diff changeset
24 * by the Restlet framework.
19
1259d192e3c3 * New configuration based on config directory
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
25 *
77
48d1a9a082c2 Bring @author javadoc tags in form '@author <a href="john.doe@example.com">John Doe</a>'
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 73
diff changeset
26 * @author <a href="mailto:sascha.teichmann@intevation.de">Sascha L. Teichmann</a>
19
1259d192e3c3 * New configuration based on config directory
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
27 */
562
05caf2e731d0 Allow to add additional restful services via configuration.
gernotbelger
parents: 475
diff changeset
28 public class RestApp extends Application {
05caf2e731d0 Allow to add additional restful services via configuration.
gernotbelger
parents: 475
diff changeset
29
88
69c84cf7c5d7 Added javadoc to the REST package of the artifact database (complete).
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 80
diff changeset
30 /**
69c84cf7c5d7 Added javadoc to the REST package of the artifact database (complete).
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 80
diff changeset
31 * The central artifact database instance to work with.
69c84cf7c5d7 Added javadoc to the REST package of the artifact database (complete).
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 80
diff changeset
32 */
562
05caf2e731d0 Allow to add additional restful services via configuration.
gernotbelger
parents: 475
diff changeset
33 private final ArtifactDatabase database;
264
fa0d9acea897 flys/issue65: Added Jetty HTTP server as a replacement option to foster better scalability. Needs testing.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 143
diff changeset
34
88
69c84cf7c5d7 Added javadoc to the REST package of the artifact database (complete).
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 80
diff changeset
35 /**
69c84cf7c5d7 Added javadoc to the REST package of the artifact database (complete).
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 80
diff changeset
36 * Constructor to create REST appliction bound to a specific
69c84cf7c5d7 Added javadoc to the REST package of the artifact database (complete).
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 80
diff changeset
37 * artifact database.
69c84cf7c5d7 Added javadoc to the REST package of the artifact database (complete).
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 80
diff changeset
38 *
562
05caf2e731d0 Allow to add additional restful services via configuration.
gernotbelger
parents: 475
diff changeset
39 * @param database
05caf2e731d0 Allow to add additional restful services via configuration.
gernotbelger
parents: 475
diff changeset
40 * The artifact database to be used.
88
69c84cf7c5d7 Added javadoc to the REST package of the artifact database (complete).
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 80
diff changeset
41 */
562
05caf2e731d0 Allow to add additional restful services via configuration.
gernotbelger
parents: 475
diff changeset
42 public RestApp(final ArtifactDatabase database) {
19
1259d192e3c3 * New configuration based on config directory
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
43 this.database = database;
1259d192e3c3 * New configuration based on config directory
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
44 }
1259d192e3c3 * New configuration based on config directory
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
45
88
69c84cf7c5d7 Added javadoc to the REST package of the artifact database (complete).
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 80
diff changeset
46 /**
69c84cf7c5d7 Added javadoc to the REST package of the artifact database (complete).
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 80
diff changeset
47 * Overwrites the createRoot() method of Application to
69c84cf7c5d7 Added javadoc to the REST package of the artifact database (complete).
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 80
diff changeset
48 * build the resource tree to form the exposed server URLs.
69c84cf7c5d7 Added javadoc to the REST package of the artifact database (complete).
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 80
diff changeset
49 *
69c84cf7c5d7 Added javadoc to the REST package of the artifact database (complete).
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 80
diff changeset
50 * @return The root of the URL tree exposed by the HTTP server.
69c84cf7c5d7 Added javadoc to the REST package of the artifact database (complete).
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 80
diff changeset
51 */
69c84cf7c5d7 Added javadoc to the REST package of the artifact database (complete).
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 80
diff changeset
52 @Override
19
1259d192e3c3 * New configuration based on config directory
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
53 public Restlet createRoot() {
1259d192e3c3 * New configuration based on config directory
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
54
562
05caf2e731d0 Allow to add additional restful services via configuration.
gernotbelger
parents: 475
diff changeset
55 final Context context = getContext();
20
ff666592c1c3 Added factory listing '/factories' to web app.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 19
diff changeset
56
562
05caf2e731d0 Allow to add additional restful services via configuration.
gernotbelger
parents: 475
diff changeset
57 final ConcurrentMap<String, Object> map = context.getAttributes();
05caf2e731d0 Allow to add additional restful services via configuration.
gernotbelger
parents: 475
diff changeset
58 map.put("database", this.database);
20
ff666592c1c3 Added factory listing '/factories' to web app.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 19
diff changeset
59
562
05caf2e731d0 Allow to add additional restful services via configuration.
gernotbelger
parents: 475
diff changeset
60 final Router router = new Router(context);
05caf2e731d0 Allow to add additional restful services via configuration.
gernotbelger
parents: 475
diff changeset
61
05caf2e731d0 Allow to add additional restful services via configuration.
gernotbelger
parents: 475
diff changeset
62 router.attach(ServicesResource.PATH, ServicesResource.class);
05caf2e731d0 Allow to add additional restful services via configuration.
gernotbelger
parents: 475
diff changeset
63 router.attach(ServiceResource.PATH, ServiceResource.class);
05caf2e731d0 Allow to add additional restful services via configuration.
gernotbelger
parents: 475
diff changeset
64 router.attach(FactoriesResource.PATH, FactoriesResource.class);
05caf2e731d0 Allow to add additional restful services via configuration.
gernotbelger
parents: 475
diff changeset
65 router.attach(CreateResource.PATH, CreateResource.class);
05caf2e731d0 Allow to add additional restful services via configuration.
gernotbelger
parents: 475
diff changeset
66 router.attach(ArtifactResource.PATH, ArtifactResource.class);
29
22b03d5c84c5 Added REST out handler for artifacts reachable via HTTP GET '/artifact/{uuid}/{type}'.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 27
diff changeset
67 router.attach(ArtifactOutResource.PATH, ArtifactOutResource.class);
562
05caf2e731d0 Allow to add additional restful services via configuration.
gernotbelger
parents: 475
diff changeset
68 router.attach(ExportResource.PATH, ExportResource.class);
05caf2e731d0 Allow to add additional restful services via configuration.
gernotbelger
parents: 475
diff changeset
69 router.attach(ImportResource.PATH, ImportResource.class);
05caf2e731d0 Allow to add additional restful services via configuration.
gernotbelger
parents: 475
diff changeset
70 router.attach(CreateUserResource.PATH, CreateUserResource.class);
05caf2e731d0 Allow to add additional restful services via configuration.
gernotbelger
parents: 475
diff changeset
71 router.attach(ListUsersResource.PATH, ListUsersResource.class);
05caf2e731d0 Allow to add additional restful services via configuration.
gernotbelger
parents: 475
diff changeset
72 router.attach(UserResource.PATH, UserResource.class);
05caf2e731d0 Allow to add additional restful services via configuration.
gernotbelger
parents: 475
diff changeset
73 router.attach(FindUserResource.PATH, FindUserResource.class);
05caf2e731d0 Allow to add additional restful services via configuration.
gernotbelger
parents: 475
diff changeset
74 router.attach(CreateCollectionResource.PATH, CreateCollectionResource.class);
05caf2e731d0 Allow to add additional restful services via configuration.
gernotbelger
parents: 475
diff changeset
75 router.attach(ListCollectionsResource.PATH, ListCollectionsResource.class);
05caf2e731d0 Allow to add additional restful services via configuration.
gernotbelger
parents: 475
diff changeset
76 router.attach(CollectionResource.PATH, CollectionResource.class);
05caf2e731d0 Allow to add additional restful services via configuration.
gernotbelger
parents: 475
diff changeset
77 router.attach(CollectionOutResource.PATH, CollectionOutResource.class);
05caf2e731d0 Allow to add additional restful services via configuration.
gernotbelger
parents: 475
diff changeset
78
05caf2e731d0 Allow to add additional restful services via configuration.
gernotbelger
parents: 475
diff changeset
79 /* register any additional services */
05caf2e731d0 Allow to add additional restful services via configuration.
gernotbelger
parents: 475
diff changeset
80 final Map<String, Class<?>> restServices = this.database.getRestServices();
05caf2e731d0 Allow to add additional restful services via configuration.
gernotbelger
parents: 475
diff changeset
81 for (final Entry<String, Class<?>> entry : restServices.entrySet())
05caf2e731d0 Allow to add additional restful services via configuration.
gernotbelger
parents: 475
diff changeset
82 router.attach(entry.getKey(), entry.getValue());
19
1259d192e3c3 * New configuration based on config directory
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
83
1259d192e3c3 * New configuration based on config directory
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
84 return router;
1259d192e3c3 * New configuration based on config directory
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
85 }
562
05caf2e731d0 Allow to add additional restful services via configuration.
gernotbelger
parents: 475
diff changeset
86 }

http://dive4elements.wald.intevation.org