Mercurial > dive4elements > framework
view 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 source
/* * Copyright (c) 2010 by Intevation GmbH * * This program is free software under the LGPL (>=v2.1) * Read the file LGPL.txt coming with the software for details * or visit http://www.gnu.org/licenses/ if it does not exist. */ package org.dive4elements.artifactdatabase.rest; 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; /** * This is the core REST application that binds the serveral resources * used to manage the artifact database to the HTTP server provided * by the Restlet framework. * * @author <a href="mailto:sascha.teichmann@intevation.de">Sascha L. Teichmann</a> */ public class RestApp extends Application { /** * The central artifact database instance to work with. */ private final ArtifactDatabase database; /** * Constructor to create REST appliction bound to a specific * artifact database. * * @param database * The artifact database to be used. */ public RestApp(final ArtifactDatabase database) { this.database = database; } /** * Overwrites the createRoot() method of Application to * build the resource tree to form the exposed server URLs. * * @return The root of the URL tree exposed by the HTTP server. */ @Override public Restlet createRoot() { final Context context = getContext(); final ConcurrentMap<String, Object> map = context.getAttributes(); map.put("database", this.database); 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); /* 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; } }