From b20e3f58edffa500ba04c09091814e36c465509e Mon Sep 17 00:00:00 2001
From: jvergara <jvergara@localhost>
Date: Tue, 15 Jul 2008 12:31:45 +0000
Subject: [PATCH] Move the method supportsOption from InstallerHelper to Utils so that it can be shared by used in other parts of the code.

---
 opendj-sdk/opends/src/quicksetup/org/opends/quicksetup/util/Utils.java |   81 ++++++++++++++++++++++++++++++++++++++++
 1 files changed, 81 insertions(+), 0 deletions(-)

diff --git a/opendj-sdk/opends/src/quicksetup/org/opends/quicksetup/util/Utils.java b/opendj-sdk/opends/src/quicksetup/org/opends/quicksetup/util/Utils.java
index f2e6c79..b2f49d4 100644
--- a/opendj-sdk/opends/src/quicksetup/org/opends/quicksetup/util/Utils.java
+++ b/opendj-sdk/opends/src/quicksetup/org/opends/quicksetup/util/Utils.java
@@ -30,12 +30,14 @@
 import static org.opends.messages.QuickSetupMessages.*;
 
 import java.io.BufferedOutputStream;
+import java.io.BufferedReader;
 import java.io.ByteArrayOutputStream;
 import java.io.File;
 import java.io.FileOutputStream;
 import java.io.FileWriter;
 import java.io.IOException;
 import java.io.InputStream;
+import java.io.InputStreamReader;
 import java.io.PrintStream;
 import java.io.PrintWriter;
 import java.io.RandomAccessFile;
@@ -103,6 +105,85 @@
     return SetupUtils.isPriviledgedPort(port);
   }
 
+
+
+  /**
+   * Tells whether the provided java installation supports a given option or
+   * not.
+   * @param javaHome the java installation path.
+   * @param option the java option that we want to check.
+   * @param installPath the install path of the server.
+   * @return <CODE>true</CODE> if the provided java installation supports a
+   * given option and <CODE>false</CODE> otherwise.
+   */
+  public static boolean supportsOption(String option, String javaHome,
+      String installPath)
+  {
+    boolean supported = false;
+    try
+    {
+      List<String> args = new ArrayList<String>();
+      String script;
+      String libPath = Utils.getPath(installPath,
+          Installation.LIBRARIES_PATH_RELATIVE);
+      if (Utils.isWindows())
+      {
+        script = Utils.getScriptPath(Utils.getPath(libPath,
+            Installation.SCRIPT_UTIL_FILE_WINDOWS));
+      }
+      else
+      {
+        script = Utils.getScriptPath(Utils.getPath(libPath,
+            Installation.SCRIPT_UTIL_FILE_UNIX));
+      }
+      args.add(script);
+      ProcessBuilder pb = new ProcessBuilder(args);
+      Map<String, String> env = pb.environment();
+      env.put(SetupUtils.OPENDS_JAVA_HOME, javaHome);
+      env.put("OPENDS_JAVA_ARGS", option);
+      env.put("SCRIPT_UTIL_CMD", "set-full-environment-and-test-java");
+      env.remove("OPENDS_JAVA_BIN");
+      // In windows by default the scripts ask the user to click on enter when
+      // they fail.  Set this environment variable to avoid it.
+      if (Utils.isWindows())
+      {
+        env.put("DO_NOT_PAUSE", "true");
+      }
+      Process process = pb.start();
+      LOG.log(Level.INFO, "launching "+args);
+      InputStream is = process.getInputStream();
+      BufferedReader reader = new BufferedReader(new InputStreamReader(is));
+      String line;
+      while (null != (line = reader.readLine())) {
+        LOG.log(Level.INFO, "The output: "+line);
+        if (line.indexOf("ERROR:  The detected Java version") != -1)
+        {
+          try
+          {
+            process.destroy();
+            return false;
+          }
+          catch (Throwable t)
+          {
+            return false;
+          }
+          finally
+          {
+          }
+        }
+      }
+      process.waitFor();
+      int returnCode = process.exitValue();
+      LOG.log(Level.INFO, "returnCode: "+returnCode);
+      supported = returnCode == 0;
+    }
+    catch (Throwable t)
+    {
+      LOG.log(Level.WARNING, "Error testing option "+option+" on "+javaHome, t);
+    }
+    return supported;
+  }
+
   /**
    * Creates a new file attempting to create the parent directories
    * if necessary.

--
Gitblit v1.10.0