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-2019 Ping Identity Corporation
026 */
027package com.unboundid.directory.sdk.ds.api;
028
029
030
031import com.unboundid.directory.sdk.common.operation.AddRequest;
032import com.unboundid.directory.sdk.common.operation.AddResult;
033import com.unboundid.directory.sdk.common.operation.DeleteRequest;
034import com.unboundid.directory.sdk.common.operation.DeleteResult;
035import com.unboundid.directory.sdk.common.operation.ModifyRequest;
036import com.unboundid.directory.sdk.common.operation.ModifyResult;
037import com.unboundid.directory.sdk.common.operation.ModifyDNRequest;
038import com.unboundid.directory.sdk.common.operation.ModifyDNResult;
039import com.unboundid.directory.sdk.common.types.CompletedOperationContext;
040import com.unboundid.directory.sdk.common.types.Entry;
041import com.unboundid.directory.sdk.ds.internal.DirectoryServerExtension;
042import com.unboundid.directory.sdk.proxy.internal.DirectoryProxyServerExtension;
043import com.unboundid.directory.sdk.sync.internal.SynchronizationServerExtension;
044import com.unboundid.util.Extensible;
045import com.unboundid.util.ThreadSafety;
046import com.unboundid.util.ThreadSafetyLevel;
047
048
049
050/**
051 * This interface defines a set of methods that may be implemented by an
052 * extension which should be used to receive information about changes processed
053 * within the server as the result of add, delete, modify, or modify DN
054 * operations.  The {@code ServerContext.registerChangeListener} method should
055 * be used to register a change listener with the server, and the corresponding
056 * {@code deregisterChangeListener} method should be used to deregister the
057 * listener if it is no longer needed.
058 * <BR><BR>
059 * Note that notification will only be provided for changes successfully
060 * processed within the local server.  Notification will not be provided for
061 * changes to data located in remote servers even if the change was processed
062 * through this server.  Notification will also not be provided for operations
063 * that did not complete successfully.
064 * <BR><BR>
065 * Also note that notification about matching changes will be provided to change
066 * listeners asynchronously after the change has been processed within the
067 * server and the result has been returned to the client.  Other changes to the
068 * target entry may be in progress (and perhaps may have already completed) as
069 * a result of other operations by the same or other clients.
070 */
071@Extensible()
072@DirectoryServerExtension()
073@DirectoryProxyServerExtension(appliesToLocalContent=true,
074     appliesToRemoteContent=false)
075@SynchronizationServerExtension(appliesToLocalContent=true,
076     appliesToSynchronizedContent=false)
077@ThreadSafety(level=ThreadSafetyLevel.INTERFACE_THREADSAFE)
078public interface ChangeListener
079{
080  /**
081   * Indicates that an add operation has been processed within the server.
082   *
083   * @param  operationContext  The context for the add operation.
084   * @param  addRequest        Information about the request for the add
085   *                           operation that was processed.
086   * @param  addResult         Information about the result for the add
087   *                           operation that was processed.
088   * @param  entry             The entry that was added to the server.
089   */
090  void addOperationProcessed(final CompletedOperationContext operationContext,
091                             final AddRequest addRequest,
092                             final AddResult addResult,
093                             final Entry entry);
094
095
096
097  /**
098   * Indicates that a delete operation has been processed within the server.
099   *
100   * @param  operationContext  The context for the delete operation.
101   * @param  deleteRequest     Information about the request for the delete
102   *                           operation that was processed.
103   * @param  deleteResult      Information about the result for the delete
104   *                           operation that was processed.
105   * @param  entry             The entry that was removed from the server.
106   */
107  void deleteOperationProcessed(
108            final CompletedOperationContext operationContext,
109            final DeleteRequest deleteRequest, final DeleteResult deleteResult,
110            final Entry entry);
111
112
113
114  /**
115   * Indicates that a modify operation has been processed within the server.
116   *
117   * @param  operationContext  The context for the modify operation.
118   * @param  modifyRequest     Information about the request for the modify
119   *                           operation that was processed.
120   * @param  modifyResult      Information about the result for the modify
121   *                           operation that was processed.
122   * @param  oldEntry          The entry as it appeared before the change was
123   *                           processed.
124   * @param  newEntry          The entry as it appeared immediately after the
125   *                           change was processed.
126   */
127  void modifyOperationProcessed(
128            final CompletedOperationContext operationContext,
129            final ModifyRequest modifyRequest, final ModifyResult modifyResult,
130            final Entry oldEntry, final Entry newEntry);
131
132
133
134  /**
135   * Indicates that a modify DN operation has been processed within the server.
136   *
137   * @param  operationContext  The context for the modify DN operation.
138   * @param  modifyDNRequest   Information about the request for the modify DN
139   *                           operation that was processed.
140   * @param  modifyDNResult    Information about the result for the modify DN
141   *                           operation that was processed.
142   * @param  oldEntry          The entry as it appeared before the change was
143   *                           processed.
144   * @param  newEntry          The entry as it appeared immediately after the
145   *                           change was processed.
146   */
147  void modifyDNOperationProcessed(
148            final CompletedOperationContext operationContext,
149            final ModifyDNRequest modifyDNRequest,
150            final ModifyDNResult modifyDNResult, final Entry oldEntry,
151            final Entry newEntry);
152}