/** * Copyright (c) 2010, 2013 Darmstadt University of Technology. * All rights reserved. This program and the accompanying materials * are made available under the terms of the Eclipse Public License v1.0 * which accompanies this distribution, and is available at * http://www.eclipse.org/legal/epl-v10.html * * Contributors: * Andreas Sewe - initial API and implementation. */ package org.eclipse.recommenders.utils; import static java.lang.String.format; import java.util.regex.Pattern; import com.google.common.base.Preconditions; public class Version implements Comparable<Version> { private static final Pattern VALID_VERSIONS = Pattern.compile("\\d+\\.\\d+\\.\\d+"); private final int major; private final int minor; private final int patch; public static Version valueOf(String version) { Preconditions.checkArgument(VALID_VERSIONS.matcher(version).matches()); String[] components = version.split("\\."); return new Version(components[0], components[1], components[2]); } public Version(final int major, final int minor, final int patch) { Preconditions.checkArgument(major >= 0); Preconditions.checkArgument(minor >= 0); Preconditions.checkArgument(patch >= 0); this.major = major; this.minor = minor; this.patch = patch; } public Version(String major, String minor, String patch) { this(Integer.parseInt(major), Integer.parseInt(minor), Integer.parseInt(patch)); } public int getMajor() { return major; } public int getMinor() { return minor; } public int getPatch() { return patch; } @Override public int compareTo(final Version that) { if (major != that.major) { return Integer.valueOf(major).compareTo(that.major); } else if (minor != that.minor) { return Integer.valueOf(minor).compareTo(that.minor); } else { return Integer.valueOf(patch).compareTo(that.patch); } } @Override public int hashCode() { final int prime = 31; int result = 1; result = prime * result + major; result = prime * result + minor; result = prime * result + patch; return result; } @Override public boolean equals(Object other) { if (this == other) { return true; } else if (other == null) { return false; } else if (getClass() != other.getClass()) { return false; } Version that = (Version) other; return major == that.major && minor == that.minor && patch == that.patch; } @Override public String toString() { return format("%d.%d.%d", major, minor, patch); } }