From 426f6fff96db9c07683e5a27b8b745b3e13c29ff Mon Sep 17 00:00:00 2001
From: kenneth_suter <kenneth_suter@localhost>
Date: Fri, 08 Jun 2007 19:15:27 +0000
Subject: [PATCH] This commit address several related issues regarding the upgrader CLI:

---
 opends/src/quicksetup/org/opends/quicksetup/upgrader/BuildExtractor.java |  147 +++++++++++++++++++++++++-----------------------
 1 files changed, 77 insertions(+), 70 deletions(-)

diff --git a/opends/src/quicksetup/org/opends/quicksetup/upgrader/BuildExtractor.java b/opends/src/quicksetup/org/opends/quicksetup/upgrader/BuildExtractor.java
index 5a949ae..afcb006 100644
--- a/opends/src/quicksetup/org/opends/quicksetup/upgrader/BuildExtractor.java
+++ b/opends/src/quicksetup/org/opends/quicksetup/upgrader/BuildExtractor.java
@@ -28,17 +28,14 @@
 package org.opends.quicksetup.upgrader;
 
 import org.opends.quicksetup.*;
-import org.opends.quicksetup.i18n.ResourceProvider;
 import org.opends.quicksetup.event.ProgressUpdateListener;
-import org.opends.quicksetup.event.ProgressUpdateEvent;
+import org.opends.quicksetup.i18n.ResourceProvider;
 import org.opends.quicksetup.util.Utils;
 import org.opends.quicksetup.util.ZipExtractor;
 import org.opends.quicksetup.util.FileManager;
-import org.opends.quicksetup.util.PlainTextProgressMessageFormatter;
+import org.opends.quicksetup.util.ProgressMessageFormatter;
 
 import java.io.File;
-import java.io.IOException;
-import java.io.FileNotFoundException;
 import java.util.logging.Level;
 import java.util.logging.Logger;
 
@@ -55,7 +52,7 @@
  * itself is dependent upon this tool, it should be kept simple and stable
  * to insure that the upgrade will work.
  */
-public class BuildExtractor extends Application implements Runnable {
+public class BuildExtractor extends UpgradeLauncher implements CliApplication {
 
   static private final Logger LOG =
           Logger.getLogger(BuildExtractor.class.getName());
@@ -75,21 +72,19 @@
               ResourceProvider.getInstance().getMsg("error-initializing-log"));
       t.printStackTrace();
     }
-    new BuildExtractor(args).run();
+    new BuildExtractor(args).launch();
   }
 
-  private String[] args = null;
+  private BuildExtractorCliHelper helper = new BuildExtractorCliHelper();
 
