From 3e2a1649d693d7b6d09d238c082dd5aae542775f Mon Sep 17 00:00:00 2001
From: Gaetan Boismal <gaetan.boismal@forgerock.com>
Date: Thu, 23 Jun 2016 12:30:52 +0000
Subject: [PATCH] OPENDJ-2941 Fix extension listing in tools
---
opendj-config/src/main/java/org/forgerock/opendj/config/ConfigurationFramework.java | 251 +++++++++++++++++++++++++------------------------
1 files changed, 128 insertions(+), 123 deletions(-)
diff --git a/opendj-config/src/main/java/org/forgerock/opendj/config/ConfigurationFramework.java b/opendj-config/src/main/java/org/forgerock/opendj/config/ConfigurationFramework.java
index 2fddb4c..1c0076a 100644
--- a/opendj-config/src/main/java/org/forgerock/opendj/config/ConfigurationFramework.java
+++ b/opendj-config/src/main/java/org/forgerock/opendj/config/ConfigurationFramework.java
@@ -143,6 +143,134 @@
return INSTANCE;
}
+ /**
+ * Prints out all information about extensions.
+ *
+ * @param installPath
+ * The path where application binaries are located.
+ * @param instancePath
+ * The path where application data are located.
+ *
+ * @return A string representing all information about extensions;
+ * <code>null</code> if there is no information available.
+ */
+ public static String printExtensionInformation(final String installPath, final String instancePath) {
+ final File extensionsPath = buildExtensionPath(installPath);
+
+ final List<File> extensions = new ArrayList<>();
+
+ if (extensionsPath.exists() && extensionsPath.isDirectory()) {
+ extensions.addAll(listFiles(extensionsPath));
+ }
+
+ File instanceExtensionsPath = buildExtensionPath(instancePath);
+ if (!extensionsPath.getAbsolutePath().equals(instanceExtensionsPath.getAbsolutePath())) {
+ extensions.addAll(listFiles(instanceExtensionsPath));
+ }
+
+ if (extensions.isEmpty()) {
+ return null;
+ }
+
+ final ByteArrayOutputStream baos = new ByteArrayOutputStream();
+ final PrintStream ps = new PrintStream(baos);
+ // prints:
+ // --
+ // Name Build number Revision number
+ ps.printf("--%s %-20s %-20s %-20s%s", EOL, "Name", "Build number",
+ "Revision number", EOL);
+
+ for (final File extension : extensions) {
+ printExtensionDetails(ps, extension);
+ }
+
+ return baos.toString();
+ }
+
+ private static File buildExtensionPath(String directory) {
+ File libDir = new File(directory, LIB_DIR);
+ try {
+ return new File(libDir, EXTENSIONS_DIR).getCanonicalFile();
+ } catch (Exception e) {
+ return new File(libDir, EXTENSIONS_DIR);
+ }
+ }
+
+ private static List<File> listFiles(File path) {
+ if (path.exists() && path.isDirectory()) {
+
+ return Arrays.asList(path.listFiles(new FileFilter() {
+ @Override
+ public boolean accept(File pathname) {
+ // only files with names ending with ".jar"
+ return pathname.isFile() && pathname.getName().endsWith(".jar");
+ }
+ }));
+ }
+ return Collections.emptyList();
+ }
+
+ private static void printExtensionDetails(PrintStream ps, File extension) {
+ // retrieve MANIFEST entry and display name, build number and revision number
+ try (JarFile jarFile = new JarFile(extension)) {
+ JarEntry entry = jarFile.getJarEntry(MANIFEST_RELATIVE_PATH);
+ if (entry == null) {
+ return;
+ }
+
+ String[] information = getBuildInformation(jarFile);
+
+ ps.append("Extension: ");
+ boolean addBlank = false;
+ for (String name : information) {
+ if (addBlank) {
+ ps.append(" ");
+ } else {
+ addBlank = true;
+ }
+ ps.printf("%-20s", name);
+ }
+ ps.append(EOL);
+ } catch (Exception e) {
+ // ignore extra information for this extension
+ }
+ }
+
+ /**
+ * Returns a String array with the following information : <br>
+ * index 0: the name of the extension. <br>
+ * index 1: the build number of the extension. <br>
+ * index 2: the revision number of the extension.
+ *
+ * @param extension
+ * the jar file of the extension
+ * @return a String array containing the name, the build number and the revision number
+ * of the extension given in argument
+ * @throws java.io.IOException
+ * thrown if the jar file has been closed.
+ */
+ private static String[] getBuildInformation(final JarFile extension) throws IOException {
+ final String[] result = new String[3];
+
+ // retrieve MANIFEST entry and display name, version and revision
+ final Manifest manifest = extension.getManifest();
+
+ if (manifest != null) {
+ final Attributes attributes = manifest.getMainAttributes();
+
+ int index = 0;
+ for (final String name : BUILD_INFORMATION_ATTRIBUTE_NAMES) {
+ String value = attributes.getValue(name);
+ if (value == null) {
+ value = "<unknown>";
+ }
+ result[index++] = value;
+ }
+ }
+
+ return result;
+ }
+
/** Set of registered Jar files. */
private Set<File> jarFiles = new HashSet<>();
@@ -287,71 +415,6 @@
}
/**
- * Prints out all information about extensions.
- *
- * @return A string representing all information about extensions;
- * <code>null</code> if there is no information available.
- */
- public String printExtensionInformation() {
- final File extensionsPath = buildExtensionPath(installPath);
-
- final List<File> extensions = new ArrayList<>();
-
- if (extensionsPath.exists() && extensionsPath.isDirectory()) {
- extensions.addAll(listFiles(extensionsPath));
- }
-
- File instanceExtensionsPath = buildExtensionPath(instancePath);
- if (!extensionsPath.getAbsolutePath().equals(instanceExtensionsPath.getAbsolutePath())) {
- extensions.addAll(listFiles(instanceExtensionsPath));
- }
-
- if (extensions.isEmpty()) {
- return null;
- }
-
- final ByteArrayOutputStream baos = new ByteArrayOutputStream();
- final PrintStream ps = new PrintStream(baos);
- // prints:
- // --
- // Name Build number Revision number
- ps.printf("--%s %-20s %-20s %-20s%s", EOL, "Name", "Build number",
- "Revision number", EOL);
-
- for (final File extension : extensions) {
- printExtensionDetails(ps, extension);
- }
-
- return baos.toString();
- }
-
- private void printExtensionDetails(PrintStream ps, File extension) {
- // retrieve MANIFEST entry and display name, build number and revision number
- try (JarFile jarFile = new JarFile(extension)) {
- JarEntry entry = jarFile.getJarEntry(MANIFEST_RELATIVE_PATH);
- if (entry == null) {
- return;
- }
-
- String[] information = getBuildInformation(jarFile);
-
- ps.append("Extension: ");
- boolean addBlank = false;
- for (String name : information) {
- if (addBlank) {
- ps.append(" ");
- } else {
- addBlank = true;
- }
- ps.printf("%-20s", name);
- }
- ps.append(EOL);
- } catch (Exception e) {
- // ignore extra information for this extension
- }
- }
-
- /**
* Reloads the configuration framework.
*
* @throws ConfigException
@@ -418,41 +481,6 @@
}
}
- /**
- * Returns a String array with the following information : <br>
- * index 0: the name of the extension. <br>
- * index 1: the build number of the extension. <br>
- * index 2: the revision number of the extension.
- *
- * @param extension
- * the jar file of the extension
- * @return a String array containing the name, the build number and the revision number
- * of the extension given in argument
- * @throws java.io.IOException
- * thrown if the jar file has been closed.
- */
- private String[] getBuildInformation(final JarFile extension) throws IOException {
- final String[] result = new String[3];
-
- // retrieve MANIFEST entry and display name, version and revision
- final Manifest manifest = extension.getManifest();
-
- if (manifest != null) {
- final Attributes attributes = manifest.getMainAttributes();
-
- int index = 0;
- for (final String name : BUILD_INFORMATION_ATTRIBUTE_NAMES) {
- String value = attributes.getValue(name);
- if (value == null) {
- value = "<unknown>";
- }
- result[index++] = value;
- }
- }
-
- return result;
- }
-
private void initialize0() throws ConfigException {
if (parent != null) {
loader = new MyURLClassLoader(parent);
@@ -477,15 +505,6 @@
}
}
- private File buildExtensionPath(String directory) {
- File libDir = new File(directory, LIB_DIR);
- try {
- return new File(libDir, EXTENSIONS_DIR).getCanonicalFile();
- } catch (Exception e) {
- return new File(libDir, EXTENSIONS_DIR);
- }
- }
-
/**
* Put extensions jars into the class loader and load all configuration
* definition classes in that they contain.
@@ -523,20 +542,6 @@
}
}
- private List<File> listFiles(File path) {
- if (path.exists() && path.isDirectory()) {
-
- return Arrays.asList(path.listFiles(new FileFilter() {
- @Override
- public boolean accept(File pathname) {
- // only files with names ending with ".jar"
- return pathname.isFile() && pathname.getName().endsWith(".jar");
- }
- }));
- }
- return Collections.emptyList();
- }
-
/**
* Make sure all core configuration definitions are loaded.
*
--
Gitblit v1.10.0