001 /*
002 * CDDL HEADER START
003 *
004 * The contents of this file are subject to the terms of the
005 * Common Development and Distribution License, Version 1.0 only
006 * (the "License"). You may not use this file except in compliance
007 * with the License.
008 *
009 * You can obtain a copy of the license at
010 * trunk/opends/resource/legal-notices/OpenDS.LICENSE
011 * or https://OpenDS.dev.java.net/OpenDS.LICENSE.
012 * See the License for the specific language governing permissions
013 * and limitations under the License.
014 *
015 * When distributing Covered Code, include this CDDL HEADER in each
016 * file and include the License file at
017 * trunk/opends/resource/legal-notices/OpenDS.LICENSE. If applicable,
018 * add the following below this CDDL HEADER, with the fields enclosed
019 * by brackets "[]" replaced with your own identifying information:
020 * Portions Copyright [yyyy] [name of copyright owner]
021 *
022 * CDDL HEADER END
023 *
024 *
025 * Copyright 2008 Sun Microsystems, Inc.
026 */
027
028 package org.opends.admin.ads;
029
030 import org.opends.messages.Message;
031 import org.opends.server.types.OpenDsException;
032
033
034 /**
035 * This is the exception that is thrown in ADSContext.
036 * @see org.opends.admin.ads.ADSContext
037 *
038 */
039 public class ADSContextException extends OpenDsException {
040
041 private static final long serialVersionUID = 1984039711031042813L;
042
043 private String toString;
044
045 /**
046 * The enumeration containing the different error types.
047 *
048 */
049 public enum ErrorType
050 {
051 /**
052 * The host name is missing.
053 */
054 MISSING_HOSTNAME(),
055 /**
056 * The host name is not valid.
057 */
058 NOVALID_HOSTNAME(),
059 /**
060 * The installation path is missing.
061 */
062 MISSING_IPATH(),
063 /**
064 * The installation path is not valid.
065 */
066 NOVALID_IPATH(),
067 /**
068 * An access permission error.
069 */
070 ACCESS_PERMISSION(),
071 /**
072 * The entity is already registered.
073 */
074 ALREADY_REGISTERED(),
075 /**
076 * The installation is broken.
077 */
078 BROKEN_INSTALL(),
079 /**
080 * The entity is not yet registered.
081 */
082 NOT_YET_REGISTERED(),
083 /**
084 * The port is missing.
085 */
086 MISSING_PORT(),
087 /**
088 * The port is not valid.
089 */
090 NOVALID_PORT(),
091 /**
092 * The name is missing.
093 */
094 MISSING_NAME(),
095 /**
096 * The administration UID is missing.
097 */
098 MISSING_ADMIN_UID(),
099 /**
100 * The administrator password is missing.
101 */
102 MISSING_ADMIN_PASSWORD(),
103 /**
104 * There is already a backend with the name of the ADS backend but not
105 * of the expected type.
106 */
107 UNEXPECTED_ADS_BACKEND_TYPE(),
108 /**
109 * Unexpected error (potential bug).
110 */
111 ERROR_UNEXPECTED();
112 };
113
114 ErrorType error;
115 Throwable embeddedException;
116
117 /**
118 * Creates an ADSContextException of the given error type.
119 * @param error the error type.
120 */
121 public ADSContextException(ErrorType error)
122 {
123 this.error = error;
124 }
125
126 /**
127 * Creates an ADSContextException of the given error type with the provided
128 * error cause.
129 * @param error the error type.
130 * @param x the throwable that generated this exception.
131 */
132 public ADSContextException(ErrorType error, Throwable x)
133 {
134 this.error = error;
135 this.embeddedException = x;
136 }
137
138 /**
139 * Returns the error type of this exception.
140 * @return the error type of this exception.
141 */
142 public ErrorType getError()
143 {
144 return error;
145 }
146
147 /**
148 * Returns the throwable that caused this exception. It might be null.
149 * @return the throwable that caused this exception.
150 */
151 public Throwable getCause()
152 {
153 return embeddedException;
154 }
155
156 /**
157 * Retrieves a message providing the reason for this exception.
158 *
159 * @return A message providing the reason for this exception.
160 */
161 public Message getReason()
162 {
163 if (toString == null)
164 {
165 toString = "ADSContextException: error type "+error+".";
166 if (getCause() != null)
167 {
168 toString += " Root cause: "+getCause().toString();
169 }
170 }
171 return Message.raw(toString); // TODO: i18n
172 }
173
174 /**
175 * {@inheritDoc}
176 */
177 public void printStackTrace()
178 {
179 super.printStackTrace();
180 if (embeddedException != null)
181 {
182 System.out.println("embeddedException = {");
183 embeddedException.printStackTrace();
184 System.out.println("}");
185 }
186 }
187 }