From a2d67f674f7e80dcd9ca901ea63df41ef47f4214 Mon Sep 17 00:00:00 2001
From: vharseko <vharseko@openam.org.ru>
Date: Wed, 22 Nov 2017 05:08:57 +0000
Subject: [PATCH] Merge pull request #3 from GuyPaddock/wren/feature/subtree-flattening
---
opendj-rest2ldap/src/main/java/org/forgerock/opendj/rest2ldap/Rest2LdapJsonConfigurator.java | 99 +++++++++++++++++++++++++++++++++++--------------
1 files changed, 70 insertions(+), 29 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..1a794c7 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
@@ -12,7 +12,7 @@
* information: "Portions copyright [year] [name of copyright owner]".
*
* Copyright 2016 ForgeRock AS.
- *
+ * Portions Copyright 2017 Rosie Applications, Inc.
*/
package org.forgerock.opendj.rest2ldap;
@@ -306,43 +306,84 @@
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();
- 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);
-
- final JsonValue namingStrategy = config.get("namingStrategy").required();
- switch (namingStrategy.get("type").required().as(enumConstant(NamingStrategyType.class))) {
- case CLIENTDNNAMING:
- collection.useClientDnNaming(namingStrategy.get("dnAttribute").required().asString());
- break;
- case CLIENTNAMING:
- collection.useClientNaming(namingStrategy.get("dnAttribute").required().asString(),
- namingStrategy.get("idAttribute").required().asString());
- break;
- case SERVERNAMING:
- collection.useServerNaming(namingStrategy.get("dnAttribute").required().asString(),
- namingStrategy.get("idAttribute").required().asString());
- break;
- }
-
- return collection;
+ if (subResourceType == SubResourceType.COLLECTION) {
+ return configureCollectionSubResource(
+ config, resourceId, urlTemplate, dnTemplate, isReadOnly);
} else {
- return singletonOf(resourceId).urlTemplate(urlTemplate).dnTemplate(dnTemplate).isReadOnly(isReadOnly);
+ return configureSingletonSubResource(
+ config, resourceId, urlTemplate, dnTemplate, isReadOnly);
}
}
+ private static SubResource configureCollectionSubResource(final JsonValue config,
+ final String resourceId,
+ final String urlTemplate,
+ final String dnTemplate,
+ final Boolean isReadOnly) {
+ final String[] glueObjectClasses =
+ config.get("glueObjectClasses")
+ .defaultTo(emptyList())
+ .asList(String.class)
+ .toArray(new String[0]);
+
+ final Boolean flattenSubtree = config.get("flattenSubtree").defaultTo(false).asBoolean();
+ final String searchFilter = config.get("baseSearchFilter").asString();
+
+ final SubResourceCollection collection =
+ collectionOf(resourceId)
+ .urlTemplate(urlTemplate)
+ .dnTemplate(dnTemplate)
+ .isReadOnly(isReadOnly)
+ .glueObjectClasses(glueObjectClasses)
+ .flattenSubtree(flattenSubtree)
+ .baseSearchFilter(searchFilter);
+
+ configureCollectionNamingStrategy(config, collection);
+
+ return collection;
+ }
+
+ private static void configureCollectionNamingStrategy(final JsonValue config,
+ final SubResourceCollection collection) {
+ final JsonValue namingStrategy = config.get("namingStrategy").required();
+ final NamingStrategyType namingStrategyType =
+ namingStrategy.get("type").required().as(enumConstant(NamingStrategyType.class));
+
+ switch (namingStrategyType) {
+ case CLIENTDNNAMING:
+ collection.useClientDnNaming(namingStrategy.get("dnAttribute").required().asString());
+ break;
+ case CLIENTNAMING:
+ collection.useClientNaming(namingStrategy.get("dnAttribute").required().asString(),
+ namingStrategy.get("idAttribute").required().asString());
+ break;
+ case SERVERNAMING:
+ collection.useServerNaming(namingStrategy.get("dnAttribute").required().asString(),
+ namingStrategy.get("idAttribute").required().asString());
+ break;
+ }
+ }
+
+ private static SubResource configureSingletonSubResource(final JsonValue config,
+ final String resourceId,
+ final String urlTemplate,
+ final String dnTemplate,
+ final Boolean isReadOnly) {
+ return singletonOf(resourceId)
+ .urlTemplate(urlTemplate)
+ .dnTemplate(dnTemplate)
+ .isReadOnly(isReadOnly);
+ }
+
private static PropertyMapper configurePropertyMapper(final JsonValue mapper, final String defaultLdapAttribute) {
switch (mapper.get("type").required().asString()) {
case "resourceType":
--
Gitblit v1.10.0