From e4c0edea06c8fee28369f03f393b7d54b2b6235c Mon Sep 17 00:00:00 2001
From: Jean-Noël Rouvignac <jean-noel.rouvignac@forgerock.com>
Date: Fri, 16 Sep 2016 13:25:06 +0000
Subject: [PATCH] OPENDJ-3246 Return the CREST descriptor over REST for rest2ldap endpoints

---
 opendj-rest2ldap/src/main/java/org/forgerock/opendj/rest2ldap/SimplePropertyMapper.java |   38 ++++++++++++++++++++++++++++++++++++++
 1 files changed, 38 insertions(+), 0 deletions(-)

diff --git a/opendj-rest2ldap/src/main/java/org/forgerock/opendj/rest2ldap/SimplePropertyMapper.java b/opendj-rest2ldap/src/main/java/org/forgerock/opendj/rest2ldap/SimplePropertyMapper.java
index 2d82561..525e33d 100644
--- a/opendj-rest2ldap/src/main/java/org/forgerock/opendj/rest2ldap/SimplePropertyMapper.java
+++ b/opendj-rest2ldap/src/main/java/org/forgerock/opendj/rest2ldap/SimplePropertyMapper.java
@@ -30,6 +30,8 @@
 import org.forgerock.opendj.ldap.ByteString;
 import org.forgerock.opendj.ldap.Entry;
 import org.forgerock.opendj.ldap.Filter;
+import org.forgerock.opendj.ldap.schema.AttributeType;
+import org.forgerock.opendj.ldap.schema.CoreSchema;
 import org.forgerock.services.context.Context;
 import org.forgerock.util.Function;
 import org.forgerock.util.promise.NeverThrowsException;
@@ -37,6 +39,7 @@
 
 import static java.util.Collections.*;
 
+import static org.forgerock.json.JsonValue.*;
 import static org.forgerock.opendj.ldap.Filter.*;
 import static org.forgerock.opendj.rest2ldap.Rest2Ldap.asResourceException;
 import static org.forgerock.opendj.rest2ldap.Utils.*;
@@ -198,4 +201,39 @@
         return encoder == null ? jsonToByteString(ldapAttributeName) : encoder;
     }
 
+    @Override
+    JsonValue toJsonSchema() {
+        final AttributeType attrType = ldapAttributeName.getAttributeType();
+
+        final JsonValue jsonSchema = json(object(field("type", toJsonSchemaType(attrType))));
+        final String description = attrType.getDescription();
+        if (description != null && !"".equals(description)) {
+            jsonSchema.put("title", description);
+        }
+
+        putWritabilityProperties(jsonSchema);
+        return jsonSchema;
+    }
+
+    private static String toJsonSchemaType(AttributeType attrType) {
+        if (attrType.isPlaceHolder()) {
+            return "string";
+        }
+        // TODO JNR cannot use switch + SchemaConstants.SYNTAX_DIRECTORY_STRING_OID
+        // because the class is not public
+        // this is not nice :(
+        // TODO JNR not so sure about these mappings
+        final String oid = attrType.getSyntax().getOID();
+        if (CoreSchema.getDirectoryStringSyntax().getOID().equals(oid)
+                || CoreSchema.getOctetStringSyntax().getOID().equals(oid)) {
+            return "string";
+        } else if (CoreSchema.getBooleanSyntax().getOID().equals(oid)) {
+            return "boolean";
+        } else if (CoreSchema.getIntegerSyntax().getOID().equals(oid)) {
+            return "integer";
+        } else if (CoreSchema.getNumericStringSyntax().getOID().equals(oid)) {
+            return "number";
+        }
+        return "string";
+    }
 }

--
Gitblit v1.10.0