package net.minecraftforge.gradle.util.json.version;
import java.util.List;
import java.util.Map;
import net.minecraftforge.gradle.common.Constants;
public class Library
{
public String name;
public List<OSRule> rules;
public Map<OS, String> natives;
public ExtractRule extract;
private String url;
private Action _applies = null;
public boolean applies()
{
if (_applies == null)
{
_applies = Action.DISALLOW;
if (rules == null)
{
_applies = Action.ALLOW;
}
else
{
for (OSRule rule : rules)
{
if (rule.applies())
_applies = rule.action;
}
}
}
return _applies == Action.ALLOW;
}
private Artifact _artifact = null;
public String getPath()
{
if (_artifact == null)
{
_artifact = new Artifact(name);
}
return _artifact.getPath();
}
public String getPathNatives()
{
if (natives == null) return null;
if (_artifact == null)
{
_artifact = new Artifact(name);
}
return _artifact.getPath(natives.get(OS.CURRENT));
}
public String getArtifactName()
{
if (_artifact == null)
_artifact = new Artifact(name);
if (natives == null)
return _artifact.getArtifact();
else
return _artifact.getArtifact(natives.get(OS.CURRENT));
}
public String getUrl()
{
return url == null ? Constants.URL_LIBRARY : url;
}
@Override
public String toString()
{
return name;
}
private class Artifact
{
private String domain;
private String name;
private String version;
private String classifier;
private String ext = "jar";
public Artifact(String rep)
{
String[] pts = rep.split(":");
int idx = pts[pts.length-1].indexOf('@');
if (idx != -1)
{
ext = pts[pts.length-1].substring(idx + 1);
pts[pts.length-1] = pts[pts.length-1].substring(0, idx);
}
domain = pts[0];
name = pts[1];
version = pts[2];
if (pts.length > 3) classifier = pts[3];
}
public String getArtifact(){ return getArtifact(classifier); }
public String getArtifact(String classifier)
{
String ret = domain + ":" + name + ":" + version;
if (classifier != null && classifier.indexOf('$') > -1)
{
classifier = classifier.replace("${arch}", Constants.SYSTEM_ARCH.toString());
}
if (classifier != null) ret += ":" + classifier;
if (!"jar".equals(ext)) ret += "@" + ext;
return ret;
}
public String getPath(){ return getPath(classifier); }
public String getPath(String classifier)
{
String ret = String.format("%s/%s/%s/%s-%s", domain.replace('.', '/'), name, version, name, version);
if (classifier != null && classifier.indexOf('$') > -1)
{
classifier = classifier.replace("${arch}", Constants.SYSTEM_ARCH.toString());
}
if (classifier != null) ret += "-" + classifier;
return ret + "." + ext;
}
}
}