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