From 4ee56f42f2f9d9d19fc994c22890bfec1790bc1c Mon Sep 17 00:00:00 2001
From: kenneth_suter <kenneth_suter@localhost>
Date: Mon, 23 Apr 2007 22:07:50 +0000
Subject: [PATCH] enough code to get the upgrader to perform a successful upgrade in graphical UI mode on a sunny day

---
 opendj-sdk/opends/src/quicksetup/org/opends/quicksetup/ui/QuickSetupPanel.java                      |    6 
 opendj-sdk/opends/src/quicksetup/org/opends/quicksetup/upgrader/Build.java                          |   10 +
 opendj-sdk/opends/src/quicksetup/org/opends/quicksetup/upgrader/Upgrader.java                       |   53 ++++++
 opendj-sdk/opends/src/quicksetup/org/opends/quicksetup/util/FileManager.java                        |   11 -
 opendj-sdk/opends/src/quicksetup/org/opends/quicksetup/upgrader/ui/BuildListDownloadErrorPanel.java |  123 +++++++++++++++++
 opendj-sdk/opends/src/quicksetup/org/opends/quicksetup/upgrader/ui/ChooseVersionPanel.java          |   98 +------------
 opendj-sdk/opends/resource/upgrade                                                                  |    5 
 opendj-sdk/opends/src/quicksetup/org/opends/quicksetup/util/Utils.java                              |   44 +++++
 opendj-sdk/opends/src/quicksetup/org/opends/quicksetup/ui/ButtonsPanel.java                         |   13 +
 opendj-sdk/opends/src/quicksetup/org/opends/quicksetup/resources/Resources.properties               |    4 
 opendj-sdk/opends/src/quicksetup/org/opends/quicksetup/upgrader/RemoteBuildManager.java             |   39 +++++
 opendj-sdk/opends/src/quicksetup/org/opends/quicksetup/util/ZipExtractor.java                       |   14 +-
 12 files changed, 292 insertions(+), 128 deletions(-)

diff --git a/opendj-sdk/opends/resource/upgrade b/opendj-sdk/opends/resource/upgrade
index ddef946..fca3240 100644
--- a/opendj-sdk/opends/resource/upgrade
+++ b/opendj-sdk/opends/resource/upgrade
@@ -165,8 +165,9 @@
   else
     # URL FOR TESTING ONLY
     # JAVAWS_VM_ARGS="-Dorg.opends.quicksetup.upgrader.Root=$INSTANCE_ROOT -Xdebug -Xnoagent -Djava.compiler=NONE -Xrunjdwp:transport=dt_socket,server=y,suspend=y,address=5005"
-    JAVAWS_VM_ARGS="-Xclearcache -Dorg.opends.quicksetup.upgrader.Root=$INSTANCE_ROOT"
+    JAVAWS_VM_ARGS="-Dorg.opends.quicksetup.upgrader.Root=$INSTANCE_ROOT"
     export JAVAWS_VM_ARGS
-    "${JAVAWS_BIN}" "http://localhost:8080/install/QuickUpgrade.jnlp"    
+    "${JAVAWS_BIN}" "http://localhost:8080/install/QuickUpgrade.jnlp"
+    echo "Started Java Web Start upgrade"
   fi
 fi
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 1d5041b..13eae51 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
@@ -702,7 +702,9 @@
 summary-upgrade-history=Recording Upgrade History...
 summary-upgrade-cleanup=Cleaning Up...
 summary-upgrade-abort=Aborting Upgrade Due to Error...
-summary-upgrade-finished-successfully=Upgrade Finished Successfully
+summary-upgrade-finished-successfully=<b>OpenDS QuickSetup Completed \
+  Successfully.</b><br>The OpenDS installation at {0} has now been upgraded \
+  to version {1}.
 summary-upgrade-finished-with-errors=Upgrade Finished with Errors
 
 #
