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 2006-2008 Sun Microsystems, Inc.
026 */
027 package org.opends.server.protocols.ldap;
028 import org.opends.messages.Message;
029
030
031
032 import org.opends.server.protocols.asn1.ASN1Element;
033 import org.opends.server.protocols.asn1.ASN1Integer;
034 import org.opends.server.types.DebugLogLevel;
035 import org.opends.server.types.LDAPException;
036
037 import static org.opends.server.loggers.debug.DebugLogger.*;
038 import org.opends.server.loggers.debug.DebugTracer;
039 import static org.opends.messages.ProtocolMessages.*;
040 import static org.opends.server.protocols.ldap.LDAPConstants.*;
041 import static org.opends.server.protocols.ldap.LDAPResultCode.*;
042 import static org.opends.server.util.ServerConstants.*;
043
044
045
046 /**
047 * This class defines the structures and methods for an LDAP abandon request
048 * protocol op, which is used to indicate that the server should stop processing
049 * a previously requested operation.
050 */
051 public class AbandonRequestProtocolOp
052 extends ProtocolOp
053 {
054 /**
055 * The tracer object for the debug logger.
056 */
057 private static final DebugTracer TRACER = getTracer();
058
059 // The message ID of the operation to abandon.
060 private int idToAbandon;
061
062
063
064 /**
065 * Creates a new abandon request protocol op to abandon the specified
066 * operation.
067 *
068 * @param idToAbandon The message ID of the operation to abandon.
069 */
070 public AbandonRequestProtocolOp(int idToAbandon)
071 {
072 this.idToAbandon = idToAbandon;
073 }
074
075
076
077 /**
078 * Retrieves the message ID of the operation to abandon.
079 *
080 * @return The message ID of the operation to abandon.
081 */
082 public int getIDToAbandon()
083 {
084 return idToAbandon;
085 }
086
087
088
089 /**
090 * Specifies the message ID of the operation to abandon.
091 *
092 * @param idToAbandon The message ID of the operation to abandon.
093 */
094 public void setIDToAbandon(int idToAbandon)
095 {
096 this.idToAbandon = idToAbandon;
097 }
098
099
100
101 /**
102 * Retrieves the BER type for this protocol op.
103 *
104 * @return The BER type for this protocol op.
105 */
106 public byte getType()
107 {
108 return OP_TYPE_ABANDON_REQUEST;
109 }
110
111
112
113 /**
114 * Retrieves the name for this protocol op type.
115 *
116 * @return The name for this protocol op type.
117 */
118 public String getProtocolOpName()
119 {
120 return "Abandon Request";
121 }
122
123
124
125 /**
126 * Encodes this protocol op to an ASN.1 element suitable for including in an
127 * LDAP message.
128 *
129 * @return The ASN.1 element containing the encoded protocol op.
130 */
131 public ASN1Element encode()
132 {
133 return new ASN1Integer(OP_TYPE_ABANDON_REQUEST, idToAbandon);
134 }
135
136
137
138 /**
139 * Decodes the provided ASN.1 element as an abandon request protocol op.
140 *
141 * @param element The ASN.1 element to decode.
142 *
143 * @return The decoded abandon request protocol op.
144 *
145 * @throws LDAPException If the provided ASN.1 element cannot be decoded as
146 * an abandon request protocol op.
147 */
148 public static AbandonRequestProtocolOp decodeAbandonRequest(ASN1Element
149 element)
150 throws LDAPException
151 {
152 int idToAbandon;
153 try
154 {
155 idToAbandon = element.decodeAsInteger().intValue();
156 }
157 catch (Exception e)
158 {
159 if (debugEnabled())
160 {
161 TRACER.debugCaught(DebugLogLevel.ERROR, e);
162 }
163
164 Message message =
165 ERR_LDAP_ABANDON_REQUEST_DECODE_ID.get(String.valueOf(e));
166 throw new LDAPException(PROTOCOL_ERROR, message, e);
167 }
168
169 return new AbandonRequestProtocolOp(idToAbandon);
170 }
171
172
173
174 /**
175 * Appends a string representation of this LDAP protocol op to the provided
176 * buffer.
177 *
178 * @param buffer The buffer to which the string should be appended.
179 */
180 public void toString(StringBuilder buffer)
181 {
182 buffer.append("AbandonRequest(idToAbandon=");
183 buffer.append(idToAbandon);
184 buffer.append(")");
185 }
186
187
188
189 /**
190 * Appends a multi-line string representation of this LDAP protocol op to the
191 * provided buffer.
192 *
193 * @param buffer The buffer to which the information should be appended.
194 * @param indent The number of spaces from the margin that the lines should
195 * be indented.
196 */
197 public void toString(StringBuilder buffer, int indent)
198 {
199 StringBuilder indentBuf = new StringBuilder(indent);
200 for (int i=0 ; i < indent; i++)
201 {
202 indentBuf.append(' ');
203 }
204
205 buffer.append(indentBuf);
206 buffer.append("Abandon Request");
207 buffer.append(EOL);
208
209 buffer.append(indentBuf);
210 buffer.append(" ID to Abandon: ");
211 buffer.append(idToAbandon);
212 buffer.append(EOL);
213 }
214 }
215