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-2016 UnboundID Corp.
026 */
027package com.unboundid.directory.sdk.common.operation;
028
029
030
031import com.unboundid.ldap.sdk.ReadOnlyDeleteRequest;
032import com.unboundid.ldap.sdk.unboundidds.controls.HardDeleteRequestControl;
033import com.unboundid.ldap.sdk.unboundidds.controls.SoftDeleteRequestControl;
034import com.unboundid.ldif.LDIFDeleteChangeRecord;
035import com.unboundid.util.NotExtensible;
036import com.unboundid.util.ThreadSafety;
037import com.unboundid.util.ThreadSafetyLevel;
038
039
040
041/**
042 * This interface defines a set of methods which may be used to interact with a
043 * delete request.
044 */
045@NotExtensible()
046@ThreadSafety(level=ThreadSafetyLevel.INTERFACE_NOT_THREADSAFE)
047public interface DeleteRequest
048       extends ChangeRequest
049{
050  /**
051   * Retrieves the DN of the entry to be deleted.
052   *
053   * @return  The DN of the entry to be deleted.
054   */
055  String getDN();
056
057
058
059  /**
060   * Retrieves an LDAP SDK representation of this delete request.
061   *
062   * @return  An LDAP SDK representation of this delete request.
063   */
064  ReadOnlyDeleteRequest toLDAPSDKRequest();
065
066
067
068  /**
069   * Retrieves an LDIF change record that corresponds to this delete request.
070   *
071   * @return  An LDIF change record that corresponds to this delete request.
072   */
073  LDIFDeleteChangeRecord toLDIFChangeRecord();
074
075
076
077  /**
078   * Indicates whether this request will result in the target entry being
079   * soft-deleted. This will be true either if the
080   * {@link SoftDeleteRequestControl} is included or if the request matches
081   * the auto-soft-delete connection criteria or request criteria specified in
082   * the Soft Delete Policy for the server.
083   *
084   * @return true if this request will result in the target entry being
085   *         soft-deleted, false otherwise.
086   */
087  boolean isSoftDelete();
088
089
090
091  /**
092   * Retrieves the soft-delete request control included in the delete request if
093   * it is present. Note that soft delete operations can occur without the
094   * {@link SoftDeleteRequestControl} if the request matches the
095   * auto-soft-delete connection criteria; in that case this method will return
096   * {@code null}.
097   *
098   * @return the soft-delete request control if it is present in the request,
099   *         otherwise {@code null}.
100   */
101  SoftDeleteRequestControl getSoftDeleteRequestControl();
102
103
104
105  /**
106   * Indicates whether this request will result in the target entry being
107   * hard-deleted. This will be true either if the
108   * {@link HardDeleteRequestControl} is included or if the request didn't match
109   * any condition necessary to make it a soft-delete.
110   *
111   * @return true if this request will result in the target entry being
112   *         hard-deleted, false otherwise.
113   */
114  boolean isHardDelete();
115
116
117
118  /**
119   * Retrieves the hard-delete request control included in the delete request if
120   * it is present. Note that hard delete operations can occur without the
121   * {@link HardDeleteRequestControl}. If the request is not a soft-delete, it
122   * is effectively a hard delete; the presence of the
123   * {@link HardDeleteRequestControl} just makes it explicit.
124   *
125   * @return the hard-delete request control if it is present in the request,
126   *         otherwise {@code null}.
127   */
128  HardDeleteRequestControl getHardDeleteRequestControl();
129}