diff --git a/opendj-sdk/opends/src/quicksetup/org/opends/quicksetup/ui/ButtonsPanel.java b/opendj-sdk/opends/src/quicksetup/org/opends/quicksetup/ui/ButtonsPanel.java
index e5fe9ec..3d44cc9 100644
--- a/opendj-sdk/opends/src/quicksetup/org/opends/quicksetup/ui/ButtonsPanel.java
+++ b/opendj-sdk/opends/src/quicksetup/org/opends/quicksetup/ui/ButtonsPanel.java
@@ -29,6 +29,7 @@
 
 import org.opends.quicksetup.ButtonName;
 import org.opends.quicksetup.WizardStep;
+import org.opends.quicksetup.upgrader.Upgrader;
 import org.opends.quicksetup.event.ButtonActionListener;
 import org.opends.quicksetup.event.ButtonEvent;
 import org.opends.quicksetup.installer.Installer;
@@ -106,8 +107,13 @@
   {
     GuiApplication application = getApplication();
     previousButton.setVisible(application.canGoBack(step));
-    nextButton.setVisible(application.canGoForward(step));
-    finishButton.setVisible(application.canFinish(step));
+    if (application.canFinish(step)) {
+      finishButton.setVisible(true);
+      nextButton.setVisible(false);
+    } else {
+      finishButton.setVisible(false);
+      nextButton.setVisible(application.canGoForward(step));
+    }
     quitButton.setVisible(application.canQuit(step));
     closeButton.setVisible(application.canClose(step));
     cancelButton.setVisible(application.canCancel(step));
@@ -224,7 +230,8 @@
     nextFinishPanel.add(nextButton, gbcAux);
 
     // TODO: remove this hack
-    if (getApplication() instanceof Installer) {
+    if (getApplication() instanceof Installer ||
+            getApplication() instanceof Upgrader) {
       nextFinishPanel.add(finishButton, gbcAux);
     }
     width =
diff --git a/opendj-sdk/opends/src/quicksetup/org/opends/quicksetup/ui/QuickSetupPanel.java b/opendj-sdk/opends/src/quicksetup/org/opends/quicksetup/ui/QuickSetupPanel.java
index 8713fb3..d2872bb 100644
--- a/opendj-sdk/opends/src/quicksetup/org/opends/quicksetup/ui/QuickSetupPanel.java
+++ b/opendj-sdk/opends/src/quicksetup/org/opends/quicksetup/ui/QuickSetupPanel.java
@@ -110,7 +110,7 @@
    * @return the value associated to the key in the properties file.
    * properties file.
    */
-  protected String getMsg(String key)
+  public String getMsg(String key)
   {
     return getI18n().getMsg(key);
   }
@@ -130,7 +130,7 @@
    * @param args the arguments to be passed to generate the resulting value.
    * @return the value associated to the key in the properties file.
    */
-  protected String getMsg(String key, String[] args)
+  public String getMsg(String key, String[] args)
   {
     return getI18n().getMsg(key, args);
   }
@@ -139,7 +139,7 @@
    * Returns a ResourceProvider instance.
    * @return a ResourceProvider instance.
    */
-  private ResourceProvider getI18n()
+  public ResourceProvider getI18n()
   {
     return ResourceProvider.getInstance();
   }
diff --git a/opendj-sdk/opends/src/quicksetup/org/opends/quicksetup/upgrader/Build.java b/opendj-sdk/opends/src/quicksetup/org/opends/quicksetup/upgrader/Build.java
index a459219..8be4805 100644
--- a/opendj-sdk/opends/src/quicksetup/org/opends/quicksetup/upgrader/Build.java
+++ b/opendj-sdk/opends/src/quicksetup/org/opends/quicksetup/upgrader/Build.java
@@ -32,7 +32,7 @@
 /**
    * Representation of an OpenDS build package.
  */
-public class Build {
+public class Build implements Comparable {
 
   private URL url;
   private String id;
@@ -78,4 +78,12 @@
   public String toString() {
     return getDisplayName();
   }
+
+  /**
+   * {@inheritDoc}
+   */
+  public int compareTo(Object o) {
+    return getDisplayName().compareTo(((Build)o).getDisplayName());
+  }
+
 }
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 ca6ea19..15ea7ae 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
@@ -28,6 +28,8 @@
 package org.opends.quicksetup.upgrader;
 
 import org.opends.quicksetup.Application;
+import org.opends.quicksetup.util.Utils;
+import org.opends.server.util.DynamicConstants;
 
 import javax.swing.*;
 import java.net.URL;
@@ -123,9 +125,29 @@
     while (m.find()) {
       buildIds.add(dailyBuildsPage.substring(m.start(), m.end()));
     }
-    for (String buildId : buildIds) {
-      buildList.add(new Build(url, buildId));
-    }
+
+//    for (String buildId : buildIds) {
+//      // TODO:  this needs to be changed
+//      URL buildUrl =
+//              new URL(url, "daily-builds/" +
+//                      buildId +
+//                      "/OpenDS/build/package/OpenDS-0.1.zip");
+//      buildList.add(new Build(url, buildId));
+//    }
+
+    // This is encoded in build.xml.  We might need a more dynamic
+    // way of getting this information.
+    StringBuilder latestContextSb = new StringBuilder()
+            .append("daily-builds/latest/OpenDS/build/package/OpenDS-")
+            .append(DynamicConstants.MAJOR_VERSION)
+            .append(".")
+            .append(DynamicConstants.MINOR_VERSION)
+            .append(DynamicConstants.VERSION_QUALIFIER)
+            .append(".zip");
+    Build latest = new Build(new URL(url, latestContextSb.toString()),
+                            "Latest");
+    buildList.add(latest);
+    Collections.sort(buildList);
     return buildList;
   }
 
@@ -188,6 +210,17 @@
     }
     InputStream is = null;
     FileOutputStream fos = null;
+
+    // If the destination already exists blow it away, then
+    // create the new file.
+    if (destination.exists()) {
+      if (!destination.delete()) {
+        throw new IOException("Could not overwrite existing file " +
+                Utils.getPath(destination));
+      }
+    }
+    Utils.createFile(destination);
+
     try {
       is = conn.getInputStream();
       fos = new FileOutputStream(destination);
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 9d86f03..26919b1 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
@@ -300,7 +300,28 @@
    * {@inheritDoc}
    */
   public String getSummary(ProgressStep step) {
-    return getMsg(((UpgradeProgressStep) step).getSummaryMesssageKey());
+    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));
+    } else if (step == UpgradeProgressStep.FINISHED_WITH_ERRORS) {
+      txt = getFormattedError(
+              getMsg("summary-upgrade-finished-with-errors"));
+    } else {
+      txt = getMsg(((UpgradeProgressStep) step).getSummaryMesssageKey());
+    }
+    return txt;
   }
 
   /**
@@ -458,6 +479,8 @@
    * {@inheritDoc}
    */
   public void finishClicked(final WizardStep cStep, final QuickSetup qs) {
+    qs.launch();
+    qs.setCurrentStep(UpgradeWizardStep.PROGRESS);
   }
 
   /**
@@ -470,6 +493,8 @@
    * {@inheritDoc}
    */
   public void closeClicked(WizardStep cStep, QuickSetup qs) {
+    // TODO: prompt
+    qs.quit();
   }
 
   /**
@@ -484,7 +509,22 @@
    * {@inheritDoc}
    */
   public boolean canFinish(WizardStep step) {
-    return UpgradeWizardStep.REVIEW.equals(step);
+    boolean cf = UpgradeWizardStep.REVIEW.equals(step);
+    return cf;
+  }
+
+  /**
+   * {@inheritDoc}
+   */
+  public boolean canGoBack(WizardStep step) {
+    return super.canGoBack(step) && !step.equals(UpgradeWizardStep.PROGRESS);
+  }
+
+  /**
+   * {@inheritDoc}
+   */
+  public boolean canClose(WizardStep step) {
+    return step.equals(UpgradeWizardStep.PROGRESS);
   }
 
   /**
@@ -704,8 +744,7 @@
       setCurrentProgressStep(UpgradeProgressStep.FINISHED);
     } else {
       setCurrentProgressStep(UpgradeProgressStep.FINISHED_WITH_ERRORS);
-      notifyListeners(runException.getLocalizedMessage() +
-              formatter.getLineBreak());
+      notifyListeners(formatter.getFormattedError(runException, true));
     }
 
   }
@@ -720,7 +759,7 @@
   private void abort(ProgressStep lastStep) throws ApplicationException {
     UpgradeProgressStep lastUpgradeStep = (UpgradeProgressStep) lastStep;
     EnumSet<UpgradeProgressStep> stepsStarted =
-            EnumSet.range(UpgradeProgressStep.INITIALIZING, lastUpgradeStep);
+            EnumSet.range(UpgradeProgressStep.NOT_STARTED, lastUpgradeStep);
 
     if (stepsStarted.contains(UpgradeProgressStep.BACKING_UP_FILESYSTEM)) {
 
@@ -1116,7 +1155,9 @@
       // old delete.  Note that on Windows there are file
       // locking issues to we mark files for deletion after
       // this JVM exits
-      fm.deleteRecursively(stagingDir, null, /*onExit=*/true);
+      if (stagingDir.exists()) {
+        fm.deleteRecursively(stagingDir, null, /*onExit=*/true);
+      }
 
     } catch (IOException e) {
       // TODO i18n
diff --git a/opendj-sdk/opends/src/quicksetup/org/opends/quicksetup/upgrader/ui/BuildListDownloadErrorPanel.java b/opendj-sdk/opends/src/quicksetup/org/opends/quicksetup/upgrader/ui/BuildListDownloadErrorPanel.java
new file mode 100644
index 0000000..34a8a6b
--- /dev/null
+++ b/opendj-sdk/opends/src/quicksetup/org/opends/quicksetup/upgrader/ui/BuildListDownloadErrorPanel.java
@@ -0,0 +1,123 @@
+/*
+ * CDDL HEADER START
+ *
+ * The contents of this file are subject to the terms of the
+ * Common Development and Distribution License, Version 1.0 only
+ * (the "License").  You may not use this file except in compliance
+ * with the License.
+ *
+ * You can obtain a copy of the license at
+ * trunk/opends/resource/legal-notices/OpenDS.LICENSE
+ * or https://OpenDS.dev.java.net/OpenDS.LICENSE.
+ * See the License for the specific language governing permissions
+ * and limitations under the License.
+ *
+ * When distributing Covered Code, include this CDDL HEADER in each
+ * file and include the License file at
+ * trunk/opends/resource/legal-notices/OpenDS.LICENSE.  If applicable,
+ * add the following below this CDDL HEADER, with the fields enclosed
+ * by brackets "[]" replaced with your own identifying information:
+ *      Portions Copyright [yyyy] [name of copyright owner]
+ *
+ * CDDL HEADER END
+ *
+ *
+ *      Portions Copyright 2007 Sun Microsystems, Inc.
+ */
+
+package org.opends.quicksetup.upgrader.ui;
+
+import org.opends.quicksetup.upgrader.RemoteBuildManager;
+import org.opends.quicksetup.ui.CustomHTMLEditorKit;
+import org.opends.quicksetup.ui.UIFactory;
+
+import javax.swing.*;
+import java.awt.*;
+import java.awt.event.ActionListener;
+import java.awt.event.ActionEvent;
+import java.net.Proxy;
+import java.net.SocketAddress;
+import java.net.URL;
+
+/**
+   * This panel represents the big error message the pops up when the
+ * panel can't download the build information.
+ */
+class BuildListDownloadErrorPanel extends JPanel {
+
+  private RemoteBuildManager rbm = null;
+  private Throwable reason = null;
+  private ChooseVersionPanel chooseVersionPanel;
+
+  private static final long serialVersionUID = 4614415561629811272L;
+
+  /**
+   * Creates an instance.
+   * @param rbm RemoteBuildManager that is having trouble.
+   * @param reason Throwable indicating the error when downloading
+   * @param chooseVersionPanel ChooseVersionPanel where the error occurred
+   */
+  public BuildListDownloadErrorPanel(ChooseVersionPanel chooseVersionPanel,
+                                     RemoteBuildManager rbm,
+                                     Throwable reason) {
+    this.chooseVersionPanel = chooseVersionPanel;
+    this.rbm = rbm;
+    this.reason = reason;
+    layoutPanel();
+  }
+
+  private void layoutPanel() {
+    setLayout(new GridBagLayout());
+
+    String proxyString = "None";
+    Proxy proxy = rbm.getProxy();
+    if (proxy != null) {
+      SocketAddress addr = proxy.address();
+      proxyString = addr.toString();
+    }
+
+    String baseContext = "Unspecified";
+    URL url = rbm.getBaseContext();
+    if (url != null) {
+      baseContext = url.toString();
+    }
+
+    String html =
+            chooseVersionPanel.getMsg("upgrade-choose-version-build-list-error",
+            new String[]{
+                    baseContext,
+                    reason.getLocalizedMessage(),
+                    proxyString});
+
+    /* This helps with debugger the HTML rendering
+    StringBuffer content = new StringBuffer();
+    try {
+      FileInputStream fis = new FileInputStream("/tmp/error-html");
+      BufferedReader reader = new BufferedReader(new InputStreamReader(fis));
+      String line = null;
+      while (null != (line = reader.readLine())) {
+        content.append(line);
+      }
+      html = content.toString();
+    } catch (IOException e) {
+      e.printStackTrace();
+    }
+    */
+
+    CustomHTMLEditorKit ek = new CustomHTMLEditorKit();
+    ek.addActionListener(new ActionListener() {
+      public void actionPerformed(ActionEvent ev) {
+        chooseVersionPanel.specifyProxy(getParent());
+
+        // Since the proxy info may change we need
+        // to regenerate the text
+        removeAll();
+        layoutPanel();
+        repaint();
+        validate();
+      }
+    });
+    add(UIFactory.makeHtmlPane(html, ek, UIFactory.INSTRUCTIONS_FONT));
+  }
+
+}
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 71741b5..ba14398 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,7 +28,6 @@
 package org.opends.quicksetup.upgrader.ui;
 
 import org.opends.quicksetup.UserData;
-import org.opends.quicksetup.ui.CustomHTMLEditorKit;
 import org.opends.quicksetup.ui.FieldName;
 import org.opends.quicksetup.ui.GuiApplication;
 import org.opends.quicksetup.ui.QuickSetupStepPanel;
@@ -42,14 +41,11 @@
 
 import javax.swing.*;
 import java.awt.*;
-import java.awt.event.ActionEvent;
-import java.awt.event.ActionListener;
 import java.io.File;
 import java.lang.reflect.InvocationTargetException;
 import java.net.InetSocketAddress;
 import java.net.Proxy;
 import java.net.SocketAddress;
-import java.net.URL;
 import java.util.logging.Level;
 import java.util.logging.Logger;
 
@@ -221,7 +217,13 @@
     bld.startBackgroundTask();
   }
 
