From fe6b7743202b99a10ba61038e4540c410b1344f3 Mon Sep 17 00:00:00 2001
From: Chris Ridd <chris.ridd@forgerock.com>
Date: Wed, 17 Oct 2012 09:26:56 +0000
Subject: [PATCH] Fix OPENDJ-611 Return something in ResultCode descr attribute

---
 opends/src/dsml/org/opends/dsml/protocol/DSMLExtendedOperation.java |    3 
 opends/src/dsml/org/opends/dsml/protocol/ResultCodeFactory.java     |  111 +++++++++++++++++++++++++++++++++++++
 opends/resource/dsml/schema/DSMLv2.xsd                              |    2 
 opends/src/dsml/org/opends/dsml/protocol/DSMLModifyDNOperation.java |    4 
 opends/src/dsml/org/opends/dsml/protocol/DSMLModifyOperation.java   |    4 
 opends/src/dsml/org/opends/dsml/protocol/DSMLAddOperation.java      |    6 +
 opends/src/dsml/org/opends/dsml/protocol/DSMLSearchOperation.java   |   13 ++--
 opends/src/dsml/org/opends/dsml/protocol/DSMLCompareOperation.java  |    4 
 opends/src/dsml/org/opends/dsml/protocol/DSMLDeleteOperation.java   |    6 +
 9 files changed, 133 insertions(+), 20 deletions(-)

diff --git a/opends/resource/dsml/schema/DSMLv2.xsd b/opends/resource/dsml/schema/DSMLv2.xsd
index 6e9c41d..8daa8dd 100644
--- a/opends/resource/dsml/schema/DSMLv2.xsd
+++ b/opends/resource/dsml/schema/DSMLv2.xsd
@@ -228,7 +228,7 @@
 			<xsd:enumeration value="noSuchObject"/>
 			<xsd:enumeration value="aliasProblem"/>
 			<xsd:enumeration value="invalidDNSyntax"/>
-			<xsd:enumeration value="aliasDerefencingProblem"/>
+			<xsd:enumeration value="aliasDereferencingProblem"/>
 			<xsd:enumeration value="inappropriateAuthentication"/>
 			<xsd:enumeration value="invalidCredentials"/>
 			<xsd:enumeration value="insufficientAccessRights"/>
diff --git a/opends/src/dsml/org/opends/dsml/protocol/DSMLAddOperation.java b/opends/src/dsml/org/opends/dsml/protocol/DSMLAddOperation.java
index 0f1e8ca..f9f0b5a 100644
--- a/opends/src/dsml/org/opends/dsml/protocol/DSMLAddOperation.java
+++ b/opends/src/dsml/org/opends/dsml/protocol/DSMLAddOperation.java
@@ -23,9 +23,12 @@
  *
  *
  *      Copyright 2006-2008 Sun Microsystems, Inc.
+ *      Portions Copyright 2012 ForgeRock AS.
  */
 package org.opends.dsml.protocol;
 
+
+
 import java.io.IOException;
 import java.util.ArrayList;
 import java.util.List;
@@ -117,8 +120,7 @@
     // Set the result code and error message for the DSML response.
     addResponse.setErrorMessage(
             errorMessage != null ? errorMessage.toString() : null);
-    ResultCode code = objFactory.createResultCode();
-    code.setCode(resultCode);
+    ResultCode code = ResultCodeFactory.create(objFactory, resultCode);
     addResponse.setResultCode(code);
 
     return addResponse;
diff --git a/opends/src/dsml/org/opends/dsml/protocol/DSMLCompareOperation.java b/opends/src/dsml/org/opends/dsml/protocol/DSMLCompareOperation.java
index 00cdb82..93d5f86 100644
--- a/opends/src/dsml/org/opends/dsml/protocol/DSMLCompareOperation.java
+++ b/opends/src/dsml/org/opends/dsml/protocol/DSMLCompareOperation.java
@@ -23,6 +23,7 @@
  *
  *
  *      Copyright 2006-2008 Sun Microsystems, Inc.
+ *      Portions Copyright 2012 ForgeRock AS.
  */
 package org.opends.dsml.protocol;
 
@@ -106,8 +107,7 @@
     // Set the response code and error message for the DSML response.
     compareResponse.setErrorMessage(
             errorMessage != null ? errorMessage.toString() : null);
-    ResultCode code = objFactory.createResultCode();
-    code.setCode(resultCode);
+    ResultCode code = ResultCodeFactory.create(objFactory, resultCode);
     compareResponse.setResultCode(code);
 
     if(compareOp.getMatchedDN() != null)
