From d89aacc0431eab3dce367e8fe9575eb8f83aa535 Mon Sep 17 00:00:00 2001
From: Matthew Swift <matthew.swift@forgerock.com>
Date: Fri, 08 Feb 2013 11:37:59 +0000
Subject: [PATCH] Checkpoint changes: clean up APIs, separate out MVCC and naming strategies.

---
 opendj3/opendj-rest2ldap/src/main/java/org/forgerock/opendj/rest2ldap/SimpleAttributeMapper.java |   96 ++++++++++++++++++-----------------------------
 1 files changed, 37 insertions(+), 59 deletions(-)

diff --git a/opendj3/opendj-rest2ldap/src/main/java/org/forgerock/opendj/rest2ldap/SimpleAttributeMapper.java b/opendj3/opendj-rest2ldap/src/main/java/org/forgerock/opendj/rest2ldap/SimpleAttributeMapper.java
index 8d6a1c5..dabc613 100644
--- a/opendj3/opendj-rest2ldap/src/main/java/org/forgerock/opendj/rest2ldap/SimpleAttributeMapper.java
+++ b/opendj3/opendj-rest2ldap/src/main/java/org/forgerock/opendj/rest2ldap/SimpleAttributeMapper.java
@@ -19,6 +19,7 @@
 import static org.forgerock.opendj.rest2ldap.Utils.toFilter;
 import static org.forgerock.opendj.rest2ldap.Utils.toLowerCase;
 
+import java.util.Collection;
 import java.util.Collections;
 import java.util.List;
 import java.util.Map;
@@ -28,6 +29,7 @@
 import org.forgerock.json.fluent.JsonValue;
 import org.forgerock.json.resource.ResultHandler;
 import org.forgerock.opendj.ldap.Attribute;
+import org.forgerock.opendj.ldap.AttributeDescription;
 import org.forgerock.opendj.ldap.ByteString;
 import org.forgerock.opendj.ldap.Entry;
 import org.forgerock.opendj.ldap.Filter;
@@ -38,38 +40,29 @@
  * An attribute mapper which maps a single JSON attribute to a single LDAP
  * attribute.
  */
-public class SimpleAttributeMapper implements AttributeMapper {
+public final class SimpleAttributeMapper extends AttributeMapper {
 
     private Function<ByteString, ?, Void> decoder = null;
     private Object defaultValue = null;
+    private Collection<Object> defaultValues = Collections.emptySet();
     private boolean forceSingleValued = false;
 
     // private boolean isReadOnly = false;
     private final String jsonAttributeName;
-    private final String ldapAttributeName;
+    private final AttributeDescription ldapAttributeName;
     private final String normalizedJsonAttributeName;
 
     /**
      * Creates a new simple attribute mapper which maps a single LDAP attribute
      * to an entry.
      *
-     * @param attributeName
-     *            The name of the simple JSON and LDAP attribute.
-     */
-    public SimpleAttributeMapper(final String attributeName) {
-        this(attributeName, attributeName);
-    }
-
-    /**
-     * Creates a new simple attribute mapper which maps a single LDAP attribute
-     * to an entry.
-     *
      * @param jsonAttributeName
      *            The name of the simple JSON attribute.
      * @param ldapAttributeName
      *            The name of the LDAP attribute.
      */
-    public SimpleAttributeMapper(final String jsonAttributeName, final String ldapAttributeName) {
+    SimpleAttributeMapper(final String jsonAttributeName,
+            final AttributeDescription ldapAttributeName) {
         this.jsonAttributeName = jsonAttributeName;
         this.ldapAttributeName = ldapAttributeName;
         this.normalizedJsonAttributeName = toLowerCase(jsonAttributeName);
@@ -98,36 +91,12 @@
      */
     public SimpleAttributeMapper defaultJSONValue(final Object defaultValue) {
         this.defaultValue = defaultValue;
+        this.defaultValues =
+                defaultValue != null ? Collections.singleton(defaultValue) : Collections.emptySet();
         return this;
     }
 
     /**
-     * {@inheritDoc}
-     */
-    @Override
-    public void getLDAPAttributes(final Context c, final JsonPointer jsonAttribute,
-            final Set<String> ldapAttributes) {
-        if (jsonAttribute.isEmpty() || matches(jsonAttribute)) {
-            ldapAttributes.add(ldapAttributeName);
-        }
-    }
-
-    /**
-     * {@inheritDoc}
-     */
-    @Override
-    public void getLDAPFilter(final Context c, final FilterType type,
-            final JsonPointer jsonAttribute, final String operator, final Object valueAssertion,
-            final ResultHandler<Filter> h) {
-        if (matches(jsonAttribute)) {
-            h.handleResult(toFilter(c, type, ldapAttributeName, valueAssertion));
-        } else {
-            // This attribute mapper cannot handle the provided filter component.
-            h.handleResult(null);
-        }
-    }
-
-    /**
      * Prevents the LDAP attribute from being updated.
      *
      * @param readOnly
@@ -154,32 +123,41 @@
         return this;
     }
 
-    /**
-     * {@inheritDoc}
-     */
     @Override
-    public void toJSON(final Context c, final Entry e, final ResultHandler<Map<String, Object>> h) {
-        final Attribute a = e.getAttribute(ldapAttributeName);
-        if (a != null) {
-            final Function<ByteString, ?, Void> f =
-                    decoder == null ? Functions.fixedFunction(byteStringToJson(), a) : decoder;
-            final Object value;
-            if (forceSingleValued || a.getAttributeDescription().getAttributeType().isSingleValue()) {
-                value = a.parse().as(f, defaultValue);
-            } else {
-                value = a.parse().asSetOf(f, defaultValue);
-            }
-            h.handleResult(Collections.singletonMap(jsonAttributeName, value));
+    void getLDAPAttributes(final Context c, final JsonPointer jsonAttribute,
+            final Set<String> ldapAttributes) {
+        if (jsonAttribute.isEmpty() || matches(jsonAttribute)) {
+            ldapAttributes.add(ldapAttributeName.toString());
+        }
+    }
+
+    @Override
+    void getLDAPFilter(final Context c, final FilterType type, final JsonPointer jsonAttribute,
+            final String operator, final Object valueAssertion, final ResultHandler<Filter> h) {
+        if (matches(jsonAttribute)) {
+            h.handleResult(toFilter(c, type, ldapAttributeName.toString(), valueAssertion));
         } else {
+            // This attribute mapper cannot handle the provided filter component.
             h.handleResult(null);
         }
     }
 
-    /**
-     * {@inheritDoc}
-     */
     @Override
-    public void toLDAP(final Context c, final JsonValue v, final ResultHandler<List<Attribute>> h) {
+    void toJSON(final Context c, final Entry e, final ResultHandler<Map<String, Object>> h) {
+        final Function<ByteString, ?, Void> f =
+                decoder == null ? Functions.fixedFunction(byteStringToJson(), ldapAttributeName)
+                        : decoder;
+        final Object value;
+        if (forceSingleValued || ldapAttributeName.getAttributeType().isSingleValue()) {
+            value = e.parseAttribute(ldapAttributeName).as(f, defaultValue);
+        } else {
+            value = e.parseAttribute(ldapAttributeName).asSetOf(f, defaultValues);
+        }
+        h.handleResult(Collections.singletonMap(jsonAttributeName, value));
+    }
+
+    @Override
+    void toLDAP(final Context c, final JsonValue v, final ResultHandler<List<Attribute>> h) {
         // TODO Auto-generated method stub
 
     }

--
Gitblit v1.10.0