From f2b5fa18b58db09562d03a7d247e21c111e78056 Mon Sep 17 00:00:00 2001
From: Yannick Lecaillez <yannick.lecaillez@forgerock.com>
Date: Mon, 07 Nov 2016 13:59:40 +0000
Subject: [PATCH] OPENDJ-3179: Migrate LDAP Connection Handler to SDK Grizzly transport

---
 opendj-server-legacy/src/main/java/org/forgerock/opendj/adapter/server3x/Converters.java |  301 +++++++++++++++++++++++++++++++++++++++++++++++++-
 1 files changed, 295 insertions(+), 6 deletions(-)

diff --git a/opendj-server-legacy/src/main/java/org/forgerock/opendj/adapter/server3x/Converters.java b/opendj-server-legacy/src/main/java/org/forgerock/opendj/adapter/server3x/Converters.java
index 4625c11..5a3560c 100644
--- a/opendj-server-legacy/src/main/java/org/forgerock/opendj/adapter/server3x/Converters.java
+++ b/opendj-server-legacy/src/main/java/org/forgerock/opendj/adapter/server3x/Converters.java
@@ -15,12 +15,11 @@
  */
 package org.forgerock.opendj.adapter.server3x;
 
-import static com.forgerock.opendj.ldap.CoreMessages.*;
-import static com.forgerock.opendj.util.StaticUtils.*;
-
-import static org.forgerock.opendj.ldap.LdapException.*;
-import static org.opends.server.extensions.ExtensionsConstants.*;
-import static org.opends.server.util.CollectionUtils.*;
+import static com.forgerock.opendj.ldap.CoreMessages.ERR_EXTOP_PASSMOD_CANNOT_DECODE_REQUEST;
+import static com.forgerock.opendj.util.StaticUtils.getExceptionMessage;
+import static org.forgerock.opendj.ldap.LdapException.newLdapException;
+import static org.opends.server.extensions.ExtensionsConstants.TYPE_PASSWORD_MODIFY_GENERATED_PASSWORD;
+import static org.opends.server.util.CollectionUtils.newArrayList;
 
 import java.io.IOException;
 import java.util.ArrayList;
@@ -33,21 +32,28 @@
 import org.forgerock.opendj.io.ASN1Reader;
 import org.forgerock.opendj.io.ASN1Writer;
 import org.forgerock.opendj.ldap.Attribute;
+import org.forgerock.opendj.ldap.AttributeDescription;
+import org.forgerock.opendj.ldap.AttributeParser;
 import org.forgerock.opendj.ldap.ByteString;
 import org.forgerock.opendj.ldap.ByteStringBuilder;
 import org.forgerock.opendj.ldap.DN;
+import org.forgerock.opendj.ldap.DecodeException;
+import org.forgerock.opendj.ldap.DecodeOptions;
 import org.forgerock.opendj.ldap.LdapException;
 import org.forgerock.opendj.ldap.LinkedAttribute;
 import org.forgerock.opendj.ldap.LinkedHashMapEntry;
 import org.forgerock.opendj.ldap.ResultCode;
 import org.forgerock.opendj.ldap.SearchScope;
 import org.forgerock.opendj.ldap.controls.Control;
+import org.forgerock.opendj.ldap.controls.ControlDecoder;
 import org.forgerock.opendj.ldap.controls.GenericControl;
 import org.forgerock.opendj.ldap.responses.PasswordModifyExtendedResult;
 import org.forgerock.opendj.ldap.responses.Responses;
 import org.forgerock.opendj.ldap.responses.Result;
 import org.forgerock.opendj.ldap.responses.SearchResultEntry;
 import org.forgerock.opendj.server.config.meta.VirtualAttributeCfgDefn;
+import org.forgerock.util.Function;
+import org.forgerock.util.promise.NeverThrowsException;
 import org.opends.server.core.BindOperation;
 import org.opends.server.core.CompareOperation;
 import org.opends.server.core.DirectoryServer;
@@ -63,6 +69,8 @@
 import org.opends.server.types.SearchFilter;
 import org.opends.server.util.ServerConstants;
 
