From 65f47d9c24da91fdeac1eb6f012f44cc056ac4e4 Mon Sep 17 00:00:00 2001
From: Matthew Swift <matthew.swift@forgerock.com>
Date: Thu, 25 Aug 2016 15:15:46 +0000
Subject: [PATCH] OPENDJ-3160 Support DN templates in reference property base DNs

---
 opendj-rest2ldap/src/main/java/org/forgerock/opendj/rest2ldap/ReferencePropertyMapper.java |   17 +++++++++--------
 1 files changed, 9 insertions(+), 8 deletions(-)

diff --git a/opendj-rest2ldap/src/main/java/org/forgerock/opendj/rest2ldap/ReferencePropertyMapper.java b/opendj-rest2ldap/src/main/java/org/forgerock/opendj/rest2ldap/ReferencePropertyMapper.java
index f20052b..a1496b3 100644
--- a/opendj-rest2ldap/src/main/java/org/forgerock/opendj/rest2ldap/ReferencePropertyMapper.java
+++ b/opendj-rest2ldap/src/main/java/org/forgerock/opendj/rest2ldap/ReferencePropertyMapper.java
@@ -72,18 +72,19 @@
      */
     private static final int SEARCH_MAX_CANDIDATES = 1000;
 
-    private final DN baseDn;
+    private final DnTemplate baseDnTemplate;
     private final Schema schema;
     private Filter filter;
     private final PropertyMapper mapper;
     private final AttributeDescription primaryKey;
     private SearchScope scope = SearchScope.WHOLE_SUBTREE;
 
-    ReferencePropertyMapper(final Schema schema, final AttributeDescription ldapAttributeName, final DN baseDn,
-                            final AttributeDescription primaryKey, final PropertyMapper mapper) {
+    ReferencePropertyMapper(final Schema schema, final AttributeDescription ldapAttributeName,
+                            final String baseDnTemplate, final AttributeDescription primaryKey,
+                            final PropertyMapper mapper) {
         super(ldapAttributeName);
         this.schema = schema;
-        this.baseDn = baseDn;
+        this.baseDnTemplate = DnTemplate.compile(baseDnTemplate);
         this.primaryKey = primaryKey;
         this.mapper = mapper;
     }
@@ -144,7 +145,7 @@
                     @Override
                     public Promise<Filter, ResourceException> apply(final Filter result) {
                         // Search for all referenced entries and construct a filter.
-                        final SearchRequest request = createSearchRequest(result);
+                        final SearchRequest request = createSearchRequest(context, result);
                         final List<Filter> subFilters = new LinkedList<>();
 
                         return connectionFrom(context).searchAsync(request, new SearchResultHandler() {
@@ -224,7 +225,7 @@
                           // Now search for the referenced entry in to get its DN.
                           final ByteString primaryKeyValue = primaryKeyAttribute.firstValue();
                           final Filter filter = Filter.equality(primaryKey.toString(), primaryKeyValue);
-                          final SearchRequest search = createSearchRequest(filter);
+                          final SearchRequest search = createSearchRequest(context, filter);
                           connectionFrom(context).searchSingleEntryAsync(search)
                                     .thenOnResult(new ResultHandler<SearchResultEntry>() {
                                         @Override
@@ -325,9 +326,9 @@
         }
     }
 
-    private SearchRequest createSearchRequest(final Filter result) {
+    private SearchRequest createSearchRequest(final Context context, final Filter result) {
         final Filter searchFilter = filter != null ? Filter.and(filter, result) : result;
-        return newSearchRequest(baseDn, scope, searchFilter, "1.1");
+        return newSearchRequest(baseDnTemplate.format(context), scope, searchFilter, "1.1");
     }
 
     private Promise<JsonValue, ResourceException> readEntry(

--
Gitblit v1.10.0