From 64b5d360e0121a3e5d4b6d395ab43f9b134b32ae Mon Sep 17 00:00:00 2001
From: Matthew Swift <matthew.swift@forgerock.com>
Date: Fri, 27 Apr 2012 17:30:29 +0000
Subject: [PATCH] Checkpoint current working copy.
---
opendj-sdk/opendj3/opendj-rest2ldap/src/main/java/org/forgerock/opendj/rest2ldap/LDAPResource.java | 219 ++++++++++++++++++++++++++++++++++++++++--------------
1 files changed, 162 insertions(+), 57 deletions(-)
diff --git a/opendj-sdk/opendj3/opendj-rest2ldap/src/main/java/org/forgerock/opendj/rest2ldap/LDAPResource.java b/opendj-sdk/opendj3/opendj-rest2ldap/src/main/java/org/forgerock/opendj/rest2ldap/LDAPResource.java
index ba2a5b1..579148f 100644
--- a/opendj-sdk/opendj3/opendj-rest2ldap/src/main/java/org/forgerock/opendj/rest2ldap/LDAPResource.java
+++ b/opendj-sdk/opendj3/opendj-rest2ldap/src/main/java/org/forgerock/opendj/rest2ldap/LDAPResource.java
@@ -16,6 +16,7 @@
package org.forgerock.opendj.rest2ldap;
+import java.util.ArrayList;
import java.util.LinkedHashSet;
import java.util.List;
import java.util.Set;
@@ -23,114 +24,218 @@
import org.forgerock.json.fluent.JsonPointer;
import org.forgerock.json.fluent.JsonValue;
import org.forgerock.opendj.ldap.Entry;
+import org.forgerock.opendj.ldap.ErrorResultException;
+import org.forgerock.opendj.ldap.ResultHandler;
+import org.forgerock.opendj.ldap.SearchResultHandler;
+import org.forgerock.opendj.ldap.responses.Result;
+import org.forgerock.opendj.ldap.responses.SearchResultEntry;
+import org.forgerock.opendj.ldap.responses.SearchResultReference;
+import org.forgerock.resource.exception.NotSupportedException;
+import org.forgerock.resource.exception.ResourceException;
+import org.forgerock.resource.provider.ActionRequest;
+import org.forgerock.resource.provider.ActionResultHandler;
+import org.forgerock.resource.provider.Context;
+import org.forgerock.resource.provider.CreateRequest;
+import org.forgerock.resource.provider.CreateResultHandler;
+import org.forgerock.resource.provider.DeleteRequest;
+import org.forgerock.resource.provider.DeleteResultHandler;
+import org.forgerock.resource.provider.PatchRequest;
+import org.forgerock.resource.provider.PatchResultHandler;
+import org.forgerock.resource.provider.QueryRequest;
+import org.forgerock.resource.provider.QueryResultHandler;
+import org.forgerock.resource.provider.ReadRequest;
+import org.forgerock.resource.provider.ReadResultHandler;
+import org.forgerock.resource.provider.Resource;
+import org.forgerock.resource.provider.UpdateRequest;
+import org.forgerock.resource.provider.UpdateResultHandler;
/**
*
*/
-public class LDAPResource {
- // FIXME: This will inherit from JsonResource.
- private EntryContainer container;
- private List<AttributeMapper> mappers;
+public class LDAPResource implements Resource {
private Set<String> allLDAPAttributes;
+ private final EntryContainer container;
+ private final List<AttributeMapper> mappers;
/**
* Creates a new LDAP resource.
- *
+ *
* @param container
* The entry container which will be used to interact with the
* LDAP server.
* @param mappers
* The list of attribute mappers.
*/
- public LDAPResource(EntryContainer container, List<AttributeMapper> mappers) {
+ public LDAPResource(final EntryContainer container, final List<AttributeMapper> mappers) {
this.container = container;
this.mappers = mappers;
cacheAllLDAPAttributes();
}
/**
+ * {@inheritDoc}
+ */
+ public void action(final ActionRequest request, final Context context,
+ final ActionResultHandler out) {
+ out.setFailure(new NotSupportedException("Not yet implemented"));
+ }
+
+ /**
+ * {@inheritDoc}
+ */
+ public void create(final CreateRequest request, final Context context,
+ final CreateResultHandler out) {
+ out.setFailure(new NotSupportedException("Not yet implemented"));
+ }
+
+ /**
+ * {@inheritDoc}
+ */
+ public void delete(final DeleteRequest request, final Context context,
+ final DeleteResultHandler out) {
+ out.setFailure(new NotSupportedException("Not yet implemented"));
+ }
+
+ /**
+ * {@inheritDoc}
+ */
+ public void patch(final PatchRequest request, final Context context,
+ final PatchResultHandler out) {
+ out.setFailure(new NotSupportedException("Not yet implemented"));
+ }
+
+ /**
+ * {@inheritDoc}
+ */
+ public void query(final QueryRequest request, final Context context,
+ final QueryResultHandler out) {
+ out.setFailure(new NotSupportedException("Not yet implemented"));
+ }
+
+ /**
+ * {@inheritDoc}
+ */
+ public void read(final ReadRequest request, final Context context, final ReadResultHandler out) {
+ final String id = request.getId();
+ if (id == null) {
+ // List the entries.
+ final SearchResultHandler handler = new SearchResultHandler() {
+ private final List<String> resourceIDs = new ArrayList<String>();
+
+ public boolean handleEntry(final SearchResultEntry entry) {
+ // TODO: should the resource or the container define the ID
+ // mapping?
+ resourceIDs.add(container.getIDFromEntry(entry));
+ return true;
+ }
+
+ public void handleErrorResult(final ErrorResultException error) {
+ out.setFailure(adaptErrorResult(error));
+ }
+
+ public boolean handleReference(final SearchResultReference reference) {
+ // TODO: should this be classed as an error since rest2ldap
+ // assumes entries are all colocated.
+ return true;
+ }
+
+ public void handleResult(final Result result) {
+ out.setResult(id, null, new JsonValue(resourceIDs));
+ }
+ };
+ container.listEntries(context, handler);
+ } else {
+ // Read a single entry.
+
+ // TODO: Determine the set of LDAP attributes that need to be read.
+ final Set<JsonPointer> requestedAttributes = new LinkedHashSet<JsonPointer>();
+ final Set<String> requestedLDAPAttributes =
+ getRequestedLDAPAttributes(requestedAttributes);
+
+ final ResultHandler<SearchResultEntry> handler =
+ new ResultHandler<SearchResultEntry>() {
+ public void handleErrorResult(final ErrorResultException error) {
+ out.setFailure(adaptErrorResult(error));
+ }
+
+ public void handleResult(final SearchResultEntry entry) {
+ final String revision = getRevisionFromEntry(entry);
+
+ final ResultHandler<JsonValue> mapHandler =
+ new ResultHandler<JsonValue>() {
+ public void handleErrorResult(
+ final ErrorResultException error) {
+ out.setFailure(adaptErrorResult(error));
+ }
+
+ public void handleResult(final JsonValue result) {
+ out.setResult(id, revision, result);
+ }
+ };
+ mapEntryToJson(context, requestedAttributes, entry, mapHandler);
+ }
+ };
+ container.readEntry(context, id, requestedLDAPAttributes, handler);
+ }
+ }
+
+ /**
+ * {@inheritDoc}
+ */
+ public void update(final UpdateRequest request, final Context context,
+ final UpdateResultHandler out) {
+ out.setFailure(new NotSupportedException("Not yet implemented"));
+ }
+
+ private ResourceException adaptErrorResult(final ErrorResultException error) {
+ // TODO Auto-generated method stub
+ return null;
+ }
+
+ /**
* Caches the set of LDAP attributes associated with all of this resource's
* mappers.
*/
private void cacheAllLDAPAttributes() {
allLDAPAttributes = new LinkedHashSet<String>(mappers.size());
- for (AttributeMapper mapper : mappers) {
+ for (final AttributeMapper mapper : mappers) {
allLDAPAttributes.addAll(mapper.getAllLDAPAttributes());
}
}
/**
- * Reads a resource from the LDAP directory.
- *
- * @param c
- * The request context.
- * @param r
- * The read request.
- * @param h
- * The read result handler.
- */
- public void read(final Context c, final ReadRequest r,
- final CompletionHandler<JsonValue> h) {
- // Determine the set of LDAP attributes that need to be read.
- final Set<JsonPointer> requestedAttributes = r.getRequestedAttributes();
- Set<String> requestedLDAPAttributes = getRequestedLDAPAttributes(requestedAttributes);
-
- // Create a completion handler which will convert the entry to a
- // JsonValue.
- CompletionHandler<Entry> eh = new CompletionHandler<Entry>() {
- public void failed(Throwable t) {
- // Unable to read the entry.
- handleReadFailure(c, h, t);
- }
-
- public void completed(Entry result) {
- // Convert the entry to a JsonValue.
- mapEntryToJson(c, requestedAttributes, result, h);
- }
-
- };
-
- // Read the entry.
- container.readEntry(c, r.getResourceID(), requestedLDAPAttributes, eh);
- }
-
- /**
* Determines the set of LDAP attributes to request in an LDAP read (search,
* post-read), based on the provided set of JSON pointers.
- *
+ *
* @param requestedAttributes
* The set of resource attributes to be read.
* @return The set of LDAP attributes associated with the resource
* attributes.
*/
- private Set<String> getRequestedLDAPAttributes(
- Set<JsonPointer> requestedAttributes) {
+ private Set<String> getRequestedLDAPAttributes(final Set<JsonPointer> requestedAttributes) {
if (requestedAttributes.isEmpty()) {
// Full read.
return allLDAPAttributes;
} else {
// Partial read.
- Set<String> requestedLDAPAttributes = new LinkedHashSet<String>(
- requestedAttributes.size());
- for (JsonPointer requestedAttribute : requestedAttributes) {
- for (AttributeMapper mapper : mappers) {
- requestedLDAPAttributes.addAll(mapper
- .getLDAPAttributesFor(requestedAttribute));
+ final Set<String> requestedLDAPAttributes =
+ new LinkedHashSet<String>(requestedAttributes.size());
+ for (final JsonPointer requestedAttribute : requestedAttributes) {
+ for (final AttributeMapper mapper : mappers) {
+ requestedLDAPAttributes.addAll(mapper.getLDAPAttributesFor(requestedAttribute));
}
}
return requestedLDAPAttributes;
}
}
- private void handleReadFailure(Context c, CompletionHandler<JsonValue> h,
- Throwable t) {
+ private String getRevisionFromEntry(final SearchResultEntry entry) {
// TODO Auto-generated method stub
-
+ return null;
}
- private void mapEntryToJson(Context c,
- Set<JsonPointer> requestedAttributes, Entry result,
- CompletionHandler<JsonValue> h) {
+ private void mapEntryToJson(final Context c, final Set<JsonPointer> requestedAttributes,
+ final Entry result, final ResultHandler<JsonValue> h) {
// TODO Auto-generated method stub
}
--
Gitblit v1.10.0