From 5808bc275c42b3d12f23f9b04b7549417ea4c6dc Mon Sep 17 00:00:00 2001
From: kenneth_suter <kenneth_suter@localhost>
Date: Fri, 27 Apr 2007 21:30:01 +0000
Subject: [PATCH] implements code to access and parse the newly published upgrade build availability information published at http://www.opends.org/upgrade-builds

---
 opendj-sdk/opends/src/quicksetup/org/opends/quicksetup/upgrader/Build.java |  135 ++++++++++++++++++++++++++++++++++++++------
 1 files changed, 116 insertions(+), 19 deletions(-)

diff --git a/opendj-sdk/opends/src/quicksetup/org/opends/quicksetup/upgrader/Build.java b/opendj-sdk/opends/src/quicksetup/org/opends/quicksetup/upgrader/Build.java
index 9cd4b12..13493a2 100644
--- a/opendj-sdk/opends/src/quicksetup/org/opends/quicksetup/upgrader/Build.java
+++ b/opendj-sdk/opends/src/quicksetup/org/opends/quicksetup/upgrader/Build.java
@@ -28,23 +28,81 @@
 package org.opends.quicksetup.upgrader;
 
 import java.net.URL;
+import java.util.EnumSet;
 
 /**
    * Representation of an OpenDS build package.
  */
 public class Build implements Comparable<Build> {
 
-  private URL url;
-  private String id;
+  /**
+   * Describes build types.
+   */
+  enum Category {
+
+    /**
+     * Daily build descriptor.
+     */
+    DAILY("Daily Build"),
+
+    /**
+     * Weekly build descriptor.
+     */
+    WEEKLY("Weekly Build"),
+
+    /**
+     * Release build descriptor.
+     */
+    RELEASE("Release Build");
+
+    /**
+     * Creates a Category from its 'key' String value.
+     * @param s String representing a key
+     * @return the Category corresponding to the input <code>key</code>; null
+     * if the input string is not a category key
+     */
+    public static Category fromString(String s) {
+      Category category = null;
+      for (Category c : EnumSet.allOf(Category.class)) {
+        if (c.key.equals(s)) {
+          category = c;
+          break;
+        }
+      }
+      return category;
+    }
+
+    String key;
+
+    private Category(String key) {
+      this.key = key;
+    }
+
+    /**
+     * Gets the string that represents this category in
+     * the build information page.
+     * @return String key
+     */
+    public String getKey() {
+      return key;
+    }
+
+  }
+
+  private URL downloadUrl;
+  private String displayName;
+  private Category category;
 
   /**
    * Creates an instance.
-   * @param url where the build package can be accessed
-   * @param id of the new build
+   * @param displayName where the build package can be accessed
+   * @param downloadUrl of the new build
+   * @param category build category
    */
-  Build(URL url, String id) {
-    this.url = url;
-    this.id = id;
+  Build(String displayName, URL downloadUrl, Category category) {
+    this.displayName = displayName;
+    this.downloadUrl = downloadUrl;
+    this.category = category;
   }
 
   /**
@@ -52,16 +110,7 @@
    * @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;
+    return this.downloadUrl;
   }
 
   /**
@@ -69,7 +118,15 @@
    * @return String representing this build
    */
   public String getDisplayName() {
-    return getId();
+    return this.displayName;
+  }
+
+  /**
+   * Gets the category of this build.
+   * @return Category indicating the type of this build.
+   */
+  public Category getCategory() {
+    return this.category;
   }
 
   /**
@@ -83,7 +140,47 @@
    * {@inheritDoc}
    */
   public int compareTo(Build o) {
-    return getDisplayName().compareTo(o.getDisplayName());
+    if (o == null) throw new NullPointerException();
+    int c = getCategory().compareTo(o.getCategory());
+    if (c == 0) {
+      c = getDisplayName().compareTo(o.getDisplayName());
+    }
+    return c;
   }
 
+  /**
+   * {@inheritDoc}
+   */
+  public int hashCode() {
+    int hc = 11;
+    Category cat = getCategory();
+    if (cat != null) {
+      hc = 31 * hc + cat.hashCode();
+    }
+    String disp = getDisplayName();
+    if (disp != null) {
+      hc = 31 * hc + disp.hashCode();
+    }
+    return hc;
+  }
+
+  /**
+   * {@inheritDoc}
+   */
+  public boolean equals(Object obj) {
+    if (this == obj) return true;
+    boolean eq = false;
+    if (obj != null && obj instanceof Build) {
+      Category thisCat = getCategory();
+      Category thatCat = ((Build)obj).getCategory();
+      if ((thisCat != null && thisCat.equals(thatCat)) ||
+          (thisCat == null && thatCat == null)) {
+        String thisDisp = getDisplayName();
+        String thatDisp = ((Build)obj).getDisplayName();
+        eq = ((thisDisp != null && thisDisp.equals(thatDisp)) ||
+                (thisDisp == null && thatDisp == null));
+      }
+    }
+    return eq;
+  }
 }

--
Gitblit v1.10.0