2 * Copyright (c) 2016 Pantheon Technologies s.r.o. and others. All rights reserved.
4 * This program and the accompanying materials are made available under the
5 * terms of the Eclipse Public License v1.0 which accompanies this distribution,
6 * and is available at http://www.eclipse.org/legal/epl-v10.html
8 package org.opendaylight.yangtools.concepts;
10 import com.google.common.annotations.Beta;
11 import com.google.common.base.Preconditions;
12 import java.io.Serializable;
13 import java.util.Objects;
14 import javax.annotation.Nonnull;
17 * A single version according to <a href="http://semver.org/">Semantic Versioning</a>.
20 public final class SemVer implements Comparable<SemVer>, Serializable {
21 private static final long serialVersionUID = 1L;
22 private final int major;
23 private final int minor;
24 private final int patch;
26 private SemVer(final int major, final int minor, final int patch) {
27 Preconditions.checkArgument(major >= 0);
29 Preconditions.checkArgument(minor >= 0);
31 Preconditions.checkArgument(patch >= 0);
35 public static SemVer create(final int major) {
36 return create(major, 0);
39 public static SemVer create(final int major, final int minor) {
40 return create(major, minor, 0);
43 public static SemVer create(final int major, final int minor, final int patch) {
44 return new SemVer(major, minor, patch);
47 public static SemVer valueOf(@Nonnull final String s) {
48 final int minorIdx = s.indexOf('.');
50 return create(Integer.parseInt(s));
53 final String minorStr;
54 final int patchIdx = s.indexOf('.', minorIdx + 1);
56 minorStr = s.substring(minorIdx + 1);
58 minorStr = s.substring(minorIdx + 1, patchIdx);
61 return create(Integer.parseInt(s.substring(0, minorIdx), 10), Integer.parseInt(minorStr, 10),
62 Integer.parseInt(s.substring(patchIdx + 1), 10));
68 public int getMajor() {
75 public int getMinor() {
82 public int getPatch() {
87 public int compareTo(final SemVer o) {
88 int i = Integer.compare(major, o.major);
90 i = Integer.compare(minor, o.minor);
92 return Integer.compare(patch, patch);
100 public int hashCode() {
101 return Objects.hash(major, minor, patch);
105 public boolean equals(final Object obj) {
109 if (!(obj instanceof SemVer)) {
113 final SemVer o = (SemVer) obj;
114 return major == o.major && minor == o.minor && patch == o.patch;
118 public String toString() {
119 return major + "." + minor + "." + patch;