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.internal;
021    
022    import org.apache.directory.shared.ldap.codec.MessageTypeEnum;
023    import org.apache.directory.shared.ldap.message.SingleReplyRequest;
024    import org.apache.directory.shared.ldap.name.DN;
025    import org.apache.directory.shared.ldap.name.RDN;
026    
027    
028    /**
029     * Modify DN request protocol message used to rename or move an existing entry
030     * in the directory. Here's what <a
031     * href="http://www.faqs.org/rfcs/rfc2251.html">RFC 2251</a> has to say about
032     * it:
033     * 
034     * <pre>
035     *  4.9. Modify DN Operation
036     * 
037     *   The Modify DN Operation allows a client to change the leftmost (least
038     *   significant) component of the name of an entry in the directory, or
039     *   to move a subtree of entries to a new location in the directory.  The
040     *   Modify DN Request is defined as follows:
041     * 
042     *        ModifyDNRequest ::= [APPLICATION 12] SEQUENCE {
043     *                entry           LDAPDN,
044     *                newrdn          RelativeLDAPDN,
045     *                deleteoldrdn    BOOLEAN,
046     *                newSuperior     [0] LDAPDN OPTIONAL }
047     * 
048     *   Parameters of the Modify DN Request are:
049     * 
050     *   - entry: the Distinguished Name of the entry to be changed.  This
051     *     entry may or may not have subordinate entries.
052     * 
053     *   - newrdn: the RDN that will form the leftmost component of the new
054     *     name of the entry.
055     * 
056     *   - deleteoldrdn: a boolean parameter that controls whether the old RDN
057     *     attribute values are to be retained as attributes of the entry, or
058     *     deleted from the entry.
059     * 
060     *   - newSuperior: if present, this is the Distinguished Name of the entry
061     *     which becomes the immediate superior of the existing entry.
062     * </pre>
063     * 
064     * Note that this operation can move an entry and change its Rdn at the same
065     * time in fact it might have no choice to comply with name forms.
066     * 
067     * @author <a href="mailto:dev@directory.apache.org">Apache Directory Project</a>
068     * @version $Revision: 918756 $
069     */
070    public interface InternalModifyDnRequest extends SingleReplyRequest, InternalAbandonableRequest
071    {
072        /** Modify DN request message type enumeration value */
073        MessageTypeEnum TYPE = MessageTypeEnum.MODIFYDN_REQUEST;
074    
075        /** Modify DN response message type enumeration value */
076        MessageTypeEnum RESP_TYPE = InternalModifyDnResponse.TYPE;
077    
078    
079        /**
080         * Gets the entry's distinguished name representing the <b>entry</b> PDU
081         * field.
082         * 
083         * @return the distinguished name of the entry.
084         */
085        DN getName();
086    
087    
088        /**
089         * Sets the entry's distinguished name representing the <b>entry</b> PDU
090         * field.
091         * 
092         * @param name
093         *            the distinguished name of the entry.
094         */
095        void setName( DN name );
096    
097    
098        /**
099         * Gets the new relative distinguished name for the entry which represents
100         * the PDU's <b>newrdn</b> field.
101         * 
102         * @return the relative dn with one component
103         */
104        RDN getNewRdn();
105    
106    
107        /**
108         * Sets the new relative distinguished name for the entry which represents
109         * the PDU's <b>newrdn</b> field.
110         * 
111         * @param newRdn
112         *            the relative dn with one component
113         */
114        void setNewRdn( RDN newRdn );
115    
116    
117        /**
118         * Gets the flag which determines if the old Rdn attribute is to be removed
119         * from the entry when the new Rdn is used in its stead. This property
120         * corresponds to the <b>deleteoldrdn
121         * </p>
122         * PDU field.
123         * 
124         * @return true if the old rdn is to be deleted, false if it is not
125         */
126        boolean getDeleteOldRdn();
127    
128    
129        /**
130         * Sets the flag which determines if the old Rdn attribute is to be removed
131         * from the entry when the new Rdn is used in its stead. This property
132         * corresponds to the <b>deleteoldrdn
133         * </p>
134         * PDU field.
135         * 
136         * @param deleteOldRdn
137         *            true if the old rdn is to be deleted, false if it is not
138         */
139        void setDeleteOldRdn( boolean deleteOldRdn );
140    
141    
142        /**
143         * Gets the optional distinguished name of the new superior entry where the
144         * candidate entry is to be moved. This property corresponds to the PDU's
145         * <b>newSuperior</b> field. May be null representing a simple Rdn change
146         * rather than a move operation.
147         * 
148         * @return the dn of the superior entry the candidate entry is moved under.
149         */
150        DN getNewSuperior();
151    
152    
153        /**
154         * Sets the optional distinguished name of the new superior entry where the
155         * candidate entry is to be moved. This property corresponds to the PDU's
156         * <b>newSuperior</b> field. May be null representing a simple Rdn change
157         * rather than a move operation. Setting this property to a non-null value
158         * toggles the move flag obtained via the <code>isMove</code> method.
159         * 
160         * @param newSuperior
161         *            the dn of the superior entry the candidate entry for DN
162         *            modification is moved under.
163         */
164        void setNewSuperior( DN newSuperior );
165    
166    
167        /**
168         * Gets whether or not this request is a DN change resulting in a move
169         * operation. Setting the newSuperior property to a non-null name, toggles
170         * this flag.
171         * 
172         * @return true if the newSuperior property is <b>NOT</b> null, false
173         *         otherwise.
174         */
175        boolean isMove();
176    }