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 2011-2013 UnboundID Corp.
026 */
027 package com.unboundid.directory.sdk.common.api;
028
029 import com.unboundid.directory.sdk.broker.internal.IdentityBrokerExtension;
030 import com.unboundid.directory.sdk.common.internal.UnboundIDExtension;
031 import com.unboundid.directory.sdk.common.types.InstallExtensionDetails;
032 import com.unboundid.directory.sdk.common.types.PostManageExtensionPluginResult;
033 import com.unboundid.directory.sdk.common.types.PreManageExtensionPluginResult;
034 import com.unboundid.directory.sdk.common.types.UpdateExtensionDetails;
035 import com.unboundid.directory.sdk.ds.internal.DirectoryServerExtension;
036 import com.unboundid.directory.sdk.metrics.internal.MetricsEngineExtension;
037 import com.unboundid.directory.sdk.proxy.internal.DirectoryProxyServerExtension;
038 import com.unboundid.directory.sdk.sync.internal.SynchronizationServerExtension;
039 import com.unboundid.util.Extensible;
040 import com.unboundid.util.ThreadSafety;
041 import com.unboundid.util.ThreadSafetyLevel;
042
043 /**
044 * This class defines an API that may be implemented by extensions which will
045 * be managed by the manage-extension tool. This API allows extensions to
046 * perform custom operations during the install/update process.
047 * <BR><BR>
048 * This plugin will be invoked during the following phases:
049 * <UL>
050 * <LI>before install -- Invoked when an extension is first installed before
051 * any files are copied to the server installation.</LI>
052 * <LI>after install -- Invoked when an extension is first installed after
053 * all files are copied to the server installation.</LI>
054 * <LI>before update -- Invoked when an extension is updated before any files
055 * are updated.</LI>
056 * <LI>after update -- Invoked when an extension is updated after all files
057 * are updated.</LI>
058 * </UL>
059 */
060 @Extensible()
061 @DirectoryServerExtension()
062 @DirectoryProxyServerExtension(appliesToLocalContent=true,
063 appliesToRemoteContent=true)
064 @SynchronizationServerExtension(appliesToLocalContent=true,
065 appliesToSynchronizedContent=false)
066 @MetricsEngineExtension()
067 @IdentityBrokerExtension()
068 @ThreadSafety(level= ThreadSafetyLevel.INTERFACE_THREADSAFE)
069 public abstract class ManageExtensionPlugin implements UnboundIDExtension
070 {
071 /**
072 * Invoked when an extension is first installed before shutting down
073 * the server and any files are copied to the server installation.
074 *
075 * @param details The state of the install before any files are copied.
076 * @return Whether to continue the installation process.
077 */
078 public PreManageExtensionPluginResult preInstall(
079 final InstallExtensionDetails details)
080 {
081 // No default implementation
082 return PreManageExtensionPluginResult.SUCCESS;
083 }
084
085 /**
086 * Invoked when an extension is first installed after all files are copied
087 * to the server installation but before restarting the server.
088 *
089 * @param details The state of the install after all files are copied.
090 * @return Whether the server should be restarted after the install if
091 * previous started.
092 */
093 public PostManageExtensionPluginResult postInstall(
094 final InstallExtensionDetails details)
095 {
096 // No default implementation
097 return PostManageExtensionPluginResult.SUCCESS;
098 }
099
100 /**
101 * Invoked when an extension is updated before shutting down the server and
102 * any files are updated to the server installation.
103 *
104 * @param details The state of the update before any files are updated.
105 * @return Whether to continue the update process.
106 */
107 public PreManageExtensionPluginResult preUpdate(
108 final UpdateExtensionDetails details)
109 {
110 // No default implementation
111 return PreManageExtensionPluginResult.SUCCESS;
112 }
113
114 /**
115 * Invoked when an extension is updated after all files are update to the
116 * server installation but before restarting the server.
117 *
118 * @param details The state of the update after all files are updated.
119 * @return Whether the server should be restarted after the update if
120 * previous started.
121 */
122 public PostManageExtensionPluginResult postUpdate(
123 final UpdateExtensionDetails details)
124 {
125 // No default implementation
126 return PostManageExtensionPluginResult.SUCCESS;
127 }
128 }