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.ASN1OctetString;
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 * This class defines the structures and methods for an LDAP delete request
047 * protocol op, which is used to remove an entry from the Directory Server.
048 */
049 public class DeleteRequestProtocolOp
050 extends ProtocolOp
051 {
052 /**
053 * The tracer object for the debug logger.
054 */
055 private static final DebugTracer TRACER = getTracer();
056
057 // The DN for this delete request.
058 private ASN1OctetString dn;
059
060
061
062 /**
063 * Creates a new delete request protocol op with the specified DN.
064 *
065 * @param dn The DN for this delete request protocol op.
066 */
067 public DeleteRequestProtocolOp(ASN1OctetString dn)
068 {
069 this.dn = dn;
070 }
071
072
073
074 /**
075 * Retrieves the DN for this delete request.
076 *
077 * @return The DN for this delete request.
078 */
079 public ASN1OctetString getDN()
080 {
081 return dn;
082 }
083
084
085
086 /**
087 * Specifies the DN for this delete request.
088 *
089 * @param dn The DN for this delete request.
090 */
091 public void setDN(ASN1OctetString dn)
092 {
093 this.dn = dn;
094 }
095
096
097
098 /**
099 * Retrieves the BER type for this protocol op.
100 *
101 * @return The BER type for this protocol op.
102 */
103 public byte getType()
104 {
105 return OP_TYPE_DELETE_REQUEST;
106 }
107
108
109
110 /**
111 * Retrieves the name for this protocol op type.
112 *
113 * @return The name for this protocol op type.
114 */
115 public String getProtocolOpName()
116 {
117 return "Delete Request";
118 }
119
120
121
122 /**
123 * Encodes this protocol op to an ASN.1 element suitable for including in an
124 * LDAP message.
125 *
126 * @return The ASN.1 element containing the encoded protocol op.
127 */
128 public ASN1Element encode()
129 {
130 dn.setType(OP_TYPE_DELETE_REQUEST);
131 return dn;
132 }
133
134
135
136 /**
137 * Decodes the provided ASN.1 element as an LDAP delete request protocol op.
138 *
139 * @param element The ASN.1 element to be decoded.
140 *
141 * @return The decoded delete request protocol op.
142 *
143 * @throws LDAPException If a problem occurs while decoding the provided
144 * ASN.1 element as a delete request protocol op.
145 */
146 public static DeleteRequestProtocolOp decodeDeleteRequest(ASN1Element element)
147 throws LDAPException
148 {
149 try
150 {
151 return new DeleteRequestProtocolOp(element.decodeAsOctetString());
152 }
153 catch (Exception e)
154 {
155 if (debugEnabled())
156 {
157 TRACER.debugCaught(DebugLogLevel.ERROR, e);
158 }
159
160 Message message =
161 ERR_LDAP_DELETE_REQUEST_DECODE_DN.get(String.valueOf(e));
162 throw new LDAPException(PROTOCOL_ERROR, message, e);
163 }
164 }
165
166
167
168 /**
169 * Appends a string representation of this LDAP protocol op to the provided
170 * buffer.
171 *
172 * @param buffer The buffer to which the string should be appended.
173 */
174 public void toString(StringBuilder buffer)
175 {
176 buffer.append("DeleteRequest(dn=");
177 dn.toString(buffer);
178 buffer.append(")");
179 }
180
181
182
183 /**
184 * Appends a multi-line string representation of this LDAP protocol op to the
185 * provided buffer.
186 *
187 * @param buffer The buffer to which the information should be appended.
188 * @param indent The number of spaces from the margin that the lines should
189 * be indented.
190 */
191 public void toString(StringBuilder buffer, int indent)
192 {
193 StringBuilder indentBuf = new StringBuilder(indent);
194 for (int i=0 ; i < indent; i++)
195 {
196 indentBuf.append(' ');
197 }
198
199 buffer.append(indentBuf);
200 buffer.append("Delete Request");
201 buffer.append(EOL);
202
203 buffer.append(indentBuf);
204 buffer.append(" Entry DN: ");
205 dn.toString(buffer);
206 buffer.append(EOL);
207 }
208 }
209