diff --git a/src/main/java/io/github/linuxforhealth/hl7/data/DataEnum.java b/src/main/java/io/github/linuxforhealth/hl7/data/DataEnum.java new file mode 100644 index 00000000..ea70b3dc --- /dev/null +++ b/src/main/java/io/github/linuxforhealth/hl7/data/DataEnum.java @@ -0,0 +1,7 @@ +package io.github.linuxforhealth.hl7.data; + +public class DataEnum { + public enum ResourceIdType { + UUID, OID + } +} \ No newline at end of file diff --git a/src/main/java/io/github/linuxforhealth/hl7/data/Hl7RelatedGeneralUtils.java b/src/main/java/io/github/linuxforhealth/hl7/data/Hl7RelatedGeneralUtils.java index 102cd995..3fcf16c1 100644 --- a/src/main/java/io/github/linuxforhealth/hl7/data/Hl7RelatedGeneralUtils.java +++ b/src/main/java/io/github/linuxforhealth/hl7/data/Hl7RelatedGeneralUtils.java @@ -18,6 +18,7 @@ import java.util.regex.Matcher; import java.util.regex.Pattern; import java.util.UUID; + import org.apache.commons.lang3.StringUtils; import org.apache.commons.text.StringEscapeUtils; import org.apache.commons.text.StringTokenizer; @@ -172,6 +173,25 @@ public static String generateResourceId() { return nano.toString() + "." + UUID.randomUUID().toString(); } + /** + * Generates a resource id when provide type. + * Format can be urn:uuid:, urn:oid: default is . + */ + public static String generateResourceId(String type) { + if(type == null || type.isEmpty()) { + return generateResourceId(); + } + DataEnum.ResourceIdType resourceIdType = DataEnum.ResourceIdType.valueOf(type); + switch (resourceIdType) { + case UUID: + return "urn:uuid:" + UUID.randomUUID(); + case OID: + return "urn:oid:" + (int)(Math.random() * 1000000); + default: + return generateResourceId(); + } + } + // Special extractor only for use with PV1 records. // Extract the admit and discharge time and calculate duration length. // Returns null if for any reason the data is not usable, which diff --git a/src/test/java/io/github/linuxforhealth/hl7/data/Hl7RelatedGeneralUtilsTest.java b/src/test/java/io/github/linuxforhealth/hl7/data/Hl7RelatedGeneralUtilsTest.java index cacc5d3f..e6b0b4bc 100644 --- a/src/test/java/io/github/linuxforhealth/hl7/data/Hl7RelatedGeneralUtilsTest.java +++ b/src/test/java/io/github/linuxforhealth/hl7/data/Hl7RelatedGeneralUtilsTest.java @@ -9,10 +9,14 @@ import java.util.ArrayList; import java.util.List; +import java.util.Objects; + import com.google.common.collect.Lists; import org.hl7.fhir.r4.model.codesystems.EncounterStatus; import org.junit.jupiter.api.Test; +import org.junit.jupiter.params.ParameterizedTest; +import org.junit.jupiter.params.provider.ValueSource; import org.slf4j.Logger; import org.slf4j.LoggerFactory; @@ -424,4 +428,18 @@ void get_datetime_value_null() { assertThat(Hl7RelatedGeneralUtils.dateTimeWithZoneId(null,null)).isNull(); } + @ParameterizedTest + @ValueSource(strings = { "UUID", "OID", ""}) + void getResourceIdWithType(String type) { + String resourceId = Hl7RelatedGeneralUtils.generateResourceId(type); + System.out.println("ResourceId: " + resourceId); + assertThat(resourceId).isNotNull(); + if(type.equals("UUID")) { + assertThat(resourceId).startsWith("urn:uuid:"); + } else if (type.equals("OID")) { + assertThat(resourceId).startsWith("urn:oid:"); + } else { + assertThat(resourceId).contains("."); + } + } }