diff --git a/src/main/java/eu/europa/ted/eforms/sdk/SdkConstants.java b/src/main/java/eu/europa/ted/eforms/sdk/SdkConstants.java index deeeb97..25ecad1 100644 --- a/src/main/java/eu/europa/ted/eforms/sdk/SdkConstants.java +++ b/src/main/java/eu/europa/ted/eforms/sdk/SdkConstants.java @@ -7,6 +7,7 @@ public class SdkConstants { public static final String FIELDS_JSON_XML_STRUCTURE_KEY = "xmlStructure"; public static final String FIELDS_JSON_FIELDS_KEY = "fields"; + public static final String NOTICE_TYPES_JSON_SUBTYPES_KEY = "noticeSubTypes"; public static final String NOTICE_TYPES_JSON_DOCUMENT_TYPES_KEY = "documentTypes"; public static final String NOTICE_TYPES_JSON_DOCUMENT_TYPE_KEY = "documentType"; public static final String NOTICE_TYPES_JSON_NAMESPACE_KEY = "namespace"; diff --git a/src/main/java/eu/europa/ted/eforms/sdk/component/SdkComponentType.java b/src/main/java/eu/europa/ted/eforms/sdk/component/SdkComponentType.java index 8d551e7..4ed6cad 100644 --- a/src/main/java/eu/europa/ted/eforms/sdk/component/SdkComponentType.java +++ b/src/main/java/eu/europa/ted/eforms/sdk/component/SdkComponentType.java @@ -1,8 +1,10 @@ package eu.europa.ted.eforms.sdk.component; /** - * Enumeration of component types that can be registered with the SDK component factory. + * Enumeration of component types that can be registered with the SDK component + * factory. */ public enum SdkComponentType { - FIELD, NODE, CODELIST, EFX_EXPRESSION_TRANSLATOR, EFX_TEMPLATE_TRANSLATOR, SYMBOL_RESOLVER, SCRIPT_GENERATOR, MARKUP_GENERATOR; + FIELD, NODE, CODELIST, NOTICE_TYPE, EFX_EXPRESSION_TRANSLATOR, EFX_TEMPLATE_TRANSLATOR, EFX_RULES_TRANSLATOR, + SYMBOL_RESOLVER, SCRIPT_GENERATOR, MARKUP_GENERATOR, VALIDATOR_GENERATOR; } diff --git a/src/main/java/eu/europa/ted/eforms/sdk/entity/SdkEntityFactory.java b/src/main/java/eu/europa/ted/eforms/sdk/entity/SdkEntityFactory.java index 36f9f8b..09705d9 100644 --- a/src/main/java/eu/europa/ted/eforms/sdk/entity/SdkEntityFactory.java +++ b/src/main/java/eu/europa/ted/eforms/sdk/entity/SdkEntityFactory.java @@ -30,4 +30,10 @@ public static SdkNode getSdkNode(String sdkVersion, JsonNode node) throws Instan return SdkEntityFactory.INSTANCE.getComponentImpl(sdkVersion, SdkComponentType.NODE, SdkNode.class, node); } + + public static SdkNoticeSubtype getSdkNoticeSubtype(final String sdkVersion, final JsonNode json) + throws InstantiationException { + return SdkEntityFactory.INSTANCE.getComponentImpl(sdkVersion, SdkComponentType.NOTICE_TYPE, + SdkNoticeSubtype.class, json); + } } diff --git a/src/main/java/eu/europa/ted/eforms/sdk/entity/SdkField.java b/src/main/java/eu/europa/ted/eforms/sdk/entity/SdkField.java index 49e8be6..9213798 100644 --- a/src/main/java/eu/europa/ted/eforms/sdk/entity/SdkField.java +++ b/src/main/java/eu/europa/ted/eforms/sdk/entity/SdkField.java @@ -103,6 +103,6 @@ public int hashCode() { @Override public String toString() { - return "SdkField [id=" + id + "]"; + return id; } } diff --git a/src/main/java/eu/europa/ted/eforms/sdk/entity/SdkNoticeSubtype.java b/src/main/java/eu/europa/ted/eforms/sdk/entity/SdkNoticeSubtype.java new file mode 100644 index 0000000..0deb351 --- /dev/null +++ b/src/main/java/eu/europa/ted/eforms/sdk/entity/SdkNoticeSubtype.java @@ -0,0 +1,75 @@ +package eu.europa.ted.eforms.sdk.entity; + +import java.util.Objects; +import com.fasterxml.jackson.databind.JsonNode; + +/** + * Represents a notice subtype from the SDK's notice-types.json file. + */ +public abstract class SdkNoticeSubtype implements Comparable { + private final String subTypeId; + private final String documentType; + private final String type; + + protected SdkNoticeSubtype(String subTypeId, String documentType, String type) { + this.subTypeId = subTypeId; + this.documentType = documentType; + this.type = type; + } + + protected SdkNoticeSubtype(JsonNode json) { + this.subTypeId = json.get("subTypeId").asText(null); + this.documentType = json.get("documentType").asText(null); + this.type = json.get("type").asText(null); + } + + /** + * Returns the notice subtype ID (e.g., "1", "3", "CEI", "E1", "X01"). + * This is the primary identifier used for phase generation. + */ + public String getId() { + return subTypeId; + } + + public String getSubTypeId() { + return subTypeId; + } + + public String getDocumentType() { + return documentType; + } + + public String getType() { + return type; + } + + @Override + public boolean equals(Object obj) { + if (this == obj) { + return true; + } + if (obj == null) { + return false; + } + if (getClass() != obj.getClass()) { + return false; + } + SdkNoticeSubtype other = (SdkNoticeSubtype) obj; + return Objects.equals(subTypeId, other.subTypeId); + } + + @Override + public int compareTo(SdkNoticeSubtype o) { + return this.subTypeId.compareTo(o.subTypeId); + } + + @Override + public int hashCode() { + return Objects.hash(subTypeId); + } + + @Override + public String toString() { + return subTypeId; + } +} diff --git a/src/main/java/eu/europa/ted/eforms/sdk/repository/SdkNoticeTypeRepository.java b/src/main/java/eu/europa/ted/eforms/sdk/repository/SdkNoticeTypeRepository.java new file mode 100644 index 0000000..adfdbba --- /dev/null +++ b/src/main/java/eu/europa/ted/eforms/sdk/repository/SdkNoticeTypeRepository.java @@ -0,0 +1,29 @@ +package eu.europa.ted.eforms.sdk.repository; + +import java.nio.file.Path; +import com.fasterxml.jackson.databind.JsonNode; +import com.fasterxml.jackson.databind.node.ArrayNode; +import eu.europa.ted.eforms.sdk.SdkConstants; +import eu.europa.ted.eforms.sdk.entity.SdkEntityFactory; +import eu.europa.ted.eforms.sdk.entity.SdkNoticeSubtype; + +/** + * Repository for SDK notice types loaded from notice-types.json. + * Maps notice subtype IDs (e.g., "1", "3", "CEI", "E1", "X01") to SdkNoticeSubtype objects. + */ +public class SdkNoticeTypeRepository extends MapFromJson { + private static final long serialVersionUID = 1L; + + public SdkNoticeTypeRepository(String sdkVersion, Path jsonPath) throws InstantiationException { + super(sdkVersion, jsonPath); + } + + @Override + protected void populateMap(final JsonNode json) throws InstantiationException { + final ArrayNode noticeSubtypes = (ArrayNode) json.get(SdkConstants.NOTICE_TYPES_JSON_SUBTYPES_KEY); + for (final JsonNode noticeSubtype : noticeSubtypes) { + final SdkNoticeSubtype sdkNoticeSubtype = SdkEntityFactory.getSdkNoticeSubtype(sdkVersion, noticeSubtype); + put(sdkNoticeSubtype.getId(), sdkNoticeSubtype); + } + } +}