Class Version

java.lang.Object
org.apache.sis.util.Version
All Implemented Interfaces:
Serializable, CharSequence, Comparable<Version>

public class Version extends Object implements CharSequence, Comparable<Version>, Serializable
Holds a version number as a sequence of strings separated by either a dot or a dash. The first three strings, usually numbers, are called respectively major, minor and revision. For example, a version code such as "6.11.2" will have major number 6, minor number 11 and revision number 2. Alternatively, a version code such as "3.18-SNAPSHOT" will have major version number 3, minor version number 18 and revision string "SNAPSHOT".

This class provides methods for performing comparisons of Version objects where major, minor and revision parts are compared as numbers when possible, or as strings otherwise.

Immutability and thread safety

This class is immutable and thus inherently thread-safe. Subclasses may or may not be immutable, at implementation choice. But implementers are encouraged to make sure that subclasses remain immutable for more predictable behavior.
Since:
0.3
Version:
0.4
See Also:
  • Field Summary

    Fields
    Modifier and Type
    Field
    Description
    private String[]
    The components of the version string.
    private static final Version[]
    A few commonly used version numbers.
    private int
    The hash code value.
    private Comparable<?>[]
    The parsed components of the version string.
    private static final String
    The separator characters between major, minor and revision components.
    private static final long
    For cross-version compatibility.
    static final Version
    The version of this Apache SIS distribution.
    private final String
    The version in string form, with leading and trailing spaces removed.
  • Constructor Summary

    Constructors
    Constructor
    Description
    Version(String version)
    Creates a new version object from the supplied string.
  • Method Summary

    Modifier and Type
    Method
    Description
    char
    charAt(int index)
    Returns the char value at the specified index.
    int
    Compares this version with another version object.
    int
    compareTo(Version other, int limit)
    Compares this version with another version object, up to the specified limit.
    boolean
    equals(Object other)
    Compare this version string with the specified object for equality.
    (package private) final Comparable<?>
    getComponent(int index)
    Returns the specified components of this version string.
    Returns the major version number.
    Returns the minor version number.
    Returns the revision number.
    private static int
    Get the rank of the specified object according this type.
    int
    Returns a hash code value for this version.
    int
    Returns the length of the version string.
    subSequence(int start, int end)
    Returns a new version string that is a subsequence of this sequence.
    Returns the version string.
    static Version
    valueOf(int... components)
    Returns an instance for the given integer values.

    Methods inherited from class java.lang.Object

    clone, finalize, getClass, notify, notifyAll, wait, wait, wait

    Methods inherited from interface java.lang.CharSequence

    chars, codePoints, isEmpty
  • Field Details

    • serialVersionUID

      private static final long serialVersionUID
      For cross-version compatibility.
      See Also:
    • SEPARATORS

      private static final String SEPARATORS
      The separator characters between major, minor and revision components. Any character in this string fits.
      See Also:
    • SIS

      public static final Version SIS
      The version of this Apache SIS distribution.
    • CONSTANTS

      private static final Version[] CONSTANTS
      A few commonly used version numbers. This list is based on SIS needs, e.g. in DataStore implementations. New constants are likely to be added in any future SIS versions.
      See Also:
    • version

      private final String version
      The version in string form, with leading and trailing spaces removed.
    • components

      private transient String[] components
      The components of the version string. Will be created when first needed.
    • parsed

      private transient Comparable<?>[] parsed
      The parsed components of the version string. Will be created when first needed.
    • hashCode

      private transient int hashCode
      The hash code value. Will be computed when first needed.
  • Constructor Details

    • Version

      public Version(String version)
      Creates a new version object from the supplied string.
      Parameters:
      version - the version as a string.
  • Method Details

    • valueOf

      public static Version valueOf(int... components)
      Returns an instance for the given integer values. The components array must contain at least 1 element, where:
      • The first element is the major number.
      • The second element (if any) is the minor number.
      • The third element (if any) is the revision number.
      • Other elements (if any) will be appended to the string value.
      Parameters:
      components - the major number, optionally followed by minor, revision or other numbers.
      Returns:
      a new or existing instance of Version for the given numbers.
      Since:
      0.4
    • getMajor

      public Comparable<?> getMajor()
      Returns the major version number. This method returns an Integer if possible, or a String otherwise.
      Returns:
      the major version number.
    • getMinor

      public Comparable<?> getMinor()
      Returns the minor version number. This method returns an Integer if possible, or a String otherwise. If there is no minor version number, then this method returns null.
      Returns:
      the minor version number, or null if none.
    • getRevision

      public Comparable<?> getRevision()
      Returns the revision number. This method returns an Integer if possible, or a String otherwise. If there is no revision number, then this method returns null.
      Returns:
      the revision number, or null if none.
    • getComponent

      final Comparable<?> getComponent(int index)
      Returns the specified components of this version string. For a version of the major.minor.revision form, index 0 stands for the major version number, 1 stands for the minor version number and 2 stands for the revision number.

      The return value is an Integer if the component is parsable as an integer, or a String otherwise. If there is no component at the specified index, then this method returns null.

      Parameters:
      index - the index of the component to fetch.
      Returns:
      the value at the specified index, or null if none.
      Throws:
      IndexOutOfBoundsException - if index is negative.
    • getTypeRank

      private static int getTypeRank(Object value)
      Get the rank of the specified object according this type. This is for compareTo(Version, int) internal only.
    • compareTo

      public int compareTo(Version other, int limit)
      Compares this version with another version object, up to the specified limit. A limit of 1 compares only the major version number. A limit of 2 compares the major and minor version numbers, etc. The comparisons are performed as Integer object if possible, or as String otherwise.
      Parameters:
      other - the other version object to compare with.
      limit - the maximum number of components to compare.
      Returns:
      a negative value if this version is lower than the supplied version, a positive value if it is higher, or 0 if they are equal.
    • compareTo

      public int compareTo(Version other)
      Compares this version with another version object. This method performs the same comparison than compareTo(Version, int) with no limit.
      Specified by:
      compareTo in interface Comparable<Version>
      Parameters:
      other - the other version object to compare with.
      Returns:
      a negative value if this version is lower than the supplied version, a positive value if it is higher, or 0 if they are equal.
    • equals

      public boolean equals(Object other)
      Compare this version string with the specified object for equality. Two version are considered equal if compareTo(other) == 0.
      Overrides:
      equals in class Object
      Parameters:
      other - the object to compare with this version for equality.
    • length

      public int length()
      Returns the length of the version string.
      Specified by:
      length in interface CharSequence
    • charAt

      public char charAt(int index)
      Returns the char value at the specified index.
      Specified by:
      charAt in interface CharSequence
    • subSequence

      public CharSequence subSequence(int start, int end)
      Returns a new version string that is a subsequence of this sequence.
      Specified by:
      subSequence in interface CharSequence
    • toString

      public String toString()
      Returns the version string. This is the string specified at construction time.
      Specified by:
      toString in interface CharSequence
      Overrides:
      toString in class Object
    • hashCode

      public int hashCode()
      Returns a hash code value for this version.
      Overrides:
      hashCode in class Object