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();
}
}