001package cpw.mods.fml.common.versioning;
002
003public 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}