From f90e4d403f52506faaf06e54081b95249205c76b Mon Sep 17 00:00:00 2001
From: Matthew Swift <matthew.swift@forgerock.com>
Date: Mon, 22 Oct 2012 17:14:03 +0000
Subject: [PATCH] Fix checkstyle errors.

---
 opendj-sdk/opendj3/opendj-rest2ldap/src/main/java/org/forgerock/opendj/rest2ldap/SimpleAttributeMapper.java          |  106 ++++++---
 opendj-sdk/opendj3/opendj-rest2ldap/src/main/java/org/forgerock/opendj/rest2ldap/ComplexAttributeMapper.java         |   20 +
 opendj-sdk/opendj3/opendj-rest2ldap/src/main/java/org/forgerock/opendj/rest2ldap/Utils.java                          |   49 ++--
 opendj-sdk/opendj3/opendj-rest2ldap/src/main/java/org/forgerock/opendj/rest2ldap/DefaultAttributeMapper.java         |   40 ++-
 opendj-sdk/opendj3/opendj-rest2ldap/src/main/java/org/forgerock/opendj/rest2ldap/AttributeMapper.java                |    7 
 opendj-sdk/opendj3/opendj-rest2ldap/src/main/java/org/forgerock/opendj/rest2ldap/ReferenceAttributeMapper.java       |   16 
 opendj-sdk/opendj3/opendj-rest2ldap/src/test/java/org/forgerock/opendj/rest2ldap/Example.java                        |   20 +
 opendj-sdk/opendj3/opendj-rest2ldap/src/main/java/org/forgerock/opendj/rest2ldap/package-info.java                   |   30 -
 opendj-sdk/opendj3/opendj-rest2ldap/src/main/java/org/forgerock/opendj/rest2ldap/ConstantAttributeMapper.java        |   10 
 opendj-sdk/opendj3/opendj-rest2ldap/src/main/java/org/forgerock/opendj/rest2ldap/CompositeAttributeMapper.java       |   20 +
 opendj-sdk/opendj3/opendj-rest2ldap/src/main/java/org/forgerock/opendj/rest2ldap/EntryContainer.java                 |   97 ++++++--
 opendj-sdk/opendj3/opendj-rest2ldap/src/main/java/org/forgerock/opendj/rest2ldap/LDAPCollectionResourceProvider.java |  187 ++++++++++------
 opendj-sdk/opendj3/opendj-rest2ldap/pom.xml                                                                          |   39 +--
 opendj-sdk/opendj3/opendj-rest2ldap/src/main/java/org/forgerock/opendj/rest2ldap/SubContainerAttributeMapper.java    |   17 +
 14 files changed, 397 insertions(+), 261 deletions(-)

diff --git a/opendj-sdk/opendj3/opendj-rest2ldap/pom.xml b/opendj-sdk/opendj3/opendj-rest2ldap/pom.xml
index b59a57d..2c5bde3 100644
--- a/opendj-sdk/opendj3/opendj-rest2ldap/pom.xml
+++ b/opendj-sdk/opendj3/opendj-rest2ldap/pom.xml
@@ -1,29 +1,19 @@
 <?xml version="1.0"?>
 <!--
- ! CDDL HEADER START
- !
- ! The contents of this file are subject to the terms of the
- ! Common Development and Distribution License, Version 1.0 only
- ! (the "License").  You may not use this file except in compliance
- ! with the License.
- !
- ! You can obtain a copy of the license at legal-notices/CDDLv1_0.txt
- ! or http://forgerock.org/license/CDDLv1.0.html.
- ! See the License for the specific language governing permissions
- ! and limitations under the License.
- !
- ! When distributing Covered Code, include this CDDL HEADER in each
- ! file and include the License file at legal-notices/CDDLv1_0.txt.
- ! If applicable, add the following below this CDDL HEADER, with the
- ! fields enclosed by brackets "[]" replaced with your own identifying
- ! information:
- !      Portions Copyright [yyyy] [name of copyright owner]
- !
- ! CDDL HEADER END
- !
- !      Copyright 2012 ForgeRock AS
- !    
- -->
+  The contents of this file are subject to the terms of the Common Development and
+  Distribution License (the License). You may not use this file except in compliance with the
+  License.
+
+  You can obtain a copy of the License at legal/CDDLv1.0.txt. See the License for the
+  specific language governing permission and limitations under the License.
+
+  When distributing Covered Software, include this CDDL Header Notice in each file and include
+  the License file at legal/CDDLv1.0.txt. If applicable, add the following below the CDDL
+  Header, with the fields enclosed by brackets [] replaced by your own identifying
+  information: "Portions Copyright [year] [name of copyright owner]".
+
+  Copyright 2012 ForgeRock AS.
+-->
 <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
     xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
     <modelVersion>4.0.0</modelVersion>
@@ -40,6 +30,7 @@
     <packaging>jar</packaging>
     <properties>
         <forgerockRestVersion>2.0.0-SNAPSHOT</forgerockRestVersion>
+        <checkstyleHeaderLocation>org/forgerock/checkstyle/default-java-header</checkstyleHeaderLocation>
     </properties>
     <dependencies>
         <dependency>
diff --git a/opendj-sdk/opendj3/opendj-rest2ldap/src/main/java/org/forgerock/opendj/rest2ldap/AttributeMapper.java b/opendj-sdk/opendj3/opendj-rest2ldap/src/main/java/org/forgerock/opendj/rest2ldap/AttributeMapper.java
index 3590234..b9dd1c5 100644
--- a/opendj-sdk/opendj3/opendj-rest2ldap/src/main/java/org/forgerock/opendj/rest2ldap/AttributeMapper.java
+++ b/opendj-sdk/opendj3/opendj-rest2ldap/src/main/java/org/forgerock/opendj/rest2ldap/AttributeMapper.java
@@ -9,11 +9,10 @@
  * When distributing Covered Software, include this CDDL Header Notice in each file and include
  * the License file at legal/CDDLv1.0.txt. If applicable, add the following below the CDDL
  * Header, with the fields enclosed by brackets [] replaced by your own identifying
- * information: "Portions Copyrighted [year] [name of copyright owner]".
+ * information: "Portions Copyright [year] [name of copyright owner]".
  *
- * Copyright 2012 ForgeRock AS. All rights reserved.
+ * Copyright 2012 ForgeRock AS.
  */
-
 package org.forgerock.opendj.rest2ldap;
 
 import java.util.List;
@@ -65,7 +64,7 @@
      * @param h
      *            The result handler.
      */
-    void toJson(ServerContext c, Entry e, ResultHandler<Map<String, Object>> h);
+    void toJSON(ServerContext c, Entry e, ResultHandler<Map<String, Object>> h);
 
     /**
      * Transforms JSON content in the provided JSON value to LDAP attributes,
diff --git a/opendj-sdk/opendj3/opendj-rest2ldap/src/main/java/org/forgerock/opendj/rest2ldap/ComplexAttributeMapper.java b/opendj-sdk/opendj3/opendj-rest2ldap/src/main/java/org/forgerock/opendj/rest2ldap/ComplexAttributeMapper.java
index 0babf85..84f0fa6 100644
--- a/opendj-sdk/opendj3/opendj-rest2ldap/src/main/java/org/forgerock/opendj/rest2ldap/ComplexAttributeMapper.java
+++ b/opendj-sdk/opendj3/opendj-rest2ldap/src/main/java/org/forgerock/opendj/rest2ldap/ComplexAttributeMapper.java
@@ -9,11 +9,10 @@
  * When distributing Covered Software, include this CDDL Header Notice in each file and include
  * the License file at legal/CDDLv1.0.txt. If applicable, add the following below the CDDL
  * Header, with the fields enclosed by brackets [] replaced by your own identifying
- * information: "Portions Copyrighted [year] [name of copyright owner]".
+ * information: "Portions Copyright [year] [name of copyright owner]".
  *
- * Copyright 2012 ForgeRock AS. All rights reserved.
+ * Copyright 2012 ForgeRock AS.
  */
