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     * docs/licenses/cddl.txt
011     * or http://www.opensource.org/licenses/cddl1.php.
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     * docs/licenses/cddl.txt.  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 2010-2013 UnboundID Corp.
026     */
027    package com.unboundid.directory.sdk.common.types;
028    
029    
030    
031    import java.util.Set;
032    
033    import com.unboundid.directory.sdk.common.schema.AttributeType;
034    import com.unboundid.ldap.sdk.Attribute;
035    import com.unboundid.ldap.sdk.LDAPException;
036    import com.unboundid.ldap.sdk.DN;
037    import com.unboundid.util.NotExtensible;
038    import com.unboundid.util.ThreadSafety;
039    import com.unboundid.util.ThreadSafetyLevel;
040    
041    
042    
043    /**
044     * This interface defines a set of methods which may be used to update the
045     * contents of an entry.
046     */
047    @NotExtensible()
048    @ThreadSafety(level=ThreadSafetyLevel.INTERFACE_NOT_THREADSAFE)
049    public interface UpdatableEntry
050           extends Entry
051    {
052      /**
053       * Specifies the DN for the entry.
054       *
055       * @param  dn  The DN for the entry.  It must not be {@code null}.
056       *
057       * @throws LDAPException  If the provided DN is not valid.
058       */
059      void setDN(final String dn)
060           throws LDAPException;
061    
062    
063    
064      /**
065       * Specifies the DN for the entry.
066       *
067       * @param  dn  The DN for the entry.  It must not be {@code null}.
068       *
069       * @throws LDAPException  If the provided DN is not valid.
070       */
071      void setDN(final DN dn)
072           throws LDAPException;
073    
074    
075    
076      /**
077       * Replaces the specified attribute in the entry, or adds the attribute if
078       * it does not exist.
079       *
080       * @param  attribute  The attribute to be stored in the entry.  It must not be
081       *                    {@code null}.
082       */
083      void setAttribute(final Attribute attribute);
084    
085    
086    
087      /**
088       * Adds the provided attribute to the entry.  If an attribute already exists
089       * with the same name and set of options, then the values will be merged.
090       *
091       * @param  attribute  The attribute to be added.  It must not be {@code null}.
092       */
093      void addAttribute(final Attribute attribute);
094    
095    
096    
097      /**
098       * Removes all occurrences of the specified attribute from the entry.
099       *
100       * @param  type  The attribute type for the attribute to remove from the
101       *               entry.  It must not be {@code null}.
102       */
103      void removeAttribute(final AttributeType type);
104    
105    
106    
107      /**
108       * Removes all occurrences of the attribute with the specified name from the
109       * entry.
110       *
111       * @param  name  The name or OID of the attribute to remove from the entry.
112       *               It must not be {@code null}.
113       */
114      void removeAttribute(final String name);
115    
116    
117    
118      /**
119       * Removes the attribute with the specified name and exact set of options
120       * from the entry.
121       *
122       * @param  type     The attribute type for the attribute to remove from the
123       *                  entry.  It must not be {@code null}.
124       * @param  options  The set of attribute options for the attribute to remove
125       *                  from the entry.  It may be {@code null} or empty if there
126       *                  are no options.
127       */
128      void removeAttribute(final AttributeType type, final Set<String> options);
129    
130    
131    
132      /**
133       * Removes the attribute with the specified name and exact set of options
134       * from the entry.
135       *
136       * @param  name     The name or OID of the attribute to remove from the entry.
137       *                  It must not be {@code null}.
138       * @param  options  The set of attribute options for the attribute to remove
139       *                  from the entry.  It may be {@code null} or empty if there
140       *                  are no options.
141       */
142      void removeAttribute(final String name, final Set<String> options);
143    }