001/*
002 * Forge Mod Loader
003 * Copyright (c) 2012-2013 cpw.
004 * All rights reserved. This program and the accompanying materials
005 * are made available under the terms of the GNU Lesser Public License v2.1
006 * which accompanies this distribution, and is available at
007 * http://www.gnu.org/licenses/old-licenses/gpl-2.0.html
008 * 
009 * Contributors:
010 *     cpw - implementation
011 */
012
013package cpw.mods.fml.common.versioning;
014
015public class DefaultArtifactVersion implements ArtifactVersion
016{
017
018    private ComparableVersion comparableVersion;
019    private String label;
020    private boolean unbounded;
021    private VersionRange range;
022
023    public DefaultArtifactVersion(String versionNumber)
024    {
025        comparableVersion = new ComparableVersion(versionNumber);
026        range = VersionRange.createFromVersion(versionNumber, this);
027    }
028
029    public DefaultArtifactVersion(String label, VersionRange range)
030    {
031        this.label = label;
032        this.range = range;
033    }
034    public DefaultArtifactVersion(String label, String version)
035    {
036        this(version);
037        this.label = label;
038    }
039
040    public DefaultArtifactVersion(String string, boolean unbounded)
041    {
042        this.label = string;
043        this.unbounded = true;
044    }
045
046    @Override
047    public boolean equals(Object obj)
048    {
049        return ((DefaultArtifactVersion)obj).containsVersion(this);
050    }
051
052    @Override
053    public int compareTo(ArtifactVersion o)
054    {
055        return unbounded ? 0 : this.comparableVersion.compareTo(((DefaultArtifactVersion)o).comparableVersion);
056    }
057
058    @Override
059    public String getLabel()
060    {
061        return label;
062    }
063
064    @Override
065    public boolean containsVersion(ArtifactVersion source)
066    {
067        if (!source.getLabel().equals(getLabel()))
068        {
069            return false;
070        }
071        if (unbounded)
072        {
073            return true;
074        }
075        if (range != null)
076        {
077            return range.containsVersion(source);
078        }
079        else
080        {
081            return false;
082        }
083    }
084
085    @Override
086    public String getVersionString()
087    {
088        return comparableVersion == null ? "unknown" : comparableVersion.toString();
089    }
090
091    @Override
092    public String getRangeString()
093    {
094        return range == null ? "any" : range.toString();
095    }
096    @Override
097    public String toString()
098    {
099        return label == null ? comparableVersion.toString() : label + ( unbounded ? "" : "@" + range);
100    }
101}