-
 package org.forgerock.opendj.rest2ldap;
 
 import static org.forgerock.opendj.rest2ldap.Utils.toLowerCase;
@@ -25,15 +24,15 @@
 
 import org.forgerock.json.fluent.JsonPointer;
 import org.forgerock.json.fluent.JsonValue;
+import org.forgerock.json.resource.ResourceException;
 import org.forgerock.json.resource.ResultHandler;
 import org.forgerock.json.resource.ServerContext;
-import org.forgerock.json.resource.ResourceException;
 import org.forgerock.opendj.ldap.Attribute;
 import org.forgerock.opendj.ldap.Entry;
 
 /**
- * An attribute mapper which will wrap the results of the provided mapper as a
- * complex JSON object.
+ * An attribute mapper which maps a single JSON attribute to the result of
+ * another attribute mapper.
  */
 public class ComplexAttributeMapper implements AttributeMapper {
 
@@ -60,6 +59,7 @@
     /**
      * {@inheritDoc}
      */
+    @Override
     public void getLDAPAttributes(final JsonPointer jsonAttribute, final Set<String> ldapAttributes) {
         if (attributeMatchesPointer(jsonAttribute)) {
             final JsonPointer relativePointer = jsonAttribute.relativePointer();
@@ -70,26 +70,30 @@
     /**
      * {@inheritDoc}
      */
-    public void toJson(final ServerContext c, final Entry e,
+    @Override
+    public void toJSON(final ServerContext c, final Entry e,
             final ResultHandler<Map<String, Object>> h) {
         final ResultHandler<Map<String, Object>> wrapper = new ResultHandler<Map<String, Object>>() {
 
+            @Override
             public void handleError(final ResourceException e) {
                 h.handleError(e);
             }
 
+            @Override
             public void handleResult(final Map<String, Object> result) {
                 final Map<String, Object> complexResult = Collections.singletonMap(
                         jsonAttributeName, (Object) result);
                 h.handleResult(complexResult);
             }
         };
-        mapper.toJson(c, e, wrapper);
+        mapper.toJSON(c, e, wrapper);
     }
 
     /**
      * {@inheritDoc}
      */
+    @Override
     public void toLDAP(final ServerContext c, final JsonValue v,
             final ResultHandler<List<Attribute>> h) {
         // TODO Auto-generated method stub
diff --git a/opendj-sdk/opendj3/opendj-rest2ldap/src/main/java/org/forgerock/opendj/rest2ldap/CompositeAttributeMapper.java b/opendj-sdk/opendj3/opendj-rest2ldap/src/main/java/org/forgerock/opendj/rest2ldap/CompositeAttributeMapper.java
index af135f6..b69fcf8 100644
--- a/opendj-sdk/opendj3/opendj-rest2ldap/src/main/java/org/forgerock/opendj/rest2ldap/CompositeAttributeMapper.java
+++ b/opendj-sdk/opendj3/opendj-rest2ldap/src/main/java/org/forgerock/opendj/rest2ldap/CompositeAttributeMapper.java
@@ -9,11 +9,10 @@
  * When distributing Covered Software, include this CDDL Header Notice in each file and include
  * the License file at legal/CDDLv1.0.txt. If applicable, add the following below the CDDL
  * Header, with the fields enclosed by brackets [] replaced by your own identifying
- * information: "Portions Copyrighted [year] [name of copyright owner]".
+ * information: "Portions Copyright [year] [name of copyright owner]".
  *
- * Copyright 2012 ForgeRock AS. All rights reserved.
+ * Copyright 2012 ForgeRock AS.
  */
-
 package org.forgerock.opendj.rest2ldap;
 
 import java.util.ArrayList;
@@ -27,15 +26,15 @@
 
 import org.forgerock.json.fluent.JsonPointer;
 import org.forgerock.json.fluent.JsonValue;
+import org.forgerock.json.resource.ResourceException;
 import org.forgerock.json.resource.ResultHandler;
 import org.forgerock.json.resource.ServerContext;
-import org.forgerock.json.resource.ResourceException;
 import org.forgerock.opendj.ldap.Attribute;
 import org.forgerock.opendj.ldap.Entry;
 
 /**
- * A collection of one or more attribute mappers whose content will be combined
- * into a single JSON array.
+ * An attribute mapper which combines the results of a set of subordinate
+ * attribute mappers into a single JSON object.
  */
 public final class CompositeAttributeMapper implements AttributeMapper {
     private final List<AttributeMapper> attributeMappers = new LinkedList<AttributeMapper>();
@@ -62,6 +61,7 @@
     /**
      * {@inheritDoc}
      */
+    @Override
     public void getLDAPAttributes(final JsonPointer jsonAttribute, final Set<String> ldapAttributes) {
         for (final AttributeMapper attribute : attributeMappers) {
             attribute.getLDAPAttributes(jsonAttribute, ldapAttributes);
@@ -71,13 +71,15 @@
     /**
      * {@inheritDoc}
      */
-    public void toJson(final ServerContext c, final Entry e,
+    @Override
+    public void toJSON(final ServerContext c, final Entry e,
             final ResultHandler<Map<String, Object>> h) {
         final ResultHandler<Map<String, Object>> resultAccumulater = new ResultHandler<Map<String, Object>>() {
             private final AtomicInteger latch = new AtomicInteger(attributeMappers.size());
             private final List<Map<String, Object>> results = new ArrayList<Map<String, Object>>(
                     latch.get());
 
+            @Override
             public void handleError(final ResourceException e) {
                 // Ensure that handler is only invoked once.
                 if (latch.getAndSet(0) > 0) {
@@ -85,6 +87,7 @@
                 }
             }
 
+            @Override
             public void handleResult(final Map<String, Object> result) {
                 if (result != null && !result.isEmpty()) {
                     synchronized (this) {
@@ -111,13 +114,14 @@
         };
 
         for (final AttributeMapper mapper : attributeMappers) {
-            mapper.toJson(c, e, resultAccumulater);
+            mapper.toJSON(c, e, resultAccumulater);
         }
     }
 
     /**
      * {@inheritDoc}
      */
+    @Override
     public void toLDAP(final ServerContext c, final JsonValue v,
             final ResultHandler<List<Attribute>> h) {
         // TODO Auto-generated method stub
diff --git a/opendj-sdk/opendj3/opendj-rest2ldap/src/main/java/org/forgerock/opendj/rest2ldap/ConstantAttributeMapper.java b/opendj-sdk/opendj3/opendj-rest2ldap/src/main/java/org/forgerock/opendj/rest2ldap/ConstantAttributeMapper.java
index 9b281e8..1468b9c 100644
--- a/opendj-sdk/opendj3/opendj-rest2ldap/src/main/java/org/forgerock/opendj/rest2ldap/ConstantAttributeMapper.java
+++ b/opendj-sdk/opendj3/opendj-rest2ldap/src/main/java/org/forgerock/opendj/rest2ldap/ConstantAttributeMapper.java
@@ -9,11 +9,10 @@
  * When distributing Covered Software, include this CDDL Header Notice in each file and include
  * the License file at legal/CDDLv1.0.txt. If applicable, add the following below the CDDL
  * Header, with the fields enclosed by brackets [] replaced by your own identifying
- * information: "Portions Copyrighted [year] [name of copyright owner]".
+ * information: "Portions Copyright [year] [name of copyright owner]".
  *
- * Copyright 2012 ForgeRock AS. All rights reserved.
+ * Copyright 2012 ForgeRock AS.
  */
-
 package org.forgerock.opendj.rest2ldap;
 
 import java.util.Collections;
@@ -53,6 +52,7 @@
     /**
      * {@inheritDoc}
      */
+    @Override
     public void getLDAPAttributes(final JsonPointer jsonAttribute, final Set<String> ldapAttributes) {
         // Nothing to do.
     }
@@ -60,7 +60,8 @@
     /**
      * {@inheritDoc}
      */
-    public void toJson(final ServerContext c, final Entry e,
+    @Override
+    public void toJSON(final ServerContext c, final Entry e,
             final ResultHandler<Map<String, Object>> h) {
         // FIXME: how do we know if the user requested it???
         h.handleResult(Collections.singletonMap(jsonAttributeName, jsonAttributeValue));
@@ -70,6 +71,7 @@
     /**
      * {@inheritDoc}
      */
+    @Override
     public void toLDAP(final ServerContext c, final JsonValue v,
             final ResultHandler<List<Attribute>> h) {
         // TODO Auto-generated method stub
diff --git a/opendj-sdk/opendj3/opendj-rest2ldap/src/main/java/org/forgerock/opendj/rest2ldap/DefaultAttributeMapper.java b/opendj-sdk/opendj3/opendj-rest2ldap/src/main/java/org/forgerock/opendj/rest2ldap/DefaultAttributeMapper.java
index 36e2c57..a0d8abb 100644
--- a/opendj-sdk/opendj3/opendj-rest2ldap/src/main/java/org/forgerock/opendj/rest2ldap/DefaultAttributeMapper.java
+++ b/opendj-sdk/opendj3/opendj-rest2ldap/src/main/java/org/forgerock/opendj/rest2ldap/DefaultAttributeMapper.java
@@ -9,11 +9,10 @@
  * When distributing Covered Software, include this CDDL Header Notice in each file and include
  * the License file at legal/CDDLv1.0.txt. If applicable, add the following below the CDDL
  * Header, with the fields enclosed by brackets [] replaced by your own identifying
- * information: "Portions Copyrighted [year] [name of copyright owner]".
+ * information: "Portions Copyright [year] [name of copyright owner]".
  *
- * Copyright 2012 ForgeRock AS. All rights reserved.
+ * Copyright 2012 ForgeRock AS.
  */
-
 package org.forgerock.opendj.rest2ldap;
 
 import static org.forgerock.opendj.rest2ldap.Utils.attributeToJson;
@@ -33,7 +32,8 @@
 import org.forgerock.opendj.ldap.Entry;
 
 /**
- *
+ * An attribute mapper that directly maps a configurable selection of attributes
+ * to and from LDAP without any transformation.
  */
 public final class DefaultAttributeMapper implements AttributeMapper {
 
@@ -41,10 +41,21 @@
     // All user attributes by default.
     private final Map<String, String> includedAttributes = new LinkedHashMap<String, String>();
 
+    /**
+     * Creates a new default attribute mapper which will map all user attributes
+     * to JSON by default.
+     */
     public DefaultAttributeMapper() {
         // No implementation required.
     }
 
+    /**
+     * Excludes one or more LDAP attributes from this mapping.
+     *
+     * @param attributes
+     *            The attributes to be excluded.
+     * @return This attribute mapper.
+     */
     public DefaultAttributeMapper excludeAttribute(final String... attributes) {
         for (final String attribute : attributes) {
             excludedAttributes.put(toLowerCase(attribute), attribute);
@@ -52,6 +63,7 @@
         return this;
     }
 
+    @Override
     public void getLDAPAttributes(final JsonPointer jsonAttribute, final Set<String> ldapAttributes) {
         switch (jsonAttribute.size()) {
         case 0:
@@ -72,15 +84,13 @@
         }
     }
 
-    public void getLDAPAttributes(final Set<String> ldapAttributes) {
-        if (!includedAttributes.isEmpty()) {
-            ldapAttributes.addAll(includedAttributes.values());
-        } else {
-            // All user attributes.
-            ldapAttributes.add("*");
-        }
-    }
-
+    /**
+     * Includes one or more LDAP attributes in this mapping.
+     *
+     * @param attributes
+     *            The attributes to be included.
+     * @return This attribute mapper.
+     */
     public DefaultAttributeMapper includeAttribute(final String... attributes) {
         for (final String attribute : attributes) {
             includedAttributes.put(toLowerCase(attribute), attribute);
@@ -88,7 +98,8 @@
         return this;
     }
 
-    public void toJson(final ServerContext c, final Entry e,
+    @Override
+    public void toJSON(final ServerContext c, final Entry e,
             final ResultHandler<Map<String, Object>> h) {
         final Map<String, Object> result = new LinkedHashMap<String, Object>(e.getAttributeCount());
         for (final Attribute a : e.getAllAttributes()) {
@@ -100,6 +111,7 @@
         h.handleResult(result);
     }
 
+    @Override
     public void toLDAP(final ServerContext c, final JsonValue v,
             final ResultHandler<List<Attribute>> h) {
         // TODO:
diff --git a/opendj-sdk/opendj3/opendj-rest2ldap/src/main/java/org/forgerock/opendj/rest2ldap/EntryContainer.java b/opendj-sdk/opendj3/opendj-rest2ldap/src/main/java/org/forgerock/opendj/rest2ldap/EntryContainer.java
index a40b006..e318c3a 100644
--- a/opendj-sdk/opendj3/opendj-rest2ldap/src/main/java/org/forgerock/opendj/rest2ldap/EntryContainer.java
+++ b/opendj-sdk/opendj3/opendj-rest2ldap/src/main/java/org/forgerock/opendj/rest2ldap/EntryContainer.java
@@ -9,11 +9,10 @@
  * When distributing Covered Software, include this CDDL Header Notice in each file and include
  * the License file at legal/CDDLv1.0.txt. If applicable, add the following below the CDDL
  * Header, with the fields enclosed by brackets [] replaced by your own identifying
- * information: "Portions Copyrighted [year] [name of copyright owner]".
+ * information: "Portions Copyright [year] [name of copyright owner]".
  *
- * Copyright 2012 ForgeRock AS. All rights reserved.
+ * Copyright 2012 ForgeRock AS.
  */
-
 package org.forgerock.opendj.rest2ldap;
 
 import java.util.Collection;
@@ -35,7 +34,7 @@
 import org.forgerock.opendj.ldap.responses.SearchResultReference;
 
 /**
- *
+ * An entry container.
  */
 public final class EntryContainer {
     private abstract class AbstractRequestCompletionHandler<R, H extends ResultHandler<? super R>>
@@ -124,58 +123,102 @@
 
     private final ConnectionFactory factory;
 
+    /**
+     * Creates a new entry container for the provided base DN and LDAP
+     * connection factory.
+     *
+     * @param baseDN
+     *            The base DN.
+     * @param factory
+     *            The LDAP connection factory.
+     */
     public EntryContainer(final DN baseDN, final ConnectionFactory factory) {
         this.baseDN = baseDN;
         this.factory = factory;
     }
 
+    /**
+     * Returns the ETag for the provided entry.
+     *
+     * @param entry
+     *            The entry.
+     * @return The ETag.
+     */
     public String getEtagFromEntry(final Entry entry) {
         return entry.parseAttribute(ETAG_ATTRIBUTE).asString();
     }
 
+    /**
+     * Returns the resource ID for the provided entry.
+     *
+     * @param entry
+     *            The entry.
+     * @return The resource ID.
+     */
     public String getIDFromEntry(final Entry entry) {
         return entry.parseAttribute(UUID_ATTRIBUTE).asString();
     }
 
+    /**
+     * Lists the entries contained in this container.
+     *
+     * @param context
+     *            The request context.
+     * @param attributes
+     *            The list of LDAP attributes to be returned.
+     * @param handler
+     *            The search result handler.
+     */
     public void listEntries(final Context context, final Collection<String> attributes,
             final SearchResultHandler handler) {
         final String[] tmp = getSearchAttributes(attributes);
-        final ConnectionCompletionHandler<Result> outerHandler =
-                new ConnectionCompletionHandler<Result>(handler) {
+        final ConnectionCompletionHandler<Result> outerHandler = new ConnectionCompletionHandler<Result>(
+                handler) {
 
-                    @Override
-                    public void handleResult(final Connection connection) {
-                        final SearchRequestCompletionHandler innerHandler =
-                                new SearchRequestCompletionHandler(connection, handler);
-                        final SearchRequest request =
-                                Requests.newSearchRequest(baseDN, SearchScope.SINGLE_LEVEL, Filter
-                                        .objectClassPresent(), tmp);
-                        connection.searchAsync(request, null, innerHandler);
-                    }
+            @Override
+            public void handleResult(final Connection connection) {
+                final SearchRequestCompletionHandler innerHandler = new SearchRequestCompletionHandler(
+                        connection, handler);
+                final SearchRequest request = Requests.newSearchRequest(baseDN,
+                        SearchScope.SINGLE_LEVEL, Filter.objectClassPresent(), tmp);
+                connection.searchAsync(request, null, innerHandler);
+            }
 
-                };
+        };
 
         factory.getConnectionAsync(outerHandler);
     }
 
+    /**
+     * Reads the entry having the specified resource ID.
+     *
+     * @param c
+     *            The request context.
+     * @param id
+     *            The resource ID.
+     * @param attributes
+     *            The list of LDAP attributes to be returned.
+     * @param handler
+     *            The search result handler.
+     */
     public void readEntry(final Context c, final String id, final Collection<String> attributes,
             final ResultHandler<SearchResultEntry> handler) {
         final String[] tmp = getSearchAttributes(attributes);
+        // @Checkstyle:off
         final ConnectionCompletionHandler<SearchResultEntry> outerHandler =
                 new ConnectionCompletionHandler<SearchResultEntry>(handler) {
 
-                    @Override
-                    public void handleResult(final Connection connection) {
-                        final RequestCompletionHandler<SearchResultEntry> innerHandler =
-                                new RequestCompletionHandler<SearchResultEntry>(connection, handler);
-                        final SearchRequest request =
-                                Requests.newSearchRequest(baseDN, SearchScope.SINGLE_LEVEL, Filter
-                                        .equality(UUID_ATTRIBUTE, id), tmp);
-                        connection.searchSingleEntryAsync(request, innerHandler);
-                    }
+            @Override
+            public void handleResult(final Connection connection) {
+                final RequestCompletionHandler<SearchResultEntry> innerHandler =
+                        new RequestCompletionHandler<SearchResultEntry>(connection, handler);
+                final SearchRequest request = Requests.newSearchRequest(baseDN,
+                        SearchScope.SINGLE_LEVEL, Filter.equality(UUID_ATTRIBUTE, id), tmp);
+                connection.searchSingleEntryAsync(request, innerHandler);
+            }
 
-                };
-
+        };
+        // @Checkstyle:on
         factory.getConnectionAsync(outerHandler);
     }
 
diff --git a/opendj-sdk/opendj3/opendj-rest2ldap/src/main/java/org/forgerock/opendj/rest2ldap/LDAPCollectionResourceProvider.java b/opendj-sdk/opendj3/opendj-rest2ldap/src/main/java/org/forgerock/opendj/rest2ldap/LDAPCollectionResourceProvider.java
index 2780f00..0ff5003 100644
--- a/opendj-sdk/opendj3/opendj-rest2ldap/src/main/java/org/forgerock/opendj/rest2ldap/LDAPCollectionResourceProvider.java
+++ b/opendj-sdk/opendj3/opendj-rest2ldap/src/main/java/org/forgerock/opendj/rest2ldap/LDAPCollectionResourceProvider.java
@@ -9,11 +9,10 @@
  * When distributing Covered Software, include this CDDL Header Notice in each file and include
  * the License file at legal/CDDLv1.0.txt. If applicable, add the following below the CDDL
  * Header, with the fields enclosed by brackets [] replaced by your own identifying
- * information: "Portions Copyrighted [year] [name of copyright owner]".
+ * information: "Portions Copyright [year] [name of copyright owner]".
  *
- * Copyright 2012 ForgeRock AS. All rights reserved.
+ * Copyright 2012 ForgeRock AS.
  */
-
 package org.forgerock.opendj.rest2ldap;
 
 import java.util.Collection;
@@ -26,7 +25,22 @@
 
 import org.forgerock.json.fluent.JsonPointer;
 import org.forgerock.json.fluent.JsonValue;
-import org.forgerock.json.resource.*;
+import org.forgerock.json.resource.ActionRequest;
+import org.forgerock.json.resource.CollectionResourceProvider;
+import org.forgerock.json.resource.CreateRequest;
+import org.forgerock.json.resource.DeleteRequest;
+import org.forgerock.json.resource.NotSupportedException;
+import org.forgerock.json.resource.PatchRequest;
+import org.forgerock.json.resource.QueryRequest;
+import org.forgerock.json.resource.QueryResult;
+import org.forgerock.json.resource.QueryResultHandler;
+import org.forgerock.json.resource.ReadRequest;
+import org.forgerock.json.resource.Resource;
+import org.forgerock.json.resource.ResourceException;
+import org.forgerock.json.resource.ResultHandler;
+import org.forgerock.json.resource.ServerContext;
+import org.forgerock.json.resource.UncategorizedException;
+import org.forgerock.json.resource.UpdateRequest;
 import org.forgerock.opendj.ldap.AssertionFailureException;
 import org.forgerock.opendj.ldap.AuthenticationException;
 import org.forgerock.opendj.ldap.AuthorizationException;
@@ -41,19 +55,27 @@
 import org.forgerock.opendj.ldap.responses.SearchResultReference;
 
 /**
- *
+ * A {@code CollectionResourceProvider} implementation which maps a JSON
+ * resource collection to LDAP entries beneath a base DN.
  */
 public class LDAPCollectionResourceProvider implements CollectionResourceProvider {
-    private final AttributeMapper attributeMapper;
-    private final EntryContainer entryContainer;
-
     // Dummy exception used for signalling search success.
     private static final ResourceException SUCCESS = new UncategorizedException(0, null, null);
+    private final AttributeMapper attributeMapper;
+
+    private final EntryContainer entryContainer;
 
     /**
      * Creates a new LDAP resource.
+     *
+     * @param container
+     *            The LDAP entry container.
+     * @param mapper
+     *            The attribute mapper which will be used for mapping LDAP
+     *            attributes to JSON attributes.
      */
-    public LDAPCollectionResourceProvider(final EntryContainer container, final AttributeMapper mapper) {
+    public LDAPCollectionResourceProvider(final EntryContainer container,
+            final AttributeMapper mapper) {
         this.entryContainer = container;
         this.attributeMapper = mapper;
     }
@@ -62,8 +84,8 @@
      * {@inheritDoc}
      */
     @Override
-    public void actionCollection(ServerContext context, ActionRequest request,
-            ResultHandler<JsonValue> handler) {
+    public void actionCollection(final ServerContext context, final ActionRequest request,
+            final ResultHandler<JsonValue> handler) {
         handler.handleError(new NotSupportedException("Not yet implemented"));
     }
 
@@ -71,8 +93,8 @@
      * {@inheritDoc}
      */
     @Override
-    public void actionInstance(ServerContext context, String resourceId, ActionRequest request,
-            ResultHandler<JsonValue> handler) {
+    public void actionInstance(final ServerContext context, final String resourceId,
+            final ActionRequest request, final ResultHandler<JsonValue> handler) {
         handler.handleError(new NotSupportedException("Not yet implemented"));
     }
 
@@ -80,8 +102,8 @@
      * {@inheritDoc}
      */
     @Override
-    public void createInstance(ServerContext context, CreateRequest request,
-            ResultHandler<Resource> handler) {
+    public void createInstance(final ServerContext context, final CreateRequest request,
+            final ResultHandler<Resource> handler) {
         handler.handleError(new NotSupportedException("Not yet implemented"));
     }
 
@@ -89,8 +111,8 @@
      * {@inheritDoc}
      */
     @Override
-    public void deleteInstance(ServerContext context, String resourceId, DeleteRequest request,
-            ResultHandler<Resource> handler) {
+    public void deleteInstance(final ServerContext context, final String resourceId,
+            final DeleteRequest request, final ResultHandler<Resource> handler) {
         handler.handleError(new NotSupportedException("Not yet implemented"));
     }
 
@@ -98,8 +120,8 @@
      * {@inheritDoc}
      */
     @Override
-    public void patchInstance(ServerContext context, String resourceId, PatchRequest request,
-            ResultHandler<Resource> handler) {
+    public void patchInstance(final ServerContext context, final String resourceId,
+            final PatchRequest request, final ResultHandler<Resource> handler) {
         handler.handleError(new NotSupportedException("Not yet implemented"));
     }
 
@@ -118,6 +140,62 @@
             private final AtomicReference<ResourceException> pendingResult = new AtomicReference<ResourceException>();
             private final AtomicBoolean resultSent = new AtomicBoolean();
 
+            @Override
+            public boolean handleEntry(final SearchResultEntry entry) {
+                /*
+                 * Search result entries will be returned before the search
+                 * result/error so the only reason pendingResult will be
+                 * non-null is if a mapping error has occurred.
+                 */
+                if (pendingResult.get() != null) {
+                    return false;
+                }
+
+                // TODO: should the resource or the container define the ID
+                // mapping?
+                final String id = entryContainer.getIDFromEntry(entry);
+                final String revision = entryContainer.getEtagFromEntry(entry);
+                final ResultHandler<Map<String, Object>> mapHandler = new ResultHandler<Map<String, Object>>() {
+                    @Override
+                    public void handleError(final ResourceException e) {
+                        pendingResult.compareAndSet(null, e);
+                        pendingResourceCount.decrementAndGet();
+                        completeIfNecessary();
+                    }
+
+                    @Override
+                    public void handleResult(final Map<String, Object> result) {
+                        final Resource resource = new Resource(id, revision, new JsonValue(result));
+                        handler.handleResource(resource);
+                        pendingResourceCount.decrementAndGet();
+                        completeIfNecessary();
+                    }
+                };
+
+                pendingResourceCount.incrementAndGet();
+                attributeMapper.toJSON(context, entry, mapHandler);
+                return true;
+            }
+
+            @Override
+            public void handleErrorResult(final ErrorResultException error) {
+                pendingResult.compareAndSet(null, adaptErrorResult(error));
+                completeIfNecessary();
+            }
+
+            @Override
+            public boolean handleReference(final SearchResultReference reference) {
+                // TODO: should this be classed as an error since rest2ldap
+                // assumes entries are all colocated?
+                return true;
+            }
+
+            @Override
+            public void handleResult(final Result result) {
+                pendingResult.compareAndSet(null, SUCCESS);
+                completeIfNecessary();
+            }
+
             /*
              * Close out the query result set if there are no more pending
              * resources and the LDAP result has been received.
@@ -134,56 +212,6 @@
                     }
                 }
             }
-
-            public boolean handleEntry(final SearchResultEntry entry) {
-                /*
-                 * Search result entries will be returned before the search
-                 * result/error so the only reason pendingResult will be
-                 * non-null is if a mapping error has occurred.
-                 */
-                if (pendingResult.get() != null) {
-                    return false;
-                }
-
-                // TODO: should the resource or the container define the ID
-                // mapping?
-                final String id = entryContainer.getIDFromEntry(entry);
-                final String revision = entryContainer.getEtagFromEntry(entry);
-                final ResultHandler<Map<String, Object>> mapHandler = new ResultHandler<Map<String, Object>>() {
-                    public void handleError(final ResourceException e) {
-                        pendingResult.compareAndSet(null, e);
-                        pendingResourceCount.decrementAndGet();
-                        completeIfNecessary();
-                    }
-
-                    public void handleResult(final Map<String, Object> result) {
-                        Resource resource = new Resource(id, revision, new JsonValue(result));
-                        handler.handleResource(resource);
-                        pendingResourceCount.decrementAndGet();
-                        completeIfNecessary();
-                    }
-                };
-
-                pendingResourceCount.incrementAndGet();
-                attributeMapper.toJson(context, entry, mapHandler);
-                return true;
-            }
-
-            public void handleErrorResult(final ErrorResultException error) {
-                pendingResult.compareAndSet(null, adaptErrorResult(error));
-                completeIfNecessary();
-            }
-
-            public boolean handleReference(final SearchResultReference reference) {
-                // TODO: should this be classed as an error since rest2ldap
-                // assumes entries are all colocated?
-                return true;
-            }
-
-            public void handleResult(final Result result) {
-                pendingResult.compareAndSet(null, SUCCESS);
-                completeIfNecessary();
-            }
         };
         entryContainer.listEntries(context, requestedLDAPAttributes, searchHandler);
     }
@@ -193,32 +221,39 @@
      */
     @Override
     public void readInstance(final ServerContext context, final String resourceId,
-            ReadRequest request, final ResultHandler<Resource> handler) {
+            final ReadRequest request, final ResultHandler<Resource> handler) {
         // TODO: Determine the set of LDAP attributes that need to be read.
         final Set<JsonPointer> requestedAttributes = new LinkedHashSet<JsonPointer>();
         final Collection<String> requestedLDAPAttributes = getRequestedLDAPAttributes(requestedAttributes);
 
-        final org.forgerock.opendj.ldap.ResultHandler<SearchResultEntry> searchHandler = new org.forgerock.opendj.ldap.ResultHandler<SearchResultEntry>() {
+        // @Checkstyle:off
+        final org.forgerock.opendj.ldap.ResultHandler<SearchResultEntry> searchHandler =
+                new org.forgerock.opendj.ldap.ResultHandler<SearchResultEntry>() {
+            @Override
             public void handleErrorResult(final ErrorResultException error) {
                 handler.handleError(adaptErrorResult(error));
             }
 
+            @Override
             public void handleResult(final SearchResultEntry entry) {
                 final String revision = entryContainer.getEtagFromEntry(entry);
                 final ResultHandler<Map<String, Object>> mapHandler = new ResultHandler<Map<String, Object>>() {
+                    @Override
                     public void handleError(final ResourceException e) {
                         handler.handleError(e);
                     }
 
+                    @Override
                     public void handleResult(final Map<String, Object> result) {
-                        Resource resource = new Resource(resourceId, revision,
-                                new JsonValue(result));
+                        final Resource resource = new Resource(resourceId, revision, new JsonValue(
+                                result));
                         handler.handleResult(resource);
                     }
                 };
-                attributeMapper.toJson(context, entry, mapHandler);
+                attributeMapper.toJSON(context, entry, mapHandler);
             }
         };
+        // @Checkstyle:on
         entryContainer.readEntry(context, resourceId, requestedLDAPAttributes, searchHandler);
     }
 
@@ -226,8 +261,8 @@
      * {@inheritDoc}
      */
     @Override
-    public void updateInstance(ServerContext context, String resourceId, UpdateRequest request,
-            ResultHandler<Resource> handler) {
+    public void updateInstance(final ServerContext context, final String resourceId,
+            final UpdateRequest request, final ResultHandler<Resource> handler) {
         handler.handleError(new NotSupportedException("Not yet implemented"));
     }
 
diff --git a/opendj-sdk/opendj3/opendj-rest2ldap/src/main/java/org/forgerock/opendj/rest2ldap/ReferenceAttributeMapper.java b/opendj-sdk/opendj3/opendj-rest2ldap/src/main/java/org/forgerock/opendj/rest2ldap/ReferenceAttributeMapper.java
index a4deee4..8ed53fc 100644
--- a/opendj-sdk/opendj3/opendj-rest2ldap/src/main/java/org/forgerock/opendj/rest2ldap/ReferenceAttributeMapper.java
+++ b/opendj-sdk/opendj3/opendj-rest2ldap/src/main/java/org/forgerock/opendj/rest2ldap/ReferenceAttributeMapper.java
@@ -9,11 +9,10 @@
  * When distributing Covered Software, include this CDDL Header Notice in each file and include
  * the License file at legal/CDDLv1.0.txt. If applicable, add the following below the CDDL
  * Header, with the fields enclosed by brackets [] replaced by your own identifying
- * information: "Portions Copyrighted [year] [name of copyright owner]".
+ * information: "Portions Copyright [year] [name of copyright owner]".
  *
- * Copyright 2012 ForgeRock AS. All rights reserved.
+ * Copyright 2012 ForgeRock AS.
  */
-
 package org.forgerock.opendj.rest2ldap;
 
 import java.util.List;
@@ -28,7 +27,7 @@
 import org.forgerock.opendj.ldap.Entry;
 
 /**
- *
+ * An attribute mapper which maps DN valued LDAP attributes to resource IDs.
  */
 public class ReferenceAttributeMapper implements AttributeMapper {
 
@@ -37,6 +36,7 @@
     /**
      * {@inheritDoc}
      */
+    @Override
     public void getLDAPAttributes(final JsonPointer jsonAttribute, final Set<String> ldapAttributes) {
         // TODO Auto-generated method stub
 
@@ -45,7 +45,9 @@
     /**
      * {@inheritDoc}
      */
-    public void toJson(final ServerContext c, final Entry e, final ResultHandler<Map<String, Object>> h) {
+    @Override
+    public void toJSON(final ServerContext c, final Entry e,
+            final ResultHandler<Map<String, Object>> h) {
         // TODO Auto-generated method stub
 
     }
@@ -53,7 +55,9 @@
     /**
      * {@inheritDoc}
      */
-    public void toLDAP(final ServerContext c, final JsonValue v, final ResultHandler<List<Attribute>> h) {
+    @Override
+    public void toLDAP(final ServerContext c, final JsonValue v,
+            final ResultHandler<List<Attribute>> h) {
         // TODO Auto-generated method stub
 
     }
diff --git a/opendj-sdk/opendj3/opendj-rest2ldap/src/main/java/org/forgerock/opendj/rest2ldap/SimpleAttributeMapper.java b/opendj-sdk/opendj3/opendj-rest2ldap/src/main/java/org/forgerock/opendj/rest2ldap/SimpleAttributeMapper.java
index 264c7cd..74ba121 100644
--- a/opendj-sdk/opendj3/opendj-rest2ldap/src/main/java/org/forgerock/opendj/rest2ldap/SimpleAttributeMapper.java
+++ b/opendj-sdk/opendj3/opendj-rest2ldap/src/main/java/org/forgerock/opendj/rest2ldap/SimpleAttributeMapper.java
@@ -9,11 +9,10 @@
  * When distributing Covered Software, include this CDDL Header Notice in each file and include
  * the License file at legal/CDDLv1.0.txt. If applicable, add the following below the CDDL
  * Header, with the fields enclosed by brackets [] replaced by your own identifying
- * information: "Portions Copyrighted [year] [name of copyright owner]".
+ * information: "Portions Copyright [year] [name of copyright owner]".
  *
- * Copyright 2012 ForgeRock AS. All rights reserved.
+ * Copyright 2012 ForgeRock AS.
  */
-
 package org.forgerock.opendj.rest2ldap;
 
 import static org.forgerock.opendj.rest2ldap.Utils.byteStringToJson;
@@ -35,7 +34,8 @@
 import org.forgerock.opendj.ldap.Functions;
 
 /**
- *
+ * An attribute mapper which maps a single JSON attribute to a single LDAP
+ * attribute.
  */
 public class SimpleAttributeMapper implements AttributeMapper {
 
@@ -43,7 +43,7 @@
     private Object defaultValue = null;
     private boolean forceSingleValued = false;
 
-    private boolean isReadOnly = false;
+    // private boolean isReadOnly = false;
     private final String jsonAttributeName;
     private final String ldapAttributeName;
     private final String normalizedJsonAttributeName;
@@ -74,7 +74,65 @@
         this.normalizedJsonAttributeName = toLowerCase(jsonAttributeName);
     }
 
-    public SimpleAttributeMapper forceSingleValued(final boolean singleValued) {
+    /**
+     * Sets the decoder which will be used for converting LDAP attribute values
+     * to JSON values.
+     *
+     * @param f
+     *            The function to use for decoding LDAP attribute values.
+     * @return This attribute mapper.
+     */
+    public SimpleAttributeMapper decoder(final Function<ByteString, ?, Void> f) {
+        this.decoder = f;
+        return this;
+    }
+
+    /**
+     * Sets the default JSON value which should be substituted when the LDAP
+     * attribute is not found in the LDAP entry.
+     *
+     * @param defaultValue
+     *            The default JSON value.
+     * @return This attribute mapper.
+     */
+    public SimpleAttributeMapper defaultJSONValue(final Object defaultValue) {
+        this.defaultValue = defaultValue;
+        return this;
+    }
+
+    /**
+     * {@inheritDoc}
+     */
+    @Override
+    public void getLDAPAttributes(final JsonPointer jsonAttribute, final Set<String> ldapAttributes) {
+        if (attributeMatchesPointer(jsonAttribute)) {
+            ldapAttributes.add(ldapAttributeName);
+        }
+    }
+
+    /**
+     * Prevents the LDAP attribute from being updated.
+     *
+     * @param readOnly
+     *            {@code true} if the LDAP attribute is read-only.
+     * @return This attribute mapper.
+     */
+    public SimpleAttributeMapper readOnly(final boolean readOnly) {
+        // TODO: enforcement policy: ignore, warn, or reject.
+        // this.isReadOnly = readOnly;
+        return this;
+    }
+
+    /**
+     * Forces a multi-valued LDAP attribute to be represented as a single-valued
+     * JSON value, rather than an array of values.
+     *
+     * @param singleValued
+     *            {@code true} if the LDAP attribute should be treated as a
+     *            single-valued attribute.
+     * @return This attribute mapper.
+     */
+    public SimpleAttributeMapper singleValued(final boolean singleValued) {
         this.forceSingleValued = singleValued;
         return this;
     }
@@ -82,25 +140,13 @@
     /**
      * {@inheritDoc}
      */
-    public void getLDAPAttributes(final JsonPointer jsonAttribute, final Set<String> ldapAttributes) {
-        if (attributeMatchesPointer(jsonAttribute)) {
-            ldapAttributes.add(ldapAttributeName);
-        }
-    }
-
-    public SimpleAttributeMapper isReadOnly(final boolean readOnly) {
-        this.isReadOnly = readOnly;
-        return this;
-    }
-
-    /**
-     * {@inheritDoc}
-     */
-    public void toJson(final ServerContext c, final Entry e, final ResultHandler<Map<String, Object>> h) {
+    @Override
+    public void toJSON(final ServerContext 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 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);
@@ -116,21 +162,13 @@
     /**
      * {@inheritDoc}
      */
-    public void toLDAP(final ServerContext c, final JsonValue v, final ResultHandler<List<Attribute>> h) {
+    @Override
+    public void toLDAP(final ServerContext c, final JsonValue v,
+            final ResultHandler<List<Attribute>> h) {
         // TODO Auto-generated method stub
 
     }
 
-    public SimpleAttributeMapper withDecoder(final Function<ByteString, ?, Void> f) {
-        this.decoder = f;
-        return this;
-    }
-
-    public SimpleAttributeMapper withDefaultValue(final Object defaultValue) {
-        this.defaultValue = defaultValue;
-        return this;
-    }
-
     private boolean attributeMatchesPointer(final JsonPointer resourceAttribute) {
         return resourceAttribute.isEmpty()
                 || toLowerCase(resourceAttribute.get(0)).equals(normalizedJsonAttributeName);
diff --git a/opendj-sdk/opendj3/opendj-rest2ldap/src/main/java/org/forgerock/opendj/rest2ldap/SubContainerAttributeMapper.java b/opendj-sdk/opendj3/opendj-rest2ldap/src/main/java/org/forgerock/opendj/rest2ldap/SubContainerAttributeMapper.java
index 58bdc72..d5591aa 100644
--- a/opendj-sdk/opendj3/opendj-rest2ldap/src/main/java/org/forgerock/opendj/rest2ldap/SubContainerAttributeMapper.java
+++ b/opendj-sdk/opendj3/opendj-rest2ldap/src/main/java/org/forgerock/opendj/rest2ldap/SubContainerAttributeMapper.java
@@ -9,11 +9,10 @@
  * When distributing Covered Software, include this CDDL Header Notice in each file and include
  * the License file at legal/CDDLv1.0.txt. If applicable, add the following below the CDDL
  * Header, with the fields enclosed by brackets [] replaced by your own identifying
- * information: "Portions Copyrighted [year] [name of copyright owner]".
+ * information: "Portions Copyright [year] [name of copyright owner]".
  *
- * Copyright 2012 ForgeRock AS. All rights reserved.
+ * Copyright 2012 ForgeRock AS.
  */
-
 package org.forgerock.opendj.rest2ldap;
 
 import java.util.List;
@@ -28,7 +27,8 @@
 import org.forgerock.opendj.ldap.Entry;
 
 /**
- *
+ * An attribute mapper which inlines LDAP attributes from subordinate LDAP
+ * entries.
  */
 public class SubContainerAttributeMapper implements AttributeMapper {
 
@@ -37,6 +37,7 @@
     /**
      * {@inheritDoc}
      */
+    @Override
     public void getLDAPAttributes(final JsonPointer jsonAttribute, final Set<String> ldapAttributes) {
         // TODO Auto-generated method stub
 
@@ -45,7 +46,9 @@
     /**
      * {@inheritDoc}
      */
-    public void toJson(final ServerContext c, final Entry e, final ResultHandler<Map<String, Object>> h) {
+    @Override
+    public void toJSON(final ServerContext c, final Entry e,
+            final ResultHandler<Map<String, Object>> h) {
         // TODO Auto-generated method stub
 
     }
@@ -53,7 +56,9 @@
     /**
      * {@inheritDoc}
      */
-    public void toLDAP(final ServerContext c, final JsonValue v, final ResultHandler<List<Attribute>> h) {
+    @Override
+    public void toLDAP(final ServerContext c, final JsonValue v,
+            final ResultHandler<List<Attribute>> h) {
         // TODO Auto-generated method stub
 
     }
diff --git a/opendj-sdk/opendj3/opendj-rest2ldap/src/main/java/org/forgerock/opendj/rest2ldap/Utils.java b/opendj-sdk/opendj3/opendj-rest2ldap/src/main/java/org/forgerock/opendj/rest2ldap/Utils.java
index df1bb12..9d83322 100644
--- a/opendj-sdk/opendj3/opendj-rest2ldap/src/main/java/org/forgerock/opendj/rest2ldap/Utils.java
+++ b/opendj-sdk/opendj3/opendj-rest2ldap/src/main/java/org/forgerock/opendj/rest2ldap/Utils.java
@@ -9,11 +9,10 @@
  * When distributing Covered Software, include this CDDL Header Notice in each file and include
  * the License file at legal/CDDLv1.0.txt. If applicable, add the following below the CDDL
  * Header, with the fields enclosed by brackets [] replaced by your own identifying
- * information: "Portions Copyrighted [year] [name of copyright owner]".
+ * information: "Portions Copyright [year] [name of copyright owner]".
  *
- * Copyright 2012 ForgeRock AS. All rights reserved.
+ * Copyright 2012 ForgeRock AS.
  */
-
 package org.forgerock.opendj.rest2ldap;
 
 import static org.forgerock.opendj.ldap.schema.CoreSchema.getBooleanSyntax;
@@ -34,35 +33,37 @@
 import org.forgerock.opendj.ldap.schema.Syntax;
 
 /**
- *
+ * Internal utility methods.
  */
 final class Utils {
 
+    // @Checkstyle:off
     private static final Function<ByteString, Object, Attribute> BYTESTRING_TO_JSON =
             new Function<ByteString, Object, Attribute>() {
-                public Object apply(final ByteString value, final Attribute a) {
-                    final Syntax syntax =
-                            a.getAttributeDescription().getAttributeType().getSyntax();
-                    if (syntax.equals(getBooleanSyntax())) {
-                        return Functions.byteStringToBoolean().apply(value, null);
-                    } else if (syntax.equals(getIntegerSyntax())) {
-                        return Functions.byteStringToLong().apply(value, null);
-                    } else if (syntax.equals(getGeneralizedTimeSyntax())) {
-                        return DatatypeConverter.printDateTime(Functions
-                                .byteStringToGeneralizedTime().apply(value, null).toCalendar());
-                    } else if (syntax.isHumanReadable()) {
-                        return Functions.byteStringToString().apply(value, null);
-                    } else {
-                        // Base 64 encoded binary.
-                        return DatatypeConverter.printBase64Binary(value.toByteArray());
-                    }
-                }
-            };
+        @Override
+        public Object apply(final ByteString value, final Attribute a) {
+            final Syntax syntax = a.getAttributeDescription().getAttributeType().getSyntax();
+            if (syntax.equals(getBooleanSyntax())) {
+                return Functions.byteStringToBoolean().apply(value, null);
+            } else if (syntax.equals(getIntegerSyntax())) {
+                return Functions.byteStringToLong().apply(value, null);
+            } else if (syntax.equals(getGeneralizedTimeSyntax())) {
+                return DatatypeConverter.printDateTime(Functions.byteStringToGeneralizedTime()
+                        .apply(value, null).toCalendar());
+            } else if (syntax.isHumanReadable()) {
+                return Functions.byteStringToString().apply(value, null);
+            } else {
+                // Base 64 encoded binary.
+                return DatatypeConverter.printBase64Binary(value.toByteArray());
+            }
+        }
+    };
+    // @Checkstyle:on
 
     static Object attributeToJson(final Attribute a) {
         final Function<ByteString, Object, Void> f = Functions.fixedFunction(BYTESTRING_TO_JSON, a);
-        final boolean isSingleValued =
-                a.getAttributeDescription().getAttributeType().isSingleValue();
+        final boolean isSingleValued = a.getAttributeDescription().getAttributeType()
+                .isSingleValue();
         return isSingleValued ? a.parse().as(f) : asList(a.parse().asSetOf(f));
     }
 
diff --git a/opendj-sdk/opendj3/opendj-rest2ldap/src/main/java/org/forgerock/opendj/rest2ldap/package-info.java b/opendj-sdk/opendj3/opendj-rest2ldap/src/main/java/org/forgerock/opendj/rest2ldap/package-info.java
index 97a6106..e92fb9e 100755
--- a/opendj-sdk/opendj3/opendj-rest2ldap/src/main/java/org/forgerock/opendj/rest2ldap/package-info.java
+++ b/opendj-sdk/opendj3/opendj-rest2ldap/src/main/java/org/forgerock/opendj/rest2ldap/package-info.java
@@ -1,27 +1,17 @@
 /*
- * CDDL HEADER START
+ * The contents of this file are subject to the terms of the Common Development and
+ * Distribution License (the License). You may not use this file except in compliance with the
+ * License.
  *
- * The contents of this file are subject to the terms of the
- * Common Development and Distribution License, Version 1.0 only
- * (the "License").  You may not use this file except in compliance
- * with the License.
+ * You can obtain a copy of the License at legal/CDDLv1.0.txt. See the License for the
+ * specific language governing permission and limitations under the License.
  *
- * You can obtain a copy of the license at legal-notices/CDDLv1_0.txt
- * or http://forgerock.org/license/CDDLv1.0.html.
- * See the License for the specific language governing permissions
- * and limitations under the License.
+ * When distributing Covered Software, include this CDDL Header Notice in each file and include
+ * the License file at legal/CDDLv1.0.txt. If applicable, add the following below the CDDL
+ * Header, with the fields enclosed by brackets [] replaced by your own identifying
+ * information: "Portions Copyright [year] [name of copyright owner]".
  *
- * When distributing Covered Code, include this CDDL HEADER in each
- * file and include the License file at legal-notices/CDDLv1_0.txt.
- * If applicable, add the following below this CDDL HEADER, with the
- * fields enclosed by brackets "[]" replaced with your own identifying
- * information:
- *      Portions Copyright [yyyy] [name of copyright owner]
- *
- * CDDL HEADER END
- *
- *
- *      Copyright 2012 ForgeRock AS.
+ * Copyright 2012 ForgeRock AS.
  */
 
 /**
diff --git a/opendj-sdk/opendj3/opendj-rest2ldap/src/test/java/org/forgerock/opendj/rest2ldap/Example.java b/opendj-sdk/opendj3/opendj-rest2ldap/src/test/java/org/forgerock/opendj/rest2ldap/Example.java
index ccd5a03..385aa48 100644
--- a/opendj-sdk/opendj3/opendj-rest2ldap/src/test/java/org/forgerock/opendj/rest2ldap/Example.java
+++ b/opendj-sdk/opendj3/opendj-rest2ldap/src/test/java/org/forgerock/opendj/rest2ldap/Example.java
@@ -34,13 +34,21 @@
 import org.glassfish.grizzly.servlet.WebappContext;
 
 /**
- * Example
+ * Example.
  */
 public class Example {
 
     private static final Logger LOGGER = Logger.getLogger(Example.class.getName());
     private static final int PORT = 18890;
 
+    /**
+     * REST 2 LDAP example application.
+     *
+     * @param args
+     *            Command line arguments.
+     * @throws Exception
+     *             If an unexpected error occurred.
+     */
     public static void main(final String[] args) throws Exception {
         // All LDAP resources will use this connection factory.
         final ConnectionFactory ldapFactory = newAuthenticatedConnectionFactory(
@@ -55,18 +63,18 @@
 
         // Create user resource.
         final AttributeMapper userMapper = new CompositeAttributeMapper().addMapper(
-                new SimpleAttributeMapper("id", "entryUUID").forceSingleValued(true)).addMapper(
+                new SimpleAttributeMapper("id", "entryUUID").singleValued(true)).addMapper(
                 new DefaultAttributeMapper().includeAttribute("uid", "isMemberOf",
                         "modifyTimestamp")).addMapper(
                 new ComplexAttributeMapper("name", new DefaultAttributeMapper().includeAttribute(
                         "cn", "sn", "givenName"))).addMapper(
                 new ComplexAttributeMapper("contactInformation", new CompositeAttributeMapper()
                         .addMapper(
-                                new SimpleAttributeMapper("telephoneNumber").withDecoder(
-                                        Functions.byteStringToString()).forceSingleValued(true))
+                                new SimpleAttributeMapper("telephoneNumber").decoder(
+                                        Functions.byteStringToString()).singleValued(true))
                         .addMapper(
                                 new SimpleAttributeMapper("emailAddress", "mail")
-                                        .forceSingleValued(true))));
+                                        .singleValued(true))));
         final LDAPCollectionResourceProvider userResource = new LDAPCollectionResourceProvider(
                 userContainer, userMapper);
 
@@ -77,7 +85,7 @@
                 groupContainer, groupMapper);
 
         // Create the router.
-        Router router = new Router();
+        final Router router = new Router();
         router.addRoute(RoutingMode.EQUALS, "/users", userResource);
         router.addRoute(RoutingMode.EQUALS, "/groups", groupResource);
 

--
Gitblit v1.10.0