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-2012 UnboundID Corp. 026 */ 027 package com.unboundid.directory.sdk.ds.api; 028 029 030 031 import java.util.Collections; 032 import java.util.List; 033 import java.util.Map; 034 import java.util.Set; 035 036 import com.unboundid.directory.sdk.common.internal.ExampleUsageProvider; 037 import com.unboundid.directory.sdk.common.internal.Reconfigurable; 038 import com.unboundid.directory.sdk.common.internal.UnboundIDExtension; 039 import com.unboundid.directory.sdk.common.operation.AddRequest; 040 import com.unboundid.directory.sdk.common.operation.AddResult; 041 import com.unboundid.directory.sdk.common.operation.BindResult; 042 import com.unboundid.directory.sdk.common.operation.CompareRequest; 043 import com.unboundid.directory.sdk.common.operation.CompareResult; 044 import com.unboundid.directory.sdk.common.operation.DeleteRequest; 045 import com.unboundid.directory.sdk.common.operation.DeleteResult; 046 import com.unboundid.directory.sdk.common.operation.ExtendedRequest; 047 import com.unboundid.directory.sdk.common.operation.ExtendedResult; 048 import com.unboundid.directory.sdk.common.operation.ModifyRequest; 049 import com.unboundid.directory.sdk.common.operation.ModifyResult; 050 import com.unboundid.directory.sdk.common.operation.ModifyDNRequest; 051 import com.unboundid.directory.sdk.common.operation.ModifyDNResult; 052 import com.unboundid.directory.sdk.common.operation.SASLBindRequest; 053 import com.unboundid.directory.sdk.common.operation.SearchRequest; 054 import com.unboundid.directory.sdk.common.operation.SearchResult; 055 import com.unboundid.directory.sdk.common.operation.SimpleBindRequest; 056 import com.unboundid.directory.sdk.common.operation.UpdatableAbandonRequest; 057 import com.unboundid.directory.sdk.common.operation.UpdatableAddRequest; 058 import com.unboundid.directory.sdk.common.operation.UpdatableAddResult; 059 import com.unboundid.directory.sdk.common.operation.UpdatableBindResult; 060 import com.unboundid.directory.sdk.common.operation.UpdatableCompareRequest; 061 import com.unboundid.directory.sdk.common.operation.UpdatableCompareResult; 062 import com.unboundid.directory.sdk.common.operation.UpdatableDeleteRequest; 063 import com.unboundid.directory.sdk.common.operation.UpdatableDeleteResult; 064 import com.unboundid.directory.sdk.common.operation.UpdatableExtendedRequest; 065 import com.unboundid.directory.sdk.common.operation.UpdatableExtendedResult; 066 import com.unboundid.directory.sdk.common.operation.UpdatableGenericResult; 067 import com.unboundid.directory.sdk.common.operation.UpdatableModifyRequest; 068 import com.unboundid.directory.sdk.common.operation.UpdatableModifyResult; 069 import com.unboundid.directory.sdk.common.operation.UpdatableModifyDNRequest; 070 import com.unboundid.directory.sdk.common.operation.UpdatableModifyDNResult; 071 import com.unboundid.directory.sdk.common.operation.UpdatableSASLBindRequest; 072 import com.unboundid.directory.sdk.common.operation.UpdatableSearchRequest; 073 import com.unboundid.directory.sdk.common.operation.UpdatableSearchResult; 074 import com.unboundid.directory.sdk.common.operation.UpdatableSimpleBindRequest; 075 import com.unboundid.directory.sdk.common.operation.UpdatableUnbindRequest; 076 import com.unboundid.directory.sdk.common.types.ActiveOperationContext; 077 import com.unboundid.directory.sdk.common.types.ActiveSearchOperationContext; 078 import com.unboundid.directory.sdk.common.types.CompletedOperationContext; 079 import com.unboundid.directory.sdk.common.types.CompletedSearchOperationContext; 080 import com.unboundid.directory.sdk.common.types.ClientContext; 081 import com.unboundid.directory.sdk.common.types.DisconnectReason; 082 import com.unboundid.directory.sdk.common.types.Entry; 083 import com.unboundid.directory.sdk.common.types.UpdatableEntry; 084 import com.unboundid.directory.sdk.ds.config.PluginConfig; 085 import com.unboundid.directory.sdk.ds.internal.DirectoryServerExtension; 086 import com.unboundid.directory.sdk.ds.types.DirectoryServerContext; 087 import com.unboundid.directory.sdk.ds.types.IntermediateResponsePluginResult; 088 import com.unboundid.directory.sdk.ds.types.LDIFPluginResult; 089 import com.unboundid.directory.sdk.ds.types.PostConnectPluginResult; 090 import com.unboundid.directory.sdk.ds.types.PostDisconnectPluginResult; 091 import com.unboundid.directory.sdk.ds.types.PostOperationPluginResult; 092 import com.unboundid.directory.sdk.ds.types.PostResponsePluginResult; 093 import com.unboundid.directory.sdk.ds.types.PreOperationPluginResult; 094 import com.unboundid.directory.sdk.ds.types.PreParsePluginResult; 095 import com.unboundid.directory.sdk.ds.types.SearchEntryPluginResult; 096 import com.unboundid.directory.sdk.ds.types.SearchReferencePluginResult; 097 import com.unboundid.directory.sdk.ds.types.StartupDependency; 098 import com.unboundid.directory.sdk.ds.types.StartupPluginResult; 099 import com.unboundid.directory.sdk.ds.types.SubordinateModifyDNPluginResult; 100 import com.unboundid.directory.sdk.proxy.internal.DirectoryProxyServerExtension; 101 import com.unboundid.directory.sdk.sync.internal.SynchronizationServerExtension; 102 import com.unboundid.ldap.sdk.Control; 103 import com.unboundid.ldap.sdk.IntermediateResponse; 104 import com.unboundid.ldap.sdk.LDAPException; 105 import com.unboundid.ldap.sdk.Modification; 106 import com.unboundid.ldap.sdk.ResultCode; 107 import com.unboundid.util.Extensible; 108 import com.unboundid.util.ThreadSafety; 109 import com.unboundid.util.ThreadSafetyLevel; 110 import com.unboundid.util.args.ArgumentException; 111 import com.unboundid.util.args.ArgumentParser; 112 113 114 115 /** 116 * This class defines an API that must be implemented by extensions which act as 117 * server plugins. There are several different kinds of plugins which may be 118 * invoked for different purposes, including: 119 * <UL> 120 * <LI>startup -- Startup plugins may be used to perform custom processing 121 * when the server is in the process of staring up. By default, the 122 * processing will be performed near the end of the startup phase just 123 * before the server begins to accept connections from external clients, 124 * but if one or more startup dependencies are defined, then the plugin 125 * may be invoked earlier in the startup process as soon as all declared 126 * dependencies have been satisfied.</LI> 127 * <LI>shutdown -- Shutdown plugins may be used to perform custom processing 128 * when the server is in the process of shutting down. This will occur 129 * near the beginning of the shutdown process, just after the server stops 130 * accepting new client connections and terminates existing connections 131 * but before shutting down any other components. Note that shutdown 132 * plugins may not always be invoked in some unusual shutdown scenarios 133 * (e.g., if the server process is forcefully killed, or in the event of a 134 * hardware, OS, or JVM failure).</LI> 135 * <LI>LDIF import -- LDIF import plugins are invoked for each entry read from 136 * an LDIF file to be imported into a backend. It is possible to alter 137 * the contents of the entry or to cause the entry to be excluded from the 138 * import.</LI> 139 * <LI>LDIF export -- LDIF export plugins are invoked for each entry exported 140 * from a backend to be written to an LDIF file. It is possible to alter 141 * the contents of the entry or to cause the entry to be excluded from the 142 * export.</LI> 143 * <LI>post-connect -- Post-connect plugins are invoked during the course of 144 * accepting a new client connection. They may access information about 145 * the client and may optionally terminate the client connection if it is 146 * deemed appropriate.</LI> 147 * <LI>post-disconnect -- Post-disconnect plugins are invoked after a client 148 * connection has been closed, regardless of whether the closure was 149 * initiated by the client (e.g., because of an unbind request or simply 150 * closing the socket) or by the server (e.g., because the connection had 151 * been idle for too long or because the client violated some server-side 152 * constraint.</LI> 153 * <LI>pre-parse -- Pre-parse plugins are invoked just after the server has 154 * received an abandon, add, bind, compare, delete, extended, modify, 155 * modify DN, search, or unbind request. They may be used to obtain 156 * information about the requests, alter the contents of the request or 157 * prevent the server from processing the request. 158 * <LI>pre-operation -- Pre-operation plugins are invoked for add, bind, 159 * compare, delete, extended, modify, modify DN, and search operations 160 * after some level of validation has been performed but just before the 161 * core processing for the operation. They may not be used to alter the 162 * request, but they may still be used to obtain information about the 163 * request or to prevent the operation from being processed.</LI> 164 * <LI>post-operation -- Post-operation plugins are invoked for add, bind, 165 * compare, delete, extended, modify, modify DN, and search operations 166 * after most processing has completed for the operation but before the 167 * result has been returned to the client. They may be used to obtain 168 * information about the result or to alter the contents of the result to 169 * be returned.</LI> 170 * <LI>post-response -- Post-response plugins are invoked for add, bind, 171 * compare, delete, extended, modify, modify DN, and search operations 172 * after the response has already been sent to the client. They may be 173 * used to perform processing for operations without delaying the response 174 * to the client.</LI> 175 * <LI>post-replication -- Post-replication plugins are invoked for add, 176 * delete, modify, and modify DN operations that have been received and 177 * processed via replication. They may be used to obtain information or 178 * perform processing for replicated changes, but may not alter those 179 * changes.</LI> 180 * <LI>search result entry -- Search result entry plugins are invoked for each 181 * entry to be returned to the client during the course of processing a 182 * search operation. They may obtain information about the entry to be 183 * returned, alter the entry contents, or prevent the entry from being 184 * returned.</LI> 185 * <LI>search result reference -- Search result reference plugins are invoked 186 * for each reference to be returned to the client during the course of 187 * processing a search operation. They may obtain information about the 188 * reference to be returned, alter the referral URLs to be returned, or 189 * prevent the reference from being returned.</LI> 190 * <LI>subordinate modify DN -- Subordinate modify DN plugins are invoked for 191 * each entry below the target entry being renamed in the course of a 192 * modify DN operation. They may be used to obtain information about the 193 * subordinate entry to be renamed and optionally to alter the contents 194 * of that entry.</LI> 195 * <LI>intermediate response -- Intermediate response plugins are invoked for 196 * each intermediate response to be returned to the client. They may be 197 * used to obtain information about the response or to prevent it from 198 * being returned to the client.</LI> 199 * </UL> 200 * <BR><BR> 201 * A single plugin instance may be configured to act in any combination of these 202 * contexts. For example, a plugin may be configured to operate during both 203 * LDIF import and pre-parse add contexts so that it can transform the contents 204 * of entries whether regardless of the way they are inserted into the backend. 205 * <BR> 206 * <H2>Configuring Plugins</H2> 207 * In order to configure a plugin created using this API, use a command like: 208 * <PRE> 209 * dsconfig create-plugin \ 210 * --plugin-name "<I>{plugin-name}</I>" \ 211 * --type third-party \ 212 * --set enabled:true \ 213 * --set plugin-type:{plugin-type} \ 214 * --set "extension-class:<I>{class-name}</I>" \ 215 * --set "extension-argument:<I>{name=value}</I>" 216 * </PRE> 217 * where "<I>{plugin-name}</I>" is the name to use for the plugin instance, 218 * "<I>{plugin-type}</I>" is the name of a plugin type for which the plugin 219 * should be invoked, "<I>{class-name}</I>" is the fully-qualified name of the 220 * Java class that extends {@code com.unboundid.directory.sdk.ds.api.Plugin}, 221 * and "<I>{name=value}</I>" represents name-value pairs for any arguments to 222 * provide to the plugin. If the plugin should be invoked for multiple plugin 223 * types, then the "<CODE>--set plugin-type:<I>{plugin-type}</I></CODE>" 224 * option should be provided multiple times. Similarly, if multiple arguments 225 * should be provided to the plugin, then the 226 * "<CODE>--set extension-argument:<I>{name=value}</I></CODE>" option should be 227 * provided multiple times. 228 * 229 * @see com.unboundid.directory.sdk.ds.scripting.ScriptedPlugin 230 */ 231 @Extensible() 232 @DirectoryServerExtension() 233 @DirectoryProxyServerExtension(appliesToLocalContent=true, 234 appliesToRemoteContent=true, 235 notes="Some plugin types will not be invoked for proxied operations, " + 236 "including pre-operation, post-operation, search result entry, " + 237 "search result reference, intermediate response, and subordinate " + 238 "modify DN. A proxy transformation may be used to achieve the " + 239 "same result in many cases.") 240 @SynchronizationServerExtension(appliesToLocalContent=true, 241 appliesToSynchronizedContent=false) 242 @ThreadSafety(level=ThreadSafetyLevel.INTERFACE_THREADSAFE) 243 public abstract class Plugin 244 implements UnboundIDExtension, Reconfigurable<PluginConfig>, 245 ExampleUsageProvider 246 { 247 /** 248 * Creates a new instance of this plugin. All plugin implementations must 249 * include a default constructor, but any initialization should generally be 250 * done in the {@code initializePlugin} method. 251 */ 252 public Plugin() 253 { 254 // No implementation is required. 255 } 256 257 258 259 /** 260 * {@inheritDoc} 261 */ 262 public abstract String getExtensionName(); 263 264 265 266 /** 267 * {@inheritDoc} 268 */ 269 public abstract String[] getExtensionDescription(); 270 271 272 273 /** 274 * {@inheritDoc} 275 */ 276 public void defineConfigArguments(final ArgumentParser parser) 277 throws ArgumentException 278 { 279 // No arguments will be allowed by default. 280 } 281 282 283 284 /** 285 * Initializes this plugin. 286 * 287 * @param serverContext A handle to the server context for the server in 288 * which this extension is running. 289 * @param config The general configuration for this plugin. 290 * @param parser The argument parser which has been initialized from 291 * the configuration for this plugin. 292 * 293 * @throws LDAPException If a problem occurs while initializing this plugin. 294 */ 295 public void initializePlugin(final DirectoryServerContext serverContext, 296 final PluginConfig config, 297 final ArgumentParser parser) 298 throws LDAPException 299 { 300 // No initialization will be performed by default. 301 } 302 303 304 305 /** 306 * {@inheritDoc} 307 */ 308 public boolean isConfigurationAcceptable(final PluginConfig config, 309 final ArgumentParser parser, 310 final List<String> unacceptableReasons) 311 { 312 // No extended validation will be performed by default. 313 return true; 314 } 315 316 317 318 /** 319 * {@inheritDoc} 320 */ 321 public ResultCode applyConfiguration(final PluginConfig config, 322 final ArgumentParser parser, 323 final List<String> adminActionsRequired, 324 final List<String> messages) 325 { 326 // By default, no configuration changes will be applied. If there are any 327 // arguments, then add an admin action message indicating that the extension 328 // needs to be restarted for any changes to take effect. 329 if (! parser.getNamedArguments().isEmpty()) 330 { 331 adminActionsRequired.add( 332 "No configuration change has actually been applied. The new " + 333 "configuration will not take effect until this plugin is " + 334 "disabled and re-enabled or until the server is restarted."); 335 } 336 337 return ResultCode.SUCCESS; 338 } 339 340 341 342 /** 343 * Performs any cleanup which may be necessary when this plugin is to be taken 344 * out of service. 345 */ 346 public void finalizePlugin() 347 { 348 // No implementation is required. 349 } 350 351 352 353 /** 354 * Retrieves the set of startup dependencies which must be resolved in order 355 * for this plugin to be invoked at server startup. This is only applicable 356 * for startup plugins, in which case it may be possible to have the plugin 357 * startup processing invoked as early as possible. If it returns 358 * {@code null} then startup processing for this plugin will be performed at 359 * the default time during startup. 360 * 361 * @return The set of startup dependencies for this plugin, or {@code null} 362 * if it is not a startup plugin, or if startup processing should be 363 * invoked at the default time during server startup. 364 */ 365 public Set<StartupDependency> getStartupDependencies() 366 { 367 return null; 368 } 369 370 371 372 /** 373 * Performs any processing which may be necessary when the server is starting. 374 * 375 * @return Information about the result of the plugin processing. 376 */ 377 public StartupPluginResult doStartup() 378 { 379 // No processing is performed by default. 380 return StartupPluginResult.SUCCESS; 381 } 382 383 384 385 /** 386 * Performs any processing which may be necessary when the server is shutting 387 * down. 388 * 389 * @param shutdownReason A message which may provide information about the 390 * reason the server is shutting down. 391 */ 392 public void doShutdown(final String shutdownReason) 393 { 394 // No processing is performed by default. 395 } 396 397 398 399 /** 400 * Performs any processing which may be necessary for the provided entry to 401 * be imported into the server. 402 * 403 * @param entry The entry to be imported. It may be altered if desired. 404 * 405 * @return Information about the result of the plugin processing. 406 */ 407 public LDIFPluginResult doLDIFImport(final UpdatableEntry entry) 408 { 409 // No processing is performed by default. 410 return LDIFPluginResult.SUCCESS; 411 } 412 413 414 415 /** 416 * Performs any processing which may be necessary for the provided entry to 417 * be exported from the server. 418 * 419 * @param entry The entry to be exported. It may be altered if desired. 420 * 421 * @return Information about the result of the plugin processing. 422 */ 423 public LDIFPluginResult doLDIFExport(final UpdatableEntry entry) 424 { 425 // No processing is performed by default. 426 return LDIFPluginResult.SUCCESS; 427 } 428 429 430 431 /** 432 * Performs any processing which may be necessary when the server has accepted 433 * a new client connection. 434 * 435 * @param clientContext Information about the client connection that has 436 * been established. 437 * 438 * @return Information about the result of the plugin processing. 439 */ 440 public PostConnectPluginResult doPostConnect( 441 final ClientContext clientContext) 442 { 443 // No processing is performed by default. 444 return PostConnectPluginResult.SUCCESS; 445 } 446 447 448 449 /** 450 * Performs any processing which may be necessary when the server has 451 * terminated a client connection. 452 * 453 * @param clientContext Information about the client connection that has 454 * been established. 455 * @param disconnectReason A general reason for the disconnect. 456 * @param message A message which may provide additional 457 * information about the disconnect. It may be 458 * {@code null} if none is available. 459 * 460 * @return Information about the result of the plugin processing. 461 */ 462 public PostDisconnectPluginResult doPostDisconnect( 463 final ClientContext clientContext, 464 final DisconnectReason disconnectReason, final String message) 465 { 466 // No processing is performed by default. 467 return PostDisconnectPluginResult.SUCCESS; 468 } 469 470 471 472 /** 473 * Performs any processing which may be necessary before the server starts 474 * processing for an abandon request. 475 * 476 * @param operationContext The context for the abandon operation. 477 * @param request The abandon request to be processed. It may be 478 * altered if desired. 479 * 480 * @return Information about the result of the plugin processing. 481 */ 482 public PreParsePluginResult doPreParse( 483 final ActiveOperationContext operationContext, 484 final UpdatableAbandonRequest request) 485 { 486 // No processing is performed by default. 487 return PreParsePluginResult.SUCCESS; 488 } 489 490 491 492 /** 493 * Performs any processing which may be necessary before the server starts 494 * processing for an add request. This will be invoked only for add 495 * operations requested directly by clients, but not for add operations 496 * received from another server via replication. 497 * 498 * @param operationContext The context for the add operation. 499 * @param request The add request to be processed. It may be 500 * altered if desired. 501 * @param result The result that will be returned to the client if 502 * the plugin result indicates that processing on 503 * the operation should be interrupted. It may be 504 * altered if desired. 505 * 506 * @return Information about the result of the plugin processing. 507 */ 508 public PreParsePluginResult doPreParse( 509 final ActiveOperationContext operationContext, 510 final UpdatableAddRequest request, 511 final UpdatableAddResult result) 512 { 513 // No processing is performed by default. 514 return PreParsePluginResult.SUCCESS; 515 } 516 517 518 519 /** 520 * Performs any processing which may be necessary before the server actually 521 * attempts to add an entry to the appropriate backend. This will be invoked 522 * only for add operations requested directly by clients, but not for add 523 * operations received from another server via replication. 524 * 525 * @param operationContext The context for the add operation. 526 * @param request The add request to be processed. 527 * @param result The result that will be returned to the client if 528 * the plugin result indicates that processing on 529 * the operation should be interrupted. It may be 530 * altered if desired. 531 * 532 * @return Information about the result of the plugin processing. 533 */ 534 public PreOperationPluginResult doPreOperation( 535 final ActiveOperationContext operationContext, 536 final AddRequest request, final UpdatableAddResult result) 537 { 538 // No processing is performed by default. 539 return PreOperationPluginResult.SUCCESS; 540 } 541 542 543 544 /** 545 * Performs any processing which may be necessary before the server sends a 546 * response for an add operation. This will be invoked only for add 547 * operations requested directly by clients, but not for add operations 548 * received from another server via replication. 549 * 550 * @param operationContext The context for the add operation. 551 * @param request The add request that was processed. 552 * @param result The result to be returned to the client. It may 553 * be altered if desired. 554 * 555 * @return Information about the result of the plugin processing. 556 */ 557 public PostOperationPluginResult doPostOperation( 558 final ActiveOperationContext operationContext, 559 final AddRequest request, final UpdatableAddResult result) 560 { 561 // No processing is performed by default. 562 return PostOperationPluginResult.SUCCESS; 563 } 564 565 566 567 /** 568 * Performs any processing which may be necessary after all other processing 569 * has been completed for an add operation and the response has been sent to 570 * the client. This will be invoked only for add operations requested 571 * directly by clients, but not for add operations received from another 572 * server via replication. 573 * 574 * @param operationContext The context for the add operation. 575 * @param request The add request that was processed. 576 * @param result The result that was returned to the client. 577 * 578 * @return Information about the result of the plugin processing. 579 */ 580 public PostResponsePluginResult doPostResponse( 581 final CompletedOperationContext operationContext, 582 final AddRequest request, final AddResult result) 583 { 584 // No processing is performed by default. 585 return PostResponsePluginResult.SUCCESS; 586 } 587 588 589 590 /** 591 * Performs any processing which may be necessary after all other processing 592 * has been completed for an add operation which has been received from 593 * another server via replication. 594 * 595 * @param operationContext The context for the add operation. 596 * @param request The add request that was processed. 597 * @param result The result that was returned to the client. 598 */ 599 public void doPostReplication( 600 final CompletedOperationContext operationContext, 601 final AddRequest request, final AddResult result) 602 { 603 // No processing is performed by default. 604 } 605 606 607 608 /** 609 * Performs any processing which may be necessary before the server starts 610 * processing for a simple bind request. 611 * 612 * @param operationContext The context for the bind operation. 613 * @param request The bind request to be processed. It may be 614 * altered if desired. 615 * @param result The result that will be returned to the client if 616 * the plugin result indicates that processing on 617 * the operation should be interrupted. It may be 618 * altered if desired. 619 * 620 * @return Information about the result of the plugin processing. 621 */ 622 public PreParsePluginResult doPreParse( 623 final ActiveOperationContext operationContext, 624 final UpdatableSimpleBindRequest request, 625 final UpdatableBindResult result) 626 { 627 // No processing is performed by default. 628 return PreParsePluginResult.SUCCESS; 629 } 630 631 632 633 /** 634 * Performs any processing which may be necessary before the server actually 635 * attempts to perform the authentication for a simple bind request. 636 * 637 * @param operationContext The context for the bind operation. 638 * @param request The bind request to be processed. 639 * @param result The result that will be returned to the client if 640 * the plugin result indicates that processing on 641 * the operation should be interrupted. It may be 642 * altered if desired. 643 * 644 * @return Information about the result of the plugin processing. 645 */ 646 public PreOperationPluginResult doPreOperation( 647 final ActiveOperationContext operationContext, 648 final SimpleBindRequest request, 649 final UpdatableBindResult result) 650 { 651 // No processing is performed by default. 652 return PreOperationPluginResult.SUCCESS; 653 } 654 655 656 657 /** 658 * Performs any processing which may be necessary before the server sends a 659 * response for a simple bind operation. 660 * 661 * @param operationContext The context for the bind operation. 662 * @param request The bind request that was processed. 663 * @param result The result to be returned to the client. It may 664 * be altered if desired. 665 * 666 * @return Information about the result of the plugin processing. 667 */ 668 public PostOperationPluginResult doPostOperation( 669 final ActiveOperationContext operationContext, 670 final SimpleBindRequest request, final UpdatableBindResult result) 671 { 672 // No processing is performed by default. 673 return PostOperationPluginResult.SUCCESS; 674 } 675 676 677 678 /** 679 * Performs any processing which may be necessary after all other processing 680 * has been completed for a simple bind operation and the response has been 681 * sent to the client. 682 * 683 * @param operationContext The context for the bind operation. 684 * @param request The bind request that was processed. 685 * @param result The result that was returned to the client. 686 * 687 * @return Information about the result of the plugin processing. 688 */ 689 public PostResponsePluginResult doPostResponse( 690 final CompletedOperationContext operationContext, 691 final SimpleBindRequest request, final BindResult result) 692 { 693 // No processing is performed by default. 694 return PostResponsePluginResult.SUCCESS; 695 } 696 697 698 699 /** 700 * Performs any processing which may be necessary before the server starts 701 * processing for a SASL bind request. 702 * 703 * @param operationContext The context for the bind operation. 704 * @param request The bind request to be processed. It may be 705 * altered if desired. 706 * @param result The result that will be returned to the client if 707 * the plugin result indicates that processing on 708 * the operation should be interrupted. It may be 709 * altered if desired. 710 * 711 * @return Information about the result of the plugin processing. 712 */ 713 public PreParsePluginResult doPreParse( 714 final ActiveOperationContext operationContext, 715 final UpdatableSASLBindRequest request, 716 final UpdatableBindResult result) 717 { 718 // No processing is performed by default. 719 return PreParsePluginResult.SUCCESS; 720 } 721 722 723 724 /** 725 * Performs any processing which may be necessary before the server actually 726 * attempts to perform the authentication for a SASL bind request. 727 * 728 * @param operationContext The context for the bind operation. 729 * @param request The bind request to be processed. 730 * @param result The result that will be returned to the client if 731 * the plugin result indicates that processing on 732 * the operation should be interrupted. It may be 733 * altered if desired. 734 * 735 * @return Information about the result of the plugin processing. 736 */ 737 public PreOperationPluginResult doPreOperation( 738 final ActiveOperationContext operationContext, 739 final SASLBindRequest request, final UpdatableBindResult result) 740 { 741 // No processing is performed by default. 742 return PreOperationPluginResult.SUCCESS; 743 } 744 745 746 747 /** 748 * Performs any processing which may be necessary before the server sends a 749 * response for a SASL bind operation. 750 * 751 * @param operationContext The context for the bind operation. 752 * @param request The bind request that was processed. 753 * @param result The result to be returned to the client. It may 754 * be altered if desired. 755 * 756 * @return Information about the result of the plugin processing. 757 */ 758 public PostOperationPluginResult doPostOperation( 759 final ActiveOperationContext operationContext, 760 final SASLBindRequest request, final UpdatableBindResult result) 761 { 762 // No processing is performed by default. 763 return PostOperationPluginResult.SUCCESS; 764 } 765 766 767 768 /** 769 * Performs any processing which may be necessary after all other processing 770 * has been completed for a SASL bind operation and the response has been 771 * sent to the client. 772 * 773 * @param operationContext The context for the bind operation. 774 * @param request The bind request that was processed. 775 * @param result The result that was returned to the client. 776 * 777 * @return Information about the result of the plugin processing. 778 */ 779 public PostResponsePluginResult doPostResponse( 780 final CompletedOperationContext operationContext, 781 final SASLBindRequest request, final BindResult result) 782 { 783 // No processing is performed by default. 784 return PostResponsePluginResult.SUCCESS; 785 } 786 787 788 789 /** 790 * Performs any processing which may be necessary before the server starts 791 * processing for a compare request. 792 * 793 * @param operationContext The context for the compare operation. 794 * @param request The compare request to be processed. It may be 795 * altered if desired. 796 * @param result The result that will be returned to the client if 797 * the plugin result indicates that processing on 798 * the operation should be interrupted. It may be 799 * altered if desired. 800 * 801 * @return Information about the result of the plugin processing. 802 */ 803 public PreParsePluginResult doPreParse( 804 final ActiveOperationContext operationContext, 805 final UpdatableCompareRequest request, 806 final UpdatableCompareResult result) 807 { 808 // No processing is performed by default. 809 return PreParsePluginResult.SUCCESS; 810 } 811 812 813 814 /** 815 * Performs any processing which may be necessary before the server actually 816 * attempts to perform the core processing for the compare. 817 * 818 * @param operationContext The context for the compare operation. 819 * @param request The compare request to be processed. 820 * @param result The result that will be returned to the client if 821 * the plugin result indicates that processing on 822 * the operation should be interrupted. It may be 823 * altered if desired. 824 * @param entry The entry targeted by the compare operation. 825 * 826 * @return Information about the result of the plugin processing. 827 */ 828 public PreOperationPluginResult doPreOperation( 829 final ActiveOperationContext operationContext, 830 final CompareRequest request, final UpdatableCompareResult result, 831 final Entry entry) 832 { 833 // No processing is performed by default. 834 return PreOperationPluginResult.SUCCESS; 835 } 836 837 838 839 /** 840 * Performs any processing which may be necessary before the server sends a 841 * response for a compare operation. 842 * 843 * @param operationContext The context for the compare operation. 844 * @param request The compare request that was processed. 845 * @param result The result to be returned to the client. It may 846 * be altered if desired. 847 * @param entry The entry targeted by the compare operation, if 848 * it exists. 849 * 850 * @return Information about the result of the plugin processing. 851 */ 852 public PostOperationPluginResult doPostOperation( 853 final ActiveOperationContext operationContext, 854 final CompareRequest request, final UpdatableCompareResult result, 855 final Entry entry) 856 { 857 // No processing is performed by default. 858 return PostOperationPluginResult.SUCCESS; 859 } 860 861 862 863 /** 864 * Performs any processing which may be necessary after all other processing 865 * has been completed for a compare operation and the response has been sent 866 * to the client. 867 * 868 * @param operationContext The context for the compare operation. 869 * @param request The compare request that was processed. 870 * @param result The result that was returned to the client. 871 * 872 * @return Information about the result of the plugin processing. 873 */ 874 public PostResponsePluginResult doPostResponse( 875 final CompletedOperationContext operationContext, 876 final CompareRequest request, final CompareResult result) 877 { 878 // No processing is performed by default. 879 return PostResponsePluginResult.SUCCESS; 880 } 881 882 883 884 /** 885 * Performs any processing which may be necessary before the server starts 886 * processing for a delete request. This will be invoked only for delete 887 * operations requested directly by clients, but not for delete operations 888 * received from another server via replication. 889 * 890 * @param operationContext The context for the delete operation. 891 * @param request The delete request to be processed. It may be 892 * altered if desired. 893 * @param result The result that will be returned to the client if 894 * the plugin result indicates that processing on 895 * the operation should be interrupted. It may be 896 * altered if desired. 897 * 898 * @return Information about the result of the plugin processing. 899 */ 900 public PreParsePluginResult doPreParse( 901 final ActiveOperationContext operationContext, 902 final UpdatableDeleteRequest request, 903 final UpdatableDeleteResult result) 904 { 905 // No processing is performed by default. 906 return PreParsePluginResult.SUCCESS; 907 } 908 909 910 911 /** 912 * Performs any processing which may be necessary before the server actually 913 * attempts to remove the entry from the server. This will be invoked only 914 * for delete operations requested directly by clients, but not for delete 915 * operations received from another server via replication. 916 917 * 918 * @param operationContext The context for the delete operation. 919 * @param request The delete request to be processed. 920 * @param result The result that will be returned to the client if 921 * the plugin result indicates that processing on 922 * the operation should be interrupted. It may be 923 * altered if desired. 924 * @param entry The entry targeted by the delete operation. 925 * 926 * @return Information about the result of the plugin processing. 927 */ 928 public PreOperationPluginResult doPreOperation( 929 final ActiveOperationContext operationContext, 930 final DeleteRequest request, final UpdatableDeleteResult result, 931 final Entry entry) 932 { 933 // No processing is performed by default. 934 return PreOperationPluginResult.SUCCESS; 935 } 936 937 938 939 /** 940 * Performs any processing which may be necessary before the server sends a 941 * response for a delete operation. This will be invoked only for delete 942 * operations requested directly by clients, but not for delete operations 943 * received from another server via replication. 944 945 * 946 * @param operationContext The context for the delete operation. 947 * @param request The delete request that was processed. 948 * @param result The result to be returned to the client. It may 949 * be altered if desired. 950 * @param entry The entry targeted by the delete operation, if 951 * it exists. 952 * 953 * @return Information about the result of the plugin processing. 954 */ 955 public PostOperationPluginResult doPostOperation( 956 final ActiveOperationContext operationContext, 957 final DeleteRequest request, final UpdatableDeleteResult result, 958 final Entry entry) 959 { 960 // No processing is performed by default. 961 return PostOperationPluginResult.SUCCESS; 962 } 963 964 965 966 /** 967 * Performs any processing which may be necessary after all other processing 968 * has been completed for a delete operation and the response has been sent 969 * to the client. This will be invoked only for delete operations requested 970 * directly by clients, but not for delete operations received from another 971 * server via replication. 972 973 * 974 * @param operationContext The context for the delete operation. 975 * @param request The delete request that was processed. 976 * @param result The result that was returned to the client. 977 * 978 * @return Information about the result of the plugin processing. 979 */ 980 public PostResponsePluginResult doPostResponse( 981 final CompletedOperationContext operationContext, 982 final DeleteRequest request, final DeleteResult result) 983 { 984 // No processing is performed by default. 985 return PostResponsePluginResult.SUCCESS; 986 } 987 988 989 990 /** 991 * Performs any processing which may be necessary after all other processing 992 * has been completed for a delete operation which has been received from 993 * another server via replication. 994 * 995 * @param operationContext The context for the delete operation. 996 * @param request The delete request that was processed. 997 * @param result The result that was returned to the client. 998 */ 999 public void doPostReplication( 1000 final CompletedOperationContext operationContext, 1001 final DeleteRequest request, final DeleteResult result) 1002 { 1003 // No processing is performed by default. 1004 } 1005 1006 1007 1008 /** 1009 * Performs any processing which may be necessary before the server starts 1010 * processing for an extended request. 1011 * 1012 * @param operationContext The context for the extended operation. 1013 * @param request The extended request to be processed. It may be 1014 * altered if desired. 1015 * @param result The result that will be returned to the client if 1016 * the plugin result indicates that processing on 1017 * the operation should be interrupted. It may be 1018 * altered if desired. 1019 * 1020 * @return Information about the result of the plugin processing. 1021 */ 1022 public PreParsePluginResult doPreParse( 1023 final ActiveOperationContext operationContext, 1024 final UpdatableExtendedRequest request, 1025 final UpdatableExtendedResult result) 1026 { 1027 // No processing is performed by default. 1028 return PreParsePluginResult.SUCCESS; 1029 } 1030 1031 1032 1033 /** 1034 * Performs any processing which may be necessary before the server actually 1035 * attempts to perform the core processing for the extended operation. 1036 * 1037 * @param operationContext The context for the extended operation. 1038 * @param request The extended request to be processed. 1039 * @param result The result that will be returned to the client if 1040 * the plugin result indicates that processing on 1041 * the operation should be interrupted. It may be 1042 * altered if desired. 1043 * 1044 * @return Information about the result of the plugin processing. 1045 */ 1046 public PreOperationPluginResult doPreOperation( 1047 final ActiveOperationContext operationContext, 1048 final ExtendedRequest request, 1049 final UpdatableExtendedResult result) 1050 { 1051 // No processing is performed by default. 1052 return PreOperationPluginResult.SUCCESS; 1053 } 1054 1055 1056 1057 /** 1058 * Performs any processing which may be necessary before the server sends a 1059 * response for an extended operation. 1060 * 1061 * @param operationContext The context for the extended operation. 1062 * @param request The extended request that was processed. 1063 * @param result The result to be returned to the client. It may 1064 * be altered if desired. 1065 * 1066 * @return Information about the result of the plugin processing. 1067 */ 1068 public PostOperationPluginResult doPostOperation( 1069 final ActiveOperationContext operationContext, 1070 final ExtendedRequest request, 1071 final UpdatableExtendedResult result) 1072 { 1073 // No processing is performed by default. 1074 return PostOperationPluginResult.SUCCESS; 1075 } 1076 1077 1078 1079 /** 1080 * Performs any processing which may be necessary after all other processing 1081 * has been completed for an extended operation and the response has been sent 1082 * to the client. 1083 * 1084 * @param operationContext The context for the extended operation. 1085 * @param request The extended request that was processed. 1086 * @param result The result that was returned to the client. 1087 * 1088 * @return Information about the result of the plugin processing. 1089 */ 1090 public PostResponsePluginResult doPostResponse( 1091 final CompletedOperationContext operationContext, 1092 final ExtendedRequest request, final ExtendedResult result) 1093 { 1094 // No processing is performed by default. 1095 return PostResponsePluginResult.SUCCESS; 1096 } 1097 1098 1099 1100 /** 1101 * Performs any processing which may be necessary before the server starts 1102 * processing for a modify request. This will be invoked only for modify 1103 * operations requested directly by clients, but not for modify operations 1104 * received from another server via replication. 1105 * 1106 * @param operationContext The context for the modify operation. 1107 * @param request The modify request to be processed. It may be 1108 * altered if desired. 1109 * @param result The result that will be returned to the client if 1110 * the plugin result indicates that processing on 1111 * the operation should be interrupted. It may be 1112 * altered if desired. 1113 * 1114 * @return Information about the result of the plugin processing. 1115 */ 1116 public PreParsePluginResult doPreParse( 1117 final ActiveOperationContext operationContext, 1118 final UpdatableModifyRequest request, 1119 final UpdatableModifyResult result) 1120 { 1121 // No processing is performed by default. 1122 return PreParsePluginResult.SUCCESS; 1123 } 1124 1125 1126 1127 /** 1128 * Performs any processing which may be necessary before the server actually 1129 * attempts to update the entry in the backend. This will be invoked only for 1130 * modify operations requested directly by clients, but not for modify 1131 * operations received from another server via replication. 1132 * 1133 * @param operationContext The context for the modify operation. 1134 * @param request The modify request to be processed. 1135 * @param result The result that will be returned to the client if 1136 * the plugin result indicates that processing on 1137 * the operation should be interrupted. It may be 1138 * altered if desired. 1139 * @param oldEntry The entry as it appeared before the modifications 1140 * were applied. 1141 * @param newEntry The updated entry as it will appear after the 1142 * modifications have been applied. 1143 * 1144 * @return Information about the result of the plugin processing. 1145 */ 1146 public PreOperationPluginResult doPreOperation( 1147 final ActiveOperationContext operationContext, 1148 final ModifyRequest request, final UpdatableModifyResult result, 1149 final Entry oldEntry, final Entry newEntry) 1150 { 1151 // No processing is performed by default. 1152 return PreOperationPluginResult.SUCCESS; 1153 } 1154 1155 1156 1157 /** 1158 * Performs any processing which may be necessary before the server sends a 1159 * response for a modify operation. This will be invoked only for modify 1160 * operations requested directly by clients, but not for modify operations 1161 * received from another server via replication. 1162 * 1163 * @param operationContext The context for the modify operation. 1164 * @param request The modify request that was processed. 1165 * @param result The result to be returned to the client. It may 1166 * be altered if desired. 1167 * @param oldEntry The entry as it appeared before the modifications 1168 * were applied, if it exists. . 1169 * @param newEntry The entry as it appears after the modifications 1170 * have been applied, if it exists. . 1171 * 1172 * @return Information about the result of the plugin processing. 1173 */ 1174 public PostOperationPluginResult doPostOperation( 1175 final ActiveOperationContext operationContext, 1176 final ModifyRequest request, final UpdatableModifyResult result, 1177 final Entry oldEntry, final Entry newEntry) 1178 { 1179 // No processing is performed by default. 1180 return PostOperationPluginResult.SUCCESS; 1181 } 1182 1183 1184 1185 /** 1186 * Performs any processing which may be necessary after all other processing 1187 * has been completed for a modify operation and the response has been sent 1188 * to the client. This will be invoked only for modify operations requested 1189 * directly by clients, but not for modify operations received from another 1190 * server via replication. 1191 * 1192 * @param operationContext The context for the modify operation. 1193 * @param request The modify request that was processed. 1194 * @param result The result that was returned to the client. 1195 * 1196 * @return Information about the result of the plugin processing. 1197 */ 1198 public PostResponsePluginResult doPostResponse( 1199 final CompletedOperationContext operationContext, 1200 final ModifyRequest request, final ModifyResult result) 1201 { 1202 // No processing is performed by default. 1203 return PostResponsePluginResult.SUCCESS; 1204 } 1205 1206 1207 1208 /** 1209 * Performs any processing which may be necessary after all other processing 1210 * has been completed for a modify operation which has been received from 1211 * another server via replication. 1212 * 1213 * @param operationContext The context for the modify operation. 1214 * @param request The modify request that was processed. 1215 * @param result The result that was returned to the client. 1216 */ 1217 public void doPostReplication( 1218 final CompletedOperationContext operationContext, 1219 final ModifyRequest request, final ModifyResult result) 1220 { 1221 // No processing is performed by default. 1222 } 1223 1224 1225 1226 /** 1227 * Performs any processing which may be necessary before the server starts 1228 * processing for a modify DN request. This will be invoked only for modify 1229 * DN operations requested directly by clients, but not for modify DN 1230 * operations received from another server via replication. 1231 * 1232 * @param operationContext The context for the modify DN operation. 1233 * @param request The modify DN request to be processed. It may be 1234 * altered if desired. 1235 * @param result The result that will be returned to the client if 1236 * the plugin result indicates that processing on 1237 * the operation should be interrupted. It may be 1238 * altered if desired. 1239 * 1240 * @return Information about the result of the plugin processing. 1241 */ 1242 public PreParsePluginResult doPreParse( 1243 final ActiveOperationContext operationContext, 1244 final UpdatableModifyDNRequest request, 1245 final UpdatableModifyDNResult result) 1246 { 1247 // No processing is performed by default. 1248 return PreParsePluginResult.SUCCESS; 1249 } 1250 1251 1252 1253 /** 1254 * Performs any processing which may be necessary before the server actually 1255 * attempts to update the entry in the backend. This will be invoked only for 1256 * modify DN operations requested directly by clients, but not for modify DN 1257 * operations received from another server via replication. 1258 * 1259 * @param operationContext The context for the modify DN operation. 1260 * @param request The modify DN request to be processed. 1261 * @param result The result that will be returned to the client if 1262 * the plugin result indicates that processing on 1263 * the operation should be interrupted. It may be 1264 * altered if desired. 1265 * @param oldEntry The entry as it appeared before being renamed. 1266 * @param newEntry The updated entry as it will appear after it has 1267 * been renamed. 1268 * 1269 * @return Information about the result of the plugin processing. 1270 */ 1271 public PreOperationPluginResult doPreOperation( 1272 final ActiveOperationContext operationContext, 1273 final ModifyDNRequest request, 1274 final UpdatableModifyDNResult result, final Entry oldEntry, 1275 final Entry newEntry) 1276 { 1277 // No processing is performed by default. 1278 return PreOperationPluginResult.SUCCESS; 1279 } 1280 1281 1282 1283 /** 1284 * Performs any processing which may be necessary during the course of 1285 * renaming an entry which is subordinate to an entry targeted by a modify DN 1286 * operation. This will be invoked only for both modify DN operations 1287 * requested by clients and for modify DN operations received from another 1288 * server via replication. 1289 * 1290 * @param operationContext The context for the modify DN operation. 1291 * @param request The modify DN request being processed. 1292 * @param result The result that will be returned to the 1293 * client if the plugin result indicates that 1294 * processing on the operation should be 1295 * interrupted. It may be altered if 1296 * desired. 1297 * @param oldSubordinateEntry The subordinate entry as it appeared 1298 * before being renamed. 1299 * @param newSubordinateEntry The subordinate entry as it will appear 1300 * after being renamed. 1301 * @param additionalModifications A list of additional modifications that 1302 * should be applied to the entry as it is 1303 * renamed. This list may be altered if 1304 * desired. 1305 * 1306 * @return Information about the result of the plugin processing. 1307 */ 1308 public SubordinateModifyDNPluginResult doSubordinateModifyDN( 1309 final ActiveOperationContext operationContext, 1310 final ModifyDNRequest request, 1311 final UpdatableModifyDNResult result, 1312 final Entry oldSubordinateEntry, 1313 final Entry newSubordinateEntry, 1314 final List<Modification> additionalModifications) 1315 { 1316 // No processing is performed by default. 1317 return SubordinateModifyDNPluginResult.SUCCESS; 1318 } 1319 1320 1321 1322 /** 1323 * Performs any processing which may be necessary before the server sends a 1324 * response for a modify DN operation. This will be invoked only for modify 1325 * DN operations requested directly by clients, but not for modify DN 1326 * operations received from another server via replication. 1327 * 1328 * @param operationContext The context for the modify DN operation. 1329 * @param request The modify DN request that was processed. 1330 * @param result The result to be returned to the client. It may 1331 * be altered if desired. 1332 * @param oldEntry The entry as it appeared before it was renamed, 1333 * if it exists. 1334 * @param newEntry The entry as it appears after it was renamed, if 1335 * it exists. . 1336 * 1337 * @return Information about the result of the plugin processing. 1338 */ 1339 public PostOperationPluginResult doPostOperation( 1340 final ActiveOperationContext operationContext, 1341 final ModifyDNRequest request, 1342 final UpdatableModifyDNResult result, final Entry oldEntry, 1343 final Entry newEntry) 1344 { 1345 // No processing is performed by default. 1346 return PostOperationPluginResult.SUCCESS; 1347 } 1348 1349 1350 1351 /** 1352 * Performs any processing which may be necessary after all other processing 1353 * has been completed for a modify DN operation and the response has been 1354 * sent to the client. This will be invoked only for modify DN operations 1355 * requested directly by clients, but not for modify DN operations received 1356 * from another server via replication. 1357 * 1358 * @param operationContext The context for the modify DN operation. 1359 * @param request The modify DN request that was processed. 1360 * @param result The result that was returned to the client. 1361 * 1362 * @return Information about the result of the plugin processing. 1363 */ 1364 public PostResponsePluginResult doPostResponse( 1365 final CompletedOperationContext operationContext, 1366 final ModifyDNRequest request, final ModifyDNResult result) 1367 { 1368 // No processing is performed by default. 1369 return PostResponsePluginResult.SUCCESS; 1370 } 1371 1372 1373 1374 /** 1375 * Performs any processing which may be necessary after all other processing 1376 * has been completed for a modify DN operation which has been received from 1377 * another server via replication. 1378 * 1379 * @param operationContext The context for the modify DN operation. 1380 * @param request The modify DN request that was processed. 1381 * @param result The result that was returned to the client. 1382 */ 1383 public void doPostReplication( 1384 final CompletedOperationContext operationContext, 1385 final ModifyDNRequest request, final ModifyDNResult result) 1386 { 1387 // No processing is performed by default. 1388 } 1389 1390 1391 1392 /** 1393 * Performs any processing which may be necessary before the server starts 1394 * processing for a search request. 1395 * 1396 * @param operationContext The context for the search operation. 1397 * @param request The search request to be processed. It may be 1398 * altered if desired. 1399 * @param result The result that will be returned to the client if 1400 * the plugin result indicates that processing on 1401 * the operation should be interrupted. It may be 1402 * altered if desired. 1403 * 1404 * @return Information about the result of the plugin processing. 1405 */ 1406 public PreParsePluginResult doPreParse( 1407 final ActiveSearchOperationContext operationContext, 1408 final UpdatableSearchRequest request, 1409 final UpdatableSearchResult result) 1410 { 1411 // No processing is performed by default. 1412 return PreParsePluginResult.SUCCESS; 1413 } 1414 1415 1416 1417 /** 1418 * Performs any processing which may be necessary before the server actually 1419 * attempts to process the search in the backend. 1420 * 1421 * @param operationContext The context for the search operation. 1422 * @param request The search request to be processed. 1423 * @param result The result that will be returned to the client if 1424 * the plugin result indicates that processing on 1425 * the operation should be interrupted. It may be 1426 * altered if desired. 1427 * 1428 * @return Information about the result of the plugin processing. 1429 */ 1430 public PreOperationPluginResult doPreOperation( 1431 final ActiveSearchOperationContext operationContext, 1432 final SearchRequest request, final UpdatableSearchResult result) 1433 { 1434 // No processing is performed by default. 1435 return PreOperationPluginResult.SUCCESS; 1436 } 1437 1438 1439 1440 /** 1441 * Performs any processing which may be necessary before the server sends a 1442 * search result entry to the client. 1443 * 1444 * @param operationContext The context for the search operation. 1445 * @param request The search request being processed. 1446 * @param result The result that will be returned to the client if 1447 * the plugin result indicates that processing on 1448 * the operation should be interrupted. It may be 1449 * altered if desired. 1450 * @param entry The entry to be returned to the client. It may 1451 * be altered if desired. 1452 * @param controls The set of controls to be included with the 1453 * entry. It may be altered if desired. 1454 * 1455 * @return Information about the result of the plugin processing. 1456 */ 1457 public SearchEntryPluginResult doSearchEntry( 1458 final ActiveSearchOperationContext operationContext, 1459 final SearchRequest request, final UpdatableSearchResult result, 1460 final UpdatableEntry entry, final List<Control> controls) 1461 { 1462 // No processing is performed by default. 1463 return SearchEntryPluginResult.SUCCESS; 1464 } 1465 1466 1467 1468 /** 1469 * Performs any processing which may be necessary before the server sends a 1470 * search result reference to the client. 1471 * 1472 * @param operationContext The context for the search operation. 1473 * @param request The search request being processed. 1474 * @param result The result that will be returned to the client if 1475 * the plugin result indicates that processing on 1476 * the operation should be interrupted. It may be 1477 * altered if desired. 1478 * @param referralURLs The set of referral URLs to be returned to the 1479 * client. It may be altered if desired. 1480 * @param controls The set of controls to be included with the 1481 * reference. It may be altered if desired. 1482 * 1483 * @return Information about the result of the plugin processing. 1484 */ 1485 public SearchReferencePluginResult doSearchReference( 1486 final ActiveSearchOperationContext operationContext, 1487 final SearchRequest request, final UpdatableSearchResult result, 1488 final List<String> referralURLs, final List<Control> controls) 1489 { 1490 // No processing is performed by default. 1491 return SearchReferencePluginResult.SUCCESS; 1492 } 1493 1494 1495 1496 /** 1497 * Performs any processing which may be necessary before the server sends a 1498 * response for a search operation. 1499 * 1500 * @param operationContext The context for the search operation. 1501 * @param request The search request that was processed. 1502 * @param result The result to be returned to the client. It may 1503 * be altered if desired. 1504 * 1505 * @return Information about the result of the plugin processing. 1506 */ 1507 public PostOperationPluginResult doPostOperation( 1508 final ActiveSearchOperationContext operationContext, 1509 final SearchRequest request, final UpdatableSearchResult result) 1510 { 1511 // No processing is performed by default. 1512 return PostOperationPluginResult.SUCCESS; 1513 } 1514 1515 1516 1517 /** 1518 * Performs any processing which may be necessary after all other processing 1519 * has been completed for a search operation and the response has been sent to 1520 * the client. 1521 * 1522 * @param operationContext The context for the search operation. 1523 * @param request The search request that was processed. 1524 * @param result The result that was returned to the client. 1525 * 1526 * @return Information about the result of the plugin processing. 1527 */ 1528 public PostResponsePluginResult doPostResponse( 1529 final CompletedSearchOperationContext operationContext, 1530 final SearchRequest request, final SearchResult result) 1531 { 1532 // No processing is performed by default. 1533 return PostResponsePluginResult.SUCCESS; 1534 } 1535 1536 1537 1538 /** 1539 * Performs any processing which may be necessary before the server starts 1540 * processing for an unbind request. 1541 * 1542 * @param operationContext The context for the unbind operation. 1543 * @param request The unbind request to be processed. It may be 1544 * altered if desired. 1545 * 1546 * @return Information about the result of the plugin processing. 1547 */ 1548 public PreParsePluginResult doPreParse( 1549 final ActiveOperationContext operationContext, 1550 final UpdatableUnbindRequest request) 1551 { 1552 // No processing is performed by default. 1553 return PreParsePluginResult.SUCCESS; 1554 } 1555 1556 1557 1558 /** 1559 * Performs any processing which may be necessary before the server sends an 1560 * intermediate response to the client. 1561 * 1562 * @param operationContext The context for the associated operation. 1563 * @param result The result that will be returned to the 1564 * client if the plugin result indicates that 1565 * processing on the operation should be 1566 * interrupted. It may be altered if desired. 1567 * @param intermediateResponse The intermediate response to be returned to 1568 * the client. It may be altered if desired. 1569 * 1570 * @return Information about the result of the plugin processing. 1571 */ 1572 public IntermediateResponsePluginResult doIntermediateResponse( 1573 final ActiveOperationContext operationContext, 1574 final UpdatableGenericResult result, 1575 final IntermediateResponse intermediateResponse) 1576 { 1577 // No processing is performed by default. 1578 return IntermediateResponsePluginResult.SUCCESS; 1579 } 1580 1581 1582 1583 /** 1584 * {@inheritDoc} 1585 */ 1586 public Map<List<String>,String> getExamplesArgumentSets() 1587 { 1588 return Collections.emptyMap(); 1589 } 1590 }