From 9cfc08902f5d1a22f4f5436b0facc8c047d45ed6 Mon Sep 17 00:00:00 2001
From: Matthew Swift <matthew.swift@forgerock.com>
Date: Thu, 25 Aug 2016 14:28:39 +0000
Subject: [PATCH] OPENDJ-3160 Factor out DN template support into separate class

---
 opendj-rest2ldap/src/main/java/org/forgerock/opendj/rest2ldap/Rest2Ldap.java |   59 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++-
 1 files changed, 58 insertions(+), 1 deletions(-)

diff --git a/opendj-rest2ldap/src/main/java/org/forgerock/opendj/rest2ldap/Rest2Ldap.java b/opendj-rest2ldap/src/main/java/org/forgerock/opendj/rest2ldap/Rest2Ldap.java
index e0f8920..1b7b2e5 100644
--- a/opendj-rest2ldap/src/main/java/org/forgerock/opendj/rest2ldap/Rest2Ldap.java
+++ b/opendj-rest2ldap/src/main/java/org/forgerock/opendj/rest2ldap/Rest2Ldap.java
@@ -26,17 +26,28 @@
 import java.util.LinkedHashMap;
 import java.util.Map;
 
+import org.forgerock.json.resource.ActionRequest;
+import org.forgerock.json.resource.ActionResponse;
 import org.forgerock.json.resource.BadRequestException;
+import org.forgerock.json.resource.CreateRequest;
+import org.forgerock.json.resource.DeleteRequest;
 import org.forgerock.json.resource.ForbiddenException;
 import org.forgerock.json.resource.InternalServerErrorException;
 import org.forgerock.json.resource.NotFoundException;
+import org.forgerock.json.resource.PatchRequest;
 import org.forgerock.json.resource.PermanentException;
 import org.forgerock.json.resource.PreconditionFailedException;
+import org.forgerock.json.resource.QueryRequest;
+import org.forgerock.json.resource.QueryResourceHandler;
+import org.forgerock.json.resource.QueryResponse;
+import org.forgerock.json.resource.ReadRequest;
 import org.forgerock.json.resource.RequestHandler;
 import org.forgerock.json.resource.ResourceException;
+import org.forgerock.json.resource.ResourceResponse;
 import org.forgerock.json.resource.RetryableException;
 import org.forgerock.json.resource.Router;
 import org.forgerock.json.resource.ServiceUnavailableException;
+import org.forgerock.json.resource.UpdateRequest;
 import org.forgerock.opendj.ldap.AssertionFailureException;
 import org.forgerock.opendj.ldap.AttributeDescription;
 import org.forgerock.opendj.ldap.AuthenticationException;
@@ -51,9 +62,11 @@
 import org.forgerock.opendj.ldap.ResultCode;
 import org.forgerock.opendj.ldap.TimeoutResultException;
 import org.forgerock.opendj.ldap.schema.Schema;
+import org.forgerock.services.context.Context;
 import org.forgerock.util.Option;
 import org.forgerock.util.Options;
 import org.forgerock.util.Reject;
+import org.forgerock.util.promise.Promise;
 
 /**
  * Provides methods for constructing Rest2Ldap protocol gateways. Applications construct a new Rest2Ldap
@@ -359,7 +372,51 @@
         Reject.ifTrue(!resources.containsKey(resourceId), "unrecognized resource '" + resourceId + "'");
         final SubResourceSingleton root = singletonOf(resourceId);
         root.build(this, null);
-        return root.addRoutes(new Router());
+        return rest2LdapContext(root.addRoutes(new Router()));
+    }
+
+    private RequestHandler rest2LdapContext(final RequestHandler delegate) {
+        return new RequestHandler() {
+            public Promise<ActionResponse, ResourceException> handleAction(final Context context,
+                                                                           final ActionRequest request) {
+                return delegate.handleAction(wrap(context), request);
+            }
+
+            public Promise<ResourceResponse, ResourceException> handleCreate(final Context context,
+                                                                             final CreateRequest request) {
+                return delegate.handleCreate(wrap(context), request);
+            }
+
+            public Promise<ResourceResponse, ResourceException> handleDelete(final Context context,
+                                                                             final DeleteRequest request) {
+                return delegate.handleDelete(wrap(context), request);
+            }
+
+            public Promise<ResourceResponse, ResourceException> handlePatch(final Context context,
+                                                                            final PatchRequest request) {
+                return delegate.handlePatch(wrap(context), request);
+            }
+
+            public Promise<QueryResponse, ResourceException> handleQuery(final Context context,
+                                                                         final QueryRequest request,
+                                                                         final QueryResourceHandler handler) {
+                return delegate.handleQuery(wrap(context), request, handler);
+            }
+
+            public Promise<ResourceResponse, ResourceException> handleRead(final Context context,
+                                                                           final ReadRequest request) {
+                return delegate.handleRead(wrap(context), request);
+            }
+
+            public Promise<ResourceResponse, ResourceException> handleUpdate(final Context context,
+                                                                             final UpdateRequest request) {
+                return delegate.handleUpdate(wrap(context), request);
+            }
+
+            private Context wrap(final Context context) {
+                return new Rest2LdapContext(context, Rest2Ldap.this);
+            }
+        };
     }
 
     Options getOptions() {

--
Gitblit v1.10.0