64 lines
1.9 KiB
Java
64 lines
1.9 KiB
Java
package p.packer.messages;
|
|
|
|
import java.util.Objects;
|
|
|
|
public record AssetReference(String value) {
|
|
private static final String ASSET_ID_PREFIX = "asset:id:";
|
|
private static final String ASSET_ROOT_PREFIX = "asset:root:";
|
|
|
|
public AssetReference {
|
|
value = Objects.requireNonNull(value, "value").trim();
|
|
if (value.isBlank()) {
|
|
throw new IllegalArgumentException("value must not be blank");
|
|
}
|
|
}
|
|
|
|
public static AssetReference of(String value) {
|
|
return new AssetReference(value);
|
|
}
|
|
|
|
public static AssetReference forAssetId(int assetId) {
|
|
if (assetId <= 0) {
|
|
throw new IllegalArgumentException("assetId must be positive");
|
|
}
|
|
return new AssetReference(ASSET_ID_PREFIX + assetId);
|
|
}
|
|
|
|
public static AssetReference forRelativeAssetRoot(String relativeAssetRoot) {
|
|
final String normalized = Objects.requireNonNull(relativeAssetRoot, "relativeAssetRoot").trim();
|
|
if (normalized.isBlank()) {
|
|
throw new IllegalArgumentException("relativeAssetRoot must not be blank");
|
|
}
|
|
return new AssetReference(ASSET_ROOT_PREFIX + normalized);
|
|
}
|
|
|
|
public boolean isAssetIdReference() {
|
|
return value.startsWith(ASSET_ID_PREFIX);
|
|
}
|
|
|
|
public boolean isAssetRootReference() {
|
|
return value.startsWith(ASSET_ROOT_PREFIX);
|
|
}
|
|
|
|
public String rawValue() {
|
|
if (isAssetIdReference()) {
|
|
return value.substring(ASSET_ID_PREFIX.length());
|
|
}
|
|
if (isAssetRootReference()) {
|
|
return value.substring(ASSET_ROOT_PREFIX.length());
|
|
}
|
|
return value;
|
|
}
|
|
|
|
@Override
|
|
public boolean equals(Object o) {
|
|
if (!(o instanceof AssetReference(String v1))) return false;
|
|
return value.equals(v1);
|
|
}
|
|
|
|
@Override
|
|
public int hashCode() {
|
|
return value.hashCode();
|
|
}
|
|
}
|