mirror of https://github.com/OpenIdentityPlatform/OpenDJ.git

kenneth_suter
23.29.2007 23faffa02e132a30c02f928e317c6f66ac373d06
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();
//    }
//
//  }
  }
}