From 89d4b5f3d862c3697d7421233a969db05a9b641b Mon Sep 17 00:00:00 2001
From: Nicolas Capponi <nicolas.capponi@forgerock.com>
Date: Tue, 25 Feb 2014 13:18:25 +0000
Subject: [PATCH] Add methods to convert from/to server Entry class to/from SDK Entry class

---
 opendj-server3x-adapter/src/test/java/org/forgerock/opendj/adapter/server3x/ConvertersTestCase.java |   18 +++++++++
 opendj-server3x-adapter/src/main/java/org/forgerock/opendj/adapter/server3x/Converters.java         |   44 ++++++++++++++++++++++
 2 files changed, 62 insertions(+), 0 deletions(-)

diff --git a/opendj-server3x-adapter/src/main/java/org/forgerock/opendj/adapter/server3x/Converters.java b/opendj-server3x-adapter/src/main/java/org/forgerock/opendj/adapter/server3x/Converters.java
index 74effd1..847ddd8 100644
--- a/opendj-server3x-adapter/src/main/java/org/forgerock/opendj/adapter/server3x/Converters.java
+++ b/opendj-server3x-adapter/src/main/java/org/forgerock/opendj/adapter/server3x/Converters.java
@@ -41,6 +41,7 @@
 import org.forgerock.opendj.ldap.DecodeException;
 import org.forgerock.opendj.ldap.ErrorResultException;
 import org.forgerock.opendj.ldap.LinkedAttribute;
+import org.forgerock.opendj.ldap.LinkedHashMapEntry;
 import org.forgerock.opendj.ldap.RDN;
 import org.forgerock.opendj.ldap.ResultCode;
 import org.forgerock.opendj.ldap.controls.Control;
@@ -71,6 +72,28 @@
     }
 
     /**
+     * Converts from OpenDJ LDAP SDK {@link org.forgerock.opendj.ldap.Entry} to OpenDJ
+     * server {@link org.opends.server.types.Entry}.
+     *
+     * @param sdkEntry
+     *          SDK entry to convert
+     * @return the converted entry
+     */
+    public static org.opends.server.types.Entry to(
+            final org.forgerock.opendj.ldap.Entry sdkEntry) {
+        if (sdkEntry != null) {
+            org.opends.server.types.Entry entry =
+                new org.opends.server.types.Entry(to(sdkEntry.getName()), null, null, null);
+            List<AttributeValue> duplicateValues = new ArrayList<AttributeValue>();
+            for (org.opends.server.types.Attribute attribute : toAttributes(sdkEntry.getAllAttributes())) {
+                entry.addAttribute(attribute, duplicateValues);
+            }
+            return entry;
+        }
+        return null;
+    }
+
+    /**
      * Converts from OpenDJ LDAP SDK {@link org.forgerock.opendj.ldap.responses.SearchResultEntry} to OpenDJ
      * server {@link org.opends.server.types.SearchResultEntry}.
      *
@@ -494,6 +517,27 @@
     }
 
     /**
+     * Converts from OpenDJ server
+     * {@link org.opends.server.types.Entry} to OpenDJ LDAP SDK
+     * {@link org.forgerock.opendj.ldap.Entry}.
+     *
+     * @param srvResultEntry
+     *          value to convert
+     * @return the converted value
+     */
+    public static org.forgerock.opendj.ldap.Entry from(
+        final org.opends.server.types.Entry srvResultEntry) {
+
+        final org.forgerock.opendj.ldap.Entry entry = new LinkedHashMapEntry(srvResultEntry.getName().toString());
+        if (srvResultEntry.getAttributes() != null) {
+            for (org.opends.server.types.Attribute a : srvResultEntry.getAttributes()) {
+                entry.addAttribute(from(a));
+            }
+        }
+        return entry;
+    }
+
+    /**
      * Populates the result object with the operation details and return the
      * result object if it was successful. Otherwise, it throws an
      * {@link ErrorResultException}.
diff --git a/opendj-server3x-adapter/src/test/java/org/forgerock/opendj/adapter/server3x/ConvertersTestCase.java b/opendj-server3x-adapter/src/test/java/org/forgerock/opendj/adapter/server3x/ConvertersTestCase.java
index cf7987e..a21ee57 100644
--- a/opendj-server3x-adapter/src/test/java/org/forgerock/opendj/adapter/server3x/ConvertersTestCase.java
+++ b/opendj-server3x-adapter/src/test/java/org/forgerock/opendj/adapter/server3x/ConvertersTestCase.java
@@ -37,6 +37,7 @@
 import org.forgerock.opendj.ldap.ByteString;
 import org.forgerock.opendj.ldap.Filter;
 import org.forgerock.opendj.ldap.LinkedAttribute;
+import org.forgerock.opendj.ldap.LinkedHashMapEntry;
 import org.forgerock.opendj.ldap.Modification;
 import org.forgerock.opendj.ldap.ModificationType;
 import org.forgerock.opendj.ldap.ResultCode;
@@ -135,6 +136,23 @@
     }
 
     /**
+     * Converts a SDK {@link Entry} to an LDAP Server
+     * {@link Entry}.
+     */
+    @Test()
+    public final void testToEntry() throws Exception {
+        org.forgerock.opendj.ldap.Entry entry =
+            new LinkedHashMapEntry(org.forgerock.opendj.ldap.DN
+                .valueOf("uid=scarter,ou=People,dc=example,dc=com"));
+        entry.addAttribute(new LinkedAttribute("test", "value1"));
+        entry.addAttribute(new LinkedAttribute("Another", ByteString.valueOf("myValue")));
+
+        org.opends.server.types.Entry result = to(entry);
+        assertThat(result.getName().toString()).isEqualTo(entry.getName().toString());
+        assertThat(result.getAttributes()).hasSize(2);
+    }
+
+    /**
      * Converts a SDK Distinguished Name to a LDAP server Distinguish Name. Needs
      * a running server to work.
      *

--
Gitblit v1.10.0