From 507e00fb190713b1654579123d284bcd3d750abe Mon Sep 17 00:00:00 2001
From: Matthew Swift <matthew.swift@forgerock.com>
Date: Wed, 10 Apr 2013 10:31:19 +0000
Subject: [PATCH] Partial fix for OPENDJ-693: Implement modify/update support
---
opendj3/opendj-rest2ldap/src/main/java/org/forgerock/opendj/rest2ldap/Rest2LDAP.java | 26 +++++++++++++++++++++-----
1 files changed, 21 insertions(+), 5 deletions(-)
diff --git a/opendj3/opendj-rest2ldap/src/main/java/org/forgerock/opendj/rest2ldap/Rest2LDAP.java b/opendj3/opendj-rest2ldap/src/main/java/org/forgerock/opendj/rest2ldap/Rest2LDAP.java
index 7add0d5..9de51bd 100644
--- a/opendj3/opendj-rest2ldap/src/main/java/org/forgerock/opendj/rest2ldap/Rest2LDAP.java
+++ b/opendj3/opendj-rest2ldap/src/main/java/org/forgerock/opendj/rest2ldap/Rest2LDAP.java
@@ -44,6 +44,7 @@
import org.forgerock.opendj.ldap.ConnectionException;
import org.forgerock.opendj.ldap.ConnectionFactory;
import org.forgerock.opendj.ldap.Connections;
+import org.forgerock.opendj.ldap.ConstraintViolationException;
import org.forgerock.opendj.ldap.DN;
import org.forgerock.opendj.ldap.Entry;
import org.forgerock.opendj.ldap.EntryNotFoundException;
@@ -86,6 +87,7 @@
private AttributeMapper rootMapper;
private Schema schema = Schema.getDefaultSchema();
private boolean useSubtreeDelete;
+ private boolean usePermissiveModify;
Builder() {
useEtagAttribute();
@@ -144,7 +146,7 @@
}
return new LDAPCollectionResourceProvider(baseDN, rootMapper, nameStrategy,
etagAttribute, new Config(factory, readOnUpdatePolicy, authzPolicy,
- proxiedAuthzTemplate, useSubtreeDelete, schema),
+ proxiedAuthzTemplate, useSubtreeDelete, usePermissiveModify, schema),
additionalLDAPAttributes);
}
@@ -196,10 +198,14 @@
useEtagAttribute(etagAttribute.asString());
}
- if (configuration.get("useSubtreeDelete").required().asBoolean()) {
+ if (configuration.get("useSubtreeDelete").defaultTo(false).asBoolean()) {
useSubtreeDelete();
}
+ if (configuration.get("usePermissiveModify").defaultTo(false).asBoolean()) {
+ usePermissiveModify();
+ }
+
mapper(configureObjectMapper(configuration.get("attributes").required()));
return this;
@@ -305,6 +311,11 @@
return this;
}
+ public Builder usePermissiveModify() {
+ this.usePermissiveModify = true;
+ return this;
+ }
+
private AttributeDescription ad(final String attribute) {
return AttributeDescription.valueOf(attribute, schema);
}
@@ -323,9 +334,6 @@
if (config.isDefined("defaultJSONValue")) {
s.defaultJSONValue(config.get("defaultJSONValue").getObject());
}
- if (config.isDefined("defaultLDAPValue")) {
- s.defaultLDAPValue(config.get("defaultLDAPValue").getObject());
- }
if (config.get("isBinary").defaultTo(false).asBoolean()) {
s.isBinary();
}
@@ -507,6 +515,14 @@
return e;
} catch (final AssertionFailureException e) {
resourceResultCode = ResourceException.VERSION_MISMATCH;
+ } catch (final ConstraintViolationException e) {
+ final ResultCode rc = e.getResult().getResultCode();
+ if (rc.equals(ResultCode.ENTRY_ALREADY_EXISTS)) {
+ resourceResultCode = ResourceException.VERSION_MISMATCH; // Consistent with MVCC.
+ } else {
+ // Schema violation, etc.
+ resourceResultCode = ResourceException.BAD_REQUEST;
+ }
} catch (final AuthenticationException e) {
resourceResultCode = 401;
} catch (final AuthorizationException e) {
--
Gitblit v1.10.0