From f2711b53bdd5f48eaf312981541b61c6e89bdfa1 Mon Sep 17 00:00:00 2001
From: Matthew Swift <matthew.swift@forgerock.com>
Date: Fri, 29 Mar 2013 18:06:19 +0000
Subject: [PATCH] Additional change for OPENDJ-354: Implement a RequestHandler which provides an in-memory backend
---
opendj3/opendj-ldap-sdk/src/main/java/org/forgerock/opendj/ldap/MemoryBackend.java | 33 ++++++++++++++++-----------------
1 files changed, 16 insertions(+), 17 deletions(-)
diff --git a/opendj3/opendj-ldap-sdk/src/main/java/org/forgerock/opendj/ldap/MemoryBackend.java b/opendj3/opendj-ldap-sdk/src/main/java/org/forgerock/opendj/ldap/MemoryBackend.java
index 92020ff..794ee02 100644
--- a/opendj3/opendj-ldap-sdk/src/main/java/org/forgerock/opendj/ldap/MemoryBackend.java
+++ b/opendj3/opendj-ldap-sdk/src/main/java/org/forgerock/opendj/ldap/MemoryBackend.java
@@ -33,7 +33,6 @@
import static org.forgerock.opendj.ldap.responses.Responses.newSearchResultEntry;
import java.io.IOException;
-import java.util.Collection;
import java.util.NavigableMap;
import java.util.concurrent.ConcurrentSkipListMap;
import java.util.concurrent.locks.ReentrantReadWriteLock;
@@ -324,10 +323,12 @@
final SearchScope scope = request.getScope();
final Filter filter = request.getFilter();
final Matcher matcher = filter.matcher(schema);
+ final AttributeFilter attributeFilter =
+ new AttributeFilter(request.getAttributes(), schema);
if (scope.equals(SearchScope.BASE_OBJECT)) {
if (matcher.matches(baseEntry).toBoolean()) {
- sendEntry(request, resultHandler, baseEntry);
+ sendEntry(attributeFilter, resultHandler, baseEntry);
}
} else if (scope.equals(SearchScope.SINGLE_LEVEL)) {
final NavigableMap<DN, Entry> subtree =
@@ -338,7 +339,7 @@
final DN childDN = entry.getName();
if (childDN.isChildOf(dn)) {
if (matcher.matches(entry).toBoolean()
- && !sendEntry(request, resultHandler, entry)) {
+ && !sendEntry(attributeFilter, resultHandler, entry)) {
// Caller has asked to stop sending results.
break;
}
@@ -351,7 +352,7 @@
// Check for cancellation.
requestContext.checkIfCancelled(false);
if (matcher.matches(entry).toBoolean()
- && !sendEntry(request, resultHandler, entry)) {
+ && !sendEntry(attributeFilter, resultHandler, entry)) {
// Caller has asked to stop sending results.
break;
}
@@ -378,8 +379,10 @@
if (preRead.isCritical() && before == null) {
throw newErrorResult(ResultCode.UNAVAILABLE_CRITICAL_EXTENSION);
} else {
- result.addControl(PreReadResponseControl.newControl(filter(before, preRead
- .getAttributes())));
+ final AttributeFilter filter =
+ new AttributeFilter(preRead.getAttributes(), schema);
+ result.addControl(PreReadResponseControl.newControl(filter
+ .filteredViewOf(before)));
}
}
@@ -390,8 +393,10 @@
if (postRead.isCritical() && after == null) {
throw newErrorResult(ResultCode.UNAVAILABLE_CRITICAL_EXTENSION);
} else {
- result.addControl(PostReadResponseControl.newControl(filter(after, postRead
- .getAttributes())));
+ final AttributeFilter filter =
+ new AttributeFilter(postRead.getAttributes(), schema);
+ result.addControl(PostReadResponseControl.newControl(filter
+ .filteredViewOf(after)));
}
}
return result;
@@ -400,11 +405,6 @@
}
}
- private Entry filter(final Entry entry, final Collection<String> attributes) {
- // FIXME: attribute filtering not supported yet.
- return entry;
- }
-
private BindResult getBindResult(final BindRequest request, final Entry before,
final Entry after) throws ErrorResultException {
return addResultControls(request, before, after, newBindResult(ResultCode.SUCCESS));
@@ -453,9 +453,8 @@
+ "' does not exist");
}
- private boolean sendEntry(final SearchRequest request, final SearchResultHandler resultHandler,
- final Entry entry) {
- return resultHandler
- .handleEntry(newSearchResultEntry(filter(entry, request.getAttributes())));
+ private boolean sendEntry(final AttributeFilter filter,
+ final SearchResultHandler resultHandler, final Entry entry) {
+ return resultHandler.handleEntry(newSearchResultEntry(filter.filteredViewOf(entry)));
}
}
--
Gitblit v1.10.0