/* * 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; import org.opends.quicksetup.Application; import java.net.URL; import java.net.Proxy; import java.net.URLConnection; import java.util.*; import java.util.regex.Pattern; import java.util.regex.Matcher; import java.util.logging.Logger; import java.io.*; /** * Manages listing and retreival of build packages on a remote host. */ public class RemoteBuildManager { static private final Logger LOG = Logger.getLogger(RemoteBuildManager.class.getName()); /** * Describes build types. */ enum BuildType { NIGHTLY, 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 Proxy proxy; private URL url; /** * Creates an instance. * @param app using this tool * @param url base context for an OpenDS build repository */ public RemoteBuildManager(Application app, URL url) { this.app = app; this.url = 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 listBuilds() throws IOException { List buildList = new ArrayList(); String dailyBuildsPage = getDailyBuildsPage(); Pattern p = Pattern.compile("\\d{14}"); Matcher m = p.matcher(dailyBuildsPage); Set buildIds = new HashSet(); while (m.find()) { buildIds.add(dailyBuildsPage.substring(m.start(), m.end())); } for (String buildId : buildIds) { buildList.add(new Build(url, buildId)); } return buildList; } private String getDailyBuildsPage() throws IOException { URL dailyBuildsUrl = new URL(url, "daily-builds"); URLConnection conn; if (proxy == null) { conn = dailyBuildsUrl.openConnection(); } else { conn = dailyBuildsUrl.openConnection(proxy); } InputStream in = conn.getInputStream(); BufferedReader reader = new BufferedReader(new InputStreamReader(in)); StringBuilder builder = new StringBuilder(); String line; while (null != (line = reader.readLine())) { builder.append(line); } return builder.toString(); } /** * Downloads a particular build from the build repository to a specific * location on the local file system. * @param build to download * @param destination directory for the newly downloaded file */ public void download(Build build, File destination) { } /** * 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 builds = rbm.listBuilds(); for (Build build : builds) { System.out.println("build " + build.getId()); } } catch (IOException e) { e.printStackTrace(); } } }