From 4ca1423e387874accc55c1d0ffcada3eddb833c5 Mon Sep 17 00:00:00 2001
From: Matthew Swift <matthew.swift@forgerock.com>
Date: Wed, 01 May 2013 00:12:40 +0000
Subject: [PATCH] Partial fix for CREST-3: Add patch support
---
opendj3/opendj-rest2ldap/src/main/java/org/forgerock/opendj/rest2ldap/AttributeMapper.java | 90 +++++++++++++++++++++++++++++++++++++-------
1 files changed, 75 insertions(+), 15 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 02cc5d6..53a7602 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
@@ -20,7 +20,9 @@
import org.forgerock.json.fluent.JsonPointer;
import org.forgerock.json.fluent.JsonValue;
+import org.forgerock.json.resource.PatchOperation;
import org.forgerock.json.resource.ResultHandler;
+import org.forgerock.opendj.ldap.Attribute;
import org.forgerock.opendj.ldap.Entry;
import org.forgerock.opendj.ldap.Filter;
import org.forgerock.opendj.ldap.Modification;
@@ -40,6 +42,33 @@
}
/**
+ * Maps a JSON value to one or more LDAP attributes, invoking a completion
+ * handler once the transformation has completed. This method is invoked
+ * when a REST resource is created using a create request.
+ * <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 path
+ * The pointer from the root of the JSON resource to this
+ * attribute mapper. This may be used when constructing error
+ * messages.
+ * @param v
+ * 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.
+ */
+ abstract void create(Context c, JsonPointer path, JsonValue v, ResultHandler<List<Attribute>> h);
+
+ /**
* Adds the names of the LDAP attributes required by this attribute mapper
* to the provided set.
* <p>
@@ -48,10 +77,14 @@
*
* @param c
* The context.
- * @param jsonAttribute
- * The name of the requested sub-attribute within this mapper or
+ * @param path
+ * The pointer from the root of the JSON resource to this
+ * attribute mapper. This may be used when constructing error
+ * messages.
+ * @param subPath
+ * The targeted JSON field relative to this attribute mapper, or
* root if all attributes associated with this mapper have been
- * requested.
+ * targeted.
* @param ldapAttributes
* The set into which the required LDAP attribute names should be
* put.
@@ -71,12 +104,16 @@
*
* @param c
* The context.
+ * @param path
+ * The pointer from the root of the JSON resource to this
+ * attribute mapper. This may be used when constructing error
+ * messages.
+ * @param subPath
+ * The targeted JSON field relative to this attribute mapper, or
+ * root if all attributes associated with this mapper have been
+ * targeted.
* @param type
* The type of REST comparison filter.
- * @param jsonAttribute
- * 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
@@ -91,6 +128,28 @@
String operator, Object valueAssertion, ResultHandler<Filter> h);
/**
+ * Maps a JSON patch operation to one or more LDAP modifications, invoking a
+ * completion handler once the transformation has completed. This method is
+ * invoked when a REST resource is modified using a patch request.
+ *
+ * @param c
+ * The context.
+ * @param path
+ * The pointer from the root of the JSON resource to this
+ * attribute mapper. This may be used when constructing error
+ * messages.
+ * @param operation
+ * The JSON patch operation to be converted to LDAP
+ * modifications. The targeted JSON field will be relative to
+ * this attribute mapper, or root if all attributes associated
+ * with this mapper have been targeted.
+ * @param h
+ * The result handler.
+ */
+ abstract void patch(Context c, JsonPointer path, PatchOperation operation,
+ ResultHandler<List<Modification>> h);
+
+ /**
* Maps one or more LDAP attributes to their JSON representation, invoking a
* completion handler once the transformation has completed.
* <p>
@@ -109,20 +168,21 @@
*
* @param c
* The context.
+ * @param path
+ * The pointer from the root of the JSON resource to this
+ * attribute mapper. This may be used when constructing error
+ * messages.
* @param e
* The LDAP entry to be converted to JSON.
* @param h
* The result handler.
*/
- abstract void toJSON(Context c, JsonPointer path, Entry e, ResultHandler<JsonValue> h);
+ abstract void read(Context c, JsonPointer path, Entry e, ResultHandler<JsonValue> h);
/**
- * 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.
+ * Maps a JSON value to one or more LDAP modifications, invoking a
+ * completion handler once the transformation has completed. This method is
+ * invoked when a REST resource is modified using an update request.
* <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}.
@@ -140,7 +200,7 @@
* @param h
* The result handler.
*/
- abstract void toLDAP(Context c, JsonPointer path, Entry e, JsonValue v,
+ abstract void update(Context c, JsonPointer path, Entry e, JsonValue v,
ResultHandler<List<Modification>> h);
// TODO: methods for obtaining schema information (e.g. name, description,
--
Gitblit v1.10.0