Stop tracking Maven build outputs - #76
Open
pmanko wants to merge 124 commits into
Open
Conversation
Updates to work with OE2
Various Clean up tasks and fixes
Mauritius Covid analyzer
…ugins into develop
Bumps [spring-core](https://github.com/spring-projects/spring-framework) from 5.2.3.RELEASE to 5.3.14. - [Release notes](https://github.com/spring-projects/spring-framework/releases) - [Commits](spring-projects/spring-framework@v5.2.3.RELEASE...v5.3.14) --- updated-dependencies: - dependency-name: org.springframework:spring-core dependency-type: direct:production ... Signed-off-by: dependabot[bot] <support@github.com>
remove .do suffixes
…gframework-spring-core-5.3.14 Bump spring-core from 5.2.3.RELEASE to 5.3.14
Bumps commons-fileupload:commons-fileupload from 1.4 to 1.6.0. --- updated-dependencies: - dependency-name: commons-fileupload:commons-fileupload dependency-version: 1.6.0 dependency-type: direct:production ... Signed-off-by: dependabot[bot] <support@github.com> Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
Bumps commons-fileupload:commons-fileupload from 1.4 to 1.6.0. --- updated-dependencies: - dependency-name: commons-fileupload:commons-fileupload dependency-version: 1.6.0 dependency-type: direct:production ... Signed-off-by: dependabot[bot] <support@github.com> Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
Bumps commons-fileupload:commons-fileupload from 1.4 to 1.6.0. --- updated-dependencies: - dependency-name: commons-fileupload:commons-fileupload dependency-version: 1.6.0 dependency-type: direct:production ... Signed-off-by: dependabot[bot] <support@github.com> Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
Bumps commons-fileupload:commons-fileupload from 1.4 to 1.6.0. --- updated-dependencies: - dependency-name: commons-fileupload:commons-fileupload dependency-version: 1.6.0 dependency-type: direct:production ... Signed-off-by: dependabot[bot] <support@github.com> Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
* Documentation updates and cleanup * docs: consolidate and standardize analyzer documentation - Merge analyzers/README.md content into root README.md - Remove redundant analyzers/README.md (consolidated into root) - Update INVENTORY.md metadata (6 → 36 READMEs) - Create README template at analyzers/template/README.template.md - Standardize analyzer READMEs with consistent sections: * Mindray: Add Protocol table, Build, Installation, Last Verified * HoribaPentra60: Change Deployment → Installation, add Last Verified * HoribaMicros60: Change Deployment → Installation, add Last Verified - Ensure all READMEs follow standard structure: * Protocol table, Build, Installation, Notes, Last Verified * feat(011): Add GenericHL7 architecture and update inventory to 36 plugins - Add GenericHL7/ARCHITECTURE.md: Comprehensive architecture spec for M19 - Update INVENTORY.md: Add QuantStudio7Flex (PR #42), increase count to 36 - Document Generic-First approach for new analyzer integrations Related: Feature 011 Architecture Remediation * chore: apply formatting to GenericHL7 ARCHITECTURE.md * feat(GenericHL7): add GenericHL7 analyzer plugin (M19) - GenericHL7Analyzer: MSH-3 pattern matching, AnalyzerImporterPlugin - GenericHL7LineInserter: OBX parsing, AnalyzerTestNameCache lookup - JUnit4 unit tests for isTargetAnalyzer and OBX parsing - README and pom.xml
* Fix NullPointerException and add TG_LOINC mapping in Mindray analyzer Co-authored-by: pmanko <711826+pmanko@users.noreply.github.com> * Address PR review comments: fix groupId, set testId to null, and rename test Co-authored-by: pmanko <711826+pmanko@users.noreply.github.com> * Update test comments to reflect testId is null instead of empty Co-authored-by: pmanko <711826+pmanko@users.noreply.github.com> * Improve test assertions to verify resultList is empty for unmatched results Co-authored-by: pmanko <711826+pmanko@users.noreply.github.com> * Remove testPersistImport test that requires database connection Co-authored-by: pmanko <711826+pmanko@users.noreply.github.com> --------- Co-authored-by: copilot-swe-agent[bot] <198982749+Copilot@users.noreply.github.com> Co-authored-by: pmanko <711826+pmanko@users.noreply.github.com>
…tern Changes: - GenericHL7Analyzer.connect(): Use SpringContext.getBean(PluginAnalyzerService.class) instead of getInstance() - GenericASTMAnalyzer.connect(): Same change for consistency - ARCHITECTURE.md: Clarify single-path architecture (no separate legacy vs generic code paths) Aligns with pattern used by SysmexXNL, SysmexXP, pocH-100i, GeneXpert adapter implementations. Fixes test compatibility where getInstance() returns null but SpringContext.getBean() returns the mock.
…c_plugin ordering
…dency (#52) * fix(build): Move integration tests to plugins, add test dependencies Resolve circular dependency between main project and plugins by moving GenericHL7IntegrationTest and GenericASTMIntegrationTest to their respective plugin modules. Changes: - Add test-jar, testcontainers, spring-test, dbunit to dependencyManagement - Update GenericHL7 and GenericASTM pom.xml with test dependencies - Move integration tests from main project to plugin test directories - Copy test-result.xml fixtures to plugin test resources - Fix unit test requiring Spring context with @ignore annotation The plugins now depend on built artifacts from the main project: - openelisglobal-3.2.1.2-classes.jar (compile scope) - openelisglobal-3.2.1.2-tests.jar (test scope) This eliminates the circular dependency that required special build flags. Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com> * fix(ci): Use proper mvn install for OE artifacts, clean debug logging Replace compile-only + manual JAR installation with mvn clean install which properly produces -classes.jar (classifier) and -tests.jar artifacts. The manual approach was missing -Dclassifier=classes, causing Maven to fail resolving openelisglobal:jar:classes:3.2.1.2. Also remove debug.log file writes from GenericHL7Analyzer (development artifacts that shouldn't be in production code) and apply spotless formatting. Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com> --------- Co-authored-by: Ubuntu <ubuntu@ip-172-31-31-180.us-west-2.compute.internal> Co-authored-by: Claude Opus 4.5 <noreply@anthropic.com>
…gin (#53) Move analyzer-specific HL7 integration tests from the main project to the GenericHL7 plugin module, where GenericHL7Analyzer is on the classpath. Tests follow the established pattern from GenericHL7IntegrationTest: mock PluginAnalyzerService, instantiate plugin, verify end-to-end flow. Tests added: - MindrayBC5380HL7Test (identifier_pattern: MINDRAY.*BC.?5380|BC5380) - MindrayBS360EHL7Test (identifier_pattern: MINDRAY.*BS.?360E|BS360E) - MindrayBC2000HL7Test (identifier_pattern: MINDRAY.*BC.?2000|BC2000) - SysmexXNHL7Test (identifier_pattern: SYSMEX.*XN|XN-.*) - AbstractMindrayHL7Test (shared setup/cleanup for Mindray tests) Co-authored-by: Claude Opus 4.6 <noreply@anthropic.com>
BS360E chemistry fixture has CREA/ALT/AST but mappings only had CBC codes. Sysmex XN fixture has MCV/MCH/MCHC but mappings didn't include them. Made test mappings overridable via getTestMappings() and added missing entries. Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
* chore: update bridge URL and fix CI to build against OE develop - Update README GitHub link from astm-http-bridge to openelis-analyzer-bridge - Revert OE_REF from deleted feat/011-analyzer-dashboard-fixtures to develop (isGenericPlugin() default method is now available on OE develop) - Remove stale feat/011-horiba-pentra60-micros60 from CI branch triggers * ci: pin OE_REF to feat/011-madagascar-analyzer-integration Temporary pin until PR #2767 merges to develop, at which point both workflows should be updated to OE_REF: develop.
* refactor(011): update generic plugins for 2-table model AnalyzerConfiguration was merged into Analyzer (Phase 3 table merge). Update GenericASTMAnalyzer and GenericHL7Analyzer: - ThreadLocal<AnalyzerConfiguration> → ThreadLocal<Analyzer> - AnalyzerConfigurationService → AnalyzerService - config.getAnalyzer().getId() → analyzer.getId() (no indirection) * ci: pin OE_REF to fix/011-sync-remediation for 2-table model AnalyzerService.findByIdentifierPatternMatch() and the merged analyzer table only exist on fix/011-sync-remediation (PR #2802). Pin CI to compile against that branch until it merges into feat/011. * fix(011): update GenericHL7 test for 2-table model Replace AnalyzerConfigurationService/AnalyzerConfiguration references with AnalyzerService/Analyzer in GenericHL7AnalyzerTest to match the merged 2-table data model. Also updates README thread-safety docs.
…est fixes (#58) * fix(docs): point analyzer-defaults links to projects/analyzer-defaults Update GenericHL7 README and ARCHITECTURE links so they resolve after analyzer-defaults was moved to projects/analyzer-defaults in the main repo. * feat(011): add QC detection, value cleanup, and integration tests to GenericASTM - Parse O.12 Action Code to detect QC samples (isControl=true when "Q") - Strip trailing/leading ^ from R.4 values (GeneXpert qualitative format) - Add 5 new integration tests: QC detection, patient sample, trailing caret, leading caret, normal value passthrough - Fix test fixtures: add analyzer_type with is_generic_plugin=true, set analyzer_type_id on analyzer row (required for findGenericAnalyzersWithPatterns INNER JOIN), use correct column name iscontrol (not is_control) * fix(ci): update OE_REF to develop (fix/011-sync-remediation was deleted) The 2-table model and GenericASTM/GenericHL7 support are now on develop since feat/011 merged (PR #2767). The old branch was deleted. * Update analyzers/GenericHL7/ARCHITECTURE.md * fix: address Copilot review comments on PR #58 - Replace ON CONFLICT DO UPDATE SET id with ON CONFLICT DO NOTHING + SELECT to avoid rewriting analyzer_type PK (breaks FK relationships) - Use nextval('analyzer_type_seq') instead of hardcoded ID 9999 - Fix broken docs links in GenericHL7 README.md and ARCHITECTURE.md (projects/analyzer-defaults is in the parent repo, not plugins) - Skip analyzer_type deletion in cleanup (may be shared/pre-seeded)
PluginLoader requires an XML descriptor inside each JAR to discover the plugin class and call connect(). GenericASTM and GenericHL7 were missing these descriptors, so they were never loaded from their JARs despite being present in the plugins directory.
* Initial plan * docs: clarify OpenELIS prerequisite and single-plugin build command * docs: add analyzer-directory single-plugin build command via parent pom * docs: address review comments — promote install-oe-jar.sh, fix build commands - Rename "Prerequisite" → "Prerequisites" (grammar fix) - Add `git checkout 3.2.1.2` for standalone path (version alignment) - Promote `install-oe-jar.sh` as primary path for submodule users - Switch `-pl ./analyzers/Name` → `-pl :ArtifactId` (unambiguous) - Remove confusing "from inside analyzer dir" example - Add inline comment explaining why both -DskipTests flags are needed - Fix outdated GenericASTM branch note (now on develop) * feat: lightweight 3-tier cascade in install-oe-jar.sh Rewrite install-oe-jar.sh to try lightweight sources before Maven: 1. GitHub release asset (gh release download — ~5s) 2. Docker image extraction (itechuw/openelis-global-2 — ~6s) 3. Local Maven build (minutes — last resort) Also update README to document the cascade and remove manual build commands in favor of the script.
…tions (#61) * fix: remove phantom ANALYZER_ID dependency from all plugin implementations Legacy plugins looked up a phantom Analyzer row by name at startup and stored its ID as a static field, then stamped every AnalyzerResults with it. This coupled the import pipeline to shell rows with no real device config. Remove static ANALYZER_ID fields, getAnalyzerByName() lookups, and setAnalyzerId(ANALYZER_ID) calls from all 30 Implementation files. The import pipeline now injects the real device ID via contextAnalyzerId at persist time. * fix: remove orphaned return statements from getAnalyzerService removal The previous commit left `return analyzerService; }` fragments in 11 plugin files when removing the lazy getAnalyzerService() method, causing compilation failures.
* Fix Generic Plugin to Load Results * fix integration tests
…/Excel imports (#64) * feat(014): Add GenericFile analyzer plugin for profile-driven CSV/TSV/Excel imports - GenericFileAnalyzer: profile-driven FILE protocol plugin - GenericFileLineInserter: tab-delimited line parsing with column mappings - XML descriptor, unit tests - Paired with OpenELIS-Global-2 PR #3036 (014 M1) Made-with: Cursor * QuantStudio7Flex: support Target Name column for XLS export compatibility Made-with: Cursor * fix: address Copilot review feedback on GenericFile plugin - Tighten isTargetAnalyzer() to only match tab-delimited lines (not comma), preventing the generic plugin from stealing input from specific plugins - Add required testCode validation in GenericFileLineInserter (null/blank testCode now skips the line with an error message instead of creating broken AnalyzerResults) - Add missing timestamp format patterns: MM/dd/yyyy HH:mm and dd-MM-yyyy HH:mm - Add tests: comma-only targeting returns false, missing testCode skips line, ISO and US date format timestamp parsing Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com> --------- Co-authored-by: Ubuntu <ubuntu@ip-172-31-31-180.us-west-2.compute.internal> Co-authored-by: Claude Opus 4.6 <noreply@anthropic.com>
…eInserter GenericFileLineInserter now checks configDefaults.hasHeader in the profile config and skips lines[0] (the header prepended by ExcelAnalyzerReader). Previously, header tokens like "Sample Name" were mapped as data rows. Added 3 unit tests: header skip with hasHeader=true, backwards compat without hasHeader, and end-to-end with DEFAULT_LINE_FIELD_ORDER. Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
* fix(014): allow empty result when interpretation exists (qualitative assays)
FluoroCycler negative results have empty CP but valid Interpretation="Negative".
Previously, rows with blank result were silently dropped. Now the interpretation
is used as the effective result value when the numeric result is empty.
* fix: GenericASTMAnalyzer uses analyzer name, not type name
getAnalyzerLineInserter() was using analyzer.getAnalyzerType().getName()
("Generic ASTM") instead of analyzer.getName() ("Cepheid GeneXpert
(ASTM Mode)"). This caused results to be attributed to the wrong
analyzer in the AnalyzerResults staging page.
* plugin should find test mappings by analyzer Type name * remove rendant file
* feat: add GenericASTM Q-record responder for bidirectional M3 Implement a dedicated GenericASTMResponder for ASTM query records and wire GenericASTMAnalyzer to use it, keeping line inserter responsibilities focused on result ingestion. Add responder coverage and align test fixtures with the localization schema used by current integration tests. Made-with: Cursor * fix: address GenericASTM responder review feedback Remove dead code, avoid redundant accession lookups during Q-record resolution, and add focused responder tests for caret-delimited accessions and multi-code joins. PR: #63 Made-with: Cursor * fix: address PR #63 review comments — java.time, LinkedHashSet, ASTM sanitization, exception text (#68) - Replace SimpleDateFormat with java.time (ZonedDateTime, DateTimeFormatter) - Add configurable response timezone via org.openelisglobal.plugins.genericastm.response-timezone (default UTC) - Use LinkedHashSet for Q.3 candidate de-duplication (O(n) vs O(n²)) - Add sanitizeAstmField() for outbound ASTM fields to prevent delimiter injection - Richer exception message in GenericASTMAnalyzer (matches log detail) - Add unit test for delimiter sanitization in outbound response Made-with: Cursor --------- Co-authored-by: Ubuntu <ubuntu@ip-172-31-31-180.us-west-2.compute.internal>
Merges FILE transport ownership documentation for 014.
isTargetAnalyzer() was only passing MSH-3 to findByIdentifierPatternMatch, so patterns like "MINDRAY.*BC.?5380" couldn't match when MSH-3 is just "MINDRAY". Now extracts MSH-4 (sending facility) and passes both identifiers: ["MINDRAY", "MINDRAY-BC-5380"]. The existing List<String> overload scores by match length, so the combined identifier wins. Co-authored-by: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
#73) * fix: GenericFile uses AnalyzerTestNameCache for test mapping (was hardcoded -1) * fix(genericplugins): align mappings to analyzer instance IDs Use analyzer instance IDs instead of analyzer-type IDs in GenericASTM responder lookup and in GenericASTM/GenericHL7 test fixtures so plugin compile gates match the OpenELIS analyzer_test_map model. * test(genericplugins): keep integration fixtures on stable contract Insert analyzer test mappings directly in plugin integration tests so the standalone plugin CI validates the same analyzer_id contract without depending on branch-specific OpenELIS helper APIs.
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Summary
test-utilities/targetartifacts from version controltarget/directories at any module depthWhy
Building analyzer plugins currently changes a tracked compiler input path, leaving every worktree dirty and breaking repeatable isolated stack startup.
Validation
mvn -q -f test-utilities/pom.xml package -DskipTests -Dmaven.test.skip=true