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

matthew_swift
16.58.2009 38131a3a8708255ef27e260aa1adc333632c0ca4
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
/*
 * 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 2009 Sun Microsystems, Inc.
 */
 
package org.opends.sdk;
 
 
 
import java.util.concurrent.ExecutionException;
 
import org.opends.sdk.responses.Result;
 
 
 
/**
 * Thrown when the result code returned in a Result indicates that the
 * Request was unsuccessful.
 */
@SuppressWarnings("serial")
public class ErrorResultException extends ExecutionException
{
  private final Result result;
 
 
 
  /**
   * Wraps the provided result in an appropriate error result exception.
   * The type of error result exception used depends on the underlying
   * result code.
   *
   * @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 wrap(Result result)
      throws IllegalArgumentException, NullPointerException
  {
    if (!result.getResultCode().isExceptional())
    {
      throw new IllegalArgumentException(
          "Attempted to wrap a successful result: " + result);
    }
 
    // TODO: choose type of exception based on result code (e.g.
    // referral).
    if (result.getResultCode() == ResultCode.CLIENT_SIDE_SERVER_DOWN
        || result.getResultCode() == ResultCode.CLIENT_SIDE_CONNECT_ERROR
        || result.getResultCode() == ResultCode.CLIENT_SIDE_DECODING_ERROR
        || result.getResultCode() == ResultCode.CLIENT_SIDE_ENCODING_ERROR)
    {
      return new ConnectionException(result);
    }
 
    if (result.getResultCode() == ResultCode.CLIENT_SIDE_TIMEOUT)
    {
      return new TimeoutResultException(result);
    }
 
    if (result.getResultCode() == ResultCode.CLIENT_SIDE_USER_CANCELLED
        || result.getResultCode() == ResultCode.CANCELLED)
    {
      return new CancelledResultException(result);
    }
 
    if (result.getResultCode() == ResultCode.NO_SUCH_OBJECT
        || result.getResultCode() == ResultCode.CLIENT_SIDE_NO_RESULTS_RETURNED)
    {
      return new EntryNotFoundException(result);
    }
 
    if (result.getResultCode() == ResultCode.CLIENT_SIDE_UNEXPECTED_RESULTS_RETURNED)
    {
      return new MultipleEntriesFoundException(result);
    }
 
    return new ErrorResultException(result);
  }
 
 
 
  /**
   * Creates a new error result exception using the provided result.
   *
   * @param result
   *          The error result.
   */
  ErrorResultException(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 Result getResult()
  {
    return result;
  }
}