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