From 2be681a57d022e204b8d66cbcf3643c57c60cc20 Mon Sep 17 00:00:00 2001
From: Guy Paddock <guy@rosieapp.com>
Date: Fri, 27 Oct 2017 04:49:12 +0000
Subject: [PATCH] Adds subtree flattening to collections

---
 opendj-rest2ldap/src/main/java/org/forgerock/opendj/rest2ldap/Rest2LdapJsonConfigurator.java |   40 ++++++++++++++++++++++++++++------------
 1 files changed, 28 insertions(+), 12 deletions(-)

diff --git a/opendj-rest2ldap/src/main/java/org/forgerock/opendj/rest2ldap/Rest2LdapJsonConfigurator.java b/opendj-rest2ldap/src/main/java/org/forgerock/opendj/rest2ldap/Rest2LdapJsonConfigurator.java
index 65572d5..5f83434 100644
--- a/opendj-rest2ldap/src/main/java/org/forgerock/opendj/rest2ldap/Rest2LdapJsonConfigurator.java
+++ b/opendj-rest2ldap/src/main/java/org/forgerock/opendj/rest2ldap/Rest2LdapJsonConfigurator.java
@@ -306,24 +306,37 @@
     private enum NamingStrategyType { CLIENTDNNAMING, CLIENTNAMING, SERVERNAMING }
     private enum SubResourceType { COLLECTION, SINGLETON }
 
-    private static SubResource configureSubResource(final String urlTemplate, final JsonValue config) {
+    private static SubResource configureSubResource(final String urlTemplate,
+                                                    final JsonValue config) {
         final String dnTemplate = config.get("dnTemplate").defaultTo("").asString();
         final Boolean isReadOnly = config.get("isReadOnly").defaultTo(false).asBoolean();
         final String resourceId = config.get("resource").required().asString();
+        final Boolean flattenSubtree =
+            config.get("flattenSubtree").defaultTo(false).asBoolean();
 
-        if (config.get("type").required().as(enumConstant(SubResourceType.class)) == SubResourceType.COLLECTION) {
-            final String[] glueObjectClasses = config.get("glueObjectClasses")
-                                                     .defaultTo(emptyList())
-                                                     .asList(String.class)
-                                                     .toArray(new String[0]);
+        final SubResourceType subResourceType =
+          config.get("type").required().as(enumConstant(SubResourceType.class));
 
-            final SubResourceCollection collection = collectionOf(resourceId).urlTemplate(urlTemplate)
-                                                                             .dnTemplate(dnTemplate)
-                                                                             .isReadOnly(isReadOnly)
-                                                                             .glueObjectClasses(glueObjectClasses);
+        if (subResourceType == SubResourceType.COLLECTION) {
+            final String[] glueObjectClasses =
+                config.get("glueObjectClasses")
+                    .defaultTo(emptyList())
+                    .asList(String.class)
+                    .toArray(new String[0]);
+
+            final SubResourceCollection collection =
+                collectionOf(resourceId)
+                    .urlTemplate(urlTemplate)
+                    .dnTemplate(dnTemplate)
+                    .isReadOnly(isReadOnly)
+                    .glueObjectClasses(glueObjectClasses)
+                    .flattenSubtree(flattenSubtree);
 
             final JsonValue namingStrategy = config.get("namingStrategy").required();
-            switch (namingStrategy.get("type").required().as(enumConstant(NamingStrategyType.class))) {
+            final NamingStrategyType namingStrategyType =
+                namingStrategy.get("type").required().as(enumConstant(NamingStrategyType.class));
+
+            switch (namingStrategyType) {
             case CLIENTDNNAMING:
                 collection.useClientDnNaming(namingStrategy.get("dnAttribute").required().asString());
                 break;
@@ -339,7 +352,10 @@
 
             return collection;
         } else {
-            return singletonOf(resourceId).urlTemplate(urlTemplate).dnTemplate(dnTemplate).isReadOnly(isReadOnly);
+            return singletonOf(resourceId)
+                        .urlTemplate(urlTemplate)
+                        .dnTemplate(dnTemplate)
+                        .isReadOnly(isReadOnly);
         }
     }
 

--
Gitblit v1.10.0