From 30c61f6cdc2906798f04ed4111bca50c92ef5404 Mon Sep 17 00:00:00 2001
From: kenneth_suter <kenneth_suter@localhost>
Date: Wed, 25 Apr 2007 21:48:40 +0000
Subject: [PATCH] - Addresses issues that was forcing OpenDS.jar to be downloaded during WebStart version of Upgrade.  Upgrade now uses the WebStartDownloader to load jars in the background - Fixes UI timing issues with build information being downloaded in a different thread - Introduces a loading panel that is swapped in while panels are in begin draw state to make the UI more responsive when initialization takes a long time

---
 opendj-sdk/opends/src/quicksetup/org/opends/quicksetup/upgrader/Upgrader.java                    |  151 ++++++++----
 opendj-sdk/opends/src/quicksetup/org/opends/quicksetup/installer/Installer.java                  |    7 
 opendj-sdk/opends/src/quicksetup/org/opends/quicksetup/webstart/WebStartDownloader.java          |   33 ++
 opendj-sdk/opends/src/quicksetup/org/opends/quicksetup/event/BrowseActionListener.java           |   16 +
 opendj-sdk/opends/src/quicksetup/org/opends/quicksetup/images/wait_tiny.png                      |    0 
 opendj-sdk/opends/src/quicksetup/org/opends/quicksetup/ui/UIFactory.java                         |   46 +++
 opendj-sdk/opends/src/quicksetup/org/opends/quicksetup/ui/CurrentStepPanel.java                  |   46 ++-
 opendj-sdk/opends/src/quicksetup/org/opends/quicksetup/upgrader/RemoteBuildManager.java          |   58 +++-
 opendj-sdk/opends/src/quicksetup/org/opends/quicksetup/UserData.java                             |    3 
 opendj-sdk/opends/src/quicksetup/org/opends/quicksetup/upgrader/ui/ChooseVersionPanel.java       |  126 +++++++++-
 opendj-sdk/opends/src/quicksetup/org/opends/quicksetup/installer/webstart/WebStartInstaller.java |   80 ------
 opendj-sdk/opends/src/quicksetup/org/opends/quicksetup/resources/Resources.properties            |    7 
 opendj-sdk/opends/src/quicksetup/org/opends/quicksetup/ui/GuiApplication.java                    |   89 +++++++
 opendj-sdk/opends/src/quicksetup/org/opends/quicksetup/util/ServerController.java                |   50 ++-
 14 files changed, 520 insertions(+), 192 deletions(-)

diff --git a/opendj-sdk/opends/src/quicksetup/org/opends/quicksetup/UserData.java b/opendj-sdk/opends/src/quicksetup/org/opends/quicksetup/UserData.java
index 35834cd..5becaa4 100644
--- a/opendj-sdk/opends/src/quicksetup/org/opends/quicksetup/UserData.java
+++ b/opendj-sdk/opends/src/quicksetup/org/opends/quicksetup/UserData.java
@@ -28,7 +28,6 @@
 package org.opends.quicksetup;
 
 import org.opends.quicksetup.util.Utils;
-import org.opends.server.util.SetupUtils;
 
 /**
  * Represents user specified input data to an application.
@@ -303,7 +302,7 @@
 
     for (int i=0;i<65000 && (defaultJMXPort == -1);i+=1000)
     {
-      int port = i + SetupUtils.getDefaultJMXPort();
+      int port = i + org.opends.server.util.SetupUtils.getDefaultJMXPort();
       boolean isForbidden = false;
       if (forbiddenPorts != null)
       {
diff --git a/opendj-sdk/opends/src/quicksetup/org/opends/quicksetup/event/BrowseActionListener.java b/opendj-sdk/opends/src/quicksetup/org/opends/quicksetup/event/BrowseActionListener.java
index 1a4caf5..f860bd6 100644
--- a/opendj-sdk/opends/src/quicksetup/org/opends/quicksetup/event/BrowseActionListener.java
+++ b/opendj-sdk/opends/src/quicksetup/org/opends/quicksetup/event/BrowseActionListener.java
@@ -74,6 +74,10 @@
      */
     OPEN_LDIF_FILE,
     /**
+     * The Browser is used to retrieve a .zip file.
+     */
+    OPEN_ZIP_FILE,
+    /**
      * The Browser is used to retrieve a generic file.
      */
     GENERIC_FILE
@@ -121,6 +125,18 @@
       fc.setFileFilter(ldifFiles);
       break;
 
+    case OPEN_ZIP_FILE:
+        fc.setFileSelectionMode(JFileChooser.FILES_ONLY);
+        fc.setDialogType(JFileChooser.OPEN_DIALOG);
+        fc.setDialogTitle(i18n.getMsg("open-zip-file-dialog-title"));
+        ExtensionFileFilter zipFiles =
+            new ExtensionFileFilter("zip",
+                i18n.getMsg("zip-files-description"));
+
+        fc.addChoosableFileFilter(zipFiles);
+        fc.setFileFilter(zipFiles);
+        break;
+
     case GENERIC_FILE:
       fc.setFileSelectionMode(JFileChooser.FILES_ONLY);
       fc.setDialogType(JFileChooser.OPEN_DIALOG);
diff --git a/opendj-sdk/opends/src/quicksetup/org/opends/quicksetup/images/wait_tiny.png b/opendj-sdk/opends/src/quicksetup/org/opends/quicksetup/images/wait_tiny.png
new file mode 100755
index 0000000..ef8945e
--- /dev/null
+++ b/opendj-sdk/opends/src/quicksetup/org/opends/quicksetup/images/wait_tiny.png
Binary files differ
diff --git a/opendj-sdk/opends/src/quicksetup/org/opends/quicksetup/installer/Installer.java b/opendj-sdk/opends/src/quicksetup/org/opends/quicksetup/installer/Installer.java
index 7ea13ae..150d39a 100644
--- a/opendj-sdk/opends/src/quicksetup/org/opends/quicksetup/installer/Installer.java
+++ b/opendj-sdk/opends/src/quicksetup/org/opends/quicksetup/installer/Installer.java
@@ -330,6 +330,13 @@
   /**
    * {@inheritDoc}
    */
+  public int getExtraDialogHeight() {
+    return UIFactory.EXTRA_DIALOG_HEIGHT;
+  }
+
+  /**
+   * {@inheritDoc}
+   */
   public void previousClicked(WizardStep cStep, QuickSetup qs) {
     // do nothing;
   }
diff --git a/opendj-sdk/opends/src/quicksetup/org/opends/quicksetup/installer/webstart/WebStartInstaller.java b/opendj-sdk/opends/src/quicksetup/org/opends/quicksetup/installer/webstart/WebStartInstaller.java
index f1901dc..412ae0e 100644
--- a/opendj-sdk/opends/src/quicksetup/org/opends/quicksetup/installer/webstart/WebStartInstaller.java
+++ b/opendj-sdk/opends/src/quicksetup/org/opends/quicksetup/installer/webstart/WebStartInstaller.java
@@ -77,15 +77,12 @@
   private HashMap<InstallProgressStep, String> hmSummary =
       new HashMap<InstallProgressStep, String>();
 
