/*
* CDDL HEADER START
*
* The contents of this file are subject to the terms of the
* Common Development and Distribution License, Version 1.0 only
* (the "License"). You may not use this file except in compliance
* with the License.
*
* You can obtain a copy of the license at
* docs/licenses/cddl.txt
* or http://www.opensource.org/licenses/cddl1.php.
* See the License for the specific language governing permissions
* and limitations under the License.
*
* When distributing Covered Code, include this CDDL HEADER in each
* file and include the License file at
* docs/licenses/cddl.txt. If applicable,
* add the following below this CDDL HEADER, with the fields enclosed
* by brackets "[]" replaced with your own identifying information:
* Portions Copyright [yyyy] [name of copyright owner]
*
* CDDL HEADER END
*
*
* Copyright 2011-2016 UnboundID Corp.
*/
package com.unboundid.directory.sdk.examples;
import com.unboundid.directory.sdk.common.api.ManageExtensionPlugin;
import com.unboundid.directory.sdk.common.types.PostManageExtensionPluginResult;
import com.unboundid.directory.sdk.common.types.PreManageExtensionPluginResult;
import com.unboundid.directory.sdk.common.types.UpdateExtensionDetails;
import java.io.File;
import java.util.Collections;
/**
* This class provides a simple example of manage extension plugin that will
* abort an update if the installed version is known to be incompatible. It will
* also display a warning message prompting the user to finish the update
* manually by migrating custom configuration changes.
*/
public class ExampleManageExtensionPlugin
extends ManageExtensionPlugin
{
// Whether a config file is found that will need migration.
private boolean configFileFound;
/**
* Retrieves a human-readable description for this extension. Each element
* of the array that is returned will be considered a separate paragraph in
* generated documentation.
*
* @return A human-readable description for this extension, or {@code null}
* or an empty array if no description should be available.
*/
public String[] getExtensionDescription() {
return new String[]
{
"This manage extension plugin serves an example that may be used to " +
"demonstrate the process for creating a third-party manage " +
"extension plugin. It will abort an update if the installed " +
"version is known to be incompatible. It will also display a " +
"warning message prompting the user to finish the update manually " +
"by migrating custom configuration changes."
};
}
/**
* Retrieves a human-readable name for this extension.
*
* @return A human-readable name for this extension.
*/
public String getExtensionName() {
return "Example Manage Extension Plugin";
}
/**
* Invoked when an extension is updated after all files are update to the
* server installation but before restarting the server.
*
* @param details The state of the update after all files are updated.
* @return Whether the server should be restarted after the update if
* previous started.
*/
@Override
public PostManageExtensionPluginResult postUpdate(
final UpdateExtensionDetails details) {
if(configFileFound)
{
// This demonstrates a "flag day" use case of an manage extension plugin
// where manual action is needed by the end user after the update before
// the server may be restarted.
return new PostManageExtensionPluginResult(false,
Collections.singletonList(
"Version " + details.getExtensionBundle().getVersion() +
"introduced changes to the configuration that needs to " +
"be migrated manually before starting the server. Please " +
"refer to the documentation " +
details.getInstalledExtensionBundle().getDocumentationDir() +
" for more details"));
}
return PostManageExtensionPluginResult.SUCCESS;
}
/**
* Invoked when an extension is updated before shutting down the server and
* any files are updated to the server installation.
*
* @param details The state of the update before any files are updated.
* @return Whether to continue the update process.
*/
@Override
public PreManageExtensionPluginResult preUpdate(
final UpdateExtensionDetails details) {
String installedVersion =
details.getInstalledExtensionBundle().getVersion();
if(installedVersion.equals("1.2"))
{
// This demonstrates a "flag day" use case of an manage extension plugin.
return new PreManageExtensionPluginResult(false,
Collections.singletonList("Version 1.2 may not be updated due to " +
"known incompatibilities"));
}
else if(installedVersion.equals("1.3"))
{
File configFile = new File(
details.getInstalledExtensionBundle().getConfigDir(),
"resources.xml");
configFileFound = configFile.exists();
}
return PreManageExtensionPluginResult.SUCCESS;
}
}
|