001 /*
002 * Copyright 2009-2015 UnboundID Corp.
003 * All Rights Reserved.
004 */
005 /*
006 * Copyright (C) 2015 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.unboundidds.controls;
022
023
024
025 import com.unboundid.asn1.ASN1OctetString;
026 import com.unboundid.ldap.sdk.Control;
027 import com.unboundid.ldap.sdk.DecodeableControl;
028 import com.unboundid.ldap.sdk.LDAPException;
029 import com.unboundid.ldap.sdk.LDAPResult;
030 import com.unboundid.ldap.sdk.ResultCode;
031 import com.unboundid.util.NotMutable;
032 import com.unboundid.util.ThreadSafety;
033 import com.unboundid.util.ThreadSafetyLevel;
034
035 import static com.unboundid.ldap.sdk.unboundidds.controls.ControlMessages.*;
036
037
038
039 /**
040 * <BLOCKQUOTE>
041 * <B>NOTE:</B> This class is part of the Commercial Edition of the UnboundID
042 * LDAP SDK for Java. It is not available for use in applications that
043 * include only the Standard Edition of the LDAP SDK, and is not supported for
044 * use in conjunction with non-UnboundID products.
045 * </BLOCKQUOTE>
046 * This class provides an implementation of the unsolicited cancel response
047 * control, which may be returned by the Directory Server if an operation is
048 * canceled by the server without a cancel or abandon request from the client.
049 * This control does not have a value.
050 */
051 @NotMutable()
052 @ThreadSafety(level=ThreadSafetyLevel.COMPLETELY_THREADSAFE)
053 public final class UnsolicitedCancelResponseControl
054 extends Control
055 implements DecodeableControl
056 {
057 /**
058 * The OID (1.3.6.1.4.1.30221.2.5.7) for the unsolicited cancel response
059 * control.
060 */
061 public static final String UNSOLICITED_CANCEL_RESPONSE_OID =
062 "1.3.6.1.4.1.30221.2.5.7";
063
064
065
066 /**
067 * The serial version UID for this serializable class.
068 */
069 private static final long serialVersionUID = 36962888392922937L;
070
071
072
073 /**
074 * Creates a new unsolicited cancel response control.
075 */
076 public UnsolicitedCancelResponseControl()
077 {
078 super(UNSOLICITED_CANCEL_RESPONSE_OID, false, null);
079 }
080
081
082
083 /**
084 * Creates a new account usable response control with the provided
085 * information.
086 *
087 * @param oid The OID for the control.
088 * @param isCritical Indicates whether the control should be marked
089 * critical.
090 * @param value The encoded value for the control. This may be
091 * {@code null} if no value was provided.
092 *
093 * @throws LDAPException If the provided control cannot be decoded as an
094 * account usable response control.
095 */
096 public UnsolicitedCancelResponseControl(final String oid,
097 final boolean isCritical,
098 final ASN1OctetString value)
099 throws LDAPException
100 {
101 super(oid, isCritical, value);
102
103 if (value != null)
104 {
105 throw new LDAPException(ResultCode.DECODING_ERROR,
106 ERR_UNSOLICITED_CANCEL_RESPONSE_HAS_VALUE.get());
107 }
108 }
109
110
111
112 /**
113 * {@inheritDoc}
114 */
115 public UnsolicitedCancelResponseControl decodeControl(final String oid,
116 final boolean isCritical,
117 final ASN1OctetString value)
118 throws LDAPException
119 {
120 return new UnsolicitedCancelResponseControl(oid, isCritical, value);
121 }
122
123
124
125 /**
126 * Extracts an unsolicited cancel response control from the provided result.
127 *
128 * @param result The result from which to retrieve the unsolicited cancel
129 * response control.
130 *
131 * @return The unsolicited cancel response control contained in the provided
132 * result, or {@code null} if the result did not contain an
133 * unsolicited cancel response control.
134 *
135 * @throws LDAPException If a problem is encountered while attempting to
136 * decode the unsolicited cancel response control
137 * contained in the provided result.
138 */
139 public static UnsolicitedCancelResponseControl get(final LDAPResult result)
140 throws LDAPException
141 {
142 final Control c =
143 result.getResponseControl(UNSOLICITED_CANCEL_RESPONSE_OID);
144 if (c == null)
145 {
146 return null;
147 }
148
149 if (c instanceof UnsolicitedCancelResponseControl)
150 {
151 return (UnsolicitedCancelResponseControl) c;
152 }
153 else
154 {
155 return new UnsolicitedCancelResponseControl(c.getOID(), c.isCritical(),
156 c.getValue());
157 }
158 }
159
160
161
162 /**
163 * {@inheritDoc}
164 */
165 @Override()
166 public String getControlName()
167 {
168 return INFO_CONTROL_NAME_UNSOLICITED_CANCEL_RESPONSE.get();
169 }
170
171
172
173 /**
174 * {@inheritDoc}
175 */
176 @Override()
177 public void toString(final StringBuilder buffer)
178 {
179 buffer.append("UnsolicitedCancelResponseControl()");
180 }
181 }