    001    package cpw.mods.fml.common.versioning;
    002
    003    public class DefaultArtifactVersion implements ArtifactVersion
    004    {
    005
    006        private ComparableVersion comparableVersion;
    007        private String label;
    008        private boolean unbounded;
    009        private VersionRange range;
    010
    011        public DefaultArtifactVersion(String versionNumber)
    012        {
    013            comparableVersion = new ComparableVersion(versionNumber);
    014            range = VersionRange.createFromVersion(versionNumber, this);
    015        }
    016
    017        public DefaultArtifactVersion(String label, VersionRange range)
    018        {
    019            this.label = label;
    020            this.range = range;
    021        }
    022        public DefaultArtifactVersion(String label, String version)
    023        {
    024            this(version);
    025            this.label = label;
    026        }
    027
    028        public DefaultArtifactVersion(String string, boolean unbounded)
    029        {
    030            this.label = string;
    031            this.unbounded = true;
    032        }
    033
    034        @Override
    035        public boolean equals(Object obj)
    036        {
    037            return ((DefaultArtifactVersion)obj).containsVersion(this);
    038        }
    039
    040        @Override
    041        public int compareTo(ArtifactVersion o)
    042        {
    043            return unbounded ? 0 : this.comparableVersion.compareTo(((DefaultArtifactVersion)o).comparableVersion);
    044        }
    045
    046        @Override
    047        public String getLabel()
    048        {
    049            return label;
    050        }
    051
    052        @Override
    053        public boolean containsVersion(ArtifactVersion source)
    054        {
    055            if (!source.getLabel().equals(getLabel()))
    056            {
    057                return false;
    058            }
    059            if (unbounded)
    060            {
    061                return true;
    062            }
    063            if (range != null)
    064            {
    065                return range.containsVersion(source);
    066            }
    067            else
    068            {
    069                return false;
    070            }
    071        }
    072
    073        @Override
    074        public String getVersionString()
    075        {
    076            return comparableVersion == null ? "unknown" : comparableVersion.toString();
    077        }
    078
    079        @Override
    080        public String getRangeString()
    081        {
    082            return range == null ? "any" : range.toString();
    083        }
    084        @Override
    085        public String toString()
    086        {
    087            return label == null ? comparableVersion.toString() : label + ( unbounded ? "" : "@" + range);
    088        }
    089    }