diff --git a/opends/src/dsml/org/opends/dsml/protocol/DSMLDeleteOperation.java b/opends/src/dsml/org/opends/dsml/protocol/DSMLDeleteOperation.java
index cff2add..0c328a7 100644
--- a/opends/src/dsml/org/opends/dsml/protocol/DSMLDeleteOperation.java
+++ b/opends/src/dsml/org/opends/dsml/protocol/DSMLDeleteOperation.java
@@ -23,9 +23,12 @@
  *
  *
  *      Copyright 2006-2008 Sun Microsystems, Inc.
+ *      Portions Copyright 2012 ForgeRock AS.
  */
 package org.opends.dsml.protocol;
 
+
+
 import java.io.IOException;
 
 import org.opends.messages.Message;
@@ -104,8 +107,7 @@
     // Set the result code and error message for the DSML response.
     delResponse.setErrorMessage(
             errorMessage != null ? errorMessage.toString() : null);
-    ResultCode code = objFactory.createResultCode();
-    code.setCode(resultCode);
+    ResultCode code = ResultCodeFactory.create(objFactory, resultCode);
     delResponse.setResultCode(code);
 
     // set the match DN
diff --git a/opends/src/dsml/org/opends/dsml/protocol/DSMLExtendedOperation.java b/opends/src/dsml/org/opends/dsml/protocol/DSMLExtendedOperation.java
index 9dba5eb..67b09a4 100644
--- a/opends/src/dsml/org/opends/dsml/protocol/DSMLExtendedOperation.java
+++ b/opends/src/dsml/org/opends/dsml/protocol/DSMLExtendedOperation.java
@@ -126,8 +126,7 @@
     extendedResponse.setResponse(value);
     extendedResponse.setErrorMessage(
             errorMessage != null ? errorMessage.toString() : null);
-    ResultCode code = objFactory.createResultCode();
-    code.setCode(resultCode);
+    ResultCode code = ResultCodeFactory.create(objFactory, resultCode);
     extendedResponse.setResultCode(code);
 
     return extendedResponse;
diff --git a/opends/src/dsml/org/opends/dsml/protocol/DSMLModifyDNOperation.java b/opends/src/dsml/org/opends/dsml/protocol/DSMLModifyDNOperation.java
index 433a59f..e4cef5e 100644
--- a/opends/src/dsml/org/opends/dsml/protocol/DSMLModifyDNOperation.java
+++ b/opends/src/dsml/org/opends/dsml/protocol/DSMLModifyDNOperation.java
@@ -23,6 +23,7 @@
  *
  *
  *      Copyright 2006-2008 Sun Microsystems, Inc.
+ *      Portions Copyright 2012 ForgeRock AS.
  */
 package org.opends.dsml.protocol;
 
@@ -115,8 +116,7 @@
 
     modDNResponse.setErrorMessage(
             errorMessage != null ? errorMessage.toString() : null);
-    ResultCode code = objFactory.createResultCode();
-    code.setCode(resultCode);
+    ResultCode code = ResultCodeFactory.create(objFactory, resultCode);
     modDNResponse.setResultCode(code);
 
     return modDNResponse;
diff --git a/opends/src/dsml/org/opends/dsml/protocol/DSMLModifyOperation.java b/opends/src/dsml/org/opends/dsml/protocol/DSMLModifyOperation.java
index 17f2682..737cda3 100644
--- a/opends/src/dsml/org/opends/dsml/protocol/DSMLModifyOperation.java
+++ b/opends/src/dsml/org/opends/dsml/protocol/DSMLModifyOperation.java
@@ -23,6 +23,7 @@
  *
  *
  *      Copyright 2006-2008 Sun Microsystems, Inc.
+ *      Portions Copyright 2012 ForgeRock AS.
  */
 package org.opends.dsml.protocol;
 
@@ -141,8 +142,7 @@
     // Set the result code and error message for the DSML response.
     modResponse.setErrorMessage(
             errorMessage != null ? errorMessage.toString() : null);
-    ResultCode code = objFactory.createResultCode();
-    code.setCode(resultCode);
+    ResultCode code = ResultCodeFactory.create(objFactory, resultCode);
     modResponse.setResultCode(code);
 
     return modResponse;
diff --git a/opends/src/dsml/org/opends/dsml/protocol/DSMLSearchOperation.java b/opends/src/dsml/org/opends/dsml/protocol/DSMLSearchOperation.java
index e54ac1c..d002525 100644
--- a/opends/src/dsml/org/opends/dsml/protocol/DSMLSearchOperation.java
+++ b/opends/src/dsml/org/opends/dsml/protocol/DSMLSearchOperation.java
@@ -23,13 +23,12 @@
  *
  *
  *      Copyright 2006-2009 Sun Microsystems, Inc.
