From a2bc68638f55ae0ad7b9e3a04c7a3c02d01384f8 Mon Sep 17 00:00:00 2001
From: Matthew Swift <matthew.swift@forgerock.com>
Date: Wed, 13 Feb 2013 23:44:11 +0000
Subject: [PATCH] Partial fix for OPENDJ-758 : Implement configurable update policy for simple and default mappers

---
 opendj3/opendj-rest2ldap/src/main/java/org/forgerock/opendj/rest2ldap/AttributeMapper.java |   49 ++++++++++++++++++++++++++++++++-----------------
 1 files changed, 32 insertions(+), 17 deletions(-)

diff --git a/opendj3/opendj-rest2ldap/src/main/java/org/forgerock/opendj/rest2ldap/AttributeMapper.java b/opendj3/opendj-rest2ldap/src/main/java/org/forgerock/opendj/rest2ldap/AttributeMapper.java
index cdb9c5c..70f699a 100644
--- a/opendj3/opendj-rest2ldap/src/main/java/org/forgerock/opendj/rest2ldap/AttributeMapper.java
+++ b/opendj3/opendj-rest2ldap/src/main/java/org/forgerock/opendj/rest2ldap/AttributeMapper.java
@@ -16,7 +16,6 @@
 package org.forgerock.opendj.rest2ldap;
 
 import java.util.List;
-import java.util.Map;
 import java.util.Set;
 
 import org.forgerock.json.fluent.JsonPointer;
@@ -42,8 +41,7 @@
 
     /**
      * Adds the names of the LDAP attributes required by this attribute mapper
-     * which are associated with the provided resource attribute to the provided
-     * set.
+     * to the provided set.
      * <p>
      * Implementations should only add the names of attributes found in the LDAP
      * entry directly associated with the resource.
@@ -51,7 +49,9 @@
      * @param c
      *            The context.
      * @param jsonAttribute
-     *            The name of the resource attribute requested by the client.
+     *            The name of the requested sub-attribute within this mapper or
+     *            root if all attributes associated with this mapper have been
+     *            requested.
      * @param ldapAttributes
      *            The set into which the required LDAP attribute names should be
      *            put.
@@ -63,11 +63,7 @@
      * filter representation, invoking a completion handler once the
      * transformation has completed.
      * <p>
-     * If this attribute mapper is not responsible for mapping the provided JSON
-     * attribute then the result handler's {@link ResultHandler#handleResult
-     * handleResult} method must be invoked with the value {@code null}. If this
-     * attribute mapper is responsible for mapping the JSON attribute, but an
-     * error occurred while constructing the LDAP filter, then the result
+     * If an error occurred while constructing the LDAP filter, then the result
      * handler's {@link ResultHandler#handleError handleError} method must be
      * invoked with an appropriate exception indicating the problem which
      * occurred.
@@ -77,7 +73,9 @@
      * @param type
      *            The type of REST comparison filter.
      * @param jsonAttribute
-     *            The name of the resource attribute to be filtered.
+     *            The name of the targeted sub-attribute within this mapper or
+     *            root if all attributes associated with this mapper have been
+     *            targeted by the filter.
      * @param operator
      *            The name of the extended operator to use for the comparison,
      *            or {@code null} if {@code type} is not
@@ -92,13 +90,21 @@
             String operator, Object valueAssertion, ResultHandler<Filter> h);
 
     /**
-     * Transforms attributes contained in the provided LDAP entry to JSON
-     * content, invoking a completion handler once the transformation has
-     * completed.
+     * Maps one or more LDAP attributes to their JSON representation, invoking a
+     * completion handler once the transformation has completed.
      * <p>
      * This method is invoked whenever an LDAP entry is converted to a REST
      * resource, i.e. when responding to read, query, create, put, or patch
      * requests.
+     * <p>
+     * If the LDAP attributes are not present in the entry, perhaps because they
+     * are optional, then implementations should invoke the result handler's
+     * {@link ResultHandler#handleResult handleResult} method with a result of
+     * {@code null}. If the LDAP attributes cannot be mapped for any other
+     * reason, perhaps because they are required but missing, or they contain
+     * unexpected content, then the result handler's
+     * {@link ResultHandler#handleError handleError} method must be invoked with
+     * an appropriate exception indicating the problem which occurred.
      *
      * @param c
      *            The context.
@@ -107,20 +113,29 @@
      * @param h
      *            The result handler.
      */
-    abstract void toJSON(Context c, Entry e, ResultHandler<Map<String, Object>> h);
+    abstract void toJSON(Context c, Entry e, ResultHandler<JsonValue> h);
 
     /**
-     * Transforms JSON content in the provided JSON value to LDAP attributes,
-     * invoking a completion handler once the transformation has completed.
+     * Maps a JSON value to one or more LDAP attributes, invoking a completion
+     * handler once the transformation has completed.
      * <p>
      * This method is invoked whenever a REST resource is converted to an LDAP
      * entry or LDAP modification, i.e. when performing create, put, or patch
      * requests.
+     * <p>
+     * If the JSON value corresponding to this mapper is not present in the
+     * resource then this method will be invoked with a value of {@code null}.
+     * It is the responsibility of the mapper implementation to take appropriate
+     * action in this case, perhaps by substituting default LDAP values, or by
+     * rejecting the update by invoking the result handler's
+     * {@link ResultHandler#handleError handleError} method.
      *
      * @param c
      *            The context.
      * @param v
-     *            The JSON value to be converted to LDAP attributes.
+     *            The JSON value to be converted to LDAP attributes, which may
+     *            be {@code null} indicating that the JSON value was not present
+     *            in the resource.
      * @param h
      *            The result handler.
      */

--
Gitblit v1.10.0