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