aboutsummaryrefslogtreecommitdiffstats
path: root/framework/src/onos/core/api/src/main/java/org/onosproject/core/Version.java
diff options
context:
space:
mode:
Diffstat (limited to 'framework/src/onos/core/api/src/main/java/org/onosproject/core/Version.java')
-rw-r--r--framework/src/onos/core/api/src/main/java/org/onosproject/core/Version.java144
1 files changed, 144 insertions, 0 deletions
diff --git a/framework/src/onos/core/api/src/main/java/org/onosproject/core/Version.java b/framework/src/onos/core/api/src/main/java/org/onosproject/core/Version.java
new file mode 100644
index 00000000..a5377016
--- /dev/null
+++ b/framework/src/onos/core/api/src/main/java/org/onosproject/core/Version.java
@@ -0,0 +1,144 @@
+/*
+ * Copyright 2014-2015 Open Networking Laboratory
+ *
+ * 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 org.onosproject.core;
+
+import java.util.Objects;
+
+import static com.google.common.base.Preconditions.checkArgument;
+import static com.google.common.base.Strings.isNullOrEmpty;
+import static java.lang.Integer.parseInt;
+
+/**
+ * Representation of the product version.
+ */
+public final class Version {
+
+ public static final String FORMAT_MINIMAL = "%d.%d";
+ public static final String FORMAT_SHORT = "%d.%d.%s";
+ public static final String FORMAT_LONG = "%d.%d.%s.%s";
+
+ private static final String NEGATIVE = "Version segment cannot be negative";
+ public static final String TOO_SHORT = "Version must have at least major and minor numbers";
+
+ private final int major;
+ private final int minor;
+ private final String patch;
+ private final String build;
+
+ private final String format;
+
+ // Creates a new version descriptor
+ private Version(int major, int minor, String patch, String build) {
+ this.major = major;
+ this.minor = minor;
+ this.patch = patch;
+ this.build = build;
+ this.format =
+ isNullOrEmpty(patch) ?
+ String.format(FORMAT_MINIMAL, major, minor) :
+ (isNullOrEmpty(build) ?
+ String.format(FORMAT_SHORT, major, minor, patch) :
+ String.format(FORMAT_LONG, major, minor, patch, build));
+ }
+
+
+ /**
+ * Creates a new version from the specified constituent numbers.
+ *
+ * @param major major version number
+ * @param minor minor version number
+ * @param patch version patch segment
+ * @param build optional build string
+ * @return version descriptor
+ */
+ public static Version version(int major, int minor, String patch, String build) {
+ checkArgument(major >= 0, NEGATIVE);
+ checkArgument(minor >= 0, NEGATIVE);
+ return new Version(major, minor, patch, build);
+ }
+
+ /**
+ * Creates a new version by parsing the specified string.
+ *
+ * @param string version string
+ * @return version descriptor
+ */
+ public static Version version(String string) {
+ String[] fields = string.split("[.-]");
+ checkArgument(fields.length >= 2, TOO_SHORT);
+ return new Version(parseInt(fields[0]), parseInt(fields[1]),
+ fields.length >= 3 ? fields[2] : null,
+ fields.length >= 4 ? fields[3] : null);
+ }
+
+ /**
+ * Returns the major version number.
+ *
+ * @return major version number
+ */
+ public int major() {
+ return major;
+ }
+
+ /**
+ * Returns the minor version number.
+ *
+ * @return minor version number
+ */
+ public int minor() {
+ return minor;
+ }
+
+ /**
+ * Returns the version patch segment.
+ *
+ * @return patch number
+ */
+ public String patch() {
+ return patch;
+ }
+
+ /**
+ * Returns the version build string.
+ *
+ * @return build string
+ */
+ public String build() {
+ return build;
+ }
+
+ @Override
+ public String toString() {
+ return format;
+ }
+
+ @Override
+ public int hashCode() {
+ return Objects.hash(format);
+ }
+
+ @Override
+ public boolean equals(Object obj) {
+ if (this == obj) {
+ return true;
+ }
+ if (obj instanceof Version) {
+ final Version other = (Version) obj;
+ return Objects.equals(this.format, other.format);
+ }
+ return false;
+ }
+}