From 14f210825823c17cff84d9221fa76673cbe27aa9 Mon Sep 17 00:00:00 2001
From: kenneth_suter <kenneth_suter@localhost>
Date: Mon, 23 Apr 2007 00:29:32 +0000
Subject: [PATCH] The commit contains code for the following:

---
 opendj-sdk/opends/src/quicksetup/org/opends/quicksetup/upgrader/RemoteBuildManager.java |  246 +++++++++++++++++++++++++++++++++++++-----------
 1 files changed, 188 insertions(+), 58 deletions(-)

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 15c4bd0..ca6ea19 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,14 +29,17 @@
 
 import org.opends.quicksetup.Application;
 
+import javax.swing.*;
 import java.net.URL;
 import java.net.Proxy;
 import java.net.URLConnection;
 import java.util.*;
+import java.util.List;
 import java.util.regex.Pattern;
 import java.util.regex.Matcher;
 import java.util.logging.Logger;
 import java.io.*;
+import java.awt.*;
 
 /**
  * Manages listing and retreival of build packages on a remote host.
@@ -51,54 +54,27 @@
    */
   enum BuildType {
 
+    /**
+     * Nightly build descriptor.
+     */
     NIGHTLY,
 
+    /**
+     * Weekly build descriptor.
+     */
     WEEKLY
 
   }
 
-  /**
-   * Representation of an OpenDS build package.
-   */
-  public class Build {
-
-    private URL url;
-    private String id;
-
-    /**
-     * Creates an instance.
-     * @param url where the build package can be accessed
-     * @param id of the new build
-     */
-    Build(URL url, String id) {
-      this.url = url;
-      this.id = id;
-    }
-
-    /**
-     * Gets the URL where the build can be accessed.
-     * @return URL representing access to the build package
-     */
-    public URL getUrl() {
-      return url;
-    }
-
-    /**
-     * Gets the builds ID number, a 14 digit number representing the time
-     * the build was created.
-     * @return String represenging the build
-     */
-    public String getId() {
-      return id;
-    }
-
-  }
-
   private Application app;
 
+  private URL url;
+
   private Proxy proxy;
 
-  private URL url;
+  private String proxyUserName;
+
+  private char[] proxyPw;
 
   /**
    * Creates an instance.
@@ -111,14 +87,36 @@
   }
 
   /**
+   * Gets the base context where the build information is stored.
+   * @return URL representing base context of the build repo
+   */
+  public URL getBaseContext() {
+    return this.url;
+  }
+
+  /**
    * 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
+   * @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 {
     List<Build> buildList = new ArrayList<Build>();
-    String dailyBuildsPage = getDailyBuildsPage();
+    String dailyBuildsPage = downloadDailyBuildsPage(c, o);
     Pattern p = Pattern.compile("\\d{14}");
     Matcher m = p.matcher(dailyBuildsPage);
     Set<String> buildIds = new HashSet<String>();
@@ -131,7 +129,9 @@
     return buildList;
   }
 
-  private String getDailyBuildsPage() throws IOException {
+  private String downloadDailyBuildsPage(Component c, Object o)
+          throws IOException
+  {
     URL dailyBuildsUrl = new URL(url, "daily-builds");
     URLConnection conn;
     if (proxy == null) {
@@ -139,7 +139,21 @@
     } else {
       conn = dailyBuildsUrl.openConnection(proxy);
     }
-    InputStream in = conn.getInputStream();
+    String proxyAuthString = createProxyAuthString();
+    if (proxyAuthString != null) {
+      conn.setRequestProperty("Proxy-Authorization", "Basic " +
+              proxyAuthString);
+    }
+    InputStream in;
+    if (c != null) {
+      ProgressMonitorInputStream pmis =
+              new ProgressMonitorInputStream(c, o, conn.getInputStream());
+      ProgressMonitor pm = pmis.getProgressMonitor();
+      pm.setMillisToDecideToPopup(0);
+      in = pmis;
+    } else {
+      in = conn.getInputStream();
+    }
     BufferedReader reader = new BufferedReader(new InputStreamReader(in));
     StringBuilder builder = new StringBuilder();
     String line;
@@ -154,30 +168,146 @@
    * location on the local file system.
    * @param build to download
    * @param destination directory for the newly downloaded file
+   * @throws IOException if the build could not be downloaded
    */
