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    }