-  private void specifyProxy(final Component parent) {
+  /**
+   * Displays a dialog prompting the user for proxy information
+   * after which applys the new proxy information to the available
+   * RemoteBuildManager.
+   * @param parent Component that will server as parent to the dialog
+   */
+  void specifyProxy(final Component parent) {
     Runnable proxySpecifier = new Runnable() {
       public void run() {
         String host = null;
@@ -311,89 +313,6 @@
   }
 
   /**
-   * This panel represents the big error message the pops up when the
-   * panel can't download the build information.
-   */
-  private class BuildListDownloadErrorPanel extends JPanel {
-
-    private RemoteBuildManager rbm = null;
-    private Throwable reason = null;
-
-    /**
-     * 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 = -5606673656068527646L;
-
-    /**
-     * Creates an instance.
-     * @param rbm RemoteBuildManager that is having trouble.
-     */
-    public BuildListDownloadErrorPanel(RemoteBuildManager rbm,
-                                       Throwable reason) {
-      this.rbm = rbm;
-      this.reason = reason;
-      layoutPanel();
-    }
-
-    private void layoutPanel() {
-      setLayout(new GridBagLayout());
-
-      String proxyString = "None";
-      Proxy proxy = rbm.getProxy();
-      if (proxy != null) {
-        SocketAddress addr = proxy.address();
-        proxyString = addr.toString();
-      }
-
-      String baseContext = "Unspecified";
-      URL url = rbm.getBaseContext();
-      if (url != null) {
-        baseContext = url.toString();
-      }
-
-      String html = getMsg("upgrade-choose-version-build-list-error",
-              new String[]{
-                      baseContext,
-                      reason.getLocalizedMessage(),
-                      proxyString});
-
-      /* This helps with debugger the HTML rendering
-      StringBuffer content = new StringBuffer();
-      try {
-        FileInputStream fis = new FileInputStream("/tmp/error-html");
-        BufferedReader reader = new BufferedReader(new InputStreamReader(fis));
-        String line = null;
-        while (null != (line = reader.readLine())) {
-          content.append(line);
-        }
-        html = content.toString();
-      } catch (IOException e) {
-        e.printStackTrace();
-      }
-      */
-
-      CustomHTMLEditorKit ek = new CustomHTMLEditorKit();
-      ek.addActionListener(new ActionListener() {
-        public void actionPerformed(ActionEvent ev) {
-          specifyProxy(getParent());
-
-          // Since the proxy info may change we need
-          // to regenerate the text
-          removeAll();
-          layoutPanel();
-          repaint();
-          validate();
-        }
-      });
-      add(UIFactory.makeHtmlPane(html, ek, UIFactory.INSTRUCTIONS_FONT));
-    }
-
-  }
-
-  /**
    * Uses the remote build manager is a separate thread to create
    * and populate the combo box model with build information.  Contains
    * the loop and dialog prompting that happens if there is a problem
@@ -424,7 +343,8 @@
         try {
         String[] options = { "Retry", "Close" };
         int i = JOptionPane.showOptionDialog(getMainWindow(),
-                new BuildListDownloadErrorPanel(rbm, throwable),
+                new BuildListDownloadErrorPanel(ChooseVersionPanel.this, rbm,
+                        throwable),
                 "Network Error",
                 JOptionPane.YES_NO_OPTION,
                 JOptionPane.ERROR_MESSAGE,
diff --git a/opendj-sdk/opends/src/quicksetup/org/opends/quicksetup/util/FileManager.java b/opendj-sdk/opends/src/quicksetup/org/opends/quicksetup/util/FileManager.java
index 6f8da78..20e011a 100644
--- a/opendj-sdk/opends/src/quicksetup/org/opends/quicksetup/util/FileManager.java
+++ b/opendj-sdk/opends/src/quicksetup/org/opends/quicksetup/util/FileManager.java
@@ -298,7 +298,7 @@
         }
 
         if (!destination.exists()) {
-          if (insureParentsExist(destination)) {
+          if (Utils.insureParentsExist(destination)) {
             application.notifyListeners(application.getFormattedWithPoints(
                     getMsg("progress-copying-file", args)));
 
@@ -468,15 +468,6 @@
     }
   }
 
-  private boolean insureParentsExist(File f) {
-    File parent = f.getParentFile();
-    boolean b = parent.exists();
-    if (!b) {
-      b = parent.mkdirs();
-    }
-    return b;
-  }
-
   private String getMsg(String key) {
     return ResourceProvider.getInstance().getMsg(key);
   }
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 5923745..3f72ada 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
@@ -430,6 +430,21 @@
   }
 
   /**
+   * Creates the parent directory if it does not already exist.
+   * @param f File for which parentage will be insured
+   * @return boolean indicating whether or not the input <code>f</code>
+   * has a parent after this method is invoked.
+   */
+  static public boolean insureParentsExist(File f) {
+    File parent = f.getParentFile();
+    boolean b = parent.exists();
+    if (!b) {
+      b = parent.mkdirs();
+    }
+    return b;
+  }
+
+  /**
    * Returns <CODE>true</CODE> if we can write on the provided path and
    * <CODE>false</CODE> otherwise.
    * @param path the path.
@@ -464,10 +479,20 @@
    * was a directory) and <CODE>false</CODE> otherwise.
    * @throws IOException if something goes wrong.
    */
-  public static boolean createDirectory(String path) throws IOException
+  public static boolean createDirectory(String path) throws IOException {
+    return createDirectory(new File(path));
+  }
+
+  /**
+   * Creates the a directory in the provided path.
+   * @param f the path.
+   * @return <CODE>true</CODE> if the path was created or already existed (and
+   * was a directory) and <CODE>false</CODE> otherwise.
+   * @throws IOException if something goes wrong.
+   */
+  public static boolean createDirectory(File f) throws IOException
   {
     boolean directoryCreated;
-    File f = new File(path);
     if (!f.exists())
     {
       directoryCreated = f.mkdirs();
@@ -485,7 +510,20 @@
    * @param is the InputStream with the contents of the file.
    * @throws IOException if something goes wrong.
    */
-  public static void createFile(String path, InputStream is) throws IOException
+  public static void createFile(String path, InputStream is)
+          throws IOException
+  {
+    createFile(new File(path), is);
+  }
+
+  /**
+   * Creates a file on the specified path with the contents of the provided
+   * stream.
+   * @param path the path where the file will be created.
+   * @param is the InputStream with the contents of the file.
+   * @throws IOException if something goes wrong.
+   */
+  public static void createFile(File path, InputStream is) throws IOException
   {
     FileOutputStream out;
     BufferedOutputStream dest;
diff --git a/opendj-sdk/opends/src/quicksetup/org/opends/quicksetup/util/ZipExtractor.java b/opendj-sdk/opends/src/quicksetup/org/opends/quicksetup/util/ZipExtractor.java
index 9616b4e..5ae8327 100644
--- a/opendj-sdk/opends/src/quicksetup/org/opends/quicksetup/util/ZipExtractor.java
+++ b/opendj-sdk/opends/src/quicksetup/org/opends/quicksetup/util/ZipExtractor.java
@@ -234,13 +234,12 @@
     {
       entryName = entryName.substring(zipFirstPath.length());
     }
-    String path = Utils.getPath(new File(basePath, entryName));
-
+    File path = new File(basePath, entryName);
     String progressSummary =
             ResourceProvider.getInstance().getMsg("progress-extracting",
-                    new String[]{ path });
+                    new String[]{ Utils.getPath(path) });
     app.notifyListeners(ratioBeforeCompleted, progressSummary);
-    if (Utils.createParentPath(path))
+    if (Utils.insureParentsExist(path))
     {
       if (entry.isDirectory())
       {
@@ -250,7 +249,7 @@
         {
           list = new ArrayList<String>();
         }
-        list.add(path);
+        list.add(Utils.getPath(path));
         permissions.put(perm, list);
 
         if (!Utils.createDirectory(path))
@@ -265,7 +264,8 @@
         {
           list = new ArrayList<String>();
         }
-        list.add(path);
+        list.add(Utils.getPath(path));
+        permissions.put(perm, list);
         Utils.createFile(path, is);
       }
     } else
@@ -280,7 +280,7 @@
    * @param path the directory for which we want the file permissions.
    * @return the file system permissions for the directory.
    */
-  private String getDirectoryFileSystemPermissions(String path)
+  private String getDirectoryFileSystemPermissions(File path)
   {
     // TODO We should get this dynamically during build?
     return "755";

--
Gitblit v1.10.0