FluentRoute.java revision 41c1067de1a5fa74255d311e5362548ae41f9a04
842ae4bd224140319ae7feec1872b93dfd491143fielding* The contents of this file are subject to the terms of the Common Development and
842ae4bd224140319ae7feec1872b93dfd491143fielding* Distribution License (the License). You may not use this file except in compliance with the
842ae4bd224140319ae7feec1872b93dfd491143fielding* You can obtain a copy of the License at legal/CDDLv1.0.txt. See the License for the
56ab8639aed4d3b2f031d9c1160c5f40af01bdebjerenkrantz* specific language governing permission and limitations under the License.
56ab8639aed4d3b2f031d9c1160c5f40af01bdebjerenkrantz* When distributing Covered Software, include this CDDL Header Notice in each file and include
56ab8639aed4d3b2f031d9c1160c5f40af01bdebjerenkrantz* the License file at legal/CDDLv1.0.txt. If applicable, add the following below the CDDL
56ab8639aed4d3b2f031d9c1160c5f40af01bdebjerenkrantz* Header, with the fields enclosed by brackets [] replaced by your own identifying
56ab8639aed4d3b2f031d9c1160c5f40af01bdebjerenkrantz* information: "Portions copyright [year] [name of copyright owner]".
56ab8639aed4d3b2f031d9c1160c5f40af01bdebjerenkrantz* Copyright 2014 ForgeRock AS.
56ab8639aed4d3b2f031d9c1160c5f40af01bdebjerenkrantzimport org.forgerock.authz.filter.crest.api.CrestAuthorizationModule;
56ab8639aed4d3b2f031d9c1160c5f40af01bdebjerenkrantzimport org.forgerock.json.resource.CollectionResourceProvider;
56ab8639aed4d3b2f031d9c1160c5f40af01bdebjerenkrantzimport org.forgerock.json.resource.RequestHandler;
56ab8639aed4d3b2f031d9c1160c5f40af01bdebjerenkrantzimport org.forgerock.json.resource.SingletonResourceProvider;
56ab8639aed4d3b2f031d9c1160c5f40af01bdebjerenkrantzimport org.forgerock.json.resource.VersionHandler;
56ab8639aed4d3b2f031d9c1160c5f40af01bdebjerenkrantzimport org.forgerock.openam.rest.authz.LoggingAuthzModule;
56ab8639aed4d3b2f031d9c1160c5f40af01bdebjerenkrantzimport org.forgerock.openam.rest.resource.CrestRouter;
56ab8639aed4d3b2f031d9c1160c5f40af01bdebjerenkrantz * Class representing a Route which can be added to a FluentRouter. The FluentRouter itself is
56ab8639aed4d3b2f031d9c1160c5f40af01bdebjerenkrantz * responsible for creating the FluentRoute (making the API fluent), and the calling method for
56ab8639aed4d3b2f031d9c1160c5f40af01bdebjerenkrantz * adding these FluentRoutes to the FluentRouter adding any necessary filters/versions, etc.
56ab8639aed4d3b2f031d9c1160c5f40af01bdebjerenkrantz * @see org.forgerock.openam.rest.RestEndpoints
56ab8639aed4d3b2f031d9c1160c5f40af01bdebjerenkrantz * @since 12.0.0
56ab8639aed4d3b2f031d9c1160c5f40af01bdebjerenkrantzpublic class FluentRoute implements FluentVersion {
56ab8639aed4d3b2f031d9c1160c5f40af01bdebjerenkrantz private final List<CrestAuthorizationModule> modules;
56ab8639aed4d3b2f031d9c1160c5f40af01bdebjerenkrantz FluentRoute(CrestRouter router, String uriTemplate) {
56ab8639aed4d3b2f031d9c1160c5f40af01bdebjerenkrantz this.modules = new ArrayList<CrestAuthorizationModule>();
56ab8639aed4d3b2f031d9c1160c5f40af01bdebjerenkrantz * Add an authorization module through which the request must pass
36ef8f77bffe75d1aa327882be1b5bdbe2ff567asf * if it is to reach its destination.
94e21bbbd0f0f960317594da47734c4b7f5d3ec4rpluem * @param module authorization filter for the request.
94e21bbbd0f0f960317594da47734c4b7f5d3ec4rpluem * @param moduleReference the name of the authorization filter, referenced in logs.
74e7f6c55fd67b10cb400b3f6d1dc718a303d944minfrin * @return this FluentRoute (fluent API).
56ab8639aed4d3b2f031d9c1160c5f40af01bdebjerenkrantz public FluentRoute through(Class<? extends CrestAuthorizationModule> module, String moduleReference) {
56ab8639aed4d3b2f031d9c1160c5f40af01bdebjerenkrantz this.modules.add(new LoggingAuthzModule(get(module), moduleReference));
56ab8639aed4d3b2f031d9c1160c5f40af01bdebjerenkrantz return this;
74e7f6c55fd67b10cb400b3f6d1dc718a303d944minfrin * Sets the version this Route is for.
74e7f6c55fd67b10cb400b3f6d1dc718a303d944minfrin * @param version the version for this route.
74e7f6c55fd67b10cb400b3f6d1dc718a303d944minfrin * @return a FluentTo connecting this route with this version.
ba1858598da91e42b574eee1b69ab485fbd0d1d5ylavic * Return the authorization modules which must be passed for a request to be successfully routed to
56ab8639aed4d3b2f031d9c1160c5f40af01bdebjerenkrantz * its resource provider.
74e7f6c55fd67b10cb400b3f6d1dc718a303d944minfrin * @return An array of CrestAuthorizationModules
74e7f6c55fd67b10cb400b3f6d1dc718a303d944minfrin return modules.toArray(new CrestAuthorizationModule[modules.size()]);
74e7f6c55fd67b10cb400b3f6d1dc718a303d944minfrin * Adds a route to a version of the resource pointed at by this FluentRoute, which is
74e7f6c55fd67b10cb400b3f6d1dc718a303d944minfrin * provided by a CollectionResourceProvider.
836587f1b2cd2cc99ee7dfb0c0f872f03ce8632drpluem * @param version The version of the resource pointed to.
b1cf8b6c70a42f499ea03b61997bb8667810d285minfrin * @param provider The provider of the resource.
74e7f6c55fd67b10cb400b3f6d1dc718a303d944minfrin void addVersion(String version, CollectionResourceProvider provider) {
74e7f6c55fd67b10cb400b3f6d1dc718a303d944minfrin * Adds a route to a version of the resource pointed at by this FluentRoute, which is
74e7f6c55fd67b10cb400b3f6d1dc718a303d944minfrin * provided by a SingletonResourceProvider.
dcdce2058e8e657eb3b2f653461cbef0e89d9173niq * @param version The version of the resource pointed to.
470c2663449af7b1ba64f9e67c3709371f6825acrpluem * @param provider The provider of the resource.
74e7f6c55fd67b10cb400b3f6d1dc718a303d944minfrin void addVersion(String version, SingletonResourceProvider provider) {
74e7f6c55fd67b10cb400b3f6d1dc718a303d944minfrin * Adds a route to a version of the resource pointed at by this FluentRoute, which is
74e7f6c55fd67b10cb400b3f6d1dc718a303d944minfrin * provided by a RequestHandler.
74e7f6c55fd67b10cb400b3f6d1dc718a303d944minfrin * @param version The version of the resource pointed to.
74e7f6c55fd67b10cb400b3f6d1dc718a303d944minfrin * @param handler The provider of the resource.
74e7f6c55fd67b10cb400b3f6d1dc718a303d944minfrin void addVersion(RoutingMode mode, String version, RequestHandler handler) {