1 /* Jackson JSON-processor. 2 * 3 * Copyright (c) 2007- Tatu Saloranta, tatu.saloranta@iki.fi 4 */ 5 6 package com.fasterxml.jackson.core; 7 8 /** 9 * Object that encapsulates versioning information of a component. 10 * Version information includes not just version number but also 11 * optionally group and artifact ids of the component being versioned. 12 *<p> 13 * Note that optional group and artifact id properties are new with Jackson 2.0: 14 * if provided, they should align with Maven artifact information. 15 */ 16 public class Version 17 implements Comparable<Version>, java.io.Serializable 18 { 19 private static final long serialVersionUID = 1L; 20 21 private final static Version UNKNOWN_VERSION = new Version(0, 0, 0, null, null, null); 22 23 protected final int _majorVersion; 24 25 protected final int _minorVersion; 26 27 protected final int _patchLevel; 28 29 protected final String _groupId; 30 31 protected final String _artifactId; 32 33 /** 34 * Additional information for snapshot versions; null for non-snapshot 35 * (release) versions. 36 */ 37 protected final String _snapshotInfo; 38 39 /** 40 * @deprecated Use variant that takes group and artifact ids 41 * 42 * @since 2.1 43 */ 44 @Deprecated Version(int major, int minor, int patchLevel, String snapshotInfo)45 public Version(int major, int minor, int patchLevel, String snapshotInfo) 46 { 47 this(major, minor, patchLevel, snapshotInfo, null, null); 48 } 49 Version(int major, int minor, int patchLevel, String snapshotInfo, String groupId, String artifactId)50 public Version(int major, int minor, int patchLevel, String snapshotInfo, 51 String groupId, String artifactId) 52 { 53 _majorVersion = major; 54 _minorVersion = minor; 55 _patchLevel = patchLevel; 56 _snapshotInfo = snapshotInfo; 57 _groupId = (groupId == null) ? "" : groupId; 58 _artifactId = (artifactId == null) ? "" : artifactId; 59 } 60 61 /** 62 * Method returns canonical "not known" version, which is used as version 63 * in cases where actual version information is not known (instead of null). 64 */ unknownVersion()65 public static Version unknownVersion() { return UNKNOWN_VERSION; } 66 67 /** 68 * @since 2.7 to replace misspelled {@link #isUknownVersion()} 69 */ isUnknownVersion()70 public boolean isUnknownVersion() { return (this == UNKNOWN_VERSION); } 71 isSnapshot()72 public boolean isSnapshot() { return (_snapshotInfo != null && _snapshotInfo.length() > 0); } 73 74 /** 75 * @deprecated Since 2.7 use correctly spelled method {@link #isUnknownVersion()} 76 */ 77 @Deprecated isUknownVersion()78 public boolean isUknownVersion() { return isUnknownVersion(); } 79 getMajorVersion()80 public int getMajorVersion() { return _majorVersion; } getMinorVersion()81 public int getMinorVersion() { return _minorVersion; } getPatchLevel()82 public int getPatchLevel() { return _patchLevel; } 83 getGroupId()84 public String getGroupId() { return _groupId; } getArtifactId()85 public String getArtifactId() { return _artifactId; } 86 toFullString()87 public String toFullString() { 88 return _groupId + '/' + _artifactId + '/' + toString(); 89 } 90 toString()91 @Override public String toString() { 92 StringBuilder sb = new StringBuilder(); 93 sb.append(_majorVersion).append('.'); 94 sb.append(_minorVersion).append('.'); 95 sb.append(_patchLevel); 96 if (isSnapshot()) { 97 sb.append('-').append(_snapshotInfo); 98 } 99 return sb.toString(); 100 } 101 hashCode()102 @Override public int hashCode() { 103 return _artifactId.hashCode() ^ _groupId.hashCode() + _majorVersion - _minorVersion + _patchLevel; 104 } 105 106 @Override equals(Object o)107 public boolean equals(Object o) 108 { 109 if (o == this) return true; 110 if (o == null) return false; 111 if (o.getClass() != getClass()) return false; 112 Version other = (Version) o; 113 return (other._majorVersion == _majorVersion) 114 && (other._minorVersion == _minorVersion) 115 && (other._patchLevel == _patchLevel) 116 && other._artifactId.equals(_artifactId) 117 && other._groupId.equals(_groupId) 118 ; 119 } 120 121 @Override compareTo(Version other)122 public int compareTo(Version other) 123 { 124 if (other == this) return 0; 125 126 int diff = _groupId.compareTo(other._groupId); 127 if (diff == 0) { 128 diff = _artifactId.compareTo(other._artifactId); 129 if (diff == 0) { 130 diff = _majorVersion - other._majorVersion; 131 if (diff == 0) { 132 diff = _minorVersion - other._minorVersion; 133 if (diff == 0) { 134 diff = _patchLevel - other._patchLevel; 135 } 136 } 137 } 138 } 139 return diff; 140 } 141 } 142