com.unboundid.ldap.sdk.unboundidds.controls
Class SoftDeleteRequestControl

java.lang.Object
  extended by com.unboundid.ldap.sdk.Control
      extended by com.unboundid.ldap.sdk.unboundidds.controls.SoftDeleteRequestControl
All Implemented Interfaces:
java.io.Serializable

@NotMutable
@ThreadSafety(level=COMPLETELY_THREADSAFE)
public final class SoftDeleteRequestControl
extends Control

NOTE: This class is part of the Commercial Edition of the UnboundID LDAP SDK for Java. It is not available for use in applications that include only the Standard Edition of the LDAP SDK, and is not supported for use in conjunction with non-UnboundID products.
This class provides a request control which may be included in a delete request to indicate that the server should perform a soft delete rather than a hard delete. A soft delete will leave the entry in the server, but will mark it hidden so that it can only be retrieved with a special request (e.g., one which includes the SoftDeletedEntryAccessRequestControl or a filter which includes an "(objectClass=ds-soft-deleted-entry)" component). A soft-deleted entry may later be undeleted (using an add request containing the UndeleteRequestControl) in order to restore them with the same or a different DN.

The criticality for this control may be either TRUE or FALSE, but this will only impact how the delete request is to be handled by servers which do not support this control. A criticality of TRUE will cause any server which does not support this control to reject the request, while a criticality of FALSE should cause the delete request to be processed as if the control had not been included (i.e., as a regular "hard" delete).

The control may optionally have a value. If a value is provided, then it must be the encoded representation of the following ASN.1 element:
   SoftDeleteRequestValue ::= SEQUENCE {
     returnSoftDeleteResponse     [0] BOOLEAN DEFAULT TRUE,
     ... }
 


Example

The following example demonstrates the use of the soft delete request control to remove the "uid=test,dc=example,dc=com" user with a soft delete operation, and then to recover it with an undelete operation:
 // Perform a search to verify that the test entry exists.
 SearchRequest searchRequest = new SearchRequest("dc=example,dc=com",
      SearchScope.SUB, Filter.createEqualityFilter("uid", "test"));
 SearchResult searchResult = connection.search(searchRequest);
 LDAPTestUtils.assertEntriesReturnedEquals(searchResult, 1);
 String originalDN = searchResult.getSearchEntries().get(0).getDN();

 // Perform a soft delete against the entry.
 DeleteRequest softDeleteRequest = new DeleteRequest(originalDN);
 softDeleteRequest.addControl(new SoftDeleteRequestControl());
 LDAPResult softDeleteResult = connection.delete(softDeleteRequest);

 // Verify that a soft delete response control was included in the result.
 SoftDeleteResponseControl softDeleteResponseControl =
      SoftDeleteResponseControl.get(softDeleteResult);
 String softDeletedDN = softDeleteResponseControl.getSoftDeletedEntryDN();

 // Verify that the original entry no longer exists.
 LDAPTestUtils.assertEntryMissing(connection, originalDN);

 // Verify that the original search no longer returns any entries.
 searchResult = connection.search(searchRequest);
 LDAPTestUtils.assertNoEntriesReturned(searchResult);

 // Verify that the search will return an entry if we include the
 // soft-deleted entry access control in the request.
 searchRequest.addControl(new SoftDeletedEntryAccessRequestControl());
 searchResult = connection.search(searchRequest);
 LDAPTestUtils.assertEntriesReturnedEquals(searchResult, 1);

 // Perform an undelete operation to restore the entry.
 AddRequest undeleteRequest = UndeleteRequestControl.createUndeleteRequest(
      originalDN, softDeletedDN);
 LDAPResult undeleteResult = connection.add(undeleteRequest);

 // Verify that the original entry is back.
 LDAPTestUtils.assertEntryExists(connection, originalDN);

 // Permanently remove the original entry with a hard delete.
 DeleteRequest hardDeleteRequest = new DeleteRequest(originalDN);
 hardDeleteRequest.addControl(new HardDeleteRequestControl());
 LDAPResult hardDeleteResult = connection.delete(hardDeleteRequest);
 
Note that this class provides convenience methods that can be used to easily create a delete request containing an appropriate soft delete request control. Similar methods can be found in the HardDeleteRequestControl and UndeleteRequestControl classes for creating appropriate hard delete and undelete requests, respectively.

See Also:
HardDeleteRequestControl, SoftDeleteResponseControl, SoftDeletedEntryAccessRequestControl, UndeleteRequestControl, Serialized Form

