/*
* Copyright 2000-2013 JetBrains s.r.o.
*
* 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.intellij.openapi.util;
import org.jetbrains.annotations.NotNull;
import org.jetbrains.annotations.Nullable;
/**
* @author max
*/
public class BuildNumber implements Comparable<BuildNumber> {
private static final String SNAPSHOT = "SNAPSHOT";
private final int myBuildNumber;
public BuildNumber(int buildNumber) {
myBuildNumber = buildNumber;
}
public String asString() {
StringBuilder builder = new StringBuilder();
if (myBuildNumber != Integer.MAX_VALUE) {
builder.append(myBuildNumber);
}
else {
builder.append(SNAPSHOT);
}
return builder.toString();
}
public static BuildNumber fromString(String version) {
return fromString(version, null);
}
public static BuildNumber fromString(String version, @Nullable String name) {
if (version == null) return null;
int buildNumber = parseBuildNumber(version, name);
return new BuildNumber(buildNumber);
}
private static int parseBuildNumber(String version, String name) {
if (SNAPSHOT.equals(version)) {
return Integer.MAX_VALUE;
}
try {
return Integer.parseInt(version);
}
catch (NumberFormatException e) {
throw new RuntimeException("Invalid version number: " + version + "; plugin name: " + name);
}
}
public static BuildNumber fallback() {
return fromString(SNAPSHOT);
}
@Override
public String toString() {
return asString();
}
@Override
public int compareTo(@NotNull BuildNumber o) {
return myBuildNumber - o.myBuildNumber;
}
public int getBuildNumber() {
return myBuildNumber;
}
@Override
public boolean equals(Object o) {
if (this == o) return true;
if (o == null || getClass() != o.getClass()) return false;
BuildNumber that = (BuildNumber)o;
if (myBuildNumber != that.myBuildNumber) return false;
return true;
}
@Override
public int hashCode() {
int result = 0;
result = 31 * result + myBuildNumber;
return result;
}
public boolean isSnapshot() {
return myBuildNumber == Integer.MAX_VALUE;
}
}