Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
217 commits
Select commit Hold shift + click to select a range
06fdb0b
Merge branch 'main' into develop
bertrand-lorentz Aug 2, 2024
bb6f1fb
pom: Update dependencies on logback 1.5.6 and slf4j 2.0.13
bertrand-lorentz Aug 5, 2024
27e7ed1
Merge pull request #110 from OP-TED/update-logback-dependency
bertrand-lorentz Aug 5, 2024
60ecab4
pom: Define SDK versions as properties
bertrand-lorentz Oct 8, 2024
092c5ce
pom: Use EFX grammar from SDK 1.13.0 (TEDEFO-3730)
bertrand-lorentz Oct 8, 2024
2ee97b0
pom: Update dependency on jacoco to 0.8.12
bertrand-lorentz Jan 9, 2025
9afc8c3
Added support for global variables and functions in EFX templates.
rousso Apr 21, 2025
04d3e7e
Merge pull request #111 from OP-TED/use-sdk-1.13-grammar
rousso Apr 21, 2025
39e2342
Merge branch 'develop' into TEDEFO-4367-adds-global-variables-and-fun…
rousso Apr 21, 2025
8fbac24
Fixed SDK dependency in pom.xml
rousso Apr 21, 2025
8099cac
MarkupGenerator: Fix typo in comment
bertrand-lorentz Apr 22, 2025
cf486f4
Improve equals() and hashCode() implementation for some model classes
bertrand-lorentz Apr 22, 2025
01bac3f
MarkupGenerator: Add back line removed incorrectly in previous commit
bertrand-lorentz Apr 22, 2025
358ecaf
Merge pull request #112 from OP-TED/TEDEFO-4367-adds-global-variables…
rousso Apr 22, 2025
e1f6bb8
Fix Javadoc comments inconsistent with method signature
bertrand-lorentz Apr 22, 2025
353261f
Merge pull request #113 from OP-TED/fix-javadoc
rousso Apr 22, 2025
63bd4e9
Bugfix: The system can now parse a file even if there are no template…
rousso Apr 24, 2025
0be41f4
Merge pull request #114 from OP-TED/TEDEFO-4367-add-global-variables-…
rousso Apr 25, 2025
1e9f5e8
Adds conditional templates as well as parametrized callable templates…
rousso Jun 1, 2025
23683a9
Fixed some minor issues pointed out during the code review.
rousso Jun 2, 2025
b1a093f
Merge pull request #115 from OP-TED/TEDEFO-4370-callable-templates
rousso Jun 2, 2025
4fafa75
Removed an unnecessary parameter as spotted by copilot code review
rousso Jun 2, 2025
8ded80a
Fixed a Javadoc comment in MarkupGenerator.java
rousso Jun 2, 2025
bd9ecb8
Merge pull request #116 from OP-TED/TEDEFO-4370-callable-templates
rousso Jun 2, 2025
58f5fc9
Fixed a JavaDoc issue preventing deployment to Maven repo.
rousso Jun 2, 2025
4b19577
Merge branch 'develop' into TEDEFO-4370-callable-templates
rousso Jun 2, 2025
aebda63
Merge pull request #117 from OP-TED/TEDEFO-4370-callable-templates
rousso Jun 2, 2025
ee5ebdd
Fixed javadoc issues preventing publication to Maven Central
rousso Jun 2, 2025
de1f2e9
Merge pull request #119 from OP-TED/fix-javadoc-issues
rousso Jun 2, 2025
9ee7e1e
Fixed javadoc issues preventing publication to Maven Central
rousso Jun 2, 2025
2eeb11f
Merge branch 'develop' into fix-javadoc-issues
rousso Jun 2, 2025
a1e58aa
Merge pull request #120 from OP-TED/fix-javadoc-issues
rousso Jun 2, 2025
beb5b48
Fixed javadoc issues preventing publication to Maven Central
rousso Jun 2, 2025
f274df8
Merge branch 'develop' into fix-javadoc-issues
rousso Jun 2, 2025
3091b04
Merge pull request #121 from OP-TED/fix-javadoc-issues
rousso Jun 2, 2025
c05221b
Enhance SymbolResolver with alias resolution methods and update relat…
rousso Jun 17, 2025
8a9f48b
Merge pull request #122 from OP-TED/simplify-identifier-handling
rousso Jun 18, 2025
42a0176
Add dictionary handling features to Markup and Script generators
rousso Jun 29, 2025
40cbee0
Fixed issues pointed out during code review
rousso Jun 30, 2025
67ba99d
MarkupGenerator: Fix typo in code comment
bertrand-lorentz Jun 30, 2025
11b7ee0
Merge pull request #123 from OP-TED/TEDEFO-4273-use-xsl-key
rousso Jun 30, 2025
743ec8f
pom: Update dependency on jackson to 2.18.3
bertrand-lorentz Jul 16, 2025
c5ee647
pom: Update dependency on commons-lang3 to version 3.18.0
bertrand-lorentz Jul 16, 2025
220e281
pom: Update dependencies on logback to version 1.5.18
bertrand-lorentz Jul 16, 2025
e382f35
Merge pull request #124 from OP-TED/fix-vulnerable-dependencies
bertrand-lorentz Jul 17, 2025
202fc1a
Publish via the new Maven Central Portal
bertrand-lorentz Jul 17, 2025
87a454e
Merge pull request #125 from OP-TED/publish-via-central-portal
bertrand-lorentz Jul 18, 2025
d0dc98b
Merge branch 'release/2.0.0-alpha.5' into develop
rousso Jul 29, 2025
3ac5b1a
Merge branch 'release/2.0.0-alpha.5' into develop
rousso Jul 29, 2025
846947b
Merge branch 'main' into develop
bertrand-lorentz Jul 30, 2025
3fa5adf
CHANGELOG: Fix a few typos
bertrand-lorentz Jul 30, 2025
563701c
pom: Configure javadoc plugin to exclude specific source files from d…
rousso Aug 1, 2025
1ad335e
Add support for EFX-2 summary and navigation sections in view templates.
rousso Aug 1, 2025
ab07307
Allow node context to be assigned to a context variable
rousso Aug 1, 2025
a1263bb
Make the key of a dictionary evaluate relative to its context.
rousso Aug 1, 2025
ddf7c05
Add support for hyperlinks in view templates.
rousso Aug 1, 2025
70813c3
pom: Update eforms-core dependency to released version
bertrand-lorentz Aug 4, 2025
1d44c56
MarkupGeneratorMock: Refactor composeOutputFile method for readability
bertrand-lorentz Aug 4, 2025
4611098
EfxTemplateTranslatorV2Test: Reformat template lines for consistency
bertrand-lorentz Aug 4, 2025
cc5e06d
TranslatorContext: Put field modifiers in the usual order
bertrand-lorentz Aug 4, 2025
acf8f0a
NodePathExpression: Fix code formatting
bertrand-lorentz Aug 4, 2025
a86b15b
Merge pull request #127 from OP-TED/TEDEFO-4546-4547-add-summary-and-…
rousso Aug 4, 2025
0f502fc
Fixed a javadoc issue.
rousso Aug 4, 2025
62d0153
Fixed an issue with translator context tracking.
rousso Aug 4, 2025
0eae577
TEDEFO-4559-4561: Enhance EFX template translation with profiling opt…
rousso Aug 4, 2025
01c18c6
Fix null handling in escapeHtml method and correct constructor docume…
rousso Aug 5, 2025
d3a3f33
Merge pull request #128 from OP-TED/TEDEFO-4561-add-efx-profiling-to-ext
rousso Aug 5, 2025
7209b30
Add EFX Rules to Schematron transpiler foundation
rousso Nov 12, 2025
e20dacf
Fix license text in multiple interface files
rousso Dec 9, 2025
2095b7d
Added notice subtype handling to SdkSymbolResolver.
rousso Dec 9, 2025
d51c7c9
Add EFX Rules to Schematron translator
rousso Dec 25, 2025
694a7bc
Refactor: Rename ValidatorMarkupGenerator to ValidatorGenerator and S…
rousso Dec 26, 2025
673b2b1
EfxRulesTranslatorV2Test: Fix unit tests on Windows
bertrand-lorentz Jan 9, 2026
850a38b
Fixed a casting issue in Parametrised
rousso Jan 13, 2026
beecf75
TEDEFO-4807 Adapt toolkit to scalar/sequence grammar separation (TEDE…
rousso Feb 2, 2026
b95a7f4
Remove IOException from ValidatorGenerator interface
rousso Feb 2, 2026
fc93cf7
Upgrade Freemarker from 2.3.31 to 2.3.34
rousso Feb 2, 2026
99de188
Use uppercase for Schematron role attribute
rousso Feb 2, 2026
7aea918
Fix testDiagnostics_NoDuplicateEntries to actually generate diagnostics
rousso Feb 2, 2026
95c1176
Swap test expression order in WHEN clauses - put assertion before con…
rousso Feb 2, 2026
778cd64
Merge branch 'TEDEFO-4805-efx-rules-translator' into TEDEFO-4806-tigh…
rousso Feb 2, 2026
99dde78
Fix role attribute case in test expected output files - use uppercase
rousso Feb 2, 2026
f6f2bb8
Fix build with JDK 11
bertrand-lorentz Feb 2, 2026
7d2eee9
Merge pull request #129 from OP-TED/TEDEFO-4805-efx-rules-translator
bertrand-lorentz Feb 2, 2026
30c386c
Replace Stream.toList() with Collectors.toList() for JDK 11 compatibi…
rousso Feb 2, 2026
6881a0a
Merge branch 'develop' into TEDEFO-4806-tighter-type-checking
bertrand-lorentz Feb 2, 2026
f72320c
Fix broken documentation reference in test comment
rousso Feb 3, 2026
f96fe2c
Update SdkSymbolResolver to use List instead of Set for ancestry
rousso Feb 3, 2026
69000c5
Merge pull request #130 from OP-TED/TEDEFO-4806-tighter-type-checking
bertrand-lorentz Feb 3, 2026
0d62981
TEDEFO-1854 Align toolkit to improved uniqueness testing
rousso Feb 4, 2026
0d210cb
TEDEFO-4319 Add privacy settings support and fix SymbolResolver incon…
rousso Feb 8, 2026
a06cc97
TEDEFO-1854 Fix invalid XPath in typed uniqueness conditions
rousso Feb 8, 2026
935cce1
Merge branch 'TEDEFO-1854-improve-uniqueness-testing' into TEDEFO-431…
rousso Feb 8, 2026
eb470cf
TEDEFO-4319 Fix operator precedence in privacy conditions
rousso Feb 8, 2026
7e83d03
TEDEFO-4319 Implement linked field properties and computed privacy pr…
rousso Feb 9, 2026
ddb18b2
Merge pull request #131 from OP-TED/TEDEFO-1854-improve-uniqueness-te…
bertrand-lorentz Feb 9, 2026
ae80bd6
Merge pull request #132 from OP-TED/TEDEFO-4319-privacy-settings-in-efx
rousso Feb 10, 2026
37abf59
Add tests for codelist identifiers with numeric suffix and regex escapes
rousso Feb 10, 2026
f747cb0
Merge pull request #133 from OP-TED/codelist+regex-fixes
bertrand-lorentz Feb 11, 2026
8a1fa6b
Add test for codelist with keyword name
rousso Feb 11, 2026
7384e56
Merge pull request #134 from OP-TED/allow-any-identifier-for-codelist…
bertrand-lorentz Feb 11, 2026
05b8091
TEDEFO-4870 Fix string(number) to use XPath string() instead of forma…
rousso Feb 13, 2026
381b782
TEDEFO-4871 Add string(boolean) type conversion
rousso Feb 13, 2026
b7525a3
TEDEFO-4872 Add string(date) type conversion
rousso Feb 13, 2026
802dfaa
TEDEFO-4873 Add string(time) type conversion
rousso Feb 13, 2026
fbfdba0
TEDEFO-4874 Add string(duration) type conversion
rousso Feb 13, 2026
4375bd5
TEDEFO-4875 Add number(boolean) and indicator(number) type conversions
rousso Feb 14, 2026
d0c5665
TEDEFO-4870 Rename string() conversion to text() with string as alias
rousso Feb 14, 2026
225e8ff
TEDEFO-4877 Add sort() function to EFX toolkit
rousso Feb 14, 2026
1463ffc
TEDEFO-4878 Add reverse() function to EFX toolkit
rousso Feb 14, 2026
aa8427a
TEDEFO-4879 Add subsequence() function to EFX toolkit
rousso Feb 14, 2026
195ab2d
TEDEFO-4788 Add index-of() function to EFX toolkit
rousso Feb 14, 2026
724adcc
TEDEFO-4883 Add sequence is [not] empty and string empty() function
rousso Feb 14, 2026
53d3fbf
TEDEFO-4880 Add sequence has [no] duplicates and clean up imports
rousso Feb 15, 2026
9109046
Add javadoc to sequence-related ScriptGenerator methods
rousso Feb 15, 2026
79a03de
Add javadoc to type conversion ScriptGenerator methods
rousso Feb 15, 2026
a2ba57d
Merge branch 'TEDEFO-4869-add-type-conversion-functions' into TEDEFO-…
rousso Feb 15, 2026
d82e2b1
TEDEFO-4788 Change index-of to return first occurrence only
rousso Feb 15, 2026
967e782
TEDEFO-4885 Implement normalize-space() function
rousso Feb 15, 2026
e883263
TEDEFO-4888 Implement trim, trim-left, trim-right functions
rousso Feb 15, 2026
21b75e8
TEDEFO-4889 Implement pad-left and pad-right functions
rousso Feb 15, 2026
f61b8cf
TEDEFO-4892 Implement repeat() function
rousso Feb 15, 2026
bcbc91e
TEDEFO-4890 Implement split() function with literal delimiter
rousso Feb 15, 2026
0a03272
TEDEFO-4891 Implement substring-before and substring-after functions
rousso Feb 15, 2026
057c570
TEDEFO-4895 Implement index-of-substring() function
rousso Feb 15, 2026
3a0ac14
TEDEFO-4886 Implement replace and replace-regex functions
rousso Feb 15, 2026
3544df6
TEDEFO-4893 Implement url-encode() function
rousso Feb 15, 2026
b05422e
TEDEFO-4894 Implement capitalize-first() function
rousso Feb 15, 2026
a16d446
TEDEFO-4897 Add scalar math functions (absolute, round, round-down, r…
rousso Feb 15, 2026
9621b95
TEDEFO-4898 Add aggregate math functions (min, max, average)
rousso Feb 15, 2026
7a5d3c4
TEDEFO-4900 Add date component extraction functions (year, month, day)
rousso Feb 15, 2026
8beee6f
TEDEFO-4901 Add time component extraction functions (hours, minutes, …
rousso Feb 15, 2026
8087f3a
TEDEFO-4902 Add locale-aware formatting functions (format-short/mediu…
rousso Feb 15, 2026
7abb923
TEDEFO-4905 Remove axis support from EFX-2 translator
rousso Feb 16, 2026
d5e20e6
Merge pull request #135 from OP-TED/add-efx-2-functions
bertrand-lorentz Feb 16, 2026
2e5e1f6
Merge branch 'develop' into TEDEFO-4905-drop-axis-support
rousso Feb 16, 2026
e992363
Merge pull request #136 from OP-TED/TEDEFO-4905-drop-axis-support
bertrand-lorentz Feb 16, 2026
d5f5de9
TEDEFO-4908 Update tests for [] sequence literal delimiters
rousso Feb 17, 2026
7bb92ef
Merge pull request #137 from OP-TED/TEDEFO-4980-change-literal-sequen…
bertrand-lorentz Feb 18, 2026
4e16397
TEDEFO-4911 Fix EFX-to-XPath escaping of quotes in string literals
rousso Feb 18, 2026
658cabe
TEDEFO-4912 Add portable regex subset validation for EFX like patterns
rousso Feb 19, 2026
5b92670
Merge pull request #138 from OP-TED/escaping-quotes-in-string-literals
bertrand-lorentz Feb 19, 2026
32d9e48
TEDEFO-4919 Add for-return with sequence body and return distinct
rousso Feb 20, 2026
8dfbe78
Merge pull request #140 from OP-TED/TEEFO-4919-for-return-distinct-se…
bertrand-lorentz Feb 20, 2026
c978c35
TEDEFO-4919 Fix Javadoc HTML escaping in ScriptGenerator
rousso Feb 20, 2026
1af3a6f
Merge branch 'develop' into TEDEFO-4912-efx-portable-regex
rousso Feb 20, 2026
8687c3d
TEDEFO-4912 Disallow shorthand classes; validate replace-regex litera…
rousso Feb 20, 2026
005f97e
TEDEFO-4912 Allow Unicode property escapes; validate replace-regex li…
rousso Feb 20, 2026
abf5ab4
Merge pull request #139 from OP-TED/TEDEFO-4912-efx-portable-regex
bertrand-lorentz Feb 20, 2026
fad7b89
TEDEFO-4921 Improve EFX compile-time error messages
rousso Feb 21, 2026
b98ad67
TEDEFO-4924 Separate duration from measure type
rousso Feb 22, 2026
02d7c28
TEDEFO-4925 Add years(), months(), days() duration extraction functions
rousso Feb 22, 2026
88456e8
TEDEFO-4926 Add :rawValue field property
rousso Feb 22, 2026
e985fd2
TEDEFO-4914 Deduplicate schematron rules that apply to all subtypes
rousso Feb 23, 2026
1ad1276
TEDEFO-4924 Rename add-measure/subtract-measure to add-duration/subtr…
rousso Feb 23, 2026
a77461c
Merge branch 'TEDEFO-4923-duration-measure-split' into TEDEFO-4914-un…
rousso Feb 23, 2026
b68c813
Merge pull request #141 from OP-TED/TEDEFO-4923-duration-measure-split
bertrand-lorentz Feb 23, 2026
f48b19e
Merge pull request #142 from OP-TED/TEDEFO-4914-universal-rules-in-on…
bertrand-lorentz Feb 23, 2026
6e4d88f
Fix Javadoc HTML errors for Java 11 compatibility
rousso Feb 23, 2026
b8d3057
TEDEFO-4930 Add #include directive support to EFX translators
rousso Feb 24, 2026
151057a
Merge pull request #143 from OP-TED/TEDEFO-4930-include-directives
bertrand-lorentz Feb 24, 2026
31532e5
TEDEFO-4933 Add EFX autocomplete API for code editors
rousso Feb 26, 2026
aaf1169
TEDEFO-4933 Rename getBuiltinFunctions to getEfxCompletions
rousso Feb 26, 2026
3e13d4d
Merge pull request #144 from OP-TED/TEDEFO-4933-efx-autocomplete
bertrand-lorentz Feb 26, 2026
5034428
TEDEFO-4932 Fix type mismatch on property accessors of repeatable fie…
rousso Feb 26, 2026
e3682b1
Merge pull request #145 from OP-TED/bugfix/TEDEFO-4932-type-mismatch-…
bertrand-lorentz Feb 27, 2026
8244133
TEDEFO-4939 Cache sorted notice subtype list and update tests for cor…
rousso Feb 27, 2026
858c667
Merge pull request #146 from OP-TED/bugfix/TEDEFO-4939-notice-subtype…
bertrand-lorentz Feb 27, 2026
3cc57cb
TEDEFO-4939 Return SdkNoticeSubtype from SymbolResolver, sort and cac…
rousso Feb 27, 2026
67af49c
Merge branch 'develop' into bugfix/TEDEFO-4939-notice-subtype-sort-order
rousso Mar 2, 2026
0c16603
TEDEFO-4940 Refactor and clean up the EFX expression preprocessor
rousso Mar 2, 2026
60956a0
Merge pull request #147 from OP-TED/bugfix/TEDEFO-4939-notice-subtype…
bertrand-lorentz Mar 2, 2026
c1ef414
TEDEFO-4941 Simplify preprocessor after grammar ambiguity removal
rousso Mar 2, 2026
79856cf
TEDEFO-4940 Wrap happy-path tests with assertDoesNotThrow
rousso Mar 2, 2026
d77d527
Merge branch 'TEDEFO-4940-refactor-efx-epression-preprocessor' into T…
rousso Mar 2, 2026
46794fd
Merge pull request #148 from OP-TED/TEDEFO-4940-refactor-efx-epressio…
bertrand-lorentz Mar 2, 2026
b43c9d0
Wrap nested for-return test with assertDoesNotThrow
rousso Mar 2, 2026
10cbc1c
Merge pull request #149 from OP-TED/TEDEFO-4941-resolve-for-loop-ambi…
bertrand-lorentz Mar 2, 2026
8f27d25
TEDEFO-4951 TEDEFO-2525 Add late-bound handlers and eliminate preproc…
rousso Mar 6, 2026
3a01a59
Merge pull request #150 from OP-TED/TEDEFO-4950-one-pass-transpilation
bertrand-lorentz Mar 6, 2026
cd1a9ed
TEDEFO-4956 Update codelist tests to use spread syntax
rousso Mar 9, 2026
7cf1955
TEDEFO-4938 Implement SCOPE clause with flag and @PRE/@POST filtering
rousso Mar 9, 2026
c2e4029
Merge pull request #151 from OP-TED/TEDEFO-4956-new-codelist-ref-syntax
bertrand-lorentz Mar 10, 2026
08075d3
Merge pull request #152 from OP-TED/TEDEFO-4938-scope-clause
bertrand-lorentz Mar 10, 2026
053cc99
schematron: Fix order of elements in top-level file (TEDEFO-4970)
bertrand-lorentz Mar 10, 2026
b0cdf4a
TEDEFO-4971 Support rawValue property on repeatable fields
rousso Mar 10, 2026
125e36b
Merge pull request #153 from OP-TED/TEDEFO-4970-fix-schematron-elemen…
rousso Mar 10, 2026
822f07e
Merge branch 'develop' into TEDEFO-4971-rawvalue-sequence
rousso Mar 10, 2026
fdec622
TEDEFO-4971 Add predicate support and type guards for rawValue
rousso Mar 10, 2026
9fc1657
Merge pull request #154 from OP-TED/TEDEFO-4971-rawvalue-sequence
bertrand-lorentz Mar 10, 2026
09c12b9
TEDEFO-4458 Restrict format-number to template context only
rousso Mar 10, 2026
9b07d30
TEDEFO-4957 Dictionary lookups return sequences
rousso Mar 11, 2026
8deaeb4
Merge pull request #155 from OP-TED/TEDEFO-4458-format-number-templat…
bertrand-lorentz Mar 11, 2026
866dc4c
Merge pull request #156 from OP-TED/TEDEFO-4957-dictionary-sequence-l…
bertrand-lorentz Mar 11, 2026
f7615eb
TEDEFO-4978 Preferred-language properties, fieldContext indexer, priv…
rousso Mar 12, 2026
f2e1a58
Merge pull request #157 from OP-TED/TEDEFO-4978-efx-preferred-languag…
bertrand-lorentz Mar 12, 2026
84dd89d
TEDEFO-4980 Remove cross-notice reference support from V2 translator
rousso Mar 12, 2026
daf4d37
TEDEFO-4981 Implement dynamic rules in EFX-2 toolkit
rousso Mar 18, 2026
6ce8546
TEDEFO-4982 Endpoint override support and Schematron let-based parame…
rousso Mar 20, 2026
5acb3dd
TEDEFO-4982 Enforce ParserRuleContext on compilation exception constr…
rousso Mar 20, 2026
2093f49
TEDEFO-4982 Pass endpoint name instead of URL in efx:call-api()
rousso Mar 22, 2026
132b679
TEDEFO-4991 Add templates root override to TranslatorOptions and Sche…
rousso Mar 22, 2026
e98544a
TEDEFO-4994 Add tests for current-date and current-time functions
rousso Mar 22, 2026
6c12c4a
TEDEFO-4995 Implement count-duplicates and get-duplicates functions
rousso Mar 22, 2026
9675e2b
Merge pull request #158 from OP-TED/TEDEFO-4766-dynamic-rules
bertrand-lorentz Mar 23, 2026
f877884
Merge pull request #159 from OP-TED/TEDEFO-4991-consolidate-library-d…
bertrand-lorentz Mar 23, 2026
c868528
Merge pull request #160 from OP-TED/TEDEFO-4778/additional-efx-functions
bertrand-lorentz Mar 23, 2026
d9fa4ed
tests: Add presence condition tests for node references
rousso Mar 24, 2026
2c086f1
TEDEFO-5000 Add tests for WITH ... COMPUTE single expression syntax
rousso Mar 24, 2026
bd6f656
TEDEFO-5002 Implement dependency extractors for EFX rules
rousso Mar 25, 2026
3767763
TEDEFO-5002 Add codelist dependencies and skip empty rules in graph
rousso Mar 25, 2026
d9b4d13
Merge pull request #161 from OP-TED/TEDEFO-4999/presence-of-nodes
bertrand-lorentz Mar 25, 2026
507be8f
Merge pull request #162 from OP-TED/TEDEFO-5000-with-compute
bertrand-lorentz Mar 25, 2026
9133127
Merge pull request #163 from OP-TED/TEDEFO-5001-dependency-graph
bertrand-lorentz Mar 25, 2026
6fa60dc
TEDEFO-5002 Exclude @POST rules, add global/stage variable dependency…
rousso Mar 25, 2026
b939b71
Merge pull request #164 from OP-TED/TEDEFO-5002-dependency-graph
bertrand-lorentz Mar 26, 2026
3387fe3
pom: Set version to 2.0.0-alpha.6 and update dependencies
rousso Mar 26, 2026
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
The table of contents is too big for display.
Diff view
Diff view
  •  
  •  
  •  
68 changes: 51 additions & 17 deletions CHANGELOG.md
Original file line number Diff line number Diff line change
@@ -1,33 +1,65 @@
# EFX Toolkit 2.0.0-alpha.5 Release Notes
# EFX Toolkit 2.0.0-alpha.6 Release Notes

_The EFX Toolkit for Java developers is a library that enables the transpilation of [EFX](https://docs.ted.europa.eu/eforms/latest/efx) expressions and templates to different target languages. It also includes an implementation of an EFX-to-XPath transpiler._

---

## In this release

This release fixes an a bug that could result in incorrect context computation for EFX template lines when the same field or node was used as both the parent and child line's context using different predicates. The EFX template translator now correctly calculates the child context, ignoring the predicate of the parent context.
This is a major update that brings the toolkit in line with the complete EFX-2 grammar as released with SDK 2.0.0-alpha.2.

### EFX-2 language support

## EFX-1 Support
- Implemented all new EFX-2 language features introduced in SDK 2.0.0-alpha.2. See the [SDK changelog](https://github.com/OP-TED/eForms-SDK/blob/release/2.0.0-alpha.2/CHANGELOG.md) for the full list.

Although this is a pre-release version of the EFX Toolkit, it provides production-level support for EFX-1 transpilation. EFX-1 is the current version of EFX released with SDK 1.
### EFX Rules translator

NOTE: Transpilation of EFX-1 to XPath and XSL in this version of the EFX Toolkit is **better than** what is provided by **EFX Toolkit 1.3.0**.
- Added a new EFX Rules to Schematron translator, enabling business rules authored in EFX to be transpiled into Schematron validation schemas.
- Rules that apply to all notice subtypes are deduplicated into a shared Schematron pattern.
- New `ValidatorGenerator` interface for Schematron output generation.

### Dependency analysis

- Added dependency extractors for EFX rules, producing dependency graphs that track field, codelist, and variable references.

### Template translator

- Dictionary lookups are now translated using XSL keys for better performance.
- Profiling and timing support for template translation via new `TranslatorOptions` methods.

### EFX autocomplete API

- Added an autocomplete API for code editors, providing completion items for EFX keywords, built-in functions, and field properties.

### New interfaces and classes

## EFX-2 Support
- `ValidatorGenerator`: Interface for generating validation output (Schematron).
- `TranslatorContext`: Interface providing translation context to `MarkupGenerator` methods.
- `TypeChecker`: Interface for SDK-specific type validation.
- `IncludedFileResolver`: Interface for resolving `#include` directives in EFX files.
- New typed exception hierarchy: `EfxCompilationException`, `InvalidArgumentException`, `InvalidIdentifierException`, `InvalidIndentationException`, `InvalidUsageException`, `SdkInconsistencyException`, `SymbolResolutionException`, `TranslatorConfigurationException`, `TypeMismatchException`.

The new version of EFX is still under development and will be released with SDK 2.0.0. For more information of EFX-2 see the release notes of the eForms SDK 2.0.0-alpha.1.
### Bug fixes

- Fixed invalid XPath in typed uniqueness conditions.
- Fixed quote escaping in string literals.

## EFX-1 Support

Although this is a pre-release version of the EFX Toolkit, it provides production-level support for EFX-1 transpilation. EFX-1 is the current version of EFX released with SDK 1.

NOTE: Transpilation of EFX-1 to XPath and XSL in this version of the EFX Toolkit is **better than** what is provided by **EFX Toolkit 1.3.0**.

## Breaking changes

For users of the Toolkit that have implemented custom transpilers, this release contains a few breaking changes from 1.3.0.
More specifically:
For users of the Toolkit that have implemented custom transpilers, this release contains breaking changes from 2.0.0-alpha.5:

- Some additional methods have been added to the SymbolResolver, ScriptGenerator and MarkupGenerator API. As a guide for your implementations please look a the implementations included in the EFX Toolkit for use by the EFX-to-XPath transpilation.
- Some deprecated methods were removed.
- An extensive refactoring in the type management system has rearranged the package structure. As a result some import statements in your code will need to be updated.
- The expression model has been refactored to separate scalar and sequence types. The `path` subpackage has been removed and path expression types have been moved and renamed (e.g. `BooleanPathExpression` → `BooleanPath` under `scalar`).
- `MarkupGenerator.composeOutputFile` signature changed from 2 parameters to 5 (globals, main section, summary section, navigation section, fragments). The old signature is deprecated with a default implementation.
- Several new methods have been added to the `SymbolResolver`, `ScriptGenerator`, and `MarkupGenerator` interfaces.
- `TranslatorOptions` has three new methods without defaults: `getUserDefinedFunctionNamespace()`, `isProfilerEnabled()`, `getProfilerOutputPath()`.
- New typed exception classes replace previously generic exceptions.
- Axis support and cross-notice references have been removed from the V2 translator.

Users of the Toolkit that only use the included EFX-to-XPath transpiler will not be affected by the above changes.

Expand All @@ -37,16 +69,18 @@ Further alpha and beta releases of SDK 2 and EFX Toolkit 2 will be issued. While

---

You can download the latest EFX Toolkit from Maven Central.
You can download the latest EFX Toolkit from Maven Central.
[![Maven Central](https://img.shields.io/maven-central/v/eu.europa.ted.eforms/efx-toolkit-java?label=Download%20&style=flat-square)](https://central.sonatype.com/artifact/eu.europa.ted.eforms/efx-toolkit-java)

Documentation for the EFX Toolkit is available at: <https://docs.ted.europa.eu/eforms/latest/efx-toolkit>

---

This version of the EFX Toolkit has a compile-time dependency on the following versions of eForms SDK versions and uses the EFX grammar that each version provides:
This version of the EFX Toolkit has a compile-time dependency on the following eForms SDK versions and uses the EFX grammar that each version provides:

- eForms SDK 1.x.x (SDK 1.13.0 grammar)
- eForms SDK 2.0.0-alpha.2

- eForms SDK 1.x.x
- eForms SDK 2.0.0-alpha.1
It also depends on the [eForms Core Java library](https://github.com/OP-TED/eforms-core-java) version 1.6.0.

It also depends on the [eForms Core Java library](https://github.com/OP-TED/eforms-core-java) version 1.4.0.
NOTE: The POM currently references SNAPSHOT versions for the SDK 2 and Core dependencies. These will be updated to released versions before publication.
52 changes: 42 additions & 10 deletions pom.xml
Original file line number Diff line number Diff line change
Expand Up @@ -3,7 +3,7 @@

<groupId>eu.europa.ted.eforms</groupId>
<artifactId>efx-toolkit-java</artifactId>
<version>2.0.0-alpha.5</version>
<version>2.0.0-alpha.6</version>
<packaging>jar</packaging>

<name>EFX Toolkit for Java</name>
Expand Down Expand Up @@ -46,22 +46,26 @@
<sdk.antlr4.dir>${project.build.directory}/eforms-sdk/antlr4</sdk.antlr4.dir>

<!-- Versions - eForms -->
<version.eforms-core>1.5.0</version.eforms-core>
<version.eforms-sdk-1>1.13.0</version.eforms-sdk-1>
<version.eforms-sdk-2>2.0.0-alpha.2</version.eforms-sdk-2>
<version.eforms-core>1.6.0</version.eforms-core>

<!-- Versions - Third-party libraries -->
<version.antlr4>4.13.1</version.antlr4>
<version.commons-lang3>3.12.0</version.commons-lang3>
<version.logback>1.2.11</version.logback>
<version.jackson>2.13.4</version.jackson>
<version.jackson-databind>2.13.4.2</version.jackson-databind>
<version.commons-lang3>3.18.0</version.commons-lang3>
<version.freemarker>2.3.34</version.freemarker>
<version.logback>1.5.18</version.logback>
<version.jackson>2.18.3</version.jackson>
<version.jackson-databind>2.18.3</version.jackson-databind>
<version.junit-jupiter>5.7.2</version.junit-jupiter>
<version.slf4j>1.7.36</version.slf4j>
<version.saxon-he>11.3</version.saxon-he>
<version.slf4j>2.0.13</version.slf4j>

<!-- Versions - Plugins -->
<version.build-helper.plugin>3.3.0</version.build-helper.plugin>
<version.dependency.plugin>3.3.0</version.dependency.plugin>
<version.install.plugin>2.5.2</version.install.plugin>
<version.jacoco.plugin>0.8.8</version.jacoco.plugin>
<version.jacoco.plugin>0.8.12</version.jacoco.plugin>
<version.jar.plugin>3.2.0</version.jar.plugin>
<version.javadoc.plugin>3.4.0</version.javadoc.plugin>
<version.pgp.plugin>1.5</version.pgp.plugin>
Expand Down Expand Up @@ -119,6 +123,16 @@
<artifactId>antlr4-runtime</artifactId>
<version>${version.antlr4}</version>
</dependency>
<dependency>
<groupId>org.freemarker</groupId>
<artifactId>freemarker</artifactId>
<version>${version.freemarker}</version>
</dependency>
<dependency>
<groupId>net.sf.saxon</groupId>
<artifactId>Saxon-HE</artifactId>
<version>${version.saxon-he}</version>
</dependency>
</dependencies>
</dependencyManagement>

Expand All @@ -139,11 +153,20 @@
<artifactId>junit-jupiter-params</artifactId>
<scope>test</scope>
</dependency>
<dependency>
<groupId>net.sf.saxon</groupId>
<artifactId>Saxon-HE</artifactId>
<scope>test</scope>
</dependency>
<dependency>
<groupId>org.antlr</groupId>
<artifactId>antlr4-runtime</artifactId>
<scope>compile</scope>
</dependency>
<dependency>
<groupId>org.freemarker</groupId>
<artifactId>freemarker</artifactId>
</dependency>
<dependency>
<groupId>com.fasterxml.jackson.core</groupId>
<artifactId>jackson-core</artifactId>
Expand Down Expand Up @@ -219,6 +242,15 @@
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-javadoc-plugin</artifactId>
<version>${version.javadoc.plugin}</version>
<configuration>
<doclint>all,-missing</doclint>
<sourceFileExcludes>
<exclude>**/EfxLexer.java</exclude>
<exclude>**/EfxParser.java</exclude>
<exclude>**/EfxListener.java</exclude>
<exclude>**/EfxBaseListener.java</exclude>
</sourceFileExcludes>
</configuration>
</plugin>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
Expand Down Expand Up @@ -257,7 +289,7 @@
<artifactItem>
<groupId>eu.europa.ted.eforms</groupId>
<artifactId>eforms-sdk</artifactId>
<version>2.0.0-alpha.1</version>
<version>${version.eforms-sdk-2}</version>
<type>jar</type>
<includes>eforms-sdk/efx-grammar/**/*.g4</includes>
<outputDirectory>${sdk.antlr4.dir}/eu/europa/ted/efx/sdk2</outputDirectory>
Expand All @@ -269,7 +301,7 @@
<artifactItem>
<groupId>eu.europa.ted.eforms</groupId>
<artifactId>eforms-sdk</artifactId>
<version>1.6.0</version>
<version>${version.eforms-sdk-1}</version>
<type>jar</type>
<includes>eforms-sdk/efx-grammar/**/*.g4</includes>
<outputDirectory>${sdk.antlr4.dir}/eu/europa/ted/efx/sdk1</outputDirectory>
Expand Down
39 changes: 27 additions & 12 deletions src/main/java/eu/europa/ted/eforms/sdk/ComponentFactory.java
Original file line number Diff line number Diff line change
@@ -1,7 +1,6 @@
package eu.europa.ted.eforms.sdk;

import java.nio.file.Path;
import java.text.MessageFormat;
import java.util.HashMap;
import java.util.Map;
import java.util.Objects;
Expand All @@ -12,6 +11,7 @@
import eu.europa.ted.efx.interfaces.ScriptGenerator;
import eu.europa.ted.efx.interfaces.SymbolResolver;
import eu.europa.ted.efx.interfaces.TranslatorOptions;
import eu.europa.ted.efx.interfaces.ValidatorGenerator;

public class ComponentFactory extends SdkComponentFactory {
public static final ComponentFactory INSTANCE = new ComponentFactory();
Expand Down Expand Up @@ -84,20 +84,23 @@ public static SymbolResolver getSymbolResolver(final String sdkVersion, final Pa
* SDK.
* @throws InstantiationException If the SDK version is not supported.
*/
public static SymbolResolver getSymbolResolver(final String sdkVersion, final String qualifier,
public static synchronized SymbolResolver getSymbolResolver(final String sdkVersion, final String qualifier,
final Path sdkRootPath) throws InstantiationException {
VersionQualifier key = ComponentFactory.INSTANCE.new VersionQualifier(sdkVersion, qualifier);

return instances.computeIfAbsent(key, k -> {
try {
return ComponentFactory.INSTANCE.getComponentImpl(sdkVersion,
SdkComponentType.SYMBOL_RESOLVER, qualifier, SymbolResolver.class, sdkVersion,
sdkRootPath);
} catch (InstantiationException e) {
throw new RuntimeException(MessageFormat.format(
"Failed to instantiate SDK Symbol Resolver for SDK version [{0}]", sdkVersion), e);
}
});
// Check if already exists
SymbolResolver existing = instances.get(key);
if (existing != null) {
return existing;
}

// Create new instance (this can throw InstantiationException)
SymbolResolver newInstance = ComponentFactory.INSTANCE.getComponentImpl(sdkVersion,
SdkComponentType.SYMBOL_RESOLVER, qualifier, SymbolResolver.class, sdkVersion, sdkRootPath);

// Store and return
instances.put(key, newInstance);
return newInstance;
}

public static MarkupGenerator getMarkupGenerator(final String sdkVersion, TranslatorOptions options)
Expand All @@ -111,6 +114,18 @@ public static MarkupGenerator getMarkupGenerator(final String sdkVersion, final
SdkComponentType.MARKUP_GENERATOR, qualifier, MarkupGenerator.class, options);
}

public static ValidatorGenerator getValidatorGenerator(final String sdkVersion,
TranslatorOptions options) throws InstantiationException {
return getValidatorGenerator(sdkVersion, "", options);
}

public static ValidatorGenerator getValidatorGenerator(final String sdkVersion,
final String qualifier, TranslatorOptions options) throws InstantiationException {
return ComponentFactory.INSTANCE.getComponentImpl(sdkVersion,
SdkComponentType.VALIDATOR_GENERATOR, qualifier, ValidatorGenerator.class,
options);
}

public static ScriptGenerator getScriptGenerator(final String sdkVersion, TranslatorOptions options)
throws InstantiationException {
return getScriptGenerator(sdkVersion, "", options);
Expand Down
Loading
Loading