mirror of https://github.com/OpenIdentityPlatform/OpenDJ.git

Matthew Swift
25.33.2012 263d085885df024dca9250cc03c807912b0a7662
opendj3/opendj-ldap-sdk/src/main/java/org/forgerock/opendj/ldap/ErrorResultException.java
@@ -6,17 +6,16 @@
 * (the "License").  You may not use this file except in compliance
 * with the License.
 *
 * You can obtain a copy of the license at
 * trunk/opendj3/legal-notices/CDDLv1_0.txt
 * 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
 * trunk/opendj3/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:
 * 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
@@ -28,243 +27,184 @@
package org.forgerock.opendj.ldap;
import java.util.concurrent.ExecutionException;
import org.forgerock.opendj.ldap.responses.Responses;
import org.forgerock.opendj.ldap.responses.Result;
/**
 * Thrown when the result code returned in a Result indicates that the Request
 * was unsuccessful. This class can be sub-classed in order to implement
 * application specific exceptions.
 */
@SuppressWarnings("serial")
public class ErrorResultException extends ExecutionException
{
public class ErrorResultException extends ExecutionException {
  /**
   * Creates a new error result exception with the provided result code and an
   * empty diagnostic message.
   *
   * @param resultCode
   *          The result code.
   * @return The new error result exception.
   * @throws IllegalArgumentException
   *           If the provided result code does not represent a failure.
   * @throws NullPointerException
   *           If {@code resultCode} was {@code null}.
   */
  public static ErrorResultException newErrorResult(
      ResultCode resultCode)
  {
    return newErrorResult(resultCode, null, null);
  }
  /**
   * Creates a new error result exception with the provided result code and
   * diagnostic message.
   *
   * @param resultCode
   *          The result code.
   * @param diagnosticMessage
   *          The diagnostic message, which may be empty or {@code null}
   *          indicating that none was provided.
   * @return The new error result exception.
   * @throws IllegalArgumentException
   *           If the provided result code does not represent a failure.
   * @throws NullPointerException
   *           If {@code resultCode} was {@code null}.
   */
  public static ErrorResultException newErrorResult(
      ResultCode resultCode, String diagnosticMessage)
  {
    return newErrorResult(resultCode, diagnosticMessage, null);
  }
  /**
   * Creates a new error result exception with the provided result code and
   * cause. The diagnostic message will be taken from the cause, if provided.
   *
   * @param resultCode
   *          The result code.
   * @param cause
   *          The throwable cause, which may be {@code null} indicating that
   *          none was provided.
   * @return The new error result exception.
   * @throws IllegalArgumentException
   *           If the provided result code does not represent a failure.
   * @throws NullPointerException
   *           If {@code resultCode} was {@code null}.
   */
  public static ErrorResultException newErrorResult(
      ResultCode resultCode, Throwable cause)
  {
    return newErrorResult(resultCode, null, cause);
  }
  /**
   * Creates a new error result exception with the provided result code,
   * diagnostic message, and cause.
   *
   * @param resultCode
   *          The result code.
   * @param diagnosticMessage
   *          The diagnostic message, which may be empty or {@code null}
   *          indicating that none was provided.
   * @param cause
   *          The throwable cause, which may be {@code null} indicating that
   *          none was provided.
   * @return The new error result exception.
   * @throws IllegalArgumentException
   *           If the provided result code does not represent a failure.
   * @throws NullPointerException
   *           If {@code resultCode} was {@code null}.
   */
  public static ErrorResultException newErrorResult(
      ResultCode resultCode, String diagnosticMessage, Throwable cause)
  {
    final Result result = Responses.newResult(resultCode);
    if (diagnosticMessage != null)
    {
      result.setDiagnosticMessage(diagnosticMessage);
    }
    else if (cause != null)
    {
      result.setDiagnosticMessage(cause.getLocalizedMessage());
    }
    result.setCause(cause);
    return newErrorResult(result);
  }
  /**
   * Creates a new error result exception using the provided result.
   *
   * @param result
   *          The result whose result code indicates a failure.
   * @return The error result exception wrapping the provided result.
   * @throws IllegalArgumentException
   *           If the provided result does not represent a failure.
   * @throws NullPointerException
   *           If {@code result} was {@code null}.
   */
  public static ErrorResultException newErrorResult(
      final Result result)
  {
    if (!result.getResultCode().isExceptional())
    {
      throw new IllegalArgumentException(
          "Attempted to wrap a successful result: " + result);
    /**
     * Creates a new error result exception with the provided result code and an
     * empty diagnostic message.
     *
     * @param resultCode
     *            The result code.
     * @return The new error result exception.
     * @throws IllegalArgumentException
     *             If the provided result code does not represent a failure.
     * @throws NullPointerException
     *             If {@code resultCode} was {@code null}.
     */
    public static ErrorResultException newErrorResult(ResultCode resultCode) {
        return newErrorResult(resultCode, null, null);
    }
    ResultCode rc = result.getResultCode();
    if (rc == ResultCode.ASSERTION_FAILED)
    {
      return new AssertionFailureException(result);
    }
    else if (rc == ResultCode.AUTH_METHOD_NOT_SUPPORTED
        || rc == ResultCode.CLIENT_SIDE_AUTH_UNKNOWN
        || rc == ResultCode.INAPPROPRIATE_AUTHENTICATION
        || rc == ResultCode.INVALID_CREDENTIALS)
    {
      return new AuthenticationException(result);
    }
    else if (rc == ResultCode.AUTHORIZATION_DENIED
        || rc == ResultCode.CONFIDENTIALITY_REQUIRED
        || rc == ResultCode.INSUFFICIENT_ACCESS_RIGHTS
        || rc == ResultCode.STRONG_AUTH_REQUIRED)
    {
      return new AuthorizationException(result);
    }
    else if (rc == ResultCode.CLIENT_SIDE_USER_CANCELLED
        || rc == ResultCode.CANCELLED)
    {
      return new CancelledResultException(result);
    }
    else if (rc == ResultCode.CLIENT_SIDE_SERVER_DOWN
        || rc == ResultCode.CLIENT_SIDE_CONNECT_ERROR
        || rc == ResultCode.CLIENT_SIDE_DECODING_ERROR
        || rc == ResultCode.CLIENT_SIDE_ENCODING_ERROR)
    {
      return new ConnectionException(result);
    }
    else if (rc == ResultCode.ATTRIBUTE_OR_VALUE_EXISTS
        || rc == ResultCode.CONSTRAINT_VIOLATION
        || rc == ResultCode.ENTRY_ALREADY_EXISTS
        || rc == ResultCode.INVALID_ATTRIBUTE_SYNTAX
        || rc == ResultCode.INVALID_DN_SYNTAX
        || rc == ResultCode.NAMING_VIOLATION
        || rc == ResultCode.NOT_ALLOWED_ON_NONLEAF
        || rc == ResultCode.NOT_ALLOWED_ON_RDN
        || rc == ResultCode.OBJECTCLASS_MODS_PROHIBITED
        || rc == ResultCode.OBJECTCLASS_VIOLATION
        || rc == ResultCode.UNDEFINED_ATTRIBUTE_TYPE)
    {
      return new ConstraintViolationException(result);
    }
    else if (rc == ResultCode.REFERRAL)
    {
      return new ReferralException(result);
    }
    else if (rc == ResultCode.NO_SUCH_OBJECT
        || rc == ResultCode.CLIENT_SIDE_NO_RESULTS_RETURNED)
    {
      return new EntryNotFoundException(result);
    }
    else if (rc == ResultCode.CLIENT_SIDE_UNEXPECTED_RESULTS_RETURNED)
    {
      return new MultipleEntriesFoundException(result);
    }
    else if (rc == ResultCode.CLIENT_SIDE_TIMEOUT
        || rc == ResultCode.TIME_LIMIT_EXCEEDED)
    {
      return new TimeoutResultException(result);
    /**
     * Creates a new error result exception with the provided result code and
     * diagnostic message.
     *
     * @param resultCode
     *            The result code.
     * @param diagnosticMessage
     *            The diagnostic message, which may be empty or {@code null}
     *            indicating that none was provided.
     * @return The new error result exception.
     * @throws IllegalArgumentException
     *             If the provided result code does not represent a failure.
     * @throws NullPointerException
     *             If {@code resultCode} was {@code null}.
     */
    public static ErrorResultException newErrorResult(ResultCode resultCode,
            String diagnosticMessage) {
        return newErrorResult(resultCode, diagnosticMessage, null);
    }
    return new ErrorResultException(result);
  }
    /**
     * Creates a new error result exception with the provided result code and
     * cause. The diagnostic message will be taken from the cause, if provided.
     *
     * @param resultCode
     *            The result code.
     * @param cause
     *            The throwable cause, which may be {@code null} indicating that
     *            none was provided.
     * @return The new error result exception.
     * @throws IllegalArgumentException
     *             If the provided result code does not represent a failure.
     * @throws NullPointerException
     *             If {@code resultCode} was {@code null}.
     */
    public static ErrorResultException newErrorResult(ResultCode resultCode, Throwable cause) {
        return newErrorResult(resultCode, null, cause);
    }
    /**
     * Creates a new error result exception with the provided result code,
     * diagnostic message, and cause.
     *
     * @param resultCode
     *            The result code.
     * @param diagnosticMessage
     *            The diagnostic message, which may be empty or {@code null}
     *            indicating that none was provided.
     * @param cause
     *            The throwable cause, which may be {@code null} indicating that
     *            none was provided.
     * @return The new error result exception.
     * @throws IllegalArgumentException
     *             If the provided result code does not represent a failure.
     * @throws NullPointerException
     *             If {@code resultCode} was {@code null}.
     */
    public static ErrorResultException newErrorResult(ResultCode resultCode,
            String diagnosticMessage, Throwable cause) {
        final Result result = Responses.newResult(resultCode);
        if (diagnosticMessage != null) {
            result.setDiagnosticMessage(diagnosticMessage);
        } else if (cause != null) {
            result.setDiagnosticMessage(cause.getLocalizedMessage());
        }
        result.setCause(cause);
        return newErrorResult(result);
    }
    /**
     * Creates a new error result exception using the provided result.
     *
     * @param result
     *            The result whose result code indicates a failure.
     * @return The error result exception wrapping the provided result.
     * @throws IllegalArgumentException
     *             If the provided result does not represent a failure.
     * @throws NullPointerException
     *             If {@code result} was {@code null}.
     */
    public static ErrorResultException newErrorResult(final Result result) {
        if (!result.getResultCode().isExceptional()) {
            throw new IllegalArgumentException("Attempted to wrap a successful result: " + result);
        }
  private final Result result;
        ResultCode rc = result.getResultCode();
        if (rc == ResultCode.ASSERTION_FAILED) {
            return new AssertionFailureException(result);
        } else if (rc == ResultCode.AUTH_METHOD_NOT_SUPPORTED
                || rc == ResultCode.CLIENT_SIDE_AUTH_UNKNOWN
                || rc == ResultCode.INAPPROPRIATE_AUTHENTICATION
                || rc == ResultCode.INVALID_CREDENTIALS) {
            return new AuthenticationException(result);
        } else if (rc == ResultCode.AUTHORIZATION_DENIED
                || rc == ResultCode.CONFIDENTIALITY_REQUIRED
                || rc == ResultCode.INSUFFICIENT_ACCESS_RIGHTS
                || rc == ResultCode.STRONG_AUTH_REQUIRED) {
            return new AuthorizationException(result);
        } else if (rc == ResultCode.CLIENT_SIDE_USER_CANCELLED || rc == ResultCode.CANCELLED) {
            return new CancelledResultException(result);
        } else if (rc == ResultCode.CLIENT_SIDE_SERVER_DOWN
                || rc == ResultCode.CLIENT_SIDE_CONNECT_ERROR
                || rc == ResultCode.CLIENT_SIDE_DECODING_ERROR
                || rc == ResultCode.CLIENT_SIDE_ENCODING_ERROR) {
            return new ConnectionException(result);
        } else if (rc == ResultCode.ATTRIBUTE_OR_VALUE_EXISTS
                || rc == ResultCode.CONSTRAINT_VIOLATION || rc == ResultCode.ENTRY_ALREADY_EXISTS
                || rc == ResultCode.INVALID_ATTRIBUTE_SYNTAX || rc == ResultCode.INVALID_DN_SYNTAX
                || rc == ResultCode.NAMING_VIOLATION || rc == ResultCode.NOT_ALLOWED_ON_NONLEAF
                || rc == ResultCode.NOT_ALLOWED_ON_RDN
                || rc == ResultCode.OBJECTCLASS_MODS_PROHIBITED
                || rc == ResultCode.OBJECTCLASS_VIOLATION
                || rc == ResultCode.UNDEFINED_ATTRIBUTE_TYPE) {
            return new ConstraintViolationException(result);
        } else if (rc == ResultCode.REFERRAL) {
            return new ReferralException(result);
        } else if (rc == ResultCode.NO_SUCH_OBJECT
                || rc == ResultCode.CLIENT_SIDE_NO_RESULTS_RETURNED) {
            return new EntryNotFoundException(result);
        } else if (rc == ResultCode.CLIENT_SIDE_UNEXPECTED_RESULTS_RETURNED) {
            return new MultipleEntriesFoundException(result);
        } else if (rc == ResultCode.CLIENT_SIDE_TIMEOUT || rc == ResultCode.TIME_LIMIT_EXCEEDED) {
            return new TimeoutResultException(result);
        }
        return new ErrorResultException(result);
    }
    private final Result result;
  /**
   * Creates a new error result exception using the provided result.
   *
   * @param result
   *          The error result.
   */
  protected ErrorResultException(final Result result)
  {
    super(result.getResultCode() + ": "
        + result.getDiagnosticMessage());
    this.result = result;
  }
    /**
     * Creates a new error result exception using the provided result.
     *
     * @param result
     *            The error result.
     */
    protected ErrorResultException(final Result result) {
        super(result.getResultCode() + ": " + result.getDiagnosticMessage());
        this.result = result;
    }
  /**
   * Returns the error result which caused this exception to be thrown. The type
   * of result returned corresponds to the expected result type of the original
   * request.
   *
   * @return The error result which caused this exception to be thrown.
   */
  public final Result getResult()
  {
    return result;
  }
    /**
     * Returns the error result which caused this exception to be thrown. The
     * type of result returned corresponds to the expected result type of the
     * original request.
     *
     * @return The error result which caused this exception to be thrown.
     */
    public final Result getResult() {
        return result;
    }
}