From d28b40a9868880bfeb999250eb7ca6fc731e6a87 Mon Sep 17 00:00:00 2001
From: Matthew Swift <matthew.swift@forgerock.com>
Date: Tue, 28 Jun 2016 21:19:00 +0000
Subject: [PATCH] OPENDJ-3186 Improve API version support in admin and rest2ldap endpoints

---
 opendj-rest2ldap/src/main/java/org/forgerock/opendj/rest2ldap/AbstractRequestHandler.java |   39 ++++++++++++++++++++++++++-------------
 1 files changed, 26 insertions(+), 13 deletions(-)

diff --git a/opendj-rest2ldap/src/main/java/org/forgerock/opendj/rest2ldap/AbstractRequestHandler.java b/opendj-rest2ldap/src/main/java/org/forgerock/opendj/rest2ldap/AbstractRequestHandler.java
index b0f427b..338a155 100644
--- a/opendj-rest2ldap/src/main/java/org/forgerock/opendj/rest2ldap/AbstractRequestHandler.java
+++ b/opendj-rest2ldap/src/main/java/org/forgerock/opendj/rest2ldap/AbstractRequestHandler.java
@@ -25,6 +25,7 @@
 import org.forgerock.json.resource.QueryResourceHandler;
 import org.forgerock.json.resource.QueryResponse;
 import org.forgerock.json.resource.ReadRequest;
+import org.forgerock.json.resource.Request;
 import org.forgerock.json.resource.RequestHandler;
 import org.forgerock.json.resource.ResourceException;
 import org.forgerock.json.resource.ResourceResponse;
@@ -34,51 +35,63 @@
 
 /**
  * An abstract base class from which request handlers may be easily implemented. The default implementation of each
- * method is to return the {@link ResourceException} passed in during construction.
+ * method is to invoke the {@link #handleRequest(Context, Request)} method.
  */
-abstract class AbstractRequestHandler implements RequestHandler {
-    private final ResourceException defaultErrorResponse;
-
-    AbstractRequestHandler(final ResourceException defaultErrorResponse) {
-        this.defaultErrorResponse = defaultErrorResponse;
+public abstract class AbstractRequestHandler implements RequestHandler {
+    /** Creates a new {@code AbstractRequestHandler}. */
+    protected AbstractRequestHandler() {
+        // Nothing to do.
     }
 
     @Override
     public Promise<ActionResponse, ResourceException> handleAction(final Context context, final ActionRequest request) {
-        return defaultErrorResponse.asPromise();
+        return handleRequest(context, request);
     }
 
     @Override
     public Promise<ResourceResponse, ResourceException> handleCreate(final Context context,
                                                                      final CreateRequest request) {
-        return defaultErrorResponse.asPromise();
+        return handleRequest(context, request);
     }
 
     @Override
     public Promise<ResourceResponse, ResourceException> handleDelete(final Context context,
                                                                      final DeleteRequest request) {
-        return defaultErrorResponse.asPromise();
+        return handleRequest(context, request);
     }
 
     @Override
     public Promise<ResourceResponse, ResourceException> handlePatch(final Context context, final PatchRequest request) {
-        return defaultErrorResponse.asPromise();
+        return handleRequest(context, request);
     }
 
     @Override
     public Promise<QueryResponse, ResourceException> handleQuery(final Context context, final QueryRequest request,
                                                                  final QueryResourceHandler handler) {
-        return defaultErrorResponse.asPromise();
+        return handleRequest(context, request);
     }
 
     @Override
     public Promise<ResourceResponse, ResourceException> handleRead(final Context context, final ReadRequest request) {
-        return defaultErrorResponse.asPromise();
+        return handleRequest(context, request);
     }
 
     @Override
     public Promise<ResourceResponse, ResourceException> handleUpdate(final Context context,
                                                                      final UpdateRequest request) {
-        return defaultErrorResponse.asPromise();
+        return handleRequest(context, request);
     }
+
+    /**
+     * Implement this method in order to provide a default behavior when processing requests.
+     *
+     * @param <V>
+     *         The type of response.
+     * @param context
+     *         The request context.
+     * @param request
+     *         The request.
+     * @return A {@code Promise} containing the result of the operation.
+     */
+    protected abstract <V> Promise<V, ResourceException> handleRequest(final Context context, final Request request);
 }

--
Gitblit v1.10.0