+import com.forgerock.opendj.util.Iterables;
+
 /** Common utility methods. */
 public final class Converters {
 
@@ -451,6 +459,130 @@
     }
 
     /**
+     * Converts from OpenDJ server {@link org.opends.server.types.Attribute} to OpenDJ LDAP SDK
+     * {@link org.forgerock.opendj.ldap.Attribute}.
+     *
+     * @param attribute
+     *            value to convert
+     * @return the converted value
+     */
+    public static org.forgerock.opendj.ldap.Attribute partiallyWrap(final org.opends.server.types.Attribute attribute) {
+        return new Attribute() {
+
+            @Override
+            public AttributeDescription getAttributeDescription() {
+                return attribute.getAttributeDescription();
+            }
+
+            @Override
+            public String getAttributeDescriptionAsString() {
+                return attribute.getAttributeDescription().toString();
+            }
+
+            @Override
+            public Iterator<ByteString> iterator() {
+                return attribute.iterator();
+            }
+
+            @Override
+            public boolean isEmpty() {
+                return attribute.isEmpty();
+            }
+
+            @Override
+            public int size() {
+                return attribute.size();
+            }
+
+            @Override
+            public boolean contains(Object value) {
+                return attribute.contains((ByteString) value);
+            }
+
+            @Override
+            public <T> T[] toArray(T[] array) {
+                throw new UnsupportedOperationException();
+            }
+
+            @Override
+            public ByteString[] toArray() {
+                throw new UnsupportedOperationException();
+
+            }
+
+            @Override
+            public <T> boolean retainAll(Collection<T> values, Collection<? super T> missingValues) {
+                throw new UnsupportedOperationException();
+            }
+
+            @Override
+            public boolean retainAll(Collection<?> values) {
+                throw new UnsupportedOperationException();
+            }
+
+            @Override
+            public <T> boolean removeAll(Collection<T> values, Collection<? super T> missingValues) {
+                throw new UnsupportedOperationException();
+            }
+
+            @Override
+            public boolean removeAll(Collection<?> values) {
+                throw new UnsupportedOperationException();
+            }
+
+            @Override
+            public boolean remove(Object value) {
+                throw new UnsupportedOperationException();
+            }
+
+            @Override
+            public AttributeParser parse() {
+                throw new UnsupportedOperationException();
+            }
+
+            @Override
+            public String firstValueAsString() {
+                throw new UnsupportedOperationException();
+            }
+
+            @Override
+            public ByteString firstValue() {
+                throw new UnsupportedOperationException();
+            }
+
+            @Override
+            public boolean containsAll(Collection<?> values) {
+                throw new UnsupportedOperationException();
+            }
+
+            @Override
+            public void clear() {
+                throw new UnsupportedOperationException();
+            }
+
+            @Override
+            public <T> boolean addAll(Collection<T> values, Collection<? super T> duplicateValues) {
+                throw new UnsupportedOperationException();
+            }
+
+            @Override
+            public boolean addAll(Collection<? extends ByteString> values) {
+                throw new UnsupportedOperationException();
+            }
+
+            @Override
+            public boolean add(Object... values) {
+                throw new UnsupportedOperationException();
+            }
+
+            @Override
+            public boolean add(ByteString value) {
+                throw new UnsupportedOperationException();
+            }
+        };
+    }
+
+    /**
      * Converts from an <code>Iterable</code> of OpenDJ server
      * {@link org.opends.server.types.Attribute} to a <code>List</code> of OpenDJ
      * LDAP SDK {@link org.forgerock.opendj.ldap.Attribute}.
@@ -494,6 +626,163 @@
 
     /**
      * Converts from OpenDJ server
+     * {@link org.opends.server.types.SearchResultEntry} to OpenDJ LDAP SDK
+     * {@link org.forgerock.opendj.ldap.responses.SearchResultEntry}.
+     *
+     * @param srvResultEntry
+     *          value to convert
+     * @return the converted value
+     */
+    public static org.forgerock.opendj.ldap.responses.SearchResultEntry partiallyWrap(
+            final org.opends.server.types.SearchResultEntry srvResultEntry) {
+
+        final ArrayList<Control> controls = new ArrayList<>(srvResultEntry.getControls().size());
+        for(org.opends.server.types.Control control : srvResultEntry.getControls()) {
+          controls.add(Converters.from(control));
+        }
+
+        return new SearchResultEntry() {
+            @Override
+            public DN getName() {
+                return srvResultEntry.getName();
+            }
+
+            @Override
+            public Iterable<Attribute> getAllAttributes() {
+                return Iterables.transformedIterable(srvResultEntry.getAllAttributes(),
+                        new Function<org.opends.server.types.Attribute, Attribute, NeverThrowsException>() {
+                    @Override
+                    public Attribute apply(org.opends.server.types.Attribute value) throws NeverThrowsException {
+                        return Converters.partiallyWrap(value);
+                    }
+                });
+            }
+
+            @Override
+            public Attribute getAttribute(String attributeDescription) {
+                return Converters.from(srvResultEntry.getAllAttributes(attributeDescription).iterator().next());
+            }
+
+            @Override
+            public int getAttributeCount() {
+                return srvResultEntry.getAttributes().size();
+            }
+
+            @Override
+            public List<Control> getControls() {
+                return controls;
+            }
+
+            @Override
+            public AttributeParser parseAttribute(String attributeDescription) {
+                throw new UnsupportedOperationException();
+            }
+
+            @Override
+            public AttributeParser parseAttribute(AttributeDescription attributeDescription) {
+                throw new UnsupportedOperationException();
+            }
+
+            @Override
+            public boolean containsControl(String oid) {
+                throw new UnsupportedOperationException();
+            }
+
+            @Override
+            public SearchResultEntry setName(String dn) {
+                throw new UnsupportedOperationException();
+            }
+
+            @Override
+            public SearchResultEntry setName(DN dn) {
+                throw new UnsupportedOperationException();
+            }
+
+            @Override
+            public SearchResultEntry replaceAttribute(String attributeDescription, Object... values) {
+                throw new UnsupportedOperationException();
+            }
+
+            @Override
+            public boolean replaceAttribute(Attribute attribute) {
+                throw new UnsupportedOperationException();
+            }
+
+            @Override
+            public SearchResultEntry removeAttribute(String attributeDescription, Object... values) {
+                throw new UnsupportedOperationException();
+            }
+
+            @Override
+            public boolean removeAttribute(AttributeDescription attributeDescription) {
+                throw new UnsupportedOperationException();
+            }
+
+            @Override
+            public boolean removeAttribute(Attribute attribute, Collection<? super ByteString> missingValues) {
+                throw new UnsupportedOperationException();
+            }
+
+            @Override
+            public <C extends Control> C getControl(ControlDecoder<C> decoder, DecodeOptions options)
+                    throws DecodeException {
+                throw new UnsupportedOperationException();
+            }
+
+            @Override
+            public Attribute getAttribute(AttributeDescription attributeDescription) {
+                throw new UnsupportedOperationException();
+            }
+
+            @Override
+            public Iterable<Attribute> getAllAttributes(String attributeDescription) {
+                throw new UnsupportedOperationException();
+            }
+
+            @Override
+            public Iterable<Attribute> getAllAttributes(AttributeDescription attributeDescription) {
+                throw new UnsupportedOperationException();
+            }
+
+            @Override
+            public boolean containsAttribute(String attributeDescription, Object... values) {
+                throw new UnsupportedOperationException();
+            }
+
+            @Override
+            public boolean containsAttribute(Attribute attribute, Collection<? super ByteString> missingValues) {
+                throw new UnsupportedOperationException();
+            }
+
+            @Override
+            public SearchResultEntry clearAttributes() {
+                throw new UnsupportedOperationException();
+            }
+
+            @Override
+            public SearchResultEntry addControl(Control control) {
+                throw new UnsupportedOperationException();
+            }
+
+            @Override
+            public SearchResultEntry addAttribute(String attributeDescription, Object... values) {
+                throw new UnsupportedOperationException();
+            }
+
+            @Override
+            public boolean addAttribute(Attribute attribute, Collection<? super ByteString> duplicateValues) {
+                throw new UnsupportedOperationException();
+            }
+
+            @Override
+            public boolean addAttribute(Attribute attribute) {
+                throw new UnsupportedOperationException();
+            }
+        };
+    }
+
+    /**
+     * Converts from OpenDJ server
      * {@link org.opends.server.types.Entry} to OpenDJ LDAP SDK
      * {@link org.forgerock.opendj.ldap.Entry}.
      *

--
Gitblit v1.10.0