blob: 200e407d157f0f0186d58684e421366baea109a9 [file] [log] [blame]
/*
* Copyright (C) 2014 The Android Open Source Project
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package com.android.sdklib.repository;
import com.android.annotations.NonNull;
/**
* A {@link FullRevision} which distinguishes between x and x.0, x.0.0, x.y.0, etc; it basically
* keeps track of the precision of the revision string.
* <p>
* This is vital when referencing Gradle artifact numbers,
* since versions x.y.0 and version x.y are not the same.
*/
@Deprecated
public class PreciseRevision extends FullRevision {
private final int mPrecision;
/**
* Parses a string of format "major.minor.micro rcPreview" and returns
* a new {@link com.android.sdklib.repository.PreciseRevision} for it.
*
* All the fields except major are optional.
* <p/>
* @param revision A non-null revision to parse.
* @return A new non-null {@link com.android.sdklib.repository.PreciseRevision}.
* @throws NumberFormatException if the parsing failed.
*/
@NonNull
public static PreciseRevision parseRevision(@NonNull String revision)
throws NumberFormatException {
return (PreciseRevision) parseRevisionImpl(revision, true /*supportMinorMicro*/,
true /*supportPreview*/, true /*keepPrevision*/);
}
public PreciseRevision(int major) {
this(major, IMPLICIT_MINOR_REV, IMPLICIT_MICRO_REV, NOT_A_PREVIEW, PRECISION_MAJOR,
DEFAULT_SEPARATOR);
}
public PreciseRevision(int major, int minor) {
this(major, minor, IMPLICIT_MICRO_REV, NOT_A_PREVIEW, PRECISION_MINOR, DEFAULT_SEPARATOR);
}
public PreciseRevision(int major, int minor, int micro) {
this(major, minor, micro, NOT_A_PREVIEW, PRECISION_MICRO, DEFAULT_SEPARATOR);
}
public PreciseRevision(int major, int minor, int micro, int preview) {
this(major, minor, micro, preview, PRECISION_PREVIEW, DEFAULT_SEPARATOR);
}
PreciseRevision(int major, int minor, int micro, int preview, int precision,
String separator) {
this(major, minor, micro, preview, precision, separator, PreviewType.RC);
}
PreciseRevision(int major, int minor, int micro, int preview, int precision,
String separator, FullRevision.PreviewType previewType) {
super(major, minor, micro, previewType, preview, separator);
mPrecision = precision;
}
/**
* Returns the version in a fixed format major.minor.micro
* with an optional "rc preview#". For example it would
* return "18.0.0", "18.1.0" or "18.1.2 rc5".
*/
@Override
public String toString() {
StringBuilder sb = new StringBuilder();
sb.append(getMajor());
if (mPrecision >= PRECISION_MINOR) {
sb.append('.').append(getMinor());
if (mPrecision >= PRECISION_MICRO) {
sb.append('.').append(getMicro());
if (mPrecision >= PRECISION_PREVIEW && isPreview()) {
sb.append(getSeparator()).append("rc").append(getPreview());
}
}
}
return sb.toString();
}
@Override
public String toShortString() {
return toString();
}
@Override
public int[] toIntArray(boolean includePreview) {
int[] result;
if (mPrecision >= PRECISION_PREVIEW) {
if (includePreview) {
result = new int[mPrecision];
result[3] = getPreview();
} else {
result = new int[mPrecision - 1];
}
} else {
result = new int[mPrecision];
}
result[0] = getMajor();
if (mPrecision >= PRECISION_MINOR) {
result[1] = getMinor();
if (mPrecision >= PRECISION_MICRO) {
result[2] = getMicro();
}
}
return result;
}
@Override
public int hashCode() {
return 31 * super.hashCode() + mPrecision;
}
@Override
public boolean equals(Object rhs) {
boolean equals = super.equals(rhs);
if (equals) {
if (!(rhs instanceof PreciseRevision)) {
return false;
}
PreciseRevision other = (PreciseRevision) rhs;
return mPrecision == other.mPrecision;
}
return false;
}
public int compareTo(PreciseRevision rhs, PreviewComparison comparePreview) {
int delta = super.compareTo(rhs, comparePreview);
if (delta == 0) {
return mPrecision - rhs.mPrecision;
}
return delta;
}
}