-  private WebStartDownloader loader;
-
   /**
    * WebStartInstaller constructor.
    */
   public WebStartInstaller()
   {
-    loader = new WebStartDownloader();
-    loader.start(false);
+    initLoader();
     status = InstallProgressStep.NOT_STARTED;
   }
 
@@ -191,7 +188,13 @@
    */
   public String getSummary(ProgressStep status)
   {
-    return hmSummary.get(status);
+    String summary = null;
+    if (InstallProgressStep.DOWNLOADING.equals(status)) {
+      summary = loader.getSummary();
+    } else {
+      summary = hmSummary.get(status);
+    }
+    return summary;
   }
 
   /**
@@ -295,73 +298,6 @@
   }
 
   /**
-   * Waits for the loader to be finished.  Every time we have an update in the
-   * percentage that is downloaded we notify the listeners of this.
-   *
-   * @param maxRatio is the integer value that tells us which is the max ratio
-   * that corresponds to the download.  It is used to calculate how the global
-   * installation ratio changes when the download ratio increases.  For instance
-   * if we suppose that the download takes 25 % of the total installation
-   * process, then maxRatio will be 25.  When the download is complete this
-   * method will send a notification to the ProgressUpdateListeners with a ratio
-   * of 25 %.
-   * @throws QuickSetupException if something goes wrong
-   *
-   */
-  private void waitForLoader(Integer maxRatio) throws QuickSetupException {
-    int lastPercentage = -1;
-    WebStartDownloader.Status lastStatus =
-      WebStartDownloader.Status.DOWNLOADING;
-    while (!loader.isFinished() && (loader.getException() == null))
-    {
-      // Pool until is over
-      int perc = loader.getDownloadPercentage();
-      WebStartDownloader.Status downloadStatus = loader.getStatus();
-      if ((perc != lastPercentage) || (downloadStatus != lastStatus))
-      {
-        lastPercentage = perc;
-        int ratio = (perc * maxRatio) / 100;
-        String summary;
-        switch (downloadStatus)
-        {
-        case VALIDATING:
-          String[] argsValidating =
-            { String.valueOf(perc),
-              String.valueOf(loader.getCurrentValidatingPercentage())};
-
-          summary = getMsg("validating-ratio", argsValidating);
-          break;
-        case UPGRADING:
-          String[] argsUpgrading =
-            { String.valueOf(perc),
-              String.valueOf(loader.getCurrentUpgradingPercentage())};
-          summary = getMsg("upgrading-ratio", argsUpgrading);
-          break;
-        default:
-          String[] arg =
-            { String.valueOf(perc) };
-
-          summary = getMsg("downloading-ratio", arg);
-        }
-        hmSummary.put(InstallProgressStep.DOWNLOADING, summary);
-        notifyListeners(ratio, summary, null);
-
-        try
-        {
-          Thread.sleep(300);
-        } catch (Exception ex)
-        {
-        }
-      }
-    }
-
-    if (loader.getException() != null)
-    {
-      throw loader.getException();
-    }
-  }
-
-  /**
    * Creates the parent Directory for the server location if it does not exist.
    * @throws QuickSetupException if something goes wrong.
    */
diff --git a/opendj-sdk/opends/src/quicksetup/org/opends/quicksetup/resources/Resources.properties b/opendj-sdk/opends/src/quicksetup/org/opends/quicksetup/resources/Resources.properties
index 13eae51..759cb7b 100644
--- a/opendj-sdk/opends/src/quicksetup/org/opends/quicksetup/resources/Resources.properties
+++ b/opendj-sdk/opends/src/quicksetup/org/opends/quicksetup/resources/Resources.properties
@@ -358,6 +358,7 @@
 subsection-left-icon-description=Decoration icon.
 subsection-right-icon-description=Decoration icon.
 help-small-icon-description=Help icon.
+help-wait-description=Busy, please wait.
 
 #
 # Icon tooltips.
@@ -391,6 +392,7 @@
 subsection-right-icon=images/divider-right.png
 opends-small-icon=images/opends_logo_small.png
 help-small-icon=images/help_small.gif
+wait-tiny=images/wait_tiny.png
 
 #
 # Welcome Panel specific labels
@@ -634,8 +636,10 @@
 browse-button-label=Browse...
 browse-button-tooltip=Click to display a file system browser
 ldif-files-description=LDAP Data Interchange Format (*.ldif)
+zip-files-description=OpenDS Installation Package (.zip)
 open-server-location-dialog-title=Choose Installation Path
 open-ldif-file-dialog-title=Choose an LDIF File
+open-zip-file-dialog-title=Choose an OpenDS Installation Package (.zip)
 open-generic-file-dialog-title=Choose a File
 
 #
@@ -716,6 +720,7 @@
 progress-extracting=Extracting {0}
 progress-configuring=Configuring Directory Server
 progress-updating-certificates=Configuring Certificates
+downloading=Downloading...
 downloading-ratio=Downloading: {0}% Completed.
 validating-ratio=Downloading: {0}% Completed - Validating file: {1} % Completed.
 upgrading-ratio=Downloading: {0}% Completed - Upgrading file: {1} % Completed.
@@ -886,3 +891,5 @@
 upgrade-review-panel-start-server=Start Server when the Upgrade has Completed
 upgrade-review-panel-start-server-tooltip=Check this check box if you want to \
   start the server once the upgrade has completed
+
+general-loading=Loading...
\ No newline at end of file
diff --git a/opendj-sdk/opends/src/quicksetup/org/opends/quicksetup/ui/CurrentStepPanel.java b/opendj-sdk/opends/src/quicksetup/org/opends/quicksetup/ui/CurrentStepPanel.java
index 9ce692a..c08efbf 100644
--- a/opendj-sdk/opends/src/quicksetup/org/opends/quicksetup/ui/CurrentStepPanel.java
+++ b/opendj-sdk/opends/src/quicksetup/org/opends/quicksetup/ui/CurrentStepPanel.java
@@ -27,16 +27,16 @@
 
 package org.opends.quicksetup.ui;
 
-import java.awt.CardLayout;
-import java.awt.Dimension;
+import java.awt.*;
 
 import java.util.HashMap;
 import java.util.Set;
 
 import org.opends.quicksetup.event.ButtonActionListener;
-import org.opends.quicksetup.installer.Installer;
 import org.opends.quicksetup.*;
 
