From a5809829e89ea42665396a628ea277d253ef9fa1 Mon Sep 17 00:00:00 2001
From: Jean-Noël Rouvignac <jean-noel.rouvignac@forgerock.com>
Date: Thu, 03 Nov 2016 10:18:29 +0000
Subject: [PATCH] Do not put JsonValue inside JSON schemas
---
opendj-rest2ldap/src/main/java/org/forgerock/opendj/rest2ldap/PropertyMapper.java | 8 +++++++-
opendj-rest2ldap/src/main/java/org/forgerock/opendj/rest2ldap/SimplePropertyMapper.java | 2 +-
opendj-rest2ldap/src/main/java/org/forgerock/opendj/rest2ldap/JsonConstantPropertyMapper.java | 7 ++++---
opendj-rest2ldap/src/main/java/org/forgerock/opendj/rest2ldap/ObjectPropertyMapper.java | 4 ++--
opendj-rest2ldap/src/main/java/org/forgerock/opendj/rest2ldap/ReferencePropertyMapper.java | 2 +-
opendj-rest2ldap/src/main/java/org/forgerock/opendj/rest2ldap/Resource.java | 6 +++---
6 files changed, 18 insertions(+), 11 deletions(-)
diff --git a/opendj-rest2ldap/src/main/java/org/forgerock/opendj/rest2ldap/JsonConstantPropertyMapper.java b/opendj-rest2ldap/src/main/java/org/forgerock/opendj/rest2ldap/JsonConstantPropertyMapper.java
index 5ded770..617b285 100644
--- a/opendj-rest2ldap/src/main/java/org/forgerock/opendj/rest2ldap/JsonConstantPropertyMapper.java
+++ b/opendj-rest2ldap/src/main/java/org/forgerock/opendj/rest2ldap/JsonConstantPropertyMapper.java
@@ -171,13 +171,14 @@
for (String key : value.keys()) {
jsonProps.put(key, toJsonSchema(value.get(key)));
}
- jsonSchema.put("properties", jsonSchema);
+ jsonSchema.put("properties", jsonProps.getObject());
return jsonSchema;
} else if (value.isCollection()) {
final JsonValue jsonSchema = json(object(field("type", "array")));
final JsonValue firstItem = value.get(value.keys().iterator().next());
// assume all items have the same schema
- jsonSchema.put("items", toJsonSchema(firstItem));
+ JsonValue firstItemJson = toJsonSchema(firstItem);
+ jsonSchema.put("items", firstItemJson != null ? firstItemJson.getObject() : null);
if (value.getObject() instanceof Set) {
jsonSchema.put("uniqueItems", true);
}
@@ -194,7 +195,7 @@
} else if (value.isNull()) {
return json(object(field("type", "null")));
} else {
- return null;
+ throw new IllegalStateException("Unsupported json value: " + value);
}
}
}
diff --git a/opendj-rest2ldap/src/main/java/org/forgerock/opendj/rest2ldap/ObjectPropertyMapper.java b/opendj-rest2ldap/src/main/java/org/forgerock/opendj/rest2ldap/ObjectPropertyMapper.java
index 249cfb5..d98b694 100644
--- a/opendj-rest2ldap/src/main/java/org/forgerock/opendj/rest2ldap/ObjectPropertyMapper.java
+++ b/opendj-rest2ldap/src/main/java/org/forgerock/opendj/rest2ldap/ObjectPropertyMapper.java
@@ -446,7 +446,7 @@
for (Mapping mapping : mappings.values()) {
final String attribute = mapping.name;
PropertyMapper mapper = mapping.mapper;
- jsonProps.put(attribute, mapper.toJsonSchema());
+ jsonProps.put(attribute, mapper.toJsonSchema().getObject());
if (mapper.isRequired()) {
requiredFields.add(attribute);
}
@@ -457,7 +457,7 @@
jsonSchema.put("required", requiredFields);
}
if (jsonProps.size() > 0) {
- jsonSchema.put("properties", jsonProps);
+ jsonSchema.put("properties", jsonProps.getObject());
}
return jsonSchema;
}
diff --git a/opendj-rest2ldap/src/main/java/org/forgerock/opendj/rest2ldap/PropertyMapper.java b/opendj-rest2ldap/src/main/java/org/forgerock/opendj/rest2ldap/PropertyMapper.java
index a496a2b..4c1c42d 100644
--- a/opendj-rest2ldap/src/main/java/org/forgerock/opendj/rest2ldap/PropertyMapper.java
+++ b/opendj-rest2ldap/src/main/java/org/forgerock/opendj/rest2ldap/PropertyMapper.java
@@ -186,6 +186,8 @@
*
* @param context The request context.
* @param resource The exact type of resource being updated.
+ * @param path the path to update.
+ * @param e the entry containing the new value.
* @param v
* The JSON value to be converted to LDAP attributes, which may
* be {@code null} indicating that the JSON value was not present
@@ -195,8 +197,12 @@
abstract Promise<List<Modification>, ResourceException> update(Context context, Resource resource,
JsonPointer path, Entry e, JsonValue v);
- // TODO: methods for obtaining schema information (e.g. name, description, type information).
// TODO: methods for creating sort controls.
+ /**
+ * Returns the non-null JSON schema for this property mapper.
+ *
+ * @return the non-null JSON schema for this property mapper
+ */
abstract JsonValue toJsonSchema();
}
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 9dda3f0..9879681 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
@@ -363,7 +363,7 @@
if (mapper.isMultiValued()) {
final JsonValue jsonSchema = json(object(
field("type", "array"),
- field("items", mapper.toJsonSchema()),
+ field("items", mapper.toJsonSchema().getObject()),
// LDAP has set semantics => all items are unique
field("uniqueItems", true)));
putWritabilityProperties(jsonSchema);
diff --git a/opendj-rest2ldap/src/main/java/org/forgerock/opendj/rest2ldap/Resource.java b/opendj-rest2ldap/src/main/java/org/forgerock/opendj/rest2ldap/Resource.java
index 8e8b3d3..9c8fbd0 100644
--- a/opendj-rest2ldap/src/main/java/org/forgerock/opendj/rest2ldap/Resource.java
+++ b/opendj-rest2ldap/src/main/java/org/forgerock/opendj/rest2ldap/Resource.java
@@ -857,7 +857,7 @@
}
final JsonValue jsonSchema = mapper.toJsonSchema();
if (jsonSchema != null) {
- properties.put(propertyName, jsonSchema);
+ properties.put(propertyName, jsonSchema.getObject());
}
}
@@ -870,14 +870,14 @@
jsonSchema.put("required", requiredFields);
}
if (properties.size() > 0) {
- jsonSchema.put("properties", properties);
+ jsonSchema.put("properties", properties.getObject());
}
if (superType != null) {
return schema(json(object(
field("allOf", array(
object(field("$ref", "#/definitions/" + superType.id)),
- jsonSchema)))));
+ jsonSchema.getObject())))));
}
return schema(jsonSchema);
}
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 c705ca7..4b303b0 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
@@ -228,7 +228,7 @@
field("type", "array"),
// LDAP has set semantics => all items are unique
field("uniqueItems", true),
- field("items", itemsSchema(attrType))));
+ field("items", itemsSchema(attrType).getObject())));
} else {
jsonSchema = itemsSchema(attrType);
}
--
Gitblit v1.10.0