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.core;
028    
029    import java.util.List;
030    
031    import org.opends.server.types.ByteString;
032    import org.opends.server.types.DN;
033    import org.opends.server.types.DirectoryException;
034    import org.opends.server.types.Modification;
035    import org.opends.server.types.Operation;
036    import org.opends.server.types.RawModification;
037    
038    /**
039     * This interface defines an operation used to modify an entry in
040     * the Directory Server.
041     */
042    public interface ModifyOperation extends Operation
043    {
044      /**
045       * Retrieves the raw, unprocessed entry DN as included in the client request.
046       * The DN that is returned may or may not be a valid DN, since no validation
047       * will have been performed upon it.
048       *
049       * @return  The raw, unprocessed entry DN as included in the client request.
050       */
051      public abstract ByteString getRawEntryDN();
052    
053      /**
054       * Specifies the raw, unprocessed entry DN as included in the client request.
055       * This should only be called by pre-parse plugins.
056       *
057       * @param  rawEntryDN  The raw, unprocessed entry DN as included in the client
058       *                     request.
059       */
060      public abstract void setRawEntryDN(ByteString rawEntryDN);
061    
062      /**
063       * Retrieves the DN of the entry to modify.  This should not be called by
064       * pre-parse plugins because the processed DN will not be available yet.
065       * Instead, they should call the <CODE>getRawEntryDN</CODE> method.
066       *
067       * @return  The DN of the entry to modify, or <CODE>null</CODE> if the raw
068       *          entry DN has not yet been processed.
069       */
070      public abstract DN getEntryDN();
071    
072      /**
073       * Retrieves the set of raw, unprocessed modifications as included in the
074       * client request.  Note that this may contain one or more invalid
075       * modifications, as no validation will have been performed on this
076       * information.  The list returned must not be altered by the caller.
077       *
078       * @return  The set of raw, unprocessed modifications as included in the
079       *          client request.
080       */
081      public abstract List<RawModification> getRawModifications();
082    
083      /**
084       * Adds the provided modification to the set of raw modifications for this
085       * modify operation.  This must only be called by pre-parse plugins.
086       *
087       * @param  rawModification  The modification to add to the set of raw
088       *                          modifications for this modify operation.
089       */
090      public abstract void addRawModification(RawModification rawModification);
091    
092      /**
093       * Specifies the raw modifications for this modify operation.
094       *
095       * @param  rawModifications  The raw modifications for this modify operation.
096       */
097      public abstract void setRawModifications(
098          List<RawModification> rawModifications);
099    
100      /**
101       * Retrieves the set of modifications for this modify operation.  Its contents
102       * should not be altered.  It will not be available to pre-parse plugins.
103       *
104       * @return  The set of modifications for this modify operation, or
105       *          <CODE>null</CODE> if the modifications have not yet been
106       *          processed.
107       */
108      public abstract List<Modification> getModifications();
109    
110      /**
111       * Adds the provided modification to the set of modifications to this modify
112       * operation.  This may only be called by pre-operation plugins.
113       *
114       * @param  modification  The modification to add to the set of changes for
115       *                       this modify operation.
116       *
117       * @throws  DirectoryException  If an unexpected problem occurs while applying
118       *                              the modification to the entry.
119       */
120      public abstract void addModification(Modification modification)
121          throws DirectoryException;
122    
123      /**
124       * Retrieves the change number that has been assigned to this operation.
125       *
126       * @return  The change number that has been assigned to this operation, or -1
127       *          if none has been assigned yet or if there is no applicable
128       *          synchronization mechanism in place that uses change numbers.
129       */
130      public abstract long getChangeNumber();
131    
132      /**
133       * Specifies the change number that has been assigned to this operation by the
134       * synchronization mechanism.
135       *
136       * @param  changeNumber  The change number that has been assigned to this
137       *                       operation by the synchronization mechanism.
138       */
139      public abstract void setChangeNumber(long changeNumber);
140    
141      /**
142       * Retrieves the proxied authorization DN for this operation if proxied
143       * authorization has been requested.
144       *
145       * @return  The proxied authorization DN for this operation if proxied
146       *          authorization has been requested, or {@code null} if proxied
147       *          authorization has not been requested.
148       */
149      public abstract DN getProxiedAuthorizationDN();
150    
151      /**
152       * Set the proxied authorization DN for this operation if proxied
153       * authorization has been requested.
154       *
155       * @param proxiedAuthorizationDN
156       *          The proxied authorization DN for this operation if proxied
157       *          authorization has been requested, or {@code null} if proxied
158       *          authorization has not been requested.
159       */
160      public abstract void setProxiedAuthorizationDN(DN proxiedAuthorizationDN);
161    
162    }