From 4dc4aa0c15b318b761b92e2394d0fde58a3e8232 Mon Sep 17 00:00:00 2001
From: jvergara <jvergara@localhost>
Date: Tue, 18 Dec 2007 11:24:28 +0000
Subject: [PATCH] Fix for issue 1862 (verbosity options for quicksetup tools)

---
 opends/src/quicksetup/org/opends/quicksetup/util/ServerController.java |  358 +++++++++++++++++++++++++++++++----------------------------
 1 files changed, 188 insertions(+), 170 deletions(-)

diff --git a/opends/src/quicksetup/org/opends/quicksetup/util/ServerController.java b/opends/src/quicksetup/org/opends/quicksetup/util/ServerController.java
index 53e15f5..e3e1edc 100644
--- a/opends/src/quicksetup/org/opends/quicksetup/util/ServerController.java
+++ b/opends/src/quicksetup/org/opends/quicksetup/util/ServerController.java
@@ -113,6 +113,11 @@
       StandardOutputSuppressor.suppress();
     }
 
+    if (suppressOutput && (application != null))
+    {
+      application.setNotifyListeners(false);
+    }
+
     try {
       if (application != null) {
         MessageBuilder mb = new MessageBuilder();
@@ -228,6 +233,10 @@
       if (suppressOutput && StandardOutputSuppressor.isSuppressed()) {
         StandardOutputSuppressor.unsuppress();
       }
+      if (suppressOutput && (application != null))
+      {
+        application.setNotifyListeners(false);
+      }
     }
   }
 
@@ -260,209 +269,218 @@
    * This methods starts the server.
    * @param verify boolean indicating whether this method will attempt to
    * connect to the server after starting to verify that it is listening.
+   * @param suppressOutput indicating that ouput to standard output streams
+   * from the server should be suppressed.
    * @return OperationOutput object containing output from the start server
    * command invocation.
-   * @return boolean indicating that ouput to standard output streams
-   * from the server should be suppressed.
    * @throws org.opends.quicksetup.ApplicationException if something goes wrong.
    */
