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