+import javax.swing.*;
+
 /**
  * This is the class that contains the panel on the right-top part of the
  * QuickSetupDialog).  It uses a CardLayout that contains all
@@ -54,6 +54,8 @@
 {
   private static final long serialVersionUID = 5474803491510999334L;
 
+  private static final String LOADING_PANEL = "loading";
+
   private HashMap<WizardStep, QuickSetupStepPanel> hmPanels =
       new HashMap<WizardStep, QuickSetupStepPanel>();
 
@@ -140,12 +142,17 @@
       add(getPanel(s), s.toString());
     }
 
+    // Add a special panel to display while panels are
+    // initializing themselves
+    JPanel loadingPanel = UIFactory.makeJPanel();
+    loadingPanel.setLayout(new GridBagLayout());
+    loadingPanel.add(UIFactory.makeJLabel(UIFactory.IconType.NO_ICON,
+            getMsg("general-loading"), UIFactory.TextStyle.PRIMARY_FIELD_VALID),
+            new GridBagConstraints());
+    add(loadingPanel, LOADING_PANEL);
+
     // For aesthetical reasons we add a little bit of height
-    // TODO: remove this hack
-    if (getApplication() instanceof Installer)
-    {
-      minHeight += UIFactory.EXTRA_DIALOG_HEIGHT;
-    }
+    minHeight += getApplication().getExtraDialogHeight();
 
     setPreferredSize(new Dimension(minWidth, minHeight));
     setMinimumSize(new Dimension(minWidth, minHeight));
@@ -183,12 +190,25 @@
    * @param userData the UserData object that must be used to populate
    * the panels.
    */
-  public void setDisplayedStep(WizardStep step, UserData userData)
+  public void setDisplayedStep(final WizardStep step, final UserData userData)
   {
-    CardLayout cl = (CardLayout) (getLayout());
-    getPanel(step).beginDisplay(userData);
-    cl.show(this, step.toString());
-    getPanel(step).endDisplay();
+    final CardLayout cl = (CardLayout) (getLayout());
+
+    // Show the 'loading...' panel and invoke begin
+    // display in another thread in case the panel
+    // taske a while to initialize.
+    cl.show(this, LOADING_PANEL);
+    new Thread(new Runnable() {
+      public void run() {
+        getPanel(step).beginDisplay(userData);
+        SwingUtilities.invokeLater(new Runnable() {
+          public void run() {
+            cl.show(CurrentStepPanel.this, step.toString());
+            getPanel(step).endDisplay();
+          }
+        });
+      }
+    },"panel begin display thread").start();
   }
 
   /**
diff --git a/opendj-sdk/opends/src/quicksetup/org/opends/quicksetup/ui/GuiApplication.java b/opendj-sdk/opends/src/quicksetup/org/opends/quicksetup/ui/GuiApplication.java
index 18f42f4..e7c8a91 100644
--- a/opendj-sdk/opends/src/quicksetup/org/opends/quicksetup/ui/GuiApplication.java
+++ b/opendj-sdk/opends/src/quicksetup/org/opends/quicksetup/ui/GuiApplication.java
@@ -28,6 +28,7 @@
 package org.opends.quicksetup.ui;
 
 import org.opends.quicksetup.*;
+import org.opends.quicksetup.webstart.WebStartDownloader;
 
 import javax.swing.*;
 import java.awt.event.WindowEvent;
@@ -47,6 +48,9 @@
   /** The currently displayed wizard step. */
   private WizardStep displayedStep;
 
+  /** Downloads .jar files for webstart application. */
+  protected WebStartDownloader loader;
+
   /**
    * Constructs an instance of an application.  Subclasses
    * of this application must have a default constructor.
@@ -319,4 +323,89 @@
     return "finish-button-label";
   }
 
+  /**
+   * Begins downloading webstart jars in another thread
+   * for WebStart applications only.
+   */
+  protected void initLoader() {
+    loader = new WebStartDownloader();
+    loader.start(false);
+  }
+
+  /**
+   * Waits for the loader to be finished.  Every time we have an update in the
+   * percentage that is downloaded we notify the listeners of this.
+   *
+   * @param maxRatio is the integer value that tells us which is the max ratio
+   * that corresponds to the download.  It is used to calculate how the global
+   * installation ratio changes when the download ratio increases.  For instance
+   * if we suppose that the download takes 25 % of the total installation
+   * process, then maxRatio will be 25.  When the download is complete this
+   * method will send a notification to the ProgressUpdateListeners with a ratio
+   * of 25 %.
+   * @throws org.opends.quicksetup.QuickSetupException if something goes wrong
+   *
+   */
+  protected void waitForLoader(Integer maxRatio) throws QuickSetupException {
+    int lastPercentage = -1;
+    WebStartDownloader.Status lastStatus =
+      WebStartDownloader.Status.DOWNLOADING;
+    while (!loader.isFinished() && (loader.getException() == null))
+    {
+      // Pool until is over
+      int perc = loader.getDownloadPercentage();
+      WebStartDownloader.Status downloadStatus = loader.getStatus();
+      if ((perc != lastPercentage) || (downloadStatus != lastStatus))
+      {
+        lastPercentage = perc;
+        int ratio = (perc * maxRatio) / 100;
+        String summary;
+        switch (downloadStatus)
+        {
+        case VALIDATING:
+          String[] argsValidating =
+            { String.valueOf(perc),
+              String.valueOf(loader.getCurrentValidatingPercentage())};
+
+          summary = getMsg("validating-ratio", argsValidating);
+          break;
+        case UPGRADING:
+          String[] argsUpgrading =
+            { String.valueOf(perc),
+              String.valueOf(loader.getCurrentUpgradingPercentage())};
+          summary = getMsg("upgrading-ratio", argsUpgrading);
+          break;
+        default:
+          String[] arg =
+            { String.valueOf(perc) };
+
+          summary = getMsg("downloading-ratio", arg);
+        }
+        loader.setSummary(summary);
+        notifyListeners(ratio, summary, null);
+
+        try
+        {
+          Thread.sleep(300);
+        } catch (Exception ex)
+        {
+        }
+      }
+    }
+
+    if (loader.getException() != null)
+    {
+      throw loader.getException();
+    }
+  }
+
+  /**
+   * Gets the amount of addition pixels added to the height
+   * of the tallest panel in order to size the wizard for
+   * asthetic reasons.
+   * @return int height to add
+   */
+  public int getExtraDialogHeight() {
+    return 0;
+  }
 }
diff --git a/opendj-sdk/opends/src/quicksetup/org/opends/quicksetup/ui/UIFactory.java b/opendj-sdk/opends/src/quicksetup/org/opends/quicksetup/ui/UIFactory.java
index f9d9a03..e012b80 100644
--- a/opendj-sdk/opends/src/quicksetup/org/opends/quicksetup/ui/UIFactory.java
+++ b/opendj-sdk/opends/src/quicksetup/org/opends/quicksetup/ui/UIFactory.java
@@ -43,6 +43,7 @@
 import javax.swing.text.html.HTMLEditorKit;
 import javax.swing.border.Border;
 import javax.swing.border.EmptyBorder;