+ *      Portions Copyright 2012 ForgeRock AS.
  */
 package org.opends.dsml.protocol;
 
 
 
-import org.opends.messages.Message;
-
 import java.io.IOException;
 import java.util.ArrayList;
 import java.util.LinkedHashSet;
@@ -38,6 +37,7 @@
 
 import javax.xml.bind.JAXBElement;
 
+import org.opends.messages.Message;
 import org.opends.server.protocols.asn1.ASN1Exception;
 import org.opends.server.protocols.ldap.LDAPAttribute;
 import org.opends.server.protocols.ldap.LDAPConstants;
@@ -45,8 +45,8 @@
 import org.opends.server.protocols.ldap.LDAPMessage;
 import org.opends.server.protocols.ldap.LDAPResultCode;
 import org.opends.server.protocols.ldap.SearchRequestProtocolOp;
-import org.opends.server.protocols.ldap.SearchResultEntryProtocolOp;
 import org.opends.server.protocols.ldap.SearchResultDoneProtocolOp;
+import org.opends.server.protocols.ldap.SearchResultEntryProtocolOp;
 import org.opends.server.tools.LDAPConnection;
 import org.opends.server.types.ByteString;
 import org.opends.server.types.DereferencePolicy;
@@ -532,8 +532,8 @@
           // code to the client to cover possible cases.
           Message message = ERR_UNEXPECTED_CONNECTION_CLOSURE.get();
           LDAPResult result = objFactory.createLDAPResult();
-          ResultCode code = objFactory.createResultCode();
-          code.setCode(LDAPResultCode.UNAVAILABLE);
+          ResultCode code = ResultCodeFactory.create(objFactory,
+              LDAPResultCode.UNAVAILABLE);
           result.setResultCode(code);
           result.setErrorMessage(message.toString());
           searchResponse.setSearchResultDone(result);
@@ -580,8 +580,7 @@
           resultCode = searchOp.getResultCode();
           errorMessage = searchOp.getErrorMessage();
           LDAPResult result = objFactory.createLDAPResult();
-          ResultCode code = objFactory.createResultCode();
-          code.setCode(resultCode);
+          ResultCode code = ResultCodeFactory.create(objFactory, resultCode);
           result.setResultCode(code);
           result.setErrorMessage(errorMessage != null ? errorMessage.toString()
               : null);
