diff --git a/li-utils/src/main/java/com/linkedin/common/urn/DataProcessUrn.java b/li-utils/src/main/java/com/linkedin/common/urn/DataProcessUrn.java new file mode 100644 index 0000000000000..553f2746b5c65 --- /dev/null +++ b/li-utils/src/main/java/com/linkedin/common/urn/DataProcessUrn.java @@ -0,0 +1,67 @@ +package com.linkedin.common.urn; + +import com.linkedin.common.FabricType; +import com.linkedin.data.template.Custom; +import com.linkedin.data.template.DirectCoercer; +import com.linkedin.data.template.TemplateOutputCastException; + +import java.net.URISyntaxException; + +import static com.linkedin.common.urn.UrnUtils.toFabricType; + +public class DataProcessUrn extends Urn { + public static final String ENTITY_TYPE = "dataProcess"; + + private final String dataJobNameEntity; + + private static final String CONTENT_FORMAT = "(%s,%s,%s)"; + + private final String dataJobOrchestrator; + + private final FabricType originEntity; + + public DataProcessUrn(String orchestrator, String name, FabricType origin) { + super(ENTITY_TYPE, String.format(CONTENT_FORMAT, orchestrator, name, origin.name())); + this.dataJobOrchestrator = orchestrator; + this.dataJobNameEntity = name; + this.originEntity = origin; + } + + public String getJobNameEntity() { + return dataJobNameEntity; + } + + public String getDataJobOrchestrator() { + return dataJobOrchestrator; + } + + public FabricType getOriginEntity() { + return originEntity; + } + + public static DataProcessUrn createFromString(String rawUrn) throws URISyntaxException { + String content = new Urn(rawUrn).getContent(); + String[] parts = content.substring(1, content.length() - 1).split(","); + return new DataProcessUrn(parts[0], parts[1], toFabricType(parts[2])); + } + + public static DataProcessUrn deserialize(String rawUrn) throws URISyntaxException { + return createFromString(rawUrn); + } + + static { + Custom.registerCoercer(new DirectCoercer() { + public Object coerceInput(DataProcessUrn object) throws ClassCastException { + return object.toString(); + } + + public DataProcessUrn coerceOutput(Object object) throws TemplateOutputCastException { + try { + return DataProcessUrn.createFromString((String) object); + } catch (URISyntaxException e) { + throw new TemplateOutputCastException("Invalid URN syntax: " + e.getMessage(), e); + } + } + }, DataProcessUrn.class); + } +}