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