diff --git a/opends/src/dsml/org/opends/dsml/protocol/ResultCodeFactory.java b/opends/src/dsml/org/opends/dsml/protocol/ResultCodeFactory.java
new file mode 100644
index 0000000..e963720
--- /dev/null
+++ b/opends/src/dsml/org/opends/dsml/protocol/ResultCodeFactory.java
@@ -0,0 +1,111 @@
+/*
+ * 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
+ * trunk/opends/resource/legal-notices/OpenDS.LICENSE
+ * or https://OpenDS.dev.java.net/OpenDS.LICENSE.
+ * 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
+ * trunk/opends/resource/legal-notices/OpenDS.LICENSE.  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.
+ */
+package org.opends.dsml.protocol;
+
+
+
+import java.util.HashMap;
+
+/**
+ * A utility class to help creating ResultCode objects containing a
+ * code value (integer) and a descr value (String).
+ */
+public class ResultCodeFactory
+{
+  static HashMap<Integer,LDAPResultCode> codeToDescr =
+    new HashMap<Integer,LDAPResultCode>();
+  static
+  {
+    codeToDescr.put(new Integer(0), LDAPResultCode.SUCCESS);
+    codeToDescr.put(new Integer(1), LDAPResultCode.OPERATIONS_ERROR);
+    codeToDescr.put(new Integer(2), LDAPResultCode.PROTOCOL_ERROR);
+    codeToDescr.put(new Integer(3), LDAPResultCode.TIME_LIMIT_EXCEEDED);
+    codeToDescr.put(new Integer(4), LDAPResultCode.SIZE_LIMIT_EXCEEDED);
+    codeToDescr.put(new Integer(5), LDAPResultCode.COMPARE_FALSE);
+    codeToDescr.put(new Integer(6), LDAPResultCode.COMPARE_TRUE);
+    codeToDescr.put(new Integer(7), LDAPResultCode.AUTH_METHOD_NOT_SUPPORTED);
+    // Note not STRONGER_AUTH_REQUIRED, that's the RFC 4511 name
+    codeToDescr.put(new Integer(8), LDAPResultCode.STRONG_AUTH_REQUIRED);
+    codeToDescr.put(new Integer(10), LDAPResultCode.REFERRAL);
+    codeToDescr.put(new Integer(11), LDAPResultCode.ADMIN_LIMIT_EXCEEDED);
+    codeToDescr.put(new Integer(12),
+      LDAPResultCode.UNAVAILABLE_CRITICAL_EXTENSION);
+    codeToDescr.put(new Integer(13), LDAPResultCode.CONFIDENTIALITY_REQUIRED);
+    codeToDescr.put(new Integer(14), LDAPResultCode.SASL_BIND_IN_PROGRESS);
+    codeToDescr.put(new Integer(16), LDAPResultCode.NO_SUCH_ATTRIBUTE);
+    codeToDescr.put(new Integer(17), LDAPResultCode.UNDEFINED_ATTRIBUTE_TYPE);
+    codeToDescr.put(new Integer(18), LDAPResultCode.INAPPROPRIATE_MATCHING);
+    codeToDescr.put(new Integer(19), LDAPResultCode.CONSTRAINT_VIOLATION);
+    codeToDescr.put(new Integer(20), LDAPResultCode.ATTRIBUTE_OR_VALUE_EXISTS);
+    codeToDescr.put(new Integer(21), LDAPResultCode.INVALID_ATTRIBUTE_SYNTAX);
+    codeToDescr.put(new Integer(32), LDAPResultCode.NO_SUCH_OBJECT);
+    codeToDescr.put(new Integer(33), LDAPResultCode.ALIAS_PROBLEM);
+    codeToDescr.put(new Integer(34), LDAPResultCode.INVALID_DN_SYNTAX);
+    codeToDescr.put(new Integer(36),
+      LDAPResultCode.ALIAS_DEREFERENCING_PROBLEM);
+    codeToDescr.put(new Integer(48),
+      LDAPResultCode.INAPPROPRIATE_AUTHENTICATION);
+    codeToDescr.put(new Integer(49), LDAPResultCode.INVALID_CREDENTIALS);
+    codeToDescr.put(new Integer(50), LDAPResultCode.INSUFFICIENT_ACCESS_RIGHTS);
+    codeToDescr.put(new Integer(51), LDAPResultCode.BUSY);
+    codeToDescr.put(new Integer(52), LDAPResultCode.UNAVAILABLE);
+    codeToDescr.put(new Integer(53), LDAPResultCode.UNWILLING_TO_PERFORM);
+    codeToDescr.put(new Integer(54), LDAPResultCode.LOOP_DETECT);
+    codeToDescr.put(new Integer(64), LDAPResultCode.NAMING_VIOLATION);
+    codeToDescr.put(new Integer(65), LDAPResultCode.OBJECT_CLASS_VIOLATION);
+    codeToDescr.put(new Integer(66), LDAPResultCode.NOT_ALLOWED_ON_NON_LEAF);
+    codeToDescr.put(new Integer(67), LDAPResultCode.NOT_ALLOWED_ON_RDN);
+    codeToDescr.put(new Integer(68), LDAPResultCode.ENTRY_ALREADY_EXISTS);
+    codeToDescr.put(new Integer(69),
+      LDAPResultCode.OBJECT_CLASS_MODS_PROHIBITED);
+    // Note not AFFECTS_MULTIPLE_DSAS, xjc mangles the string.
+    codeToDescr.put(new Integer(71), LDAPResultCode.AFFECT_MULTIPLE_DS_AS);
+    codeToDescr.put(new Integer(80), LDAPResultCode.OTHER);
+  }
+
+  /**
+   * Create a ResultCode object that contains the resultCode, and, if valid,
+   * a text description (from RFC 2251) of the resultCode.
+   *
+   * @param objFactory
+   *                  The JAXB factory used to create the underlying object.
+   * @param resultCode
+   *                  The LDAP result code.
+   * @return A ResultCode object with a code and possibly a description.
+   */
+  public static ResultCode create(ObjectFactory objFactory, int resultCode)
+  {
+    ResultCode result = objFactory.createResultCode();
+    result.setCode(resultCode);
+    Integer r = new Integer(resultCode);
+    if (ResultCodeFactory.codeToDescr.containsKey(r))
+    {
+      result.setDescr(ResultCodeFactory.codeToDescr.get(r));
+    }
+    return result;
+  }
+}

--
Gitblit v1.10.0