From 33255bfee39fb3cb3813894831a76bc7c014c13a Mon Sep 17 00:00:00 2001
From: Matthew Swift <matthew.swift@forgerock.com>
Date: Fri, 08 Feb 2013 18:23:37 +0000
Subject: [PATCH] Partial fix for OPENDJ-691: Implement add/create support

---
 opendj3/opendj-rest2ldap/src/main/java/org/forgerock/opendj/rest2ldap/Config.java |  177 ++++++++++------------------------------------------------
 1 files changed, 31 insertions(+), 146 deletions(-)

diff --git a/opendj3/opendj-rest2ldap/src/main/java/org/forgerock/opendj/rest2ldap/Config.java b/opendj3/opendj-rest2ldap/src/main/java/org/forgerock/opendj/rest2ldap/Config.java
index 41f16eb..53076d2 100644
--- a/opendj3/opendj-rest2ldap/src/main/java/org/forgerock/opendj/rest2ldap/Config.java
+++ b/opendj3/opendj-rest2ldap/src/main/java/org/forgerock/opendj/rest2ldap/Config.java
@@ -15,165 +15,50 @@
  */
 package org.forgerock.opendj.rest2ldap;
 
-import static org.forgerock.opendj.rest2ldap.Config.ReadOnUpdatePolicy.USE_READ_ENTRY_CONTROLS;
-import static org.forgerock.opendj.rest2ldap.Utils.ensureNotNull;
-
+import org.forgerock.opendj.ldap.DecodeOptions;
 import org.forgerock.opendj.ldap.Filter;
+import org.forgerock.opendj.ldap.schema.Schema;
 
 /**
  * Common configuration options.
  */
-public final class Config {
-
-    /**
-     * An interface for incrementally constructing common configuration options.
-     */
-    public static final class Builder {
-        private Filter falseFilter;
-        private ReadOnUpdatePolicy readOnUpdatePolicy;
-        private Filter trueFilter;
-
-        private Builder() {
-            // Nothing to do.
-        }
-
-        /**
-         * Returns a new configuration based on the current state of this
-         * builder.
-         *
-         * @return A new configuration based on the current state of this
-         *         builder.
-         */
-        public Config build() {
-            return new Config(trueFilter, falseFilter, readOnUpdatePolicy);
-        }
-
-        /**
-         * Sets the absolute false filter which should be used when querying the
-         * LDAP server.
-         *
-         * @param filter
-         *            The absolute false filter.
-         * @return A reference to this builder.
-         */
-        public Builder falseFilter(final Filter filter) {
-            this.trueFilter = ensureNotNull(filter);
-            return this;
-        }
-
-        /**
-         * Sets the policy which should be used in order to read an entry before
-         * it is deleted, or after it is added or modified.
-         *
-         * @param policy
-         *            The policy which should be used in order to read an entry
-         *            before it is deleted, or after it is added or modified.
-         * @return A reference to this builder.
-         */
-        public Builder readOnUpdatePolicy(final ReadOnUpdatePolicy policy) {
-            this.readOnUpdatePolicy = ensureNotNull(policy);
-            return this;
-        }
-
-        /**
-         * Sets the absolute true filter which should be used when querying the
-         * LDAP server.
-         *
-         * @param filter
-         *            The absolute true filter.
-         * @return A reference to this builder.
-         */
-        public Builder trueFilter(final Filter filter) {
-            this.trueFilter = ensureNotNull(filter);
-            return this;
-        }
-    };
-
-    /**
-     * The policy which should be used in order to read an entry before it is
-     * deleted, or after it is added or modified.
-     */
-    public static enum ReadOnUpdatePolicy {
-        /**
-         * The LDAP entry will not be read when an update is performed. More
-         * specifically, the REST resource will not be returned as part of a
-         * create, delete, patch, or update request.
-         */
-        DISABLED,
-
-        /**
-         * The LDAP entry will be read atomically using the RFC 4527 read-entry
-         * controls. More specifically, the REST resource will be returned as
-         * part of a create, delete, patch, or update request, and it will
-         * reflect the state of the resource at the time the update was
-         * performed. This policy requires that the LDAP server supports RFC
-         * 4527.
-         */
-        USE_READ_ENTRY_CONTROLS,
-
-        /**
-         * The LDAP entry will be read non-atomically using an LDAP search when
-         * an update is performed. More specifically, the REST resource will be
-         * returned as part of a create, delete, patch, or update request, but
-         * it may not reflect the state of the resource at the time the update
-         * was performed.
-         */
-        USE_SEARCH;
-    }
-
-    private static final Config DEFAULT = new Builder().trueFilter(Filter.objectClassPresent())
-            .falseFilter(Filter.present("1.1")).readOnUpdatePolicy(USE_READ_ENTRY_CONTROLS).build();
-
-    /**
-     * Returns a new builder which can be used for incrementally constructing
-     * common configuration options. The builder will initially have
-     * {@link #defaultConfig() default} settings.
-     *
-     * @return The new builder.
-     */
-    public static Builder builder() {
-        return builder(DEFAULT);
-    }
-
-    /**
-     * Returns a new builder which can be used for incrementally constructing
-     * common configuration options. The builder will initially have the same
-     * settings as the provided configuration.
-     *
-     * @param config
-     *            The initial settings.
-     * @return The new builder.
-     */
-    public static Builder builder(final Config config) {
-        return new Builder().trueFilter(config.trueFilter()).falseFilter(config.falseFilter())
-                .readOnUpdatePolicy(config.readOnUpdatePolicy());
-    }
-
-    /**
-     * Returns the default configuration having the following settings:
-     * <ul>
-     * <li>the absolute true filter {@code (objectClass=*)}
-     * <li>the absolute false filter {@code (1.1=*)}
-     * <li>the read on update policy
-     * {@link ReadOnUpdatePolicy#USE_READ_ENTRY_CONTROLS}.
-     * </ul>
-     *
-     * @return The default configuration.
-     */
-    public static Config defaultConfig() {
-        return DEFAULT;
-    }
+final class Config {
 
     private final Filter falseFilter;
-
+    private final Schema schema;
     private final ReadOnUpdatePolicy readOnUpdatePolicy;
     private final Filter trueFilter;
+    private final DecodeOptions options;
 
-    private Config(final Filter trueFilter, final Filter falseFilter,
-            final ReadOnUpdatePolicy readOnUpdatePolicy) {
+    Config(final Filter trueFilter, final Filter falseFilter,
+            final ReadOnUpdatePolicy readOnUpdatePolicy, final Schema schema) {
         this.trueFilter = trueFilter;
         this.falseFilter = falseFilter;
         this.readOnUpdatePolicy = readOnUpdatePolicy;
+        this.schema = schema;
+        this.options = new DecodeOptions().setSchema(schema);
+    }
+
+    /**
+     * Returns the schema which should be used when attribute types and
+     * controls.
+     *
+     * @return The schema which should be used when attribute types and
+     *         controls.
+     */
+    public Schema schema() {
+        return schema;
+    }
+
+    /**
+     * Returns the decoding options which should be used when decoding controls
+     * in responses.
+     *
+     * @return The decoding options which should be used when decoding controls
+     *         in responses.
+     */
+    public DecodeOptions decodeOptions() {
+        return options;
     }
 
     /**

--
Gitblit v1.10.0