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.api; 028 029 030 031 import org.opends.server.types.Entry; 032 import org.opends.server.types.operation.PostResponseAddOperation; 033 import org.opends.server.types.operation.PostResponseDeleteOperation; 034 import org.opends.server.types.operation.PostResponseModifyOperation; 035 import org.opends.server.types.operation. 036 PostResponseModifyDNOperation; 037 038 039 040 /** 041 * This interface defines a mechanism that Directory Server components 042 * may use if they need to be notified of changes that are made in the 043 * Directory Server. Similar functionality can be achieved using 044 * post-response plugins, but this interface is better suited to core 045 * functionality that should not be considered optional, since plugins 046 * may be disabled. Further, change notification listeners will only 047 * be invoked for successful operations. 048 * <BR><BR> 049 * Each change notification listener will be notified whenever an 050 * update is made in the server (just before the response is sent to 051 * the client), so the listener should use a very efficient mechanism 052 * for determining whether or not any action is required for the 053 * associated operation and quickly return for cases in which the 054 * update is not applicable. Also note that even though the listener 055 * will be invoked before the response is sent to the client, it may 056 * not alter that response in any way and therefore the listener will 057 * be given what is essentially a read-only view of the associated 058 * operation. 059 * <BR><BR> 060 * Note that while this interface can be used by clients to be 061 * notified of changes to the configuration data just as easily as it 062 * can be used for any other entry anywhere in the server, components 063 * that are only interested in being notified of changes to the server 064 * configuration should use the {@code ConfigAddListener}, 065 * {@code ConfigDeleteListener}, and/or the 066 * {@code ConfigChangeListener} interfaces instead. They will be more 067 * efficient overall because they will only be invoked for operations 068 * in the server configuration, and then only for the specific entries 069 * with which the component has registered. 070 */ 071 @org.opends.server.types.PublicAPI( 072 stability=org.opends.server.types.StabilityLevel.VOLATILE, 073 mayInstantiate=false, 074 mayExtend=true, 075 mayInvoke=false) 076 public interface ChangeNotificationListener 077 { 078 /** 079 * Performs any processing that may be required after an add 080 * operation. 081 * 082 * @param addOperation The add operation that was performed in the 083 * server. 084 * @param entry The entry that was added to the server. 085 */ 086 public void handleAddOperation( 087 PostResponseAddOperation addOperation, 088 Entry entry); 089 090 091 092 /** 093 * Performs any processing that may be required after a delete 094 * operation. 095 * 096 * @param deleteOperation The delete operation that was performed 097 * in the server. 098 * @param entry The entry that was removed from the 099 * server. 100 */ 101 public void handleDeleteOperation( 102 PostResponseDeleteOperation deleteOperation, 103 Entry entry); 104 105 106 107 /** 108 * Performs any processing that may be required after a modify 109 * operation. 110 * 111 * @param modifyOperation The modify operation that was performed 112 * in the server. 113 * @param oldEntry The entry before it was updated. 114 * @param newEntry The entry after it was updated. 115 */ 116 public void handleModifyOperation( 117 PostResponseModifyOperation modifyOperation, 118 Entry oldEntry, Entry newEntry); 119 120 121 122 /** 123 * Performs any processing that may be required after a modify DN 124 * operation. 125 * 126 * @param modifyDNOperation The modify DN operation that was 127 * performed in the server. 128 * @param oldEntry The entry before it was updated. 129 * @param newEntry The entry after it was updated. 130 */ 131 public void handleModifyDNOperation( 132 PostResponseModifyDNOperation modifyDNOperation, 133 Entry oldEntry, Entry newEntry); 134 } 135