| /* |
| * Copyright (C) 2015 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.ddmlib; |
| |
| import com.android.annotations.NonNull; |
| |
| import java.util.Locale; |
| import java.util.regex.Matcher; |
| import java.util.regex.Pattern; |
| |
| public class AdbVersion implements Comparable<AdbVersion> { |
| public static final AdbVersion UNKNOWN = new AdbVersion(-1, -1, -1); |
| |
| /** Matches e.g. ".... 1.0.32" */ |
| private static final Pattern ADB_VERSION_PATTERN = Pattern.compile( |
| "^.*(\\d+)\\.(\\d+)\\.(\\d+).*"); |
| |
| public final int major; |
| public final int minor; |
| public final int micro; |
| |
| private AdbVersion(int major, int minor, int micro) { |
| this.major = major; |
| this.minor = minor; |
| this.micro = micro; |
| } |
| |
| @Override |
| public String toString() { |
| return String.format(Locale.US, "%1$d.%2$d.%3$d", major, minor, micro); |
| } |
| |
| @Override |
| public int compareTo(AdbVersion o) { |
| if (major != o.major) { |
| return major - o.major; |
| } |
| |
| if (minor != o.minor) { |
| return minor - o.minor; |
| } |
| |
| return micro - o.micro; |
| } |
| |
| @NonNull |
| public static AdbVersion parseFrom(@NonNull String input) { |
| Matcher matcher = ADB_VERSION_PATTERN.matcher(input); |
| if (matcher.matches()) { |
| int major = Integer.parseInt(matcher.group(1)); |
| int minor = Integer.parseInt(matcher.group(2)); |
| int micro = Integer.parseInt(matcher.group(3)); |
| return new AdbVersion(major, minor, micro); |
| } else { |
| return UNKNOWN; |
| } |
| } |
| |
| @Override |
| public boolean equals(Object o) { |
| if (this == o) { |
| return true; |
| } |
| if (o == null || getClass() != o.getClass()) { |
| return false; |
| } |
| |
| AdbVersion version = (AdbVersion) o; |
| |
| if (major != version.major) { |
| return false; |
| } |
| if (minor != version.minor) { |
| return false; |
| } |
| return micro == version.micro; |
| |
| } |
| |
| @Override |
| public int hashCode() { |
| int result = major; |
| result = 31 * result + minor; |
| result = 31 * result + micro; |
| return result; |
| } |
| } |