+import javax.swing.border.BevelBorder;
 import javax.swing.table.TableCellRenderer;
 import javax.swing.table.TableColumn;
 import javax.swing.table.TableColumnModel;
@@ -393,6 +394,12 @@
     Font.decode("Arial-ITALIC-12");
 
   /**
+   * Specifies the font for the secondary invalid field.
+   */
+  public static final Font SECONDARY_STATUS_FONT =
+    Font.decode("Arial-ITALIC-12");
+
+  /**
    * Specifies the font for read only text.
    */
   public static final Font READ_ONLY_FONT = Font.decode("Arial-PLAIN-12");
@@ -496,6 +503,7 @@
   static {
     UIManager.put("OptionPane.background",Color.WHITE);
     UIManager.put("Panel.background",Color.WHITE);
+    UIManager.put("ComboBox.background", Color.WHITE);
   }
 
   /**
@@ -564,6 +572,17 @@
      * Question icon.
      */
     HELP_SMALL,
+
+    /**
+     * Hourglass to display when the user must wait.
+     */
+    WAIT,
+
+    /**
+     * 8 x 8 Hourglass to display when the user must wait.
+     */
+    WAIT_TINY,
+
     /**
      * No icon.
      */
@@ -606,6 +625,12 @@
      * Secondary field invalid text style for the current step panel.
      */
     SECONDARY_FIELD_INVALID,
+
+    /**
+     * Status messages that appear near components.
+     */
+    SECONDARY_STATUS,
+
     /**
      * Textfield text style for the current step panel.
      */
@@ -676,8 +701,7 @@
    */
   static public JComboBox makeJComboBox() {
     JComboBox cbo = new JComboBox();
-    cbo.setOpaque(true);
-    cbo.setBackground(Color.WHITE);
+    cbo.setBorder(BorderFactory.createBevelBorder(BevelBorder.LOWERED));
     return cbo;
   }
 
@@ -944,6 +968,11 @@
       l.setForeground(FIELD_INVALID_COLOR);
       break;
 
+    case SECONDARY_STATUS:
+      l.setFont(UIFactory.SECONDARY_STATUS_FONT);
+      l.setForeground(FIELD_VALID_COLOR);
+      break;
+
     case READ_ONLY:
       l.setFont(UIFactory.READ_ONLY_FONT);
       l.setForeground(READ_ONLY_COLOR);
@@ -1430,6 +1459,10 @@
       key = "error-large-icon";
       break;
 
+    case WAIT_TINY:
+      key = "wait-tiny";
+      break;
+
     default:
       throw new IllegalArgumentException("Unknown iconName: " + iconType);
     }
@@ -1506,6 +1539,10 @@
       description = getMsg("help-small-icon-description");
       break;
 
+    case WAIT_TINY:
+      description = getMsg("help-wait-description");
+      break;
+
     case NO_ICON:
       description = null;
       break;
@@ -1589,6 +1626,11 @@
     case HELP_SMALL:
       tooltip = null;
       break;
+
+    case WAIT_TINY:
+      tooltip = null;
+      break;
+
     case NO_ICON:
       tooltip = null;
       break;
diff --git a/opendj-sdk/opends/src/quicksetup/org/opends/quicksetup/upgrader/RemoteBuildManager.java b/opendj-sdk/opends/src/quicksetup/org/opends/quicksetup/upgrader/RemoteBuildManager.java
index 15ea7ae..b540caf 100644
--- a/opendj-sdk/opends/src/quicksetup/org/opends/quicksetup/upgrader/RemoteBuildManager.java
+++ b/opendj-sdk/opends/src/quicksetup/org/opends/quicksetup/upgrader/RemoteBuildManager.java
@@ -29,7 +29,6 @@
 
 import org.opends.quicksetup.Application;
 import org.opends.quicksetup.util.Utils;
-import org.opends.server.util.DynamicConstants;
 
 import javax.swing.*;
 import java.net.URL;
@@ -40,6 +39,7 @@
 import java.util.regex.Pattern;
 import java.util.regex.Matcher;
 import java.util.logging.Logger;
+import java.util.logging.Level;
 import java.io.*;
 import java.awt.*;
 
@@ -97,28 +97,17 @@
   }
 
   /**
-   * Gets a list of builds found in the remote repository.
-   * @return List of Build objects representing remote builds
-   * @throws IOException if there was a problem contacting the build
-   * repository
-   */
-  public List<Build> listBuilds() throws IOException {
-    return listBuilds(null, null);
-  }
-
-  /**
    * Gets the list of builds from the build repository using a
    * progress monitor to keep the user informed about the status
    * of downloading the build page.
-   * @param c Component to act as parent of the progress monitor
-   * @param o message to display in the progress monitor
+   * @param in InputStream of build information
    * @return list of Build objects
    * @throws IOException if something goes wrong loading the list
    * from the build repository
    */
-  public List<Build> listBuilds(Component c, Object o) throws IOException {
+  public List<Build> listBuilds(InputStream in) throws IOException {
     List<Build> buildList = new ArrayList<Build>();
-    String dailyBuildsPage = downloadDailyBuildsPage(c, o);
+    String dailyBuildsPage = downloadDailyBuildsPage(in);
     Pattern p = Pattern.compile("\\d{14}");
     Matcher m = p.matcher(dailyBuildsPage);
     Set<String> buildIds = new HashSet<String>();
@@ -139,10 +128,10 @@
     // way of getting this information.
     StringBuilder latestContextSb = new StringBuilder()
             .append("daily-builds/latest/OpenDS/build/package/OpenDS-")
-            .append(DynamicConstants.MAJOR_VERSION)
+            .append(org.opends.server.util.DynamicConstants.MAJOR_VERSION)
             .append(".")
-            .append(DynamicConstants.MINOR_VERSION)
-            .append(DynamicConstants.VERSION_QUALIFIER)
+            .append(org.opends.server.util.DynamicConstants.MINOR_VERSION)
+            .append(org.opends.server.util.DynamicConstants.VERSION_QUALIFIER)
             .append(".zip");
     Build latest = new Build(new URL(url, latestContextSb.toString()),
                             "Latest");
@@ -151,8 +140,16 @@
     return buildList;
   }
 
-  private String downloadDailyBuildsPage(Component c, Object o)
-          throws IOException
+  /**
+   * Gets an input stream to download.
+   * @param c Component parent
+   * @param o Object message to display in the ProgressMonitor
+   * @return InputStream for the build list
+   * @throws IOException if something goes wrong
+   */
+  public InputStream getDailyBuildsInputStream(final Component c,
+                                               final Object o)
+    throws IOException
   {
     URL dailyBuildsUrl = new URL(url, "daily-builds");
     URLConnection conn;
@@ -171,16 +168,32 @@
       ProgressMonitorInputStream pmis =
               new ProgressMonitorInputStream(c, o, conn.getInputStream());
       ProgressMonitor pm = pmis.getProgressMonitor();
-      pm.setMillisToDecideToPopup(0);
+      pm.setMaximum(conn.getContentLength());
+      // pm.setMillisToDecideToPopup(0);
+      // pm.setMillisToPopup(0);
       in = pmis;
     } else {
       in = conn.getInputStream();
     }
+    return in;
+  }
+
+  private String downloadDailyBuildsPage(InputStream in)
+          throws IOException
+  {
     BufferedReader reader = new BufferedReader(new InputStreamReader(in));
     StringBuilder builder = new StringBuilder();
     String line;
     while (null != (line = reader.readLine())) {
       builder.append(line);
+
+      // FOR TESTING
+       try {
+          Thread.sleep(50);
+       } catch (InterruptedException e) {
+          LOG.log(Level.INFO, "error", e);
+       }
+
     }
     return builder.toString();
   }
