diff -r ef76fc2ac88c -r e4420d2515f1 org.chromium.sdk/src/org/chromium/sdk/Version.java --- /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 { + private final List 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 components) { + this.components = Collections.unmodifiableList(new ArrayList(components)); + } + + /** + * @return numeric components of version in form of list of integers + */ + public List 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 components = new ArrayList(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); + } +}