-  private OperationOutput startServer(boolean verify, boolean suppressOuput)
-          throws ApplicationException
+  private OperationOutput startServer(boolean verify, boolean suppressOutput)
+  throws ApplicationException
   {
     OperationOutput output = new OperationOutput();
 
-    if (suppressOuput && !StandardOutputSuppressor.isSuppressed()) {
+    if (suppressOutput && !StandardOutputSuppressor.isSuppressed()) {
       StandardOutputSuppressor.suppress();
     }
 
-    try {
-    if (application != null) {
-      MessageBuilder mb = new MessageBuilder();
-      mb.append(application.getFormattedProgress(
-                      INFO_PROGRESS_STARTING.get()));
-      mb.append(application.getLineBreak());
-      application.notifyListeners(mb.toMessage());
-    }
-    LOG.log(Level.INFO, "starting server");
-
-    ArrayList<String> argList = new ArrayList<String>();
-    argList.add(Utils.getScriptPath(
-        Utils.getPath(installation.getServerStartCommandFile())));
-    String[] args = new String[argList.size()];
-    argList.toArray(args);
-    ProcessBuilder pb = new ProcessBuilder(args);
-    pb.directory(installation.getBinariesDirectory());
-    Map<String, String> env = pb.environment();
-    env.put(SetupUtils.OPENDS_JAVA_HOME, System.getProperty("java.home"));
-
-    // Upgrader's classpath contains jars located in the temporary
-    // directory that we don't want locked by the directory server
-    // when it starts.  Since we're just calling the start-ds script
-    // it will figure out the correct classpath for the server.
-    env.remove("CLASSPATH");
-    try
+    if (suppressOutput && (application != null))
     {
-      String startedId = getStartedId();
-      Process process = pb.start();
+      application.setNotifyListeners(false);
+    }
 
-      BufferedReader err =
+    try {
+      if (application != null) {
+        MessageBuilder mb = new MessageBuilder();
+        mb.append(application.getFormattedProgress(
+            INFO_PROGRESS_STARTING.get()));
+        mb.append(application.getLineBreak());
+        application.notifyListeners(mb.toMessage());
+      }
+      LOG.log(Level.INFO, "starting server");
+
+      ArrayList<String> argList = new ArrayList<String>();
+      argList.add(Utils.getScriptPath(
+          Utils.getPath(installation.getServerStartCommandFile())));
+      String[] args = new String[argList.size()];
+      argList.toArray(args);
+      ProcessBuilder pb = new ProcessBuilder(args);
+      pb.directory(installation.getBinariesDirectory());
+      Map<String, String> env = pb.environment();
+      env.put(SetupUtils.OPENDS_JAVA_HOME, System.getProperty("java.home"));
+
+      // Upgrader's classpath contains jars located in the temporary
+      // directory that we don't want locked by the directory server
+      // when it starts.  Since we're just calling the start-ds script
+      // it will figure out the correct classpath for the server.
+      env.remove("CLASSPATH");
+      try
+      {
+        String startedId = getStartedId();
+        Process process = pb.start();
+
+        BufferedReader err =
           new BufferedReader(new InputStreamReader(process.getErrorStream()));
-      BufferedReader out =
+        BufferedReader out =
           new BufferedReader(new InputStreamReader(process.getInputStream()));
 
-      StartReader errReader = new StartReader(err, startedId, true);
-      StartReader outputReader = new StartReader(out, startedId, false);
+        StartReader errReader = new StartReader(err, startedId, true);
+        StartReader outputReader = new StartReader(out, startedId, false);
 
-      long finishedTime = 0;
-      while (!errReader.isFinished() || !outputReader.isFinished())
-      {
-        try
-        {
-          Thread.sleep(100);
-        } catch (InterruptedException ie)
-        {
-        }
-
-        if (errReader.startedIdFound() || outputReader.startedIdFound())
-        {
-          /* When we start the server in windows and we are not running it
-           * under a windows service, the readers are kept open forever.
-           * Once we find that is finished, wait at most 7 seconds.
-           */
-          if (finishedTime == 0)
-          {
-            finishedTime = System.currentTimeMillis();
-          }
-          else
-          {
-            if (System.currentTimeMillis() - finishedTime > 7000)
-            {
-              break;
-            }
-          }
-        }
-      }
-
-      // Collect any messages found in the output
-      List<Message> errors = errReader.getMessages();
-      if (errors != null) {
-        for(Message error : errors) {
-          output.addErrorMessage(error);
-        }
-      }
-      List<Message> messages = outputReader.getMessages();
-      if (messages != null) {
-        for (Message msg : messages) {
-
-          // NOTE:  this may not be the best place to drop these.
-          // However upon startup the server seems to log all messages,
-          // regardless of whether or not they signal an error condition,
-          // to its error log.
-
-          output.addErrorMessage(msg);
-        }
-      }
-
-      // Check if something wrong occurred reading the starting of the server
-      ApplicationException ex = errReader.getException();
-      if (ex == null)
-      {
-        ex = outputReader.getException();
-      }
-      if (ex != null)
-      {
-        // This is meaningless right now since we throw
-        // the exception below, but in case we change out
-        // minds later or add the ability to return exceptions
-        // in the output only instead of throwing...
-        output.setException(ex);
-        throw ex;
-
-      } else if (verify)
-      {
-        /*
-         * There are no exceptions from the readers and they are marked as
-         * finished. This means that the server has written in its output the
-         * message id informing that it started. So it seems that everything
-         * went fine.
-         *
-         * However we can have issues with the firewalls or do not have rights
-         * to connect.  Just check if we can connect to the server.
-         * Try 5 times with an interval of 1 second between try.
-         */
-        boolean connected = false;
-        Configuration config = installation.getCurrentConfiguration();
-        int port = config.getPort();
-        String ldapUrl = "ldap://localhost:" + port;
-
-        // See if the application has prompted for credentials.  If
-        // not we'll just try to connect anonymously.
-        String userDn = null;
-        String userPw = null;
-        if (application != null) {
-          userDn = application.getUserData().getDirectoryManagerDn();
-          userPw = application.getUserData().getDirectoryManagerPwd();
-        }
-        if (userDn == null || userPw == null) {
-          userDn = null;
-          userPw = null;
-        }
-
-        for (int i=0; i<5 && !connected; i++)
+        long finishedTime = 0;
+        while (!errReader.isFinished() || !outputReader.isFinished())
         {
           try
           {
-            Utils.createLdapContext(
-                ldapUrl,
-                userDn, userPw, 3000, null);
-            connected = true;
-          }
-          catch (NamingException ne)
+            Thread.sleep(100);
+          } catch (InterruptedException ie)
           {
           }
-          if (!connected)
+
+          if (errReader.startedIdFound() || outputReader.startedIdFound())
+          {
+            /* When we start the server in windows and we are not running it
+             * under a windows service, the readers are kept open forever.
+             * Once we find that is finished, wait at most 7 seconds.
+             */
+            if (finishedTime == 0)
+            {
+              finishedTime = System.currentTimeMillis();
+            }
+            else
+            {
+              if (System.currentTimeMillis() - finishedTime > 7000)
+              {
+                break;
+              }
+            }
+          }
+        }
+
+        // Collect any messages found in the output
+        List<Message> errors = errReader.getMessages();
+        if (errors != null) {
+          for(Message error : errors) {
+            output.addErrorMessage(error);
+          }
+        }
+        List<Message> messages = outputReader.getMessages();
+        if (messages != null) {
+          for (Message msg : messages) {
+
+            // NOTE:  this may not be the best place to drop these.
+            // However upon startup the server seems to log all messages,
+            // regardless of whether or not they signal an error condition,
+            // to its error log.
+
+            output.addErrorMessage(msg);
+          }
+        }
+
+        // Check if something wrong occurred reading the starting of the server
+        ApplicationException ex = errReader.getException();
+        if (ex == null)
+        {
+          ex = outputReader.getException();
+        }
+        if (ex != null)
+        {
+          // This is meaningless right now since we throw
+          // the exception below, but in case we change out
+          // minds later or add the ability to return exceptions
+          // in the output only instead of throwing...
+          output.setException(ex);
+          throw ex;
+
+        } else if (verify)
+        {
+          /*
+           * There are no exceptions from the readers and they are marked as
+           * finished. This means that the server has written in its output the
+           * message id informing that it started. So it seems that everything
+           * went fine.
+           *
+           * However we can have issues with the firewalls or do not have rights
+           * to connect.  Just check if we can connect to the server.
+           * Try 5 times with an interval of 1 second between try.
+           */
+          boolean connected = false;
+          Configuration config = installation.getCurrentConfiguration();
+          int port = config.getPort();
+          String ldapUrl = "ldap://localhost:" + port;
+
+          // See if the application has prompted for credentials.  If
+          // not we'll just try to connect anonymously.
+          String userDn = null;
+          String userPw = null;
+          if (application != null) {
+            userDn = application.getUserData().getDirectoryManagerDn();
+            userPw = application.getUserData().getDirectoryManagerPwd();
+          }
+          if (userDn == null || userPw == null) {
+            userDn = null;
+            userPw = null;
+          }
+
+          for (int i=0; i<5 && !connected; i++)
           {
             try
             {
-              Thread.sleep(1000);
+              Utils.createLdapContext(
+                  ldapUrl,
+                  userDn, userPw, 3000, null);
+              connected = true;
             }
-            catch (Throwable t)
+            catch (NamingException ne)
             {
             }
+            if (!connected)
+            {
+              try
+              {
+                Thread.sleep(1000);
+              }
+              catch (Throwable t)
+              {
+              }
+            }
+          }
+          if (!connected)
+          {
+            if (Utils.isWindows())
+            {
+              throw new ApplicationException(
+                  ReturnCode.START_ERROR,
+                  INFO_ERROR_STARTING_SERVER_IN_WINDOWS.get(
+                      String.valueOf(port)),
+                      null);
+            }
+            else
+            {
+              throw new ApplicationException(
+                  ReturnCode.START_ERROR,
+                  INFO_ERROR_STARTING_SERVER_IN_UNIX.get(
+                      String.valueOf(port)),
+                      null);
+            }
           }
         }
-        if (!connected)
-        {
-          if (Utils.isWindows())
-          {
-            throw new ApplicationException(
-                ReturnCode.START_ERROR,
-                    INFO_ERROR_STARTING_SERVER_IN_WINDOWS.get(
-                            String.valueOf(port)),
-                    null);
-          }
-          else
-          {
-            throw new ApplicationException(
-                ReturnCode.START_ERROR,
-                    INFO_ERROR_STARTING_SERVER_IN_UNIX.get(
-                            String.valueOf(port)),
-                    null);
-          }
-        }
-      }
 
-    } catch (IOException ioe)
-    {
-      throw new ApplicationException(
+      } catch (IOException ioe)
+      {
+        throw new ApplicationException(
             ReturnCode.START_ERROR,
-              getThrowableMsg(INFO_ERROR_STARTING_SERVER.get(), ioe), ioe);
-    }
-  } finally {
-      if (suppressOuput && StandardOutputSuppressor.isSuppressed()) {
+            getThrowableMsg(INFO_ERROR_STARTING_SERVER.get(), ioe), ioe);
+      }
+    } finally {
+      if (suppressOutput && StandardOutputSuppressor.isSuppressed()) {
         StandardOutputSuppressor.unsuppress();
       }
-  }
+      if (suppressOutput && (application != null))
+      {
+        application.setNotifyListeners(true);
+      }
+    }
     return output;
   }
 

--
Gitblit v1.10.0