/*
* CDDL HEADER START
*
* The contents of this file are subject to the terms of the
* Common Development and Distribution License (the "License").
* You may not use this file except in compliance with the License.
*
* You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE
* or http://www.opensolaris.org/os/licensing.
* 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 usr/src/OPENSOLARIS.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
*/
/*
* Copyright (c) 2010, 2011, Oracle and/or its affiliates. All rights reserved.
*/
package org.opensolaris.os.adr;
public class APIVersion implements Comparable<APIVersion> {
private int major_;
private int minor_;
private Stability stability_;
/*
* Default api versions
*/
public static final APIVersion PRIVATE_VNONE =
new APIVersion(Stability.PRIVATE, 0, 0);
public static final APIVersion UNCOMMITTED_VNONE =
new APIVersion(Stability.UNCOMMITTED, 0, 0);
public static final APIVersion COMMITTED_VNONE =
new APIVersion(Stability.COMMITTED, 0, 0);
public APIVersion(Stability stability, int major, int minor) {
assert (isValid(stability, major, minor));
stability_ = stability;
major_ = major;
minor_ = minor;
}
public APIVersion(int major, int minor) {
this(Stability.PRIVATE, major, minor);
}
/*
* Comparable methods
*/
@Override
public int compareTo(APIVersion v) throws ClassCastException {
if (this == v)
return 0;
int diff = stability_.compareTo(v.getStability());
if (diff == 0) {
diff = major_ - v.getMajor();
if (diff == 0) {
diff = minor_ - v.getMinor();
}
}
return diff;
}
/*
* Object methods
*/
@Override
public boolean equals(Object o) {
if (this == o)
return true;
if (!(o instanceof APIVersion))
return (false);
APIVersion v = (APIVersion) o;
return (stability_ == v.getStability() &&
major_ == v.getMajor() && minor_ == v.getMinor());
}
@Override
public int hashCode() {
int hash = 31 + (17 * major_) ^ minor_;
hash = hash ^ (17 * stability_.hashCode());
return hash;
}
@Override
public String toString() {
return String.format("%s(%s.%s)", stability_, major_, minor_);
}
/*
* APIVersion methods
*/
public int getMajor() {
return major_;
}
public int getMinor() {
return minor_;
}
public Stability getStability() {
return stability_;
}
public static APIVersion getNone(Stability s) {
if (s == Stability.COMMITTED)
return COMMITTED_VNONE;
else if (s == Stability.UNCOMMITTED)
return UNCOMMITTED_VNONE;
else
return PRIVATE_VNONE;
}
public static boolean isValid(Stability stability, int major, int minor) {
return ((stability == Stability.PRIVATE ||
stability == Stability.UNCOMMITTED ||
stability == Stability.COMMITTED) &&
major >= 0 && minor >= 0);
}
}