98 lines
2.2 KiB
Java
98 lines
2.2 KiB
Java
package speiger.src.coreengine.assets;
|
|
|
|
import java.util.Map;
|
|
import java.util.Objects;
|
|
import java.util.function.Function;
|
|
|
|
import speiger.src.collections.objects.maps.impl.hash.Object2ObjectOpenHashMap;
|
|
import speiger.src.collections.objects.utils.maps.Object2ObjectMaps;
|
|
|
|
public final class AssetLocation
|
|
{
|
|
static final Map<String, AssetLocation> LOCATION = Object2ObjectMaps.synchronize(new Object2ObjectOpenHashMap<String, AssetLocation>());
|
|
static final Function<String, AssetLocation> BUILDER = AssetLocation::compute;
|
|
final String domain;
|
|
final String location;
|
|
|
|
private AssetLocation() {throw new UnsupportedOperationException("use AssetLocation.of instead");}
|
|
|
|
private AssetLocation(String domain, String location)
|
|
{
|
|
this.domain = domain;
|
|
this.location = location;
|
|
}
|
|
|
|
public String getDomain()
|
|
{
|
|
return domain;
|
|
}
|
|
|
|
public String getLocation()
|
|
{
|
|
return location;
|
|
}
|
|
|
|
public String getActualLocation()
|
|
{
|
|
return "assets/"+domain+"/"+location;
|
|
}
|
|
|
|
public AssetLocation subAsset(String subPath)
|
|
{
|
|
return of(domain+":"+location + "/" + subPath);
|
|
}
|
|
|
|
public AssetLocation alternate(String alterversion)
|
|
{
|
|
return of(domain+":"+location+"."+alterversion);
|
|
}
|
|
|
|
@Override
|
|
public String toString()
|
|
{
|
|
return domain+":"+location;
|
|
}
|
|
|
|
@Override
|
|
public int hashCode()
|
|
{
|
|
return Objects.hash(domain, location);
|
|
}
|
|
|
|
@Override
|
|
public boolean equals(Object obj)
|
|
{
|
|
if(obj == this)
|
|
{
|
|
return true;
|
|
}
|
|
if(obj instanceof AssetLocation)
|
|
{
|
|
AssetLocation location = (AssetLocation)obj;
|
|
return location.domain.equals(domain) && location.location.equals(this.location);
|
|
}
|
|
return false;
|
|
}
|
|
|
|
public boolean matches(AssetLocation location)
|
|
{
|
|
return location.domain.equals(domain) && location.location.equals(this.location);
|
|
}
|
|
|
|
public static final AssetLocation of(String domain, String location)
|
|
{
|
|
return of((domain == null || domain.isEmpty() ? "base" : domain)+":"+location);
|
|
}
|
|
|
|
public static final AssetLocation of(String location)
|
|
{
|
|
return LOCATION.computeIfAbsent(location.indexOf(":") == -1 ? "base:"+location : location, BUILDER);
|
|
}
|
|
|
|
private static final AssetLocation compute(String s)
|
|
{
|
|
int index = s.indexOf(":");
|
|
return new AssetLocation(s.substring(0, index), s.substring(index+1, s.length()));
|
|
}
|
|
}
|