001 /*
002 * Copyright 2008-2016 UnboundID Corp.
003 * All Rights Reserved.
004 */
005 /*
006 * Copyright (C) 2008-2016 UnboundID Corp.
007 *
008 * This program is free software; you can redistribute it and/or modify
009 * it under the terms of the GNU General Public License (GPLv2 only)
010 * or the terms of the GNU Lesser General Public License (LGPLv2.1 only)
011 * as published by the Free Software Foundation.
012 *
013 * This program is distributed in the hope that it will be useful,
014 * but WITHOUT ANY WARRANTY; without even the implied warranty of
015 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
016 * GNU General Public License for more details.
017 *
018 * You should have received a copy of the GNU General Public License
019 * along with this program; if not, see <http://www.gnu.org/licenses>.
020 */
021 package com.unboundid.ldap.sdk.extensions;
022
023
024
025 import com.unboundid.ldap.sdk.Control;
026 import com.unboundid.ldap.sdk.ExtendedResult;
027 import com.unboundid.ldap.sdk.LDAPException;
028 import com.unboundid.ldap.sdk.ResultCode;
029
030 import static com.unboundid.ldap.sdk.extensions.ExtOpMessages.*;
031
032
033
034 /**
035 * This class provides an implementation of the notice of disconnection extended
036 * result as defined in
037 * <A HREF="http://www.ietf.org/rfc/rfc4511.txt">RFC 4511</A>. It may be used
038 * as an unsolicited notification to indicate that the directory server is
039 * closing the client connection.
040 * <BR><BR>
041 * See the {@code com.unboundid.ldap.sdk.UnsolicitedNotificationHandler}
042 * interface for a mechanism that can be used to receive and handle unsolicited
043 * notifications.
044 */
045 public final class NoticeOfDisconnectionExtendedResult
046 extends ExtendedResult
047 {
048 /**
049 * The OID (1.3.6.1.4.1.1466.20036) for the notice of disconnection extended
050 * result.
051 */
052 public static final String NOTICE_OF_DISCONNECTION_RESULT_OID =
053 "1.3.6.1.4.1.1466.20036";
054
055
056
057 /**
058 * The serial version UID for this serializable class.
059 */
060 private static final long serialVersionUID = -4706102471360689558L;
061
062
063
064 /**
065 * Creates a new instance of this notice of disconnection extended result from
066 * the provided generic extended result.
067 *
068 * @param resultCode The result code for the notice of disconnection.
069 * @param diagnosticMessage The diagnostic message to include in the
070 * notice of disconnection. It may be {@code null}
071 * if no diagnostic message should be included.
072 * @param responseControls The set of controls to include in the notice of
073 * disconnection. It may be {@code null} or empty
074 * if no response controls are needed.
075 */
076 public NoticeOfDisconnectionExtendedResult(final ResultCode resultCode,
077 final String diagnosticMessage,
078 final Control... responseControls)
079 {
080 this(0, resultCode, diagnosticMessage, null, null, responseControls);
081 }
082
083
084
085 /**
086 * Creates a new instance of this notice of disconnection extended result from
087 * the provided generic extended result.
088 *
089 * @param extendedResult The extended result to use to create this notice of
090 * disconnection extended result.
091 */
092 public NoticeOfDisconnectionExtendedResult(
093 final ExtendedResult extendedResult)
094 {
095 super(extendedResult);
096 }
097
098
099
100 /**
101 * Creates a new instance of this notice of disconnection extended result from
102 * the provided LDAP exception.
103 *
104 * @param ldapException The LDAP exception to use to create this notice of
105 * disconnection extended result.
106 */
107 public NoticeOfDisconnectionExtendedResult(final LDAPException ldapException)
108 {
109 this(0, ldapException.getResultCode(), ldapException.getDiagnosticMessage(),
110 ldapException.getMatchedDN(), ldapException.getReferralURLs(),
111 ldapException.getResponseControls());
112 }
113
114
115
116 /**
117 * Creates a new instance of this notice of disconnection extended result from
118 * the provided information.
119 *
120 * @param messageID The message ID for the LDAP message that is
121 * associated with this LDAP result.
122 * @param resultCode The result code from the response.
123 * @param diagnosticMessage The diagnostic message from the response, if
124 * available.
125 * @param matchedDN The matched DN from the response, if available.
126 * @param referralURLs The set of referral URLs from the response, if
127 * available.
128 * @param responseControls The set of controls from the response, if
129 * available.
130 */
131 public NoticeOfDisconnectionExtendedResult(
132 final int messageID, final ResultCode resultCode,
133 final String diagnosticMessage, final String matchedDN,
134 final String[] referralURLs, final Control[] responseControls)
135 {
136 super(messageID, resultCode, diagnosticMessage, matchedDN, referralURLs,
137 NOTICE_OF_DISCONNECTION_RESULT_OID, null, responseControls);
138 }
139
140
141
142 /**
143 * {@inheritDoc}
144 */
145 @Override()
146 public String getExtendedResultName()
147 {
148 return INFO_EXTENDED_RESULT_NAME_NOTICE_OF_DISCONNECT.get();
149 }
150
151
152
153 /**
154 * Appends a string representation of this extended result to the provided
155 * buffer.
156 *
157 * @param buffer The buffer to which a string representation of this
158 * extended result will be appended.
159 */
160 @Override()
161 public void toString(final StringBuilder buffer)
162 {
163 buffer.append("NoticeOfDisconnectionExtendedResult(resultCode=");
164 buffer.append(getResultCode());
165
166 final int messageID = getMessageID();
167 if (messageID >= 0)
168 {
169 buffer.append(", messageID=");
170 buffer.append(messageID);
171 }
172
173 final String diagnosticMessage = getDiagnosticMessage();
174 if (diagnosticMessage != null)
175 {
176 buffer.append(", diagnosticMessage='");
177 buffer.append(diagnosticMessage);
178 buffer.append('\'');
179 }
180
181 final String matchedDN = getMatchedDN();
182 if (matchedDN != null)
183 {
184 buffer.append(", matchedDN='");
185 buffer.append(matchedDN);
186 buffer.append('\'');
187 }
188
189 final String[] referralURLs = getReferralURLs();
190 if (referralURLs.length > 0)
191 {
192 buffer.append(", referralURLs={");
193 for (int i=0; i < referralURLs.length; i++)
194 {
195 if (i > 0)
196 {
197 buffer.append(", ");
198 }
199
200 buffer.append('\'');
201 buffer.append(referralURLs[i]);
202 buffer.append('\'');
203 }
204 buffer.append('}');
205 }
206
207 buffer.append(", oid=");
208 buffer.append(NOTICE_OF_DISCONNECTION_RESULT_OID);
209
210 final Control[] responseControls = getResponseControls();
211 if (responseControls.length > 0)
212 {
213 buffer.append(", responseControls={");
214 for (int i=0; i < responseControls.length; i++)
215 {
216 if (i > 0)
217 {
218 buffer.append(", ");
219 }
220
221 buffer.append(responseControls[i]);
222 }
223 buffer.append('}');
224 }
225
226 buffer.append(')');
227 }
228 }