001    /*
002     *  Licensed to the Apache Software Foundation (ASF) under one
003     *  or more contributor license agreements.  See the NOTICE file
004     *  distributed with this work for additional information
005     *  regarding copyright ownership.  The ASF licenses this file
006     *  to you under the Apache License, Version 2.0 (the
007     *  "License"); you may not use this file except in compliance
008     *  with the License.  You may obtain a copy of the License at
009     *  
010     *    http://www.apache.org/licenses/LICENSE-2.0
011     *  
012     *  Unless required by applicable law or agreed to in writing,
013     *  software distributed under the License is distributed on an
014     *  "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
015     *  KIND, either express or implied.  See the License for the
016     *  specific language governing permissions and limitations
017     *  under the License. 
018     *  
019     */
020    package org.apache.directory.shared.ldap.message;
021    
022    import org.apache.directory.shared.ldap.codec.MessageTypeEnum;
023    import org.apache.directory.shared.ldap.message.internal.InternalDeleteRequest;
024    import org.apache.directory.shared.ldap.message.internal.InternalDeleteResponse;
025    import org.apache.directory.shared.ldap.message.internal.InternalResultResponse;
026    import org.apache.directory.shared.ldap.name.DN;
027    
028    
029    /**
030     * Delete request implementation.
031     * 
032     * @author <a href="mailto:dev@directory.apache.org">Apache Directory Project</a>
033     * @version $Rev: 918756 $
034     */
035    public class DeleteRequestImpl extends AbstractAbandonableRequest implements InternalDeleteRequest
036    {
037        static final long serialVersionUID = 3187847454305567542L;
038    
039        /** The distinguished name of the entry to delete */
040        private DN name;
041    
042        private InternalDeleteResponse response;
043    
044    
045        // ------------------------------------------------------------------------
046        // Constructors
047        // ------------------------------------------------------------------------
048    
049        /**
050         * Creates a Lockable DeleteRequest implementing object used to delete a
051         * leaf entry from the DIT.
052         * 
053         * @param id
054         *            the sequential message identifier
055         */
056        public DeleteRequestImpl(final int id)
057        {
058            super( id, TYPE );
059        }
060    
061    
062        // ------------------------------------------------------------------------
063        // DeleteRequest Interface Method Implementations
064        // ------------------------------------------------------------------------
065    
066        /**
067         * Gets the distinguished name of the leaf entry to be deleted by this
068         * request.
069         * 
070         * @return the DN of the leaf entry to delete.
071         */
072        public DN getName()
073        {
074            return name;
075        }
076    
077    
078        /**
079         * Sets the distinguished name of the leaf entry to be deleted by this
080         * request.
081         * 
082         * @param name
083         *            the DN of the leaf entry to delete.
084         */
085        public void setName( DN name )
086        {
087            this.name = name;
088        }
089    
090    
091        // ------------------------------------------------------------------------
092        // SingleReplyRequest Interface Method Implementations
093        // ------------------------------------------------------------------------
094    
095        /**
096         * Gets the protocol response message type for this request which produces
097         * at least one response.
098         * 
099         * @return the message type of the response.
100         */
101        public MessageTypeEnum getResponseType()
102        {
103            return RESP_TYPE;
104        }
105    
106    
107        /**
108         * The result containing response for this request.
109         * 
110         * @return the result containing response for this request
111         */
112        public InternalResultResponse getResultResponse()
113        {
114            if ( response == null )
115            {
116                response = new DeleteResponseImpl( getMessageId() );
117            }
118    
119            return response;
120        }
121    
122    
123        /**
124         * Checks to see if an object is equivalent to this DeleteRequest. First
125         * there's a quick test to see if the obj is the same object as this one -
126         * if so true is returned. Next if the super method fails false is returned.
127         * Then the name of the entry is compared - if not the same false is
128         * returned. Finally the method exists returning true.
129         * 
130         * @param obj
131         *            the object to test for equality to this
132         * @return true if the obj is equal to this DeleteRequest, false otherwise
133         */
134        public boolean equals( Object obj )
135        {
136            if ( this == obj )
137            {
138                return true;
139            }
140    
141            if ( !super.equals( obj ) )
142            {
143                return false;
144            }
145    
146            InternalDeleteRequest req = ( InternalDeleteRequest ) obj;
147    
148            if ( name != null && req.getName() == null )
149            {
150                return false;
151            }
152    
153            if ( name == null && req.getName() != null )
154            {
155                return false;
156            }
157    
158            if ( name != null && req.getName() != null )
159            {
160                if ( !name.equals( req.getName() ) )
161                {
162                    return false;
163                }
164            }
165    
166            return true;
167        }
168    
169    
170        /**
171         * Return a String representing a DelRequest
172         * 
173         * @return A DelRequest String
174         */
175        public String toString()
176        {
177    
178            StringBuffer sb = new StringBuffer();
179    
180            sb.append( "    Del request\n" );
181            sb.append( "        Entry : '" ).append( name.toString() ).append( "'\n" );
182    
183            return sb.toString();
184        }
185    }