org.chromium.sdk/src/org/chromium/sdk/Version.java
changeset 2 e4420d2515f1
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/org.chromium.sdk/src/org/chromium/sdk/Version.java	Wed Dec 23 17:13:18 2009 -0800
@@ -0,0 +1,107 @@
+// Copyright (c) 2009 The Chromium Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+package org.chromium.sdk;
+
+import java.util.ArrayList;
+import java.util.Arrays;
+import java.util.Collections;
+import java.util.List;
+
+/**
+ * An object that describes the numeric part of version.
+ */
+public class Version implements Comparable<Version> {
+  private final List<Integer> components;
+
+  /**
+   * Constructs an immutable Version instance given the numeric components of version.
+   */
+  public Version(Integer ... components) {
+    this(Arrays.asList(components));
+  }
+
+  /**
+   * Constructs an immutable Version instance given the numeric components of version.
+   */
+  public Version(List<Integer> components) {
+    this.components = Collections.unmodifiableList(new ArrayList<Integer>(components));
+  }
+
+  /**
+   * @return numeric components of version in form of list of integers
+   */
+  public List<Integer> getComponents() {
+    return components;
+  }
+
+  @Override
+  public boolean equals(Object obj) {
+    if (obj == null || !(obj instanceof Version)) {
+      return false;
+    }
+    Version that = (Version) obj;
+    return this.components.equals(that.components);
+  }
+
+  @Override
+  public int hashCode() {
+    return components.hashCode();
+  }
+
+  public int compareTo(Version other) {
+    for (int i = 0; i < this.components.size(); i++) {
+      if (other.components.size() <= i) {
+        // shorter version is less
+        return +1;
+      }
+      int res = this.components.get(i).compareTo(other.components.get(i));
+      if (res != 0) {
+        return res;
+      }
+    }
+    if (this.components.size() < other.components.size()) {
+      return -1;
+    } else {
+      return 0;
+    }
+  }
+
+  @Override
+  public String toString() {
+    return components.toString();
+  }
+
+  /**
+   * Parses string as version as far as it is dot-delimited integer numbers.
+   * @param text string representation of version; not null
+   * @return new instance of version or null if text is not version.
+   */
+  public static Version parseString(String text) {
+    int i = 0;
+    List<Integer> components = new ArrayList<Integer>(4);
+    while (i < text.length()) {
+      int num = Character.digit(text.charAt(i), 10);
+      if (num < 0) {
+        break;
+      }
+      i++;
+      while (i < text.length() && Character.digit(text.charAt(i), 10) >= 0) {
+        num = num * 10 + Character.digit(text.charAt(i), 10);
+        i++;
+      }
+      components.add(num);
+      if (i < text.length() && text.charAt(i) == '.') {
+        i++;
+        continue;
+      } else {
+        break;
+      }
+    }
+    if (components.isEmpty()) {
+      return null;
+    }
+    return new Version(components);
+  }
+}