-  public void download(Build build, File destination) {
+  public void download(Build build, File destination) throws IOException {
+    download(build.getUrl(), destination);
+  }
 
+  private void download(URL url, File destination) throws IOException {
+    URLConnection conn = null;
+    if (proxy == null) {
+      conn = url.openConnection();
+    } else {
+      conn = url.openConnection(proxy);
+    }
+    String proxyAuthString = createProxyAuthString();
+    if (proxyAuthString != null) {
+      conn.setRequestProperty("Proxy-Authorization", "Basic " +
+              proxyAuthString);
+    }
+    InputStream is = null;
+    FileOutputStream fos = null;
+    try {
+      is = conn.getInputStream();
+      fos = new FileOutputStream(destination);
+      int i = 0;
+      int bytesRead = 0;
+      byte[] buf = new byte[1024];
+      while ((i = is.read(buf)) != -1) {
+        fos.write(buf, 0, i);
+        bytesRead += i;
+      }
+    } finally {
+      if (is != null) {
+        is.close();
+      }
+      if (fos != null) {
+        fos.close();
+      }
+    }
+  }
+
+  /**
+   * Sets the proxy object this class will use when establishing network
+   * connections.
+   * @param proxy to use when establishing connections
+   */
+  public void setProxy(Proxy proxy) {
+    this.proxy = proxy;
+  }
+
+  /**
+   * Gets the proxy object this class uses when establishing network
+   * connections.
+   * @return Proxy to use when establishing connections
+   */
+  public Proxy getProxy() {
+    return this.proxy;
+  }
+
+  /**
+   * Sets the user name this class will use to authenticate to its
+   * proxy when establishing network connections.
+   * @param user this class is acting on behalf of
+   */
+  public void setProxyUserName(String user) {
+    this.proxyUserName = user;
+  }
+
+  /**
+   * Sets the user name this class will use to authenticate to its
+   * proxy when establishing network connections.
+   * @return String representing the name of the user of which this class is
+   * acting on behalf
+   */
+  public String getProxyUserName() {
+    return this.proxyUserName;
+  }
+
+  /**
+   * Sets the password this class will use to authenticate to its
+   * proxy when establishing network connections.
+   * @param pw char[] representing the password of the user of which this class
+   * is acting on behalf
+   */
+  public void setProxyPassword(char[] pw) {
+    this.proxyPw = pw;
+  }
+
+  /**
+   * Sets the password this class will use to authenticate to its
+   * proxy when establishing network connections.
+   * @return char[] representing the password of the user of which this class is
+   * acting on behalf
+   */
+  public char[] getProxyPassword() {
+    return this.proxyPw;
+  }
+
+  private String createProxyAuthString() {
+    return createAuthenticationString(getProxyUserName(), getProxyPassword());
+  }
+
+  static private String createAuthenticationString(String user, char[] pw) {
+    String s = null;
+    if (user != null && pw != null) {
+      StringBuilder sb = new StringBuilder()
+              .append(user)
+              .append(":")
+              .append(pw);
+      s = org.opends.server.util.Base64.encode(sb.toString().getBytes());
+    }
+    return s;
   }
 
   /**
    * For testing only.
    * @param args command line arguments
    */
-  public static void main(String[] args) {
-    try {
-      Properties systemSettings = System.getProperties();
-      systemSettings.put("http.proxyHost", "webcache.central.sun.com");
-      systemSettings.put("http.proxyPort", "8080");
-      System.setProperties(systemSettings);
-      URL url = new URL("http://builds.opends.org");
-      RemoteBuildManager rbm = new RemoteBuildManager(null, url);
-      List<Build> builds = rbm.listBuilds();
-      for (Build build : builds) {
-        System.out.println("build " + build.getId());
-      }
-    } catch (IOException e) {
-      e.printStackTrace();
-    }
+//  public static void main(String[] args) {
+//    try {
+//      Properties systemSettings = System.getProperties();
+//      systemSettings.put("http.proxyHost", "webcache.central.sun.com");
+//      systemSettings.put("http.proxyPort", "8080");
+//      systemSettings.put("https.proxyHost", "webcache.central.sun.com");
+//      systemSettings.put("https.proxyPort", "8080");
+//
+//      System.setProperties(systemSettings);
+//
+//      URL url = new URL("http://builds.opends.org");
+//      RemoteBuildManager rbm = new RemoteBuildManager(null, url);
+//      //List<Build> builds = rbm.listBuilds();
+//      //for (Build build : builds) {
+//      //  System.out.println("build " + build);
+//      //}
+//      rbm.download(new URL("https://opends.dev.java.net/" +
+//              "files/documents/4926/55351/OpenDS-0.1-build035.zip"),
+//              new File("/tmp/OpenDS-xxx.zip"));
+//    } catch (IOException e) {
+//      e.printStackTrace();
+//    }
+//
+//  }
 
-  }
 }

--
Gitblit v1.10.0