Mercurial > dive4elements > framework
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 } |