-  private boolean finished = false;
+  private UpgradeUserData userData;
+
+  private boolean finished;
+
+  private ApplicationException error;
 
   private BuildExtractor(String[] args) {
-    this.args = args;
-    setProgressMessageFormatter(new PlainTextProgressMessageFormatter());
-    addProgressUpdateListener(new ProgressUpdateListener() {
-      public void progressUpdate(ProgressUpdateEvent ev) {
-        System.out.println(ev.getNewLogs());
-      }
-    });
+    super(args);
   }
 
   /**
@@ -103,60 +98,40 @@
    * contents into the current build's staging are and exits with return code 0.
    */
   public void run() {
-    int retCode = 0;
     try {
-      File buildFile = getBuildFile(args);
+      UpgradeUserData uud = (UpgradeUserData)getUserData();
+      File buildFile = uud.getInstallPackage();
       if (buildFile != null) {
-        if (!buildFile.exists()) {
-          throw new FileNotFoundException(
-                  getMsg("build-extractor-error-file-no-exist",
-                          Utils.getPath(buildFile)));
+        LOG.log(Level.INFO, "expanding zip file " + buildFile.getPath());
+        File stageDirectory = initStageDirectory();
+        ZipExtractor extractor = new ZipExtractor(buildFile);
+        extractor.extract(stageDirectory);
+        LOG.log(Level.INFO, "extraction finished");
+        Installation installation = new Installation(stageDirectory);
+        if (!installation.isValid()) {
+          LOG.log(Level.INFO, "extraction produed an invalid OpenDS" +
+                  "installation: " + installation.getInvalidityReason());
+          String invalidMsg = getMsg("build-extractor-file-invalid",
+                  Utils.getPath(buildFile),
+                  installation.getInvalidityReason());
+          error = new ApplicationException(
+                ApplicationException.Type.APPLICATION,
+                  invalidMsg, null);
+          System.err.println(invalidMsg);
         }
-        expandZipFile(buildFile);
       }
     } catch (Throwable t) {
       LOG.log(Level.INFO, "unexpected error extracting build", t);
       String reason = t.getLocalizedMessage();
-      System.err.println(getMsg("build-extractor-error", reason));
-      retCode = 1;
-    }
-    LOG.log(Level.INFO, "extractor exiting code=" + retCode);
-    System.exit(retCode);
-  }
-
-  private File getBuildFile(String[] args) {
-    File buildFile = null;
-    String buildFileName = null;
-    if (args != null) {
-      for (int i = 0; i < args.length; i++) {
-        if (args[i].equals("--" + UpgraderCliHelper.FILE_OPTION_LONG) ||
-                args[i].equalsIgnoreCase(
-                        "-" + UpgraderCliHelper.FILE_OPTION_SHORT)) {
-          if (i < args.length - 1) {
-            buildFileName = args[i+ 1];
-          }
-        }
-      }
-    }
-    if (buildFileName != null) {
-      buildFile = new File(buildFileName);
-    }
-    return buildFile;
-  }
-
-  private void expandZipFile(File buildFile)
-          throws ApplicationException, IOException {
-    try {
-      LOG.log(Level.INFO, "expanding zip file " + buildFile.getPath());
-      ZipExtractor extractor = new ZipExtractor(buildFile);
-      extractor.extract(getStageDirectory());
-      LOG.log(Level.INFO, "extraction finished");
-    } finally {
+      error = new ApplicationException(ApplicationException.Type.APPLICATION,
+                getMsg("build-extractor-error", reason), t);
+      System.err.println(reason);
+    } finally   {
       finished = true;
     }
   }
 
-  private File getStageDirectory() throws ApplicationException {
+  private File initStageDirectory() throws ApplicationException {
     File stageDir;
     Installation installation = new Installation(getInstallationPath());
     stageDir = installation.getTemporaryUpgradeDirectory();
@@ -176,6 +151,13 @@
   /**
    * {@inheritDoc}
    */
+  protected CliApplication createCliApplication() {
+    return this;
+  }
+
+  /**
+   * {@inheritDoc}
+   */
   protected String getInstallationPath() {
     return Utils.getInstallPathFromClasspath();
   }
@@ -183,23 +165,33 @@
   /**
    * {@inheritDoc}
    */
-  public ProgressStep getCurrentProgressStep() {
-    return null;
+  public UserData createUserData(String[] args, CurrentInstallStatus status)
+          throws UserDataException
+  {
+    return helper.createUserData(args);
   }
 
   /**
    * {@inheritDoc}
    */
-
-  public Integer getRatio(ProgressStep step) {
-    return null;
+  public UserData getUserData() {
+    return userData;
   }
 
   /**
    * {@inheritDoc}
    */
-  public String getSummary(ProgressStep step) {
-    return null;
+  public void setUserData(UserData userData) {
+    if (userData instanceof UpgradeUserData) {
+      this.userData = (UpgradeUserData)userData;
+    }
+  }
+
+  /**
+   * {@inheritDoc}
+   */
+  public void setProgressMessageFormatter(ProgressMessageFormatter formatter) {
+    // ignore
   }
 
   /**
@@ -212,14 +204,29 @@
   /**
    * {@inheritDoc}
    */
-  public boolean isCancellable() {
-    return false;
+  public ApplicationException getException() {
+    return error;
   }
 
   /**
    * {@inheritDoc}
    */
-  public void cancel() {
-    // do nothing; not cancellable
+  public void addProgressUpdateListener(ProgressUpdateListener l) {
+    // ignored;  no progress messages
+  }
+
+  /**
+   * {@inheritDoc}
+   */
+  public void removeProgressUpdateListener(ProgressUpdateListener l) {
+    // ignored;  no progress messages
+  }
+
+  /**
+   * {@inheritDoc}
+   */
+  public void notifyListeners(Integer ratio, String currentPhaseSummary,
+                              String newLogDetail) {
+    // ignored;  no progress messages
   }
 }

--
Gitblit v1.10.0