From 5e3f4207bfb9b4bc113c7d5d5b24c9bcec3373d3 Mon Sep 17 00:00:00 2001 From: Ioannis Rosuochatzakis Date: Wed, 12 Nov 2025 02:49:53 +0100 Subject: [PATCH 1/5] Add EFX Rules translator component type - Add EFX_RULES_TRANSLATOR to SdkComponentType enum - Required for Schematron generation from EFX Rules --- .../eu/europa/ted/eforms/sdk/component/SdkComponentType.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) 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..331ac4f 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 @@ -4,5 +4,5 @@ * 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, EFX_EXPRESSION_TRANSLATOR, EFX_TEMPLATE_TRANSLATOR, EFX_RULES_TRANSLATOR, SYMBOL_RESOLVER, SCRIPT_GENERATOR, MARKUP_GENERATOR; } From c724b0b2c89061e5e5eb626c08efc8b5e257021d Mon Sep 17 00:00:00 2001 From: Ioannis Rosuochatzakis Date: Tue, 9 Dec 2025 04:48:08 +0100 Subject: [PATCH 2/5] Added SDK notice subtype entity and repository --- .../europa/ted/eforms/sdk/SdkConstants.java | 1 + .../sdk/component/SdkComponentType.java | 2 +- .../eforms/sdk/entity/SdkEntityFactory.java | 6 ++ .../eforms/sdk/entity/SdkNoticeSubtype.java | 70 +++++++++++++++++++ .../repository/SdkNoticeTypeRepository.java | 29 ++++++++ 5 files changed, 107 insertions(+), 1 deletion(-) create mode 100644 src/main/java/eu/europa/ted/eforms/sdk/entity/SdkNoticeSubtype.java create mode 100644 src/main/java/eu/europa/ted/eforms/sdk/repository/SdkNoticeTypeRepository.java 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 331ac4f..9e9b88a 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 @@ -4,5 +4,5 @@ * 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, EFX_RULES_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; } 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..df91805 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 getSdkNoticeType(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/SdkNoticeSubtype.java b/src/main/java/eu/europa/ted/eforms/sdk/entity/SdkNoticeSubtype.java new file mode 100644 index 0000000..ddf5dd8 --- /dev/null +++ b/src/main/java/eu/europa/ted/eforms/sdk/entity/SdkNoticeSubtype.java @@ -0,0 +1,70 @@ +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 { + 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(); + this.documentType = json.get("documentType").asText(); + this.type = json.get("type").asText(); + } + + /** + * 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 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..0a5e76e --- /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 noticeTypes = (ArrayNode) json.get(SdkConstants.NOTICE_TYPES_JSON_SUBTYPES_KEY); + for (final JsonNode noticeType : noticeTypes) { + final SdkNoticeSubtype sdkNoticeType = SdkEntityFactory.getSdkNoticeType(sdkVersion, noticeType); + put(sdkNoticeType.getId(), sdkNoticeType); + } + } +} From 0331b915fb90d5ec1d47d5111c83218d063680d0 Mon Sep 17 00:00:00 2001 From: Ioannis Rosuochatzakis Date: Fri, 26 Dec 2025 12:54:36 +0100 Subject: [PATCH 3/5] Refactor: Rename VALIDATOR_MARKUP_GENERATOR to VALIDATOR_GENERATOR --- .../europa/ted/eforms/sdk/component/SdkComponentType.java | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) 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 9e9b88a..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, NOTICE_TYPE, EFX_EXPRESSION_TRANSLATOR, EFX_TEMPLATE_TRANSLATOR, EFX_RULES_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; } From 7d77effc1ff09eb6cd388289682ba73319194238 Mon Sep 17 00:00:00 2001 From: Ioannis Rosuochatzakis Date: Fri, 26 Dec 2025 14:08:01 +0100 Subject: [PATCH 4/5] Refactor: Update SdkNoticeSubtype and SdkField --- .../eu/europa/ted/eforms/sdk/entity/SdkField.java | 2 +- .../ted/eforms/sdk/entity/SdkNoticeSubtype.java | 13 +++++++++---- 2 files changed, 10 insertions(+), 5 deletions(-) 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 index ddf5dd8..0deb351 100644 --- a/src/main/java/eu/europa/ted/eforms/sdk/entity/SdkNoticeSubtype.java +++ b/src/main/java/eu/europa/ted/eforms/sdk/entity/SdkNoticeSubtype.java @@ -6,7 +6,7 @@ /** * Represents a notice subtype from the SDK's notice-types.json file. */ -public abstract class SdkNoticeSubtype { +public abstract class SdkNoticeSubtype implements Comparable { private final String subTypeId; private final String documentType; private final String type; @@ -18,9 +18,9 @@ protected SdkNoticeSubtype(String subTypeId, String documentType, String type) { } protected SdkNoticeSubtype(JsonNode json) { - this.subTypeId = json.get("subTypeId").asText(); - this.documentType = json.get("documentType").asText(); - this.type = json.get("type").asText(); + this.subTypeId = json.get("subTypeId").asText(null); + this.documentType = json.get("documentType").asText(null); + this.type = json.get("type").asText(null); } /** @@ -58,6 +58,11 @@ public boolean equals(Object 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); From dd51af2acdd573f657861cc84639fafd33598e9a Mon Sep 17 00:00:00 2001 From: Ioannis Rosuochatzakis Date: Fri, 26 Dec 2025 14:39:27 +0100 Subject: [PATCH 5/5] Refactor: Rename getSdkNoticeType to getSdkNoticeSubtype and update variable names --- .../eu/europa/ted/eforms/sdk/entity/SdkEntityFactory.java | 2 +- .../eforms/sdk/repository/SdkNoticeTypeRepository.java | 8 ++++---- 2 files changed, 5 insertions(+), 5 deletions(-) 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 df91805..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 @@ -31,7 +31,7 @@ public static SdkNode getSdkNode(String sdkVersion, JsonNode node) throws Instan SdkNode.class, node); } - public static SdkNoticeSubtype getSdkNoticeType(final String sdkVersion, final JsonNode json) + 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/repository/SdkNoticeTypeRepository.java b/src/main/java/eu/europa/ted/eforms/sdk/repository/SdkNoticeTypeRepository.java index 0a5e76e..adfdbba 100644 --- a/src/main/java/eu/europa/ted/eforms/sdk/repository/SdkNoticeTypeRepository.java +++ b/src/main/java/eu/europa/ted/eforms/sdk/repository/SdkNoticeTypeRepository.java @@ -20,10 +20,10 @@ public SdkNoticeTypeRepository(String sdkVersion, Path jsonPath) throws Instanti @Override protected void populateMap(final JsonNode json) throws InstantiationException { - final ArrayNode noticeTypes = (ArrayNode) json.get(SdkConstants.NOTICE_TYPES_JSON_SUBTYPES_KEY); - for (final JsonNode noticeType : noticeTypes) { - final SdkNoticeSubtype sdkNoticeType = SdkEntityFactory.getSdkNoticeType(sdkVersion, noticeType); - put(sdkNoticeType.getId(), sdkNoticeType); + 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); } } }