From 7abb923eaec378a8f7f446e3da9797064f316597 Mon Sep 17 00:00:00 2001 From: Ioannis Rosuochatzakis Date: Mon, 16 Feb 2026 09:34:02 +0100 Subject: [PATCH] TEDEFO-4905 Remove axis support from EFX-2 translator --- .../europa/ted/efx/interfaces/ScriptGenerator.java | 13 +++++++++++-- .../ted/efx/sdk1/xpath/XPathScriptGeneratorV1.java | 7 +++++++ .../ted/efx/sdk2/EfxExpressionTranslatorV2.java | 14 +++----------- .../europa/ted/efx/xpath/XPathScriptGenerator.java | 8 -------- .../efx/sdk2/EfxExpressionTranslatorV2Test.java | 6 ------ 5 files changed, 21 insertions(+), 27 deletions(-) diff --git a/src/main/java/eu/europa/ted/efx/interfaces/ScriptGenerator.java b/src/main/java/eu/europa/ted/efx/interfaces/ScriptGenerator.java index 5ab0e444..6e48a098 100644 --- a/src/main/java/eu/europa/ted/efx/interfaces/ScriptGenerator.java +++ b/src/main/java/eu/europa/ted/efx/interfaces/ScriptGenerator.java @@ -78,8 +78,17 @@ public PathExpression composeNodeReferenceWithPredicate( public PathExpression composeFieldReferenceWithPredicate( final PathExpression fieldReference, final BooleanExpression predicate); - public PathExpression composeFieldReferenceWithAxis(final PathExpression fieldReference, - final String axis); + /** + * Applies an XPath axis to a field reference. + * + * @deprecated Axis syntax has been removed from EFX-2. This method is only used by EFX-1 + * and will be removed in a future version. + */ + @Deprecated(forRemoval = true) + default PathExpression composeFieldReferenceWithAxis(final PathExpression fieldReference, + final String axis) { + return fieldReference; + } /** * Given a PathExpression, this method should return the target language script for retrieving the diff --git a/src/main/java/eu/europa/ted/efx/sdk1/xpath/XPathScriptGeneratorV1.java b/src/main/java/eu/europa/ted/efx/sdk1/xpath/XPathScriptGeneratorV1.java index 5ce7c9fb..0fcb3935 100644 --- a/src/main/java/eu/europa/ted/efx/sdk1/xpath/XPathScriptGeneratorV1.java +++ b/src/main/java/eu/europa/ted/efx/sdk1/xpath/XPathScriptGeneratorV1.java @@ -30,6 +30,13 @@ public XPathScriptGeneratorV1(TranslatorOptions translatorOptions) { super(translatorOptions); } + @Override + public PathExpression composeFieldReferenceWithAxis(final PathExpression fieldReference, + final String axis) { + String resultXPath = XPathProcessor.addAxis(axis, fieldReference.getScript()); + return Expression.instantiate(resultXPath, fieldReference.getClass()); + } + /*** * This method is overridden to workaround a limitation of EFX 1. * diff --git a/src/main/java/eu/europa/ted/efx/sdk2/EfxExpressionTranslatorV2.java b/src/main/java/eu/europa/ted/efx/sdk2/EfxExpressionTranslatorV2.java index 6c23495e..3af68336 100644 --- a/src/main/java/eu/europa/ted/efx/sdk2/EfxExpressionTranslatorV2.java +++ b/src/main/java/eu/europa/ted/efx/sdk2/EfxExpressionTranslatorV2.java @@ -268,14 +268,14 @@ protected String getFieldId(AbsoluteFieldReferenceContext ctx) { if (ctx == null) { return null; } - return this.getFieldId(ctx.reference.reference.linkedFieldReference()); + return this.getFieldId(ctx.reference.reference); } protected String getFieldId(FieldReferenceInOtherNoticeContext ctx) { if (ctx == null) { return null; } - return this.getFieldId(ctx.reference.reference.reference.reference.reference.linkedFieldReference()); + return this.getFieldId(ctx.reference.reference.reference.reference.reference); } protected String getFieldId(FieldContextContext ctx) { @@ -299,7 +299,7 @@ protected String getFieldId(FieldReferenceWithPredicateContext ctx) { if (ctx == null) { return null; } - return this.getFieldId(ctx.fieldReferenceWithAxis().linkedFieldReference()); + return this.getFieldId(ctx.linkedFieldReference()); } protected static String getNodeId(NodeReferenceContext ctx) { @@ -1223,14 +1223,6 @@ public void exitPredicate(EfxParser.PredicateContext ctx) { this.efxContext.pop(); } - @Override - public void exitFieldReferenceWithAxis(FieldReferenceWithAxisContext ctx) { - if (ctx.axis() != null) { - this.stack.push(this.script.composeFieldReferenceWithAxis( - this.stack.pop(PathExpression.class), ctx.axis().Axis().getText())); - } - } - // #endregion References with Predicates ------------------------------------ // #region External References ---------------------------------------------- diff --git a/src/main/java/eu/europa/ted/efx/xpath/XPathScriptGenerator.java b/src/main/java/eu/europa/ted/efx/xpath/XPathScriptGenerator.java index 8a37d8c0..72120594 100644 --- a/src/main/java/eu/europa/ted/efx/xpath/XPathScriptGenerator.java +++ b/src/main/java/eu/europa/ted/efx/xpath/XPathScriptGenerator.java @@ -27,7 +27,6 @@ import eu.europa.ted.eforms.sdk.component.SdkComponent; import eu.europa.ted.eforms.sdk.component.SdkComponentType; -import eu.europa.ted.eforms.xpath.XPathProcessor; import eu.europa.ted.efx.interfaces.ScriptGenerator; import eu.europa.ted.efx.interfaces.TranslatorOptions; import eu.europa.ted.efx.model.expressions.Expression; @@ -96,13 +95,6 @@ public PathExpression composeFieldReferenceWithPredicate(PathExpression fieldRef return Expression.instantiate(fieldReference.getScript() + '[' + predicate.getScript() + ']', fieldReference.getClass()); } - @Override - public PathExpression composeFieldReferenceWithAxis(final PathExpression fieldReference, - final String axis) { - String resultXPath = XPathProcessor.addAxis(axis, fieldReference.getScript()); - return Expression.instantiate(resultXPath, fieldReference.getClass()); - } - @Override public PathExpression composeFieldValueReference(PathExpression fieldReference) { if (fieldReference.is(EfxDataType.String.class)) { diff --git a/src/test/java/eu/europa/ted/efx/sdk2/EfxExpressionTranslatorV2Test.java b/src/test/java/eu/europa/ted/efx/sdk2/EfxExpressionTranslatorV2Test.java index 3a6acc49..a342bdcd 100644 --- a/src/test/java/eu/europa/ted/efx/sdk2/EfxExpressionTranslatorV2Test.java +++ b/src/test/java/eu/europa/ted/efx/sdk2/EfxExpressionTranslatorV2Test.java @@ -1240,12 +1240,6 @@ void testFieldReference_ForDurationFields() { "ND-Root", "BT-00-Measure"); } - @Test - void testFieldReference_WithAxis() { - testExpressionTranslationWithContext("./preceding::PathNode/IntegerField/number()", "ND-Root", - "ND-Root::preceding::integerField"); - } - /** * Unlike EFX-1, where any reference to a text-multilingual field, is automatically translated to * an expression that returns the value of the field in the preferred language, in EFX-2 there are