@@ -230,6 +243,9 @@
       while ((i = is.read(buf)) != -1) {
         fos.write(buf, 0, i);
         bytesRead += i;
+        if (app != null) {
+          app.notifyListeners(".");
+        }
       }
     } finally {
       if (is != null) {
diff --git a/opendj-sdk/opends/src/quicksetup/org/opends/quicksetup/upgrader/Upgrader.java b/opendj-sdk/opends/src/quicksetup/org/opends/quicksetup/upgrader/Upgrader.java
index 26919b1..b2d5442 100644
--- a/opendj-sdk/opends/src/quicksetup/org/opends/quicksetup/upgrader/Upgrader.java
+++ b/opendj-sdk/opends/src/quicksetup/org/opends/quicksetup/upgrader/Upgrader.java
@@ -36,14 +36,6 @@
 import org.opends.quicksetup.util.ServerController;
 import org.opends.quicksetup.util.ZipExtractor;
 import org.opends.quicksetup.ui.*;
-import org.opends.server.tools.BackUpDB;
-import org.opends.server.tools.LDIFDiff;
-import org.opends.server.util.*;
-import org.opends.server.types.*;
-import org.opends.server.protocols.internal.InternalClientConnection;
-import org.opends.server.config.ConfigException;
-import org.opends.server.core.ModifyOperation;
-import org.opends.server.core.DirectoryServer;
 
 import java.awt.event.WindowEvent;
 import java.util.*;
@@ -213,6 +205,15 @@
   private RemoteBuildManager remoteBuildManager = null;
 
   /**
+   * Creates a default instance.
+   */
+  public Upgrader() {
+    if (Utils.isWebStart()) {
+      initLoader();
+    }
+  }
+
+  /**
    * {@inheritDoc}
    */
   public String getFrameTitle() {
@@ -258,6 +259,13 @@
   /**
    * {@inheritDoc}
    */
+  public int getExtraDialogHeight() {
+    return UIFactory.EXTRA_DIALOG_HEIGHT;
+  }
+
+  /**
+   * {@inheritDoc}
+   */
   protected String getInstallationPath() {
     // The upgrader runs from the bits extracted by BuildExtractor
     // in the staging directory.  So 'stagePath' below will point
@@ -302,19 +310,20 @@
   public String getSummary(ProgressStep step) {
     String txt = null;
     if (step == UpgradeProgressStep.FINISHED) {
-      String installPath = Utils.getPath(getInstallation().getRootDirectory());
-      String newVersion = null;
-      try {
-        newVersion = getInstallation().getBuildId();
-      } catch (QuickSetupException e) {
-        newVersion = getMsg("upgrade-build-id-unknown");
-      }
-      String[] args = {
-              formatter.getFormattedText(installPath),
-              newVersion };
-      txt = getFormattedSuccess(
-              getMsg("summary-upgrade-finished-successfully",
-              args));
+//    String installPath = Utils.getPath(getInstallation().getRootDirectory());
+//    String newVersion = null;
+//    try {
+//      newVersion = getInstallation().getBuildId();
+//    } catch (QuickSetupException e) {
+//      newVersion = getMsg("upgrade-build-id-unknown");
+//    }
+//    String[] args = {
+//            formatter.getFormattedText(installPath),
+//            newVersion };
+//    txt = getFormattedSuccess(
+//            getMsg("summary-upgrade-finished-successfully",
+//            args));
+      txt = "Upgrade completed successfully"; // TODO BETTER MESSAGE
     } else if (step == UpgradeProgressStep.FINISHED_WITH_ERRORS) {
       txt = getFormattedError(
               getMsg("summary-upgrade-finished-with-errors"));
@@ -433,8 +442,22 @@
             Installation.validateRootDirectory(serverLocation);
 
             // If we get here the value is acceptable
-            Installation installation = new Installation(serverLocation);
+            final Installation installation = new Installation(serverLocation);
             setInstallation(installation);
+
+            // The build ID is needed on the review panel and it is
+            // fairly time consuming to get.  So prime this cached
+            // value in a separate thread.
+            new Thread(new Runnable() {
+              public void run() {
+                try {
+                  installation.getBuildId();
+                } catch (QuickSetupException e) {
+                  LOG.log(Level.INFO, "error", e);
+                }
+              }
+            }).start();
+
             uud.setServerLocation(serverLocationString);
 
           } catch (IllegalArgumentException iae) {
@@ -457,6 +480,13 @@
                 (Build)qs.getFieldValue(FieldName.UPGRADE_BUILD_TO_DOWNLOAD);
       } else {
         buildFile = (File)qs.getFieldValue(FieldName.UPGRADE_FILE);
+        if (buildFile == null) {
+          errorMsgs.add("You must specify a path to an OpenDS build file");
+        } else if (!buildFile.exists()) {
+          errorMsgs.add("File " + Utils.getPath(buildFile) +
+                  " does not exist.");
+          qs.displayFieldInvalid(FieldName.UPGRADE_FILE, true);
+        }
       }
       uud.setBuildToDownload(buildToDownload);
       uud.setInstallPackage(buildFile);
@@ -537,6 +567,15 @@
 
     try {
 
+      if (Utils.isWebStart()) {
+        try {
+          waitForLoader(15); // TODO: ratio
+        } catch (QuickSetupException e) {
+          LOG.log(Level.SEVERE, "Error downloading WebStart jars", e);
+          throw e;
+        }
+      }
+
       File buildZip;
       Build buildToDownload =
               getUpgradeUserData().getInstallPackageToDownload();
@@ -552,6 +591,7 @@
             }
           }
           getRemoteBuildManager().download(buildToDownload, buildZip);
+          notifyListeners(formatter.getFormattedDone());
         } catch (ApplicationException e) {
           LOG.log(Level.INFO, "Error downloading build file", e);
           throw e;
@@ -817,7 +857,7 @@
       LOG.log(Level.INFO, msg, e);
       throw new ApplicationException(ApplicationException.Type.IMPORT_ERROR,
               msg, e);
-    } catch (LDIFException e) {
+    } catch (org.opends.server.util.LDIFException e) {
       String msg = "LDIF error applying configuration customization: " +
               e.getLocalizedMessage();
       LOG.log(Level.INFO, msg, e);
@@ -838,7 +878,7 @@
       LOG.log(Level.INFO, msg, e);
       throw new ApplicationException(ApplicationException.Type.IMPORT_ERROR,
               msg, e);
-    } catch (LDIFException e) {
+    } catch (org.opends.server.util.LDIFException e) {
       String msg = "LDIF error applying schema customization: " +
               e.getLocalizedMessage();
       LOG.log(Level.INFO, msg, e);
@@ -861,13 +901,13 @@
       LOG.log(Level.INFO, msg, e);
       throw new ApplicationException(ApplicationException.Type.IMPORT_ERROR,
               msg, e);
-    } catch (InitializationException e) {
+    } catch (org.opends.server.types.InitializationException e) {
       String msg = "Failed to start server due to initialization error:" +
               e.getLocalizedMessage();
       LOG.log(Level.INFO, msg, e);
       throw new ApplicationException(ApplicationException.Type.IMPORT_ERROR,
               msg, e);
-    } catch (ConfigException e) {
+    } catch (org.opends.server.config.ConfigException e) {
       String msg = "Failed to start server due to configuration error: " +
               e.getLocalizedMessage();
       LOG.log(Level.INFO, msg, e);
@@ -877,31 +917,41 @@
   }
 
   private void applyCustomizationLdifFile(File ldifFile)
-          throws IOException, LDIFException, ApplicationException {
+          throws IOException, org.opends.server.util.LDIFException,
+          ApplicationException
+  {
     try {
       startServerWithoutConnectionHandlers();
-      InternalClientConnection cc =
-              InternalClientConnection.getRootConnection();
-      LDIFImportConfig importCfg =
-              new LDIFImportConfig(Utils.getPath(ldifFile));
-      LDIFReader ldifReader = new LDIFReader(importCfg);
-      ChangeRecordEntry cre;
+      org.opends.server.protocols.internal.InternalClientConnection cc =
+              org.opends.server.protocols.internal.
+                      InternalClientConnection.getRootConnection();
+      org.opends.server.types.LDIFImportConfig importCfg =
+              new org.opends.server.types.LDIFImportConfig(
+                      Utils.getPath(ldifFile));
+      org.opends.server.util.LDIFReader ldifReader =
+              new org.opends.server.util.LDIFReader(importCfg);
+      org.opends.server.util.ChangeRecordEntry cre;
       while (null != (cre = ldifReader.readChangeRecord(false))) {
-        if (cre instanceof ModifyChangeRecordEntry) {
-          ModifyChangeRecordEntry mcre = (ModifyChangeRecordEntry) cre;
-          ByteString dnByteString =
-                  ByteStringFactory.create(mcre.getDN().toString());
-          ModifyOperation op =
+        if (cre instanceof org.opends.server.util.ModifyChangeRecordEntry) {
+          org.opends.server.util.ModifyChangeRecordEntry mcre =
+                  (org.opends.server.util.ModifyChangeRecordEntry) cre;
+          org.opends.server.types.ByteString dnByteString =
+                  org.opends.server.types.ByteStringFactory.create(
+                          mcre.getDN().toString());
+          org.opends.server.core.ModifyOperation op =
                   cc.processModify(dnByteString, mcre.getModifications());
-          ResultCode rc = op.getResultCode();
-          if (rc.equals(ResultCode.OBJECTCLASS_VIOLATION)) {
+          org.opends.server.types.ResultCode rc = op.getResultCode();
+          if (rc.equals(
+                  org.opends.server.types.ResultCode.
+                          OBJECTCLASS_VIOLATION)) {
             // try again without schema checking
-            DirectoryServer.setCheckSchema(false);
+            org.opends.server.core.DirectoryServer.setCheckSchema(false);
             op = cc.processModify(dnByteString, mcre.getModifications());
             rc = op.getResultCode();
           }
-          if (rc.equals(ResultCode.SUCCESS)) {
-            if (DirectoryServer.checkSchema()) {
+          if (rc.equals(org.opends.server.types.ResultCode.
+                  SUCCESS)) {
+            if (org.opends.server.core.DirectoryServer.checkSchema()) {
               notifyListeners(
                       getMsg("upgrade-mod",
                               modListToString(op.getModifications()))
@@ -911,9 +961,11 @@
                       getMsg("upgrade-mod-no-schema",
                               modListToString(op.getModifications()))
                       + formatter.getLineBreak());
-              DirectoryServer.setCheckSchema(true);
+              org.opends.server.core.DirectoryServer.setCheckSchema(true);
             }
-          } else if (rc.equals(ResultCode.ATTRIBUTE_OR_VALUE_EXISTS)) {
+          } else if (rc.equals(
+                  org.opends.server.types.ResultCode.
+                          ATTRIBUTE_OR_VALUE_EXISTS)) {
             // ignore this error
             notifyListeners(
                     getMsg("upgrade-mod-ignore",
@@ -945,7 +997,8 @@
     }
   }
 
-  private String modListToString(List<Modification> modifications) {
+  private String modListToString(
+          List<org.opends.server.types.Modification> modifications) {
     StringBuilder modsMsg = new StringBuilder();
     for(int i = 0; i < modifications.size(); i++) {
       modsMsg.append(modifications.get(i).toString());
@@ -1054,7 +1107,8 @@
             Utils.getPath(source) + " with " +
             Utils.getPath(target)));
 
-    int ret = LDIFDiff.mainDiff(args.toArray(new String[]{}), false);
+    int ret = org.opends.server.tools.LDIFDiff.mainDiff(
+            args.toArray(new String[]{}), false);
     if (ret != 0) {
       StringBuffer sb = new StringBuffer()
               .append("'ldif-diff' tool returned error code ")
@@ -1127,7 +1181,8 @@
               ApplicationException.Type.FILE_SYSTEM_ERROR,
               "error backup up databases", e);
     }
-    int ret = BackUpDB.mainBackUpDB(args.toArray(new String[0]));
+    int ret = org.opends.server.tools.BackUpDB.mainBackUpDB(
+            args.toArray(new String[0]));
     if (ret != 0) {
       StringBuffer sb = new StringBuffer()
               .append("'backup utility returned error code ")
diff --git a/opendj-sdk/opends/src/quicksetup/org/opends/quicksetup/upgrader/ui/ChooseVersionPanel.java b/opendj-sdk/opends/src/quicksetup/org/opends/quicksetup/upgrader/ui/ChooseVersionPanel.java
index 6ec0fec..576e093 100644
--- a/opendj-sdk/opends/src/quicksetup/org/opends/quicksetup/upgrader/ui/ChooseVersionPanel.java
+++ b/opendj-sdk/opends/src/quicksetup/org/opends/quicksetup/upgrader/ui/ChooseVersionPanel.java
@@ -28,6 +28,7 @@
 package org.opends.quicksetup.upgrader.ui;
 
 import org.opends.quicksetup.UserData;
+import org.opends.quicksetup.event.BrowseActionListener;
 import org.opends.quicksetup.ui.*;
 import org.opends.quicksetup.upgrader.Build;
 import org.opends.quicksetup.upgrader.RemoteBuildManager;
@@ -36,7 +37,12 @@
 
 import javax.swing.*;
 import java.awt.*;
+import java.awt.event.ActionListener;
+import java.awt.event.ActionEvent;
 import java.io.File;
+import java.io.IOException;
+import java.io.InputStream;
+import java.util.logging.Level;
 import java.util.logging.Logger;
 
 /**
@@ -55,6 +61,7 @@
   private JComboBox cboBuild = null;
   private JTextField tfFile = null;
   private boolean loadBuildListAttempted = false;
+  private RemoteBuildListComboBoxModelCreator bld = null;
 
   /**
    * Creates an instance.
@@ -63,6 +70,7 @@
    */
   public ChooseVersionPanel(GuiApplication application) {
     super(application);
+    createBuildLoader();
   }
 
   /**
@@ -71,7 +79,32 @@
   public void beginDisplay(UserData data) {
     super.beginDisplay(data);
     if (!loadBuildListAttempted) {
-      loadBuildList();
+
+      // Begin display is called outside the UI
+      // thread.  loadBuildList must be called
+      // inside the UI thread in order to properly
+      // set up the ProgressListenerInputStream
+      // displayed while downloading the build list.
+      // The enclosing thread and sleep statement is
+      // there to allow the card layout to switch to
+      // this panel before setting up the downloading.
+      int delay = 100;
+      ActionListener loadPerformer = new ActionListener() {
+        public void actionPerformed(ActionEvent evt) {
+          rbLocal.setSelected(true);
+          rbRemote.setEnabled(false);
+          cboBuild.setEnabled(false);
+          cboBuild.setRenderer(new BuildListLoadingComboBoxRenderer());
+          try {
+            loadBuildList();
+          } catch (IOException e) {
+            LOG.log(Level.INFO, "error", e);
+          }
+        }
+      };
+      Timer t = new Timer(delay, loadPerformer);
+      t.setRepeats(false);
+      t.start();
     }
   }
 
@@ -85,7 +118,10 @@
     } else if (FieldName.UPGRADE_BUILD_TO_DOWNLOAD.equals(fieldName)) {
       value = cboBuild.getSelectedItem();
     } else if (FieldName.UPGRADE_FILE.equals(fieldName)) {
-      value = new File(tfFile.getText());
+      String s = tfFile.getText();
+      if (s != null && s.length() > 0) {
+        value = new File(tfFile.getText());
+      }
     }
     return value;
   }
@@ -120,13 +156,21 @@
     tfFile = new JTextField();
     tfFile.setColumns(20);
 
+    JButton butBrowse = UIFactory.makeJButton(getMsg("browse-button-label"),
+            getMsg("browse-button-tooltip"));
+
+    BrowseActionListener l =
+            new BrowseActionListener(tfFile,
+                    BrowseActionListener.BrowseType.LOCATION_DIRECTORY,
+                    getMainWindow());
+    butBrowse.addActionListener(l);
+
     JPanel pnlBrowse = Utilities.createBrowseButtonPanel(
             UIFactory.makeJLabel(null,
                     getMsg("upgrade-choose-version-local-path"),
                     UIFactory.TextStyle.SECONDARY_FIELD_VALID),
             tfFile,
-            UIFactory.makeJButton(getMsg("browse-button-label"),
-                    getMsg("browse-button-tooltip")));
+            butBrowse);
 
     p.setLayout(new GridBagLayout());
     // p.setBorder(BorderFactory.createLineBorder(Color.RED));
@@ -201,9 +245,20 @@
     return getMsg("upgrade-choose-version-panel-instructions");
   }
 
-  private void loadBuildList() {
-    RemoteBuildListComboBoxModelCreator bld =
-            new RemoteBuildListComboBoxModelCreator();
+  private RemoteBuildListComboBoxModelCreator createBuildLoader() {
+    if (bld == null) {
+      RemoteBuildManager rbm =
+              ((Upgrader) getApplication()).getRemoteBuildManager();
+      try {
+        bld = new RemoteBuildListComboBoxModelCreator(rbm);
+      } catch (IOException e) {
+        LOG.log(Level.INFO, "error", e);
+      }
+    }
+    return bld;
+  }
+
+  private void loadBuildList() throws IOException {
     bld.startBackgroundTask();
   }
 
@@ -226,10 +281,49 @@
      * Creates a default instance.
      */
     public BuildListErrorComboBoxRenderer() {
-      super("Error accessing build information",
-              UIFactory.getImageIcon(UIFactory.IconType.ERROR),
+      super("Unable to access remote build information",
+              UIFactory.getImageIcon(UIFactory.IconType.WARNING),
               SwingConstants.LEFT);
-      UIFactory.setTextStyle(this, UIFactory.TextStyle.SECONDARY_FIELD_INVALID);
+      UIFactory.setTextStyle(this, UIFactory.TextStyle.SECONDARY_STATUS);
+      setOpaque(true);
+      setBackground(Color.WHITE);
+    }
+
+    /**
+     * {@inheritDoc}
+     */
+    public Component getListCellRendererComponent(JList jList,
+                                                  Object object,
+                                                  int i,
+                                                  boolean b,
+                                                  boolean b1) {
+      return this;
+    }
+  }
+
+  /**
+   * Renders the combo box when there has been an error downloading
+   * the build information.
+   */
+  private class BuildListLoadingComboBoxRenderer extends JLabel
+          implements ListCellRenderer {
+
+    /**
+     * The serial version identifier required to satisfy the compiler because
+     * this * class extends a class that implements the
+     * {@code java.io.Serializable} interface.  This value was generated using
+     * the {@code serialver} command-line utility included with the Java SDK.
+     */
+    private static final long serialVersionUID = -7075573664472711599L;
+
+    /**
+     * Creates a default instance.
+     */
+    public BuildListLoadingComboBoxRenderer() {
+      super("Loading remote build information...",
+              UIFactory.getImageIcon(UIFactory.IconType.WAIT_TINY),
+              SwingConstants.LEFT);
+      UIFactory.setTextStyle(this, UIFactory.TextStyle.SECONDARY_STATUS);
       setOpaque(true);
       setBackground(Color.WHITE);
     }
@@ -256,13 +350,21 @@
           extends BackgroundTask<java.util.List<Build>> {
 
     private RemoteBuildManager rbm = null;
+    private InputStream in = null;
+
+    public RemoteBuildListComboBoxModelCreator(RemoteBuildManager rbm)
+      throws IOException
+    {
+      this.rbm = rbm;
+      this.in = rbm.getDailyBuildsInputStream(getMainWindow(),
+              "Reading build information");
+    }
 
     /**
      * {@inheritDoc}
      */
     public java.util.List<Build> processBackgroundTask() throws Exception {
-      rbm = ((Upgrader)getApplication()).getRemoteBuildManager();
-      return rbm.listBuilds(getMainWindow(), "Loading build information");
+      return rbm.listBuilds(in);
     }
 
     /**
diff --git a/opendj-sdk/opends/src/quicksetup/org/opends/quicksetup/util/ServerController.java b/opendj-sdk/opends/src/quicksetup/org/opends/quicksetup/util/ServerController.java
index 91b6d72..57d1fbb 100644
--- a/opendj-sdk/opends/src/quicksetup/org/opends/quicksetup/util/ServerController.java
+++ b/opendj-sdk/opends/src/quicksetup/org/opends/quicksetup/util/ServerController.java
@@ -28,10 +28,6 @@
 package org.opends.quicksetup.util;
 
 import org.opends.quicksetup.*;
-import org.opends.server.protocols.ldap.LDAPResultCode;
-import org.opends.server.core.DirectoryServer;
-import org.opends.server.types.InitializationException;
-import org.opends.server.config.ConfigException;
 
 import javax.naming.NamingException;
 import java.util.ArrayList;
@@ -116,7 +112,9 @@
 
       int returnValue = process.waitFor();
 
-      int clientSideError = LDAPResultCode.CLIENT_SIDE_CONNECT_ERROR;
+      int clientSideError =
+              org.opends.server.protocols.ldap.
+                      LDAPResultCode.CLIENT_SIDE_CONNECT_ERROR;
       if ((returnValue == clientSideError) || (returnValue == 0)) {
         if (Utils.isWindows()) {
           /*
@@ -193,16 +191,20 @@
    * externally as if the server is online without connection handlers
    * listening.
    *
-   * @throws  ConfigException  If there is a problem with the Directory Server
-   *                           configuration that prevents a critical component
-   *                           from being instantiated.
+   * @throws org.opends.server.config.ConfigException
+   *         If there is a problem with the Directory Server
+   *         configuration that prevents a critical component
+   *         from being instantiated.
    *
-   * @throws  InitializationException  If some other problem occurs while
-   *                                   attempting to initialize and start the
-   *                                   Directory Server.
+   * @throws org.opends.server.types.InitializationException
+   *         If some other problem occurs while
+   *         attempting to initialize and start the
+   *         Directory Server.
    */
   public void startServerInProcess(boolean disableConnectionHandlers)
-          throws InitializationException, ConfigException {
+          throws
+          org.opends.server.types.InitializationException,
+          org.opends.server.config.ConfigException {
     System.setProperty(
             "org.opends.server.DisableConnectionHandlers",
             disableConnectionHandlers ? "true" : null);
@@ -213,7 +215,8 @@
    * Stops a server that had been running 'in process'.
    */
   public void stopServerInProcess() {
-    DirectoryServer.shutDown(ServerController.class.getName(),
+    org.opends.server.core.DirectoryServer.shutDown(
+            ServerController.class.getName(),
             "quicksetup requests shutdown");
   }
 
@@ -367,19 +370,24 @@
   /**
    * Starts the OpenDS server in this process.
    *
-   * @throws  ConfigException  If there is a problem with the Directory Server
-   *                           configuration that prevents a critical component
-   *                           from being instantiated.
+   * @throws org.opends.server.config.ConfigException
+   *  If there is a problem with the Directory Server
+   *  configuration that prevents a critical component
+   *  from being instantiated.
    *
-   * @throws  InitializationException  If some other problem occurs while
-   *                                   attempting to initialize and start the
-   *                                   Directory Server.
+   * @throws org.opends.server.types.InitializationException
+   *  If some other problem occurs while
+   *  attempting to initialize and start the
+   *  Directory Server.
    */
   public void startServerInProcess()
-          throws InitializationException, ConfigException
+          throws
+          org.opends.server.types.InitializationException,
+          org.opends.server.config.ConfigException
   {
     // Bootstrap and start the Directory Server.
-    DirectoryServer directoryServer = DirectoryServer.getInstance();
+    org.opends.server.core.DirectoryServer directoryServer =
+            org.opends.server.core.DirectoryServer.getInstance();
 
     directoryServer.bootstrapServer();
     String configClass = "org.opends.server.extensions.ConfigFileHandler";
diff --git a/opendj-sdk/opends/src/quicksetup/org/opends/quicksetup/installer/webstart/WebStartDownloader.java b/opendj-sdk/opends/src/quicksetup/org/opends/quicksetup/webstart/WebStartDownloader.java
similarity index 93%
rename from opendj-sdk/opends/src/quicksetup/org/opends/quicksetup/installer/webstart/WebStartDownloader.java
rename to opendj-sdk/opends/src/quicksetup/org/opends/quicksetup/webstart/WebStartDownloader.java
index 9e9b706..41ade92 100644
--- a/opendj-sdk/opends/src/quicksetup/org/opends/quicksetup/installer/webstart/WebStartDownloader.java
+++ b/opendj-sdk/opends/src/quicksetup/org/opends/quicksetup/webstart/WebStartDownloader.java
@@ -25,7 +25,7 @@
  *      Portions Copyright 2006-2007 Sun Microsystems, Inc.
  */
 
-package org.opends.quicksetup.installer.webstart;
+package org.opends.quicksetup.webstart;
 
 import java.io.IOException;
 import java.net.MalformedURLException;
@@ -69,6 +69,8 @@
 
   private Status status = Status.DOWNLOADING;
 
+  private String summary = null;
+
   /**
    * This enumeration contains the different Status on which
    * the dowloading process of the jars can be.
@@ -91,6 +93,13 @@
     }
 
   /**
+   * Creates a default instance.
+   */
+  public WebStartDownloader() {
+    this.summary = getMsg("downloading");
+  }
+
+  /**
    * Starts the downloading of the jar files.  If forceDownload is set to
    * <CODE>true</CODE> the files will be re-downloaded even if they already
    * are on cache.
@@ -147,6 +156,22 @@
   }
 
   /**
+   * Gets a summary message of the downloader's current progress.
+   * @return String for showing the user progress
+   */
+  public String getSummary() {
+    return this.summary;
+  }
+
+  /**
+   * Sets a summary message of the downloader's current progress.
+   * @param summary String for showing the user progress
+   */
+  public void setSummary(String summary) {
+    this.summary = summary;
+  }
+
+  /**
    * Returns <CODE>true</CODE> if the install is finished and
    * <CODE>false</CODE> otherwise.
    * @return <CODE>true</CODE> if the install is finished and
@@ -421,4 +446,10 @@
   {
     return ResourceProvider.getInstance().getMsg(key, args);
   }
+
+  private String getMsg(String key)
+  {
+    return ResourceProvider.getInstance().getMsg(key);
+  }
+
 }

--
Gitblit v1.10.0