Modularization and Modernization - #590
Conversation
- Updated maven.compiler.release from 11 to 17 - Updated maven-javadoc-plugin source from 11 to 17
- Removed tooling-ui from module list - Deleted tooling-ui/ directory entirely
Created a new tooling-core module containing shared infrastructure files extracted from the monolithic tooling module. Package structure is preserved (org.opencds.cqf.tooling.*) so no import changes needed anywhere. Files intentionally kept in tooling (too many external deps for core): IOUtils, ResourceUtils, BundleUtils, HttpClientUtils, FhirVersionEnumConverter, ResourceAndTypeConverter
Replaced the hand-rolled CLI (OperationFactory switch statement and custom arg parsing) with a picocli-based subcommand hierarchy. All ~40 operations are mapped to a clean command tree. Created tooling-cli/CLI_USAGE.md with documentation for all operations organized by command group, including argument tables and usage examples in the new picocli syntax. It covers all ~40 operations with their parameters, aliases, and defaults. Significantly more structured than the old comment block in Main.java.
The monolithic IOUtils had circular dependencies on LibraryProcessor, CqlProcessor, and CqlTranslatorException, preventing it from moving to tooling-core and blocking all domain module extraction.
Created tooling-terminology/pom.xml with dependencies on tooling-core, HAPI FHIR (base, dstu3, r4, r5, client), Apache POI, cql-to-elm, commons-compress, slf4j
Plugins activated: - Spotless (v2.39.0) — Palantir Java Format applied to all 406 Java files - Checkstyle (v3.6.0) — naming convention checks enforced - Animal Sniffer (v1.23) — Android API 34 compatibility verified - EditorConfig — created .editorconfig matching clinical-reasoning
Still got a lot to do, but getting closer. Old operation package deleted.
…rovements to originals
…leUtil operations
…pter, and CanonicalUtils
|
Claude review: Scale and staleness
What I verified by building it I have the (now unobtainable) mts-support-rckms-2.0.0.jar cached locally, so I could actually build the branch — note that nobody with a clean ~/.m2 can, because the branch still declares the dead hlnconsulting.jfrog.io repos and the RCKMS dep in tooling-cql. That's what PR #601 removes. All 10 reactor modules compile on Java 17. Test census (network up, failures ignored so the reactor completes): ┌────────────────────────┬───────┬──────────┐ I baselined the same tests on master: BundleToResourcesTest 2/2 pass, ECQMCreatorIT + TESPackageGeneratorIT 87/87 pass. So these are regressions introduced by the branch, not inherited breakage. Blockers
▎ // Note: on case-insensitive file systems (macOS), Library "LibraryEvaluationTest" and Questionnaire "libraryevaluationtest" collide, resulting in 4 files instead of 5 That diagnosis is wrong. I inspected the actual output: 5 distinct files, because the version suffix disambiguates (LibraryEvaluationTest-1.0.000.json vs libraryevaluationtest-1.0.0.json). The test fails simply because its expectations omit the version suffix. Please fix the expectations and delete the comment — as written it enshrines a phantom data-loss bug as intended behavior. Same category, worth auditing across the whole branch: the "consolidate duplicate operations" commits swap implementations that are not behaviorally equivalent. Each consolidated pair deserves a characterization test against master's behavior, or an explicit note that the behavior changed.
Design questions better settled now than later
What's genuinely good
Suggested path to landing
Process suggestion worth more than any single item above: split this into stacked PRs — (a) Java 17 + build/quality tooling, (b) module decomposition with no behavior change, (c) operation-pattern migration, (d) the picocli CLI rewrite. A 1,581-file draft has sat 4.5 months without a single review comment, which is itself evidence it's too big to review. Each of those four lands independently and (b |
Modularization and Modernization
Description
This PR modernizes the cqf-tooling project infrastructure across four major areas: Java version upgrade, Maven multi-module decomposition, CLI modernization, and operation pattern migration. The monolithic tooling module is decomposed into 8 focused modules with proper dependency layering, and all 23 legacy operations are migrated to the new annotation-based ExecutableOperation pattern.
By creating this PR you acknowledge that your contribution will be licensed under Apache 2.0