Field Summary
static java.lang.String SOFT_DELETE_REQUEST_OID
          The OID (1.3.6.1.4.1.30221.2.5.20) for the soft delete request control.
 
Constructor Summary
SoftDeleteRequestControl()
          Creates a new soft delete request control with the default settings for all elements.
SoftDeleteRequestControl(boolean isCritical, boolean returnSoftDeleteResponse)
          Creates a new soft delete request control with the provided information.
SoftDeleteRequestControl(Control control)
          Creates a new soft delete request control which is decoded from the provided generic control.
 
Method Summary
static DeleteRequest createSoftDeleteRequest(java.lang.String targetDN, boolean isCritical, boolean returnSoftDeleteResponse)
          Creates a new delete request that may be used to soft delete the specified target entry.
 java.lang.String getControlName()
          Retrieves the user-friendly name for this control, if available.
 boolean returnSoftDeleteResponse()
          Indicates whether the delete response should include a SoftDeleteResponseControl.
 void toString(java.lang.StringBuilder buffer)
          Appends a string representation of this LDAP control to the provided buffer.
 
Methods inherited from class com.unboundid.ldap.sdk.Control
decode, decode, decodeControls, deregisterDecodeableControl, encode, encodeControls, equals, getOID, getValue, hashCode, hasValue, isCritical, readFrom, registerDecodeableControl, toString, writeTo
 
Methods inherited from class java.lang.Object
clone, finalize, getClass, notify, notifyAll, wait, wait, wait
 

Field Detail

SOFT_DELETE_REQUEST_OID

public static final java.lang.String SOFT_DELETE_REQUEST_OID
The OID (1.3.6.1.4.1.30221.2.5.20) for the soft delete request control.

See Also:
Constant Field Values
Constructor Detail

SoftDeleteRequestControl

public SoftDeleteRequestControl()
Creates a new soft delete request control with the default settings for all elements. It will be marked critical.


SoftDeleteRequestControl

public SoftDeleteRequestControl(boolean isCritical,
                                boolean returnSoftDeleteResponse)
Creates a new soft delete request control with the provided information.

Parameters:
isCritical - Indicates whether this control should be marked critical. This will only have an effect on the way the associated delete operation is handled by servers which do NOT support the soft delete request control. For such servers, a control that is critical will cause the soft delete attempt to fail, while a control that is not critical will be processed as if the control was not included in the request (i.e., as a normal "hard" delete).
returnSoftDeleteResponse - Indicates whether to return a soft delete response control in the delete response to the client.

SoftDeleteRequestControl

public SoftDeleteRequestControl(Control control)
                         throws LDAPException
Creates a new soft delete request control which is decoded from the provided generic control.

Parameters:
control - The generic control to be decoded as a soft delete request control.
Throws:
LDAPException - If the provided control cannot be decoded as a soft delete request control.
Method Detail

returnSoftDeleteResponse

public boolean returnSoftDeleteResponse()
Indicates whether the delete response should include a SoftDeleteResponseControl.

Returns:
true if the delete response should include a soft delete response control, or false if not.

createSoftDeleteRequest

public static DeleteRequest createSoftDeleteRequest(java.lang.String targetDN,
                                                    boolean isCritical,
                                                    boolean returnSoftDeleteResponse)
Creates a new delete request that may be used to soft delete the specified target entry.

Parameters:
targetDN - The DN of the entry to be soft deleted.
isCritical - Indicates whether this control should be marked critical. This will only have an effect on the way the associated delete operation is handled by servers which do NOT support the soft delete request control. For such servers, a control that is critical will cause the soft delete attempt to fail, while a control that is not critical will be processed as if the control was not included in the request (i.e., as a normal "hard" delete).
returnSoftDeleteResponse - Indicates whether to return a soft delete response control in the delete response to the client.
Returns:
A delete request with the specified target DN and an appropriate soft delete request control.

getControlName

public java.lang.String getControlName()
Retrieves the user-friendly name for this control, if available. If no user-friendly name has been defined, then the OID will be returned.

Overrides:
getControlName in class Control
Returns:
The user-friendly name for this control, or the OID if no user-friendly name is available.

toString

public void toString(java.lang.StringBuilder buffer)
Appends a string representation of this LDAP control to the provided buffer.

Overrides:
toString in class Control
Parameters:
buffer - The buffer to which to append the string representation of this buffer.