    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}