* bugfix: creating Hibernate dialect with specific version
fixes https://github.com/hapifhir/hapi-fhir/issues/5723
* Apply fix to other dialects, and add changelog
* Spotless
---------
Co-authored-by: James Agnew <jamesagnew@gmail.com>
* Remove superfluous migration
* Remove superfluous migration
* Update upgrade.md
* fixing test (#4835)
Co-authored-by: leif stawnyczy <leifstawnyczy@leifs-MacBook-Pro.local>
* email subscription, throw NullPointerException (#4790)
* fix bug
* Favoring constructor initialization to autowiring.
* enhancing test.
* Making class LoggingEmailSender available outside of the hapi-fhir-japserver-uhnfhirtest module.
* Passing all tests.
* adding changelog.
* Bumping version to 6.5.20-SNAPSHOT
* addressing code review comment.
---------
Co-authored-by: peartree <etienne.poirier@smilecdr.com>
* Add docs for CR operations (#4855)
* Add docs for CR operations
* Correct changelog and javadoc for $package
* Add documentation for $apply parameters
* Add additional documentation for $package
* Cleanup
* Cleanup
* Cleanup
* Address review comments
* Add documentation for $care-gaps operation. (#4862)
* Add documentation for -gaps.
* addressing the comments.
---------
Co-authored-by: Chalma Maadaadi <chalma@alphora.com>
* 4853 validation does not error when display is not the same as the display defined in the codesystem 2 (#4854)
* added failing test
* implemented the solution
* changed test name
* added change log
* Update hapi-fhir-docs/src/main/resources/ca/uhn/hapi/fhir/changelog/6_6_0/4853-validation-does-not-error-when-display-is-not-the-same-as-the-display-defined-in-the-codesystem-2.yaml
Co-authored-by: James Agnew <jamesagnew@gmail.com>
---------
Co-authored-by: Steven Li <steven@smilecdr.com>
Co-authored-by: James Agnew <jamesagnew@gmail.com>
* fixing patient everything operator (#4845)
* fixing patient everything operator
* review fix
---------
Co-authored-by: leif stawnyczy <leifstawnyczy@leifs-MacBook-Pro.local>
* fix link
* Move image file
* Bundle resources containing over 100 references to the same Organization will fail with HAPI-2207 (#4871)
* Add failing unit test.
* Fix JpaId Long equality comparison to use ! equals() instead of !=, which fails for different instances of the same Long value.
* Add changelog.
* added warn message and test (#4848)
* added warn message and test
* code review fixes
---------
Co-authored-by: Long Ma <long@smilecdr.com>
* Issue 4804 full table scan on mpi link during mdm clear (#4805)
* version bump for next release (#4793)
* version bump
* Bump to correctnumber
* Version Enum and folder
* Remove interim from list
* wip
* Fix operation on nested type-choices in FhirPatch implementation (#4783)
* Fix operation on nested type-choices in FhirPatch implementation
* Add credit for #4783
---------
Co-authored-by: James Agnew <jamesagnew@gmail.com>
* #4468 fix previous link offset no cache pagination (#4489)
* #4468 Add test reproducing the issue
* #4468 Fix previous link for no cache offset pagination
* #4468 Use unchecked URI parsing
* Credit for #4489
---------
Co-authored-by: James Agnew <jamesagnew@gmail.com>
* Changelog and data generating test
* Add MdmLink index
* Avoid double link deletion
* Use ThreadLocal safely
---------
Co-authored-by: Tadgh <garygrantgraham@gmail.com>
Co-authored-by: Zach Smith <85943952+zachdoctolib@users.noreply.github.com>
Co-authored-by: James Agnew <jamesagnew@gmail.com>
Co-authored-by: Aleksej Parovysnik <100864000+alparodev@users.noreply.github.com>
Co-authored-by: juan.marchionatto <juan.marchionatto@smilecdr.com>
* Fix erroneous batch 2 $export 75% complete count when the job is COMPLETE (#4859)
* Add failing unit test.
* Add conditional logic to the InstanceProgress progress percentage to disregard the incomplete count if this is called from the reduction step. This is to get around a race condition in which a work chunk is QUEUED and not yet complete when the reduction step calculates the progress.
* Add final.
* Add changelog.
* disable wars (#4877)
Co-authored-by: Ken Stevens <ken@smilecdr.com>
* 4868 fix paging hapi (#4870)
* fixing some offset and adding a test
* fixing the offset paging
* Removing duplicate
---------
Co-authored-by: leif stawnyczy <leifstawnyczy@leifs-MacBook-Pro.local>
Co-authored-by: Aleksej Parovysnik <100864000+alparodev@users.noreply.github.com>
* 4875-binary-access-write-doest-trigger-STORAGE-BINARY-ASSIGN-BLOB-ID-PREFIX-pointcut (#4876)
* Add failing test
* Add failing test
* Fix and changelog
* Pass content type parameter
* Back to auto wiring the context
* Invoke interceptor only when getting blobId, not also when storing it
* Avoid breaking implementers
* Address review comment
* Add new exception Msg code
* Fix broken test
---------
Co-authored-by: juan.marchionatto <juan.marchionatto@smilecdr.com>
* Fix batch job (bulk export) processed record count (#4879)
* Remove racy stats recalc.
* Throw 404 when requesting $export of non-existent Group or Patient (#4890)
* Remove default implementation intended only for interim backwards compatibility (#4894)
Co-authored-by: juan.marchionatto <juan.marchionatto@smilecdr.com>
* Rule apply patient export (#4893)
* Test, fix, and changelog
* Better partition resolution
* Add checks based on rule applier
* Fix ordering failure due to hash set
* Allow empty auth interceptor
* Fix up operation type on invocation
* Add more tests, make hack implementation for patient instance level operation
* Tighten test name
* Changelog
* Default method
* remove dead method
* Remove dead autowire
---------
Co-authored-by: Michael Buckley <michaelabuckley@gmail.com>
* cve pom changes (#4898)
Co-authored-by: Long Ma <long@smilecdr.com>
* backport subscription topic bean cleanup (#4904)
* 4891 bulk export do not recurse unasked for resources (#4895)
* updating tests
* fixing bulk export to not fetch resources not requested
* cleanup
* cleanup
* more warning suppressing
* adding error code
* blah
* fix test
* review fixes
---------
Co-authored-by: leif stawnyczy <leifstawnyczy@leifs-MacBook-Pro.local>
* lowers log level to remove bootup noise (#4908)
* CVE rel 6 6 (#4907)
* cve pom changes
* bump javax.el to jakarta.el
---------
Co-authored-by: Long Ma <long@smilecdr.com>
* Issue 4905 post binary failure invoking interceptor for pointcuts storage preshow resources (#4906)
* Initial failing test
* Avoid applying binary blob id prefix multiple times
* Remove recently introduced method not needed anymore
---------
Co-authored-by: juan.marchionatto <juan.marchionatto@smilecdr.com>
* Enhance LogbackCaptureTestExtension (#4869)
* repro bug with test, fix bug
* ken informed me he resolved this bug on master, so i'm switching to use his solution
* disable wars
* review feedback
* review feedback
* review feedback again
---------
Co-authored-by: josie <josie.vandewetering@smilecdr.com>
Co-authored-by: Ken Stevens <ken@smilecdr.com>
* Resolve 4863 from release branch searchparametercanonicalizer does not account for search parameters for custom resources types when converting dstu23 into runtimesearchparam (#4887)
* Modified canonicalizeSearchParameterDstu2 and 3, now correctly detect search parameters for custom resources
* Canonicalizers now correctly handle search parameters for custom resources
* created changelog
* Modification based on comments:
- remove Resource from target field when there are custom resource types
- fixed changelog typo
- removed unnecessary variable providesMembershipInCompartments
* Added tests for the SearchParameterCanonicalizer to test if base and target of RuntimeSearchParam is set as expected for DSTU2, DSTU3, R4, R4B, and R5 resources
* Fixed typo and removed commented code
* re-ordered init methods
* Update changelog
Co-authored-by: Tadgh <garygrantgraham@gmail.com>
* modifications following first code review.
---------
Co-authored-by: Tadgh <garygrantgraham@gmail.com>
Co-authored-by: peartree <etienne.poirier@smilecdr.com>
* License
* Remove _lastUpdated filtering of _revincludes. (#4899)
Remove _lastUpdated filtering of _revincludes.
* 4910-dm-migration-error-for-oracle-19c (#4916)
* Remove all_constraints references which break in oracle 19c
* Add changelog
---------
Co-authored-by: juan.marchionatto <juan.marchionatto@smilecdr.com>
* 4873 empty fhirid causes missing resource (#4874)
* add check for empty fhirid string and add test
* add test for populateid
* changelog
* version bump
* version bump
* reverse version bump
* Back to 6.5.21-SNAPSHOT.
---------
Co-authored-by: justindar <justin.dar@smilecdr.com>
Co-authored-by: Luke deGruchy <luke.degruchy@smilecdr.com>
* Fix include canonical url performance (#4919)
Use hash_identity for canonical join
* License
* Version bump
* Temp disable
* Make this dependency provided
* Updating version to: 6.6.1 post release.
* Bump snakeyaml
* Bump jackson to be compatible with new snakeyaml
* Bump deps (#4926)
* resolve CVEs, add new notes
* Updating version to: 6.6.2 post release.
* backport pr 5013 tp rel_6_4
* bump to 6.4.6
* added new version version.yaml
* Updating version to: 6.4.7 post release.
* #5023 Unexpected usage of awssdk StringUtils in hapi 6.6 jpa migration (#5024)
task
Replace usage of awssdk
* added docs
* mssql test fixes
* Updating version to: 6.6.3 post release.
* version bump
* Bump to core release 6.0.22 (#5028)
* Bump to core release 6.0.16
* Bump to core version 6.0.20
* Fix errors thrown as a result of VersionSpecificWorkerContextWrapper
* Bump to core 6.0.22
* Resolve 5126 hfj res ver prov might cause migration error on db that automatically indexes the primary key (#5127)
* dropped old index FK_RESVERPROV_RES_PID on RES_PID column before adding IDX_RESVERPROV_RES_PID
* added changelog
* changed to valid version number
* changed to valid version number, need to be ordered by version number...
* 5123 - Use DEFAULT partition for server-based requests if none specified (#5124)
5123 - Use DEFAULT partition for server-based requests if none specified
* consent remove all suppresses next link in bundle (#5119)
* added FIXME with source of issue
* added FIXME with root cause
* added FIXME with root cause
* Providing solution to the issue and removing fixmes.
* Providing changelog
* auto-formatting.
* Adding new test.
* Adding a new test for standard paging
* let's try this and see if it works...?
* fix tests
* cleanup to trigger a new run
* fixing tests
---------
Co-authored-by: Ken Stevens <ken@smilecdr.com>
Co-authored-by: peartree <etienne.poirier@smilecdr.com>
* 5117 MDM Score for No Match Fields Should Not Be Included in Total Score (#5118)
* fix, test, changelog
* fix, test, changelog
---------
Co-authored-by: justindar <justin.dar@smilecdr.com>
* _source search parameter needs to support modifiers (#5095)
_source search parameter needs to support modifiers - added support form :contains, :missing, :above modifiers
* Fix HFQL docs (#5151)
* Expunge operation on codesystem may throw 500 internal error with precondition fail message. (#5156)
* Initial failing test.
* Solution with changelog.
* fixing format.
* Addressing comment from code review.
* fixing failing test.
---------
Co-authored-by: peartree <etienne.poirier@smilecdr.com>
* documentation update (#5154)
Co-authored-by: leif stawnyczy <leifstawnyczy@leifs-MacBook-Pro.local>
* Fix hsql jdbc driver deps (#5168)
Avoid non-included classes in jdbc driver dependencies.
* $delete-expunge over 10k resources will now delete all resources (#5144)
* First commit with very rough fix and unit test.
* Refinements to ResourceIdListStep and Batch2DaoSvcImpl. Make LoadIdsStepTest pass. Enhance Batch2DaoSvcImplTest.
* Spotless
* Fix checkstyle errors.
* Fix test failures.
* Minor refactoring. New unit test. Finalize changelist.
* Spotless fix.
* Delete now useless code from unit test.
* Delete more useless code.
* Test pre-commit hook
* More spotless fixes.
* Address most code review feedback.
* Remove use of pageSize parameter and see if this breaks the pipeline.
* Remove use of pageSize parameter and see if this breaks the pipeline.
* Fix the noUrl case by passing an unlimited Pegeable instead. Effectively stop using page size for most databases.
* Deprecate the old method and have it call the new one by default.
* updating documentation (#5170)
Co-authored-by: leif stawnyczy <leifstawnyczy@leifs-MacBook-Pro.local>
* _source search parameter modifiers for Subscription matching (#5159)
* _source search parameter modifiers for Subscription matching - test, implementation and changelog
* Removal of meta tags during updates do not trigger subscription (#5181)
* Initial failing test.
* adding solution;
fixing documentation;
* spotless apply
* adding changelog
* modifying current test
---------
Co-authored-by: peartree <etienne.poirier@smilecdr.com>
* Issue 5173 get gateway everything doesnt return all patients (#5174)
* Failing test
* Also set offset and count in base DAO override
* Changelog
* Fix for specific case where count has been set in parameters
* spotless
* Improve checks
---------
Co-authored-by: juan.marchionatto <juan.marchionatto@smilecdr.com>
* Do not 500 and continue IG ingestion when different IGs try to save different ValueSets with colliding FHIR IDs (#5175)
* First commit with failing unit test and small tweaks.
* Swallow resource version exceptions from colliding ValueSet OIDs and log a descriptive error instead. Add more detailed unit testing.
* Tweaks to logic and update the changelog. Reverse all changes to TermReadSvcImpl.
* Revert PackageResourceParsingSvc to release branch baseline.
* Accept code reviewer suggestion to change changelog description.
Co-authored-by: michaelabuckley <michaelabuckley@gmail.com>
---------
Co-authored-by: michaelabuckley <michaelabuckley@gmail.com>
* Fix link
* Remove target slf4j version
* dont use new API for a bit (#5191)
* Return DropIdGeneratorTask from the Builder to permit clients to mutate the (#5193)
DropIdGeneratorTask.
* Dqm performance bug update and provider loader fix (#5180)
* update tests, move properties, update operation loader
* update wip
* remove test
* fixing tests, adding config
* update config and provider loader
* fix bundles
* fix cache settings on tests
* version bump and change log
* version bump
* fix formatting
* CVE-2022-45868
* wip cve change
* cve h2 add back in
---------
Co-authored-by: justin.mckelvy <justin.mckelvy@smilecdr.com>
* bulkExportReuse with POST and GET (#5161)
* string manipulation
* Code to ensure bulkExportReuse works with POST and GET requests
* Added formatting changes
* Fixed tests that were not working
* Formatting
* Code clean up
* fixing test failures
* fixing test failures
* Removed arrOfParams to now utilize ObjectMapper
* Removing stack trace and adding an exception
* Fixed test issue
* formatting
* formatting
* Resolving code review comments
* Reduce size of subscription max results (#5194)
* Reduce MAX_SUBSCRIPTION_RESULTS to 10000
* Add changelog
* 5037 goldenresource remains when target resource deleted (#5038)
* draft test and fix
* remove unused fields
* remove unused fields
* remove unused fields
* draft test + solution for possible match case
* combine sql statement + more error checking
* add test case for possible duplicate
* add config for autodeleting grs
* refactoring, adding support for mongo, docs
* refactoring + fixing mongo queries
* add changelogs
* fix both way link removal
* clean up test comments
* rename method
* remove unnecessary bean
* merge master/resolve conflicts
* mvn spotless
* address comment
* changes to avoid version bumping
* spotless
* change error code
---------
Co-authored-by: justindar <justin.dar@smilecdr.com>
* dont use new API for a bit (#5190)
* licenses
* Fixing terminology upload with large file. (#5204)
* create initial test
* adding fix;
adding changelog;
* fixing format.
---------
Co-authored-by: peartree <etienne.poirier@smilecdr.com>
* up version to 6.8.0 from snapshot
* fix up some duplicate deps for skipping
* Force deployment of other projects
* make dummy java class to pass sonatype checks
* make dummy java class to pass sonatype checks
* Cheeky test removal
* Another test removal
* Updating version to: 6.8.1 post release.
* adding back in tests for release pipelines
* Fix bad version insert
* Bump to core library version 6.0.22.2 (#5261)
* Bump to core library version 6.0.22.2
* Bump HAPI to 6.8.1-SNAPSHOT, core library version to 6.0.22.2
* up version to 6.8.1
* Prevent remote deployment
* Updating version to: 6.8.2 post release.
* Re-add deploy plugin skip
* re-add version
* Bump core library version to 6.0.22.2
* Bump HAPI to 6.8.2-SNAPSHOT
* Fix up version enum
* Version bump
* Updating version to: 6.8.3 post release.
* Make display name validation configurable (#5321)
* Test fixes
* Build cleanup
* Initial test passing
* Test fixes
* Tests all seem to be working
* Make display validation level configurable
* Should be all working
* Add changelog
* Add to changelog
---------
Co-authored-by: Tadgh <garygrantgraham@gmail.com>
* wip
* wip
* Fix conflicts
* add backport info
* Fix versioning
* test fixes
* disabled 1 test
* backported 5271 to fix validation message tests
* wip
* Changelog
* Fix tests
* Fix backport
* Add upgrade.md
* Fix test
* Fix key
* Updating version to: 6.8.4 post release.
* 5353 iterate on revincludes and includes does not return correct resources when used with non iterate revincludes (#5354)
* added failing test
* implemented solution
* added doc generation
* added changelog
* fixed the order of includes and revincludes, based on what was implemented before
* fixed formatting
* fixed wording
---------
Co-authored-by: Steven Li <steven@smilecdr.com>
* added changelog
* Updating version to: 6.8.5 post release.
* merge back 5377
* changelog
* Allow cached search with consent active when safe (#5387)
Allow the search cache when using consent if safe
* Change package installation behaviour such that it updates the existing SearchParameter base with remaining resources (#5376)
* Change package installation behavior such that it updates the existing SearchParameter base with remaining resources
* Change package installation behavior such that it updates the existing SearchParameter base with remaining resources
* Use resourceType in the package installer output to fix tests. Minor change with resourceType condition. Update changelog description to make it more readable.
* Use resourceType in the package installer output to fix tests. Minor change with resourceType condition. Update changelog description to make it more readable.
* Updating version to: 6.8.6 post release.
* Transaction with conditional update fails if SearchNarrowingInterceptor is registered and Enabled Partitioning (#5389)
* Transaction with conditional update fails if SearchNarrowingInterceptor is registered and Enabled Partitioning - Implementation
* Reverse Chaining searches returns an error when invoked with parameter _lastUpdated. (#5177)
* version bump
* Bump to core release 6.0.22 (#5028)
* Bump to core release 6.0.16
* Bump to core version 6.0.20
* Fix errors thrown as a result of VersionSpecificWorkerContextWrapper
* Bump to core 6.0.22
* Resolve 5126 hfj res ver prov might cause migration error on db that automatically indexes the primary key (#5127)
* dropped old index FK_RESVERPROV_RES_PID on RES_PID column before adding IDX_RESVERPROV_RES_PID
* added changelog
* changed to valid version number
* changed to valid version number, need to be ordered by version number...
* 5123 - Use DEFAULT partition for server-based requests if none specified (#5124)
5123 - Use DEFAULT partition for server-based requests if none specified
* consent remove all suppresses next link in bundle (#5119)
* added FIXME with source of issue
* added FIXME with root cause
* added FIXME with root cause
* Providing solution to the issue and removing fixmes.
* Providing changelog
* auto-formatting.
* Adding new test.
* Adding a new test for standard paging
* let's try this and see if it works...?
* fix tests
* cleanup to trigger a new run
* fixing tests
---------
Co-authored-by: Ken Stevens <ken@smilecdr.com>
Co-authored-by: peartree <etienne.poirier@smilecdr.com>
* 5117 MDM Score for No Match Fields Should Not Be Included in Total Score (#5118)
* fix, test, changelog
* fix, test, changelog
---------
Co-authored-by: justindar <justin.dar@smilecdr.com>
* _source search parameter needs to support modifiers (#5095)
_source search parameter needs to support modifiers - added support form :contains, :missing, :above modifiers
* Fix HFQL docs (#5151)
* Expunge operation on codesystem may throw 500 internal error with precondition fail message. (#5156)
* Initial failing test.
* Solution with changelog.
* fixing format.
* Addressing comment from code review.
* fixing failing test.
---------
Co-authored-by: peartree <etienne.poirier@smilecdr.com>
* documentation update (#5154)
Co-authored-by: leif stawnyczy <leifstawnyczy@leifs-MacBook-Pro.local>
* Fix hsql jdbc driver deps (#5168)
Avoid non-included classes in jdbc driver dependencies.
* $delete-expunge over 10k resources will now delete all resources (#5144)
* First commit with very rough fix and unit test.
* Refinements to ResourceIdListStep and Batch2DaoSvcImpl. Make LoadIdsStepTest pass. Enhance Batch2DaoSvcImplTest.
* Spotless
* Fix checkstyle errors.
* Fix test failures.
* Minor refactoring. New unit test. Finalize changelist.
* Spotless fix.
* Delete now useless code from unit test.
* Delete more useless code.
* Test pre-commit hook
* More spotless fixes.
* Address most code review feedback.
* Remove use of pageSize parameter and see if this breaks the pipeline.
* Remove use of pageSize parameter and see if this breaks the pipeline.
* Fix the noUrl case by passing an unlimited Pegeable instead. Effectively stop using page size for most databases.
* Deprecate the old method and have it call the new one by default.
* updating documentation (#5170)
Co-authored-by: leif stawnyczy <leifstawnyczy@leifs-MacBook-Pro.local>
* _source search parameter modifiers for Subscription matching (#5159)
* _source search parameter modifiers for Subscription matching - test, implementation and changelog
* first fix
* tests and preliminary fixes
* wip, commit before switching to release branch.
* adding capability to handle _lastUpdated in reverse search (_has)
* adding changelog
* applying spotless.
* addressing code review comments.
---------
Co-authored-by: tadgh <garygrantgraham@gmail.com>
Co-authored-by: dotasek <david.otasek@smilecdr.com>
Co-authored-by: Steve Corbett <137920358+steve-corbett-smilecdr@users.noreply.github.com>
Co-authored-by: Ken Stevens <khstevens@gmail.com>
Co-authored-by: Ken Stevens <ken@smilecdr.com>
Co-authored-by: peartree <etienne.poirier@smilecdr.com>
Co-authored-by: jdar8 <69840459+jdar8@users.noreply.github.com>
Co-authored-by: justindar <justin.dar@smilecdr.com>
Co-authored-by: volodymyr-korzh <132366313+volodymyr-korzh@users.noreply.github.com>
Co-authored-by: Nathan Doef <n.doef@protonmail.com>
Co-authored-by: Etienne Poirier <33007955+epeartree@users.noreply.github.com>
Co-authored-by: TipzCM <leif.stawnyczy@gmail.com>
Co-authored-by: leif stawnyczy <leifstawnyczy@leifs-MacBook-Pro.local>
Co-authored-by: michaelabuckley <michaelabuckley@gmail.com>
Co-authored-by: Luke deGruchy <luke.degruchy@smilecdr.com>
* Br 20231019 add cr settings for cds hooks (#5394)
* Add settings used in CR CDS Services. Remove config dependency on Spring Boot.
* Add changelog
* Use String.format rather than concat strings
* spotless apply
* Add javadoc
* Upgrade notes for the forced-id change (#5400)
Add upgrade notes for forced-id
* Clean stale search results more aggressively. (#5396)
Use bulk DMA statements when cleaning the search cache.
The cleaner job now works as long as possible until a deadline based on the scheduling frequency.
* bump version of clinical reasoning (#5406)
* Transaction fails if SearchNarrowingInterceptor is registered and Partitioning Enabled - fix cross-tenant requests failure (#5408)
* Transaction with conditional update fails if SearchNarrowingInterceptor is registered and Enabled Partitioning - fix and tests added
* removed unused alias from SQL query of mdm-clear (#5416)
* Issue 5418 support Boolean class return type in BaseInterceptorService (#5421)
* Enable child classes to use Boolean class return type
* spotless
---------
Co-authored-by: juan.marchionatto <juan.marchionatto@smilecdr.com>
* If AutoInflateBinaries is enabled, binaries are created on the disk only for the first resource entry of the bundle (#5420)
* If AutoInflateBinaries is enabled, binaries created on disk by bundled requests are created only for the first resource entry - fix
* Revert "Issue 5418 support Boolean class return type in BaseInterceptorService (#5421)" (#5423)
This reverts commit 4e295a59fb.
Co-authored-by: Nathan Doef <nathaniel.doef@smilecdr.com>
* Use new FHIR_ID column for sorting (#5405)
* Sort `_id` using new FHIR_ID column.
* Fix old tests that put client-assigned ids first.
* Better indexing for sort
* Bump core to 6.1.2.2 (#5425)
* Bump core to 6.1.2.1
Patch release that uses https for primary org.hl7.fhir.core package server
* Bump core to 6.1.2.2
* Make sure to return always a value for Boolean class return type. (#5424)
Implement change in a non-disruptive way for overriders
Co-authored-by: juan.marchionatto <juan.marchionatto@smilecdr.com>
* Add non-standard __pid SP for breaking ties cheaply during sorts. (#5428)
Add a non-standard __pid SP.
* Review changes for new _pid SP. (#5430)
Change name to _pid to match our standard and add warning.
* Fix VersionCanonicalizer conversion from R5 into DSTU2 for CapabilityStatement, Parameters and StructuredDefinition (#5432)
* Fix VersionCanonicalizer conversion from R5 into DSTU2 for CapabilityStatement, Parameters and StructuredDefinition.
* Fix spotless issue
* CVEs for 6.10.0 (#5433)
* Bump jetty
* Bump okio-jvm
* 8.2.0 mysql connector
* Jena and elastic bumps
* Fix test
* 5412 post bundle on partition incorrect response.link shown (#5413)
* Initial fix and unit test provided
* spottless check
* Made relevant changes to make solution version agnostic
* relevant logic changes made
* spotless changes made
* New logic added to fix failing test cases
* formatting
* New logic to make the function more robust
* spotless checks
* Left a trailing slash in the tests
* Made relevant test changes and changed logic
* spotless changes
* Update hapi-fhir-docs/src/main/resources/ca/uhn/hapi/fhir/changelog/6_10_0/5412-during-partition-fullUrl-not-shown-in-response.yaml
changing changelog
Co-authored-by: volodymyr-korzh <132366313+volodymyr-korzh@users.noreply.github.com>
* Formatting requirements
---------
Co-authored-by: volodymyr-korzh <132366313+volodymyr-korzh@users.noreply.github.com>
* Resolve We don't have guaranteed subscription delivery if a resource is too large (#5414)
* first fix
* - added the ability to handle null payload to SubscriptionDeliveringMessageSubscriber and SubscriptionDeliveringEmailSubscriber
- refactored code to reduce repeated code
- cleaned unnecessary comments and reformatted files
* Changed myResourceModifiedMessagePersistenceSvc to be autowired
* removed unused import
* added error handling when inflating the message to email and message subscriber
* reformatted code
* Fixing subscription tests with mocked IResourceModifiedMessagePersistenceSvc
* Changes by gary
* Reformatted file
* fixed failed tests
* implemented test for message and email delivery subscriber. Fixed logical error. Reformatted File.
* - implemented IT
- fixed logical error
- added changelog
* fix for cdr tests, NOTE: this makes the assumption that we will always succeed for inflating the database in the tests that uses SynchronousSubscriptionMatcherInterceptor
* fix for cdr tests, NOTE: this makes the assumption that we will always succeed for inflating the database in the tests that uses SynchronousSubscriptionMatcherInterceptor
* resolve code review comments
* reformatted files
* fixed tests
* Fix for failing IT test in jpaserver-starter (#5435)
Co-authored-by: dotasek <dotasek.dev@gmail.com>
* wip
* Bump jackson databind
* Pin Version
* Ignored duplicate classes
* Updating version to: 6.10.1 post release.
* Fix pom
* Skip remorte nexus
* make release faster
* Updating version to: 6.10.1 post release.
* Oracle create index migration recovery (#5511)
* CLI tool command migrate-database executing in dry-run mode insert entries into table FLY_HFJ_MIGRATION (#5487)
* initial test
* Solution with changelog.
* making spotless hapi
* addressing comments from code reviews
* making the test better.
* addressing code review comment and adding test.
---------
Co-authored-by: peartree <etienne.poirier@smilecdr.com>
* added upgrade docs and backport changelogs
* Oracle create index migration recovery (#5511)
* CLI tool command migrate-database executing in dry-run mode insert entries into table FLY_HFJ_MIGRATION (#5487)
* initial test
* Solution with changelog.
* making spotless hapi
* addressing comments from code reviews
* making the test better.
* addressing code review comment and adding test.
---------
Co-authored-by: peartree <etienne.poirier@smilecdr.com>
* added changelog, fix 6.10.0's version.yaml
* Fix bad resource id migration (#5548)
* Fix bad migration of fhir id.
Fix the original migration ForceIdMigrationCopyTask.
Also add another migration ForceIdMigrationFixTask to trim
the fhir id to correct the data.
* Bump to 6.10.1-SNAPSHOT
* Merge the fhir_id copy migration with the fhir_id fix to avoid traversing hfj_resource twice. (#5552)
Turn off the original migration ForceIdMigrationCopyTask.
Fix it anyway so nobody copies bad code.
Also add another migration ForceIdMigrationFixTask
that fixes the bad data, as well as fills in the fhir_id column for new migrations.
* move to non snapshot version
* Updating version to: 6.8.7 post release.
* Fix fixed migration (#5571)
* Fix bad migration, prep for 6.10.2
* spotless
* Version bump
* Updating version to: 6.10.3 post release.
* backport mdm duplicate identifier fix
* added bunch of license stuff
* add changelog for 6.10.3
* Updating version to: 6.10.4 post release.
* pom bump to 7.0.0 (#5615)
* pom bump to 7.0.0
* add version enum
* fixed feb release name
---------
Co-authored-by: Long Ma <long@smilecdr.com>
* Check index existence on raw SQL creation (#5624)
* Add conditional check on index existence before we try again
* Add conditional check on index existence before we try again
* Changelog
* remit
* remit
* debug statements
* 5621 deadlock on caffeine cache when creating a resource with conditional create (#5622)
* Modifying the CacheProvider to avoid doing db I/O within the cache miss value supplier callback.
* Setting the initial capacity of instantiated caches to the cache max size to avoid resizing during operations.
* adding changelog and spotless.
* Fixing typo.
* Addressing comments from code review.
---------
Co-authored-by: peartree <etienne.poirier@smilecdr.com>
* Searching with more than one chained Bundle SearchParameter returns incorrect results (#5614)
* Failing test
* fix
* changelog
* Avoiding Exception being thrown on @EventListener invocation (#5628)
* replaced EventListener annotation with @PreDestroy
* adding changelog
---------
Co-authored-by: peartree <etienne.poirier@smilecdr.com>
* simple fix (#5630)
Co-authored-by: Long Ma <long@smilecdr.com>
* Incorrect version of auto versioned reference for conditional update with urn id placeholder (#5625)
* Incorrect version from versioned_references.auto_at_paths for conditional update - implementation
* Oracle: Ensure migrated database still takes large resource text updates (#5629)
* First pass at fix to Oracle HFJ_RES_VER.RES_TEXT_VC migration.
* First stab at agreed upon solution.
* Fix error with 4001 by removing unnecessary annotation.
* Spotless and TODO.
* Remove annotation for good and set length to LONG32.
* Fix copyright year.
* Finalize changelog.
* Remove migration changes. Fix unit test.
* Fix compile error.
* Log output.
* Refactor resource history code into new ResourceHistoryCalculator.
* Spotless.
* Convert record to POJO.
* Restore pre-17 switch statement.
* Finalize new resource history calculator code and tests.
* Spotless.
* Remove logging.
* Update hapi-fhir-docs/src/main/resources/ca/uhn/hapi/fhir/changelog/7_0_0/5633-oracle-hfj-res-ver-clob-migration.yaml
Apply code reviewer suggestion
Co-authored-by: Michael Buckley <michaelabuckley@gmail.com>
* Code review feedback.
---------
Co-authored-by: Michael Buckley <michaelabuckley@gmail.com>
* Fix expansion for `ValueSet` with no concepts based on CodeSystem `urn:ietf:bcp:13` (#5638)
* When fetching the mimetype code system, return empty CodeSystem with NOTSUPPORTED content. Update expansion logic to handle this case. Add some test cases.
* Minor change to fix test
* Rename changelog file
* Remove TODOs as they're replaced by reported issue
* Revert accidental change added with TODO removal
* $expunge operation ignoring ExpungeThreadCount setting in certain cases (#5637)
* $expunge operation ignoring ExpungeThreadCount setting in certain cases - implementation
* Fix Measure group id null pointer exception (#5620)
* Update to new version of clinical reasoning, includes a fix for null pointers on Measure group id
* add changelog
---------
Co-authored-by: Justin McKelvy <60718638+Capt-Mac@users.noreply.github.com>
* Rule evaluation: Allow Bundles with PATCH Parameters (#5641)
* Remove parameters clause.
* Finalize changelog. Add tests. Finalize implementation.
* Undo changes to this test.
* Revert all changes to FhirQueryRuleImplTest. Add new RuleImplOpTest. Ensure that proper nested Bundle is created for test and other fixes.
* Tweak test.
* Use real rule applier in test and remove all mocks.
* Prevent batch2 job execution to stop for empty chunk when last job st… (#5635)
* Prevent batch2 job execution to stop for empty chunk when last job step is a reduction.
Add output to bulk export result even when empty.
* Fix test
* Unimportant change to force fresh build
* Implement review suggestions
---------
Co-authored-by: juan.marchionatto <juan.marchionatto@smilecdr.com>
* Index review fixes (#5649)
* Don't hold locks while adding indices during upgrade.
* concurrent indexing is non-transactional in PG.
* 5621 deadlock on caffeine cache when creating a resource with conditional create (#5622)
* Modifying the CacheProvider to avoid doing db I/O within the cache miss value supplier callback.
* Setting the initial capacity of instantiated caches to the cache max size to avoid resizing during operations.
* adding changelog and spotless.
* Fixing typo.
* Addressing comments from code review.
---------
Co-authored-by: peartree <etienne.poirier@smilecdr.com>
* added 6.10.4 changelog and backport changelog
* Fix conditional creates without leading '?' (#5646)
* First commit with failing test.
* More tests and logs.
* More logs
* Try new solution for BaseTransactionProcessor.performIdSubstitutionsInMatchUrl().
* Simplify solution. Add more tests.
* Changelog.
* javadoc
* Searching for Bundles with read all Bundles permission returns 403 (#5644)
* failing test
* another failing test case
* fix
* changelog
* fix bug
* spotless
* cr
* Fix NullPointerException when performing a system bulk export in the presence of PatientIdPartitionInterceptor. (#5660)
* Updating version to: 6.10.5 post release.
* Bump json-path
* Pin parrson
* Bump elastic
* Bump spring version
* Exclude JDBC
* Serializing changes for sensitive data (#5655)
* Add new senstiive data serializer
* Add new senstiive data serializer
* Add new senstiive data serializer
* Remove dead comments
* Change up the test
* review comments
* wip
* Tighten tests and push annotation down
* Tighten tests and push annotation down
* Changelog
* Add test
* 7.0.1-SNAPSHOT bump
* Error code
* Add method used by CDR
* add version enum
* Fix test
* Revert change to other safe version to stop problem with deprecated field
* Rel 7 0 CVE (#5663)
* Bump json-path
* Pin parrson
* Bump elastic
* Bump spring version
* Exclude JDBC
* Descendent fix (#5669)
* Fix "is-a" ValueSet expansion, add "descendent-of" support
* Fixed tests in DSTU3 and R5
* Trigger new build
* Revert "Trigger new build"
This reverts commit 46c672b338.
* fix default partition setting on resource (#5617)
* fix default partition setting on resource
* changelog
* Handle DEFAULT partition in rule checker.
* Fix spotless
---------
Co-authored-by: Michael Buckley <michaelabuckley@gmail.com>
Co-authored-by: James Agnew <jamesagnew@gmail.com>
* pom bump, doc add, version enum add (#5616)
Co-authored-by: Long Ma <long@smilecdr.com>
* fix default partition setting on resource (#5618)
* fix default partition setting on resource
* Handle DEFAULT partition in rule checker.
Co-authored-by: Ken Stevens <khstevens@gmail.com>
* Add setting to make broker not use JacksonMessageConverter (#5611)
* Add setting to make broker not use JacksonMessageConverter
* Add changelog
* Implement suggestions
---------
Co-authored-by: juan.marchionatto <juan.marchionatto@smilecdr.com>
* Fix version
* add changelog, add attribution, remove accidental bring-overs
* add changelog, add attribution, remove accidental bring-overs
* Finish jira section
---------
Co-authored-by: Ole Hedegaard <ohe@trifork.com>
Co-authored-by: Ken Stevens <khstevens@gmail.com>
Co-authored-by: Michael Buckley <michaelabuckley@gmail.com>
Co-authored-by: James Agnew <jamesagnew@gmail.com>
Co-authored-by: longma1 <32119004+longma1@users.noreply.github.com>
Co-authored-by: Long Ma <long@smilecdr.com>
Co-authored-by: jmarchionatto <60409882+jmarchionatto@users.noreply.github.com>
Co-authored-by: juan.marchionatto <juan.marchionatto@smilecdr.com>
* $poll-export-status operation with PatientIdPartitionInterceptor fails with NullPointerException (#5681)
* Fix NullPointerException when performing a system bulk export in the presence of PatientIdPartitionInterceptor.
* Fix NPE on -export-status operation with PatientIdPartitionInterceptor
* 5654 measurescorer bug for denominator exception (#5677)
* update measure bundles and tests for enforced populationId specification on Measure group resources
* bump CR version to PRE17
* fix bug in versionEnumTest
* Update hapi-fhir-docs/src/main/resources/ca/uhn/hapi/fhir/changelog/7_0_0/5654-measurescorer-bug.yaml
Co-authored-by: Tadgh <garygrantgraham@gmail.com>
---------
Co-authored-by: Tadgh <garygrantgraham@gmail.com>
* Revert Remote Terminology lookup operation to support all types of CodeSystem property and convert to them to string type. (#5698)
* Revert Remote Terminology lookup operation to support all types of CodeSystem property and convert to them to string type.
* Spotless fix
* Address code review comments
* version bump to 7.0.0
* pipeline fix
* Update java home
* Updating version to: 7.0.1 post release.
* Bump fix. (#5710)
* Backport: Searching with more than one chained Bundle SearchParameter returns i… (#5711)
* Searching with more than one chained Bundle SearchParameter returns incorrect results (#5614)
* Add backport info to changelog.
---------
Co-authored-by: Nathan Doef <n.doef@protonmail.com>
* backport PR5589. (#5716)
Co-authored-by: James Agnew <jamesagnew@gmail.com>
* Backport 5722 into 7.0.1 (#5729)
* Bugfix: removed reference to public schema in raw sql (#5722)
* Bugfix: removed reference to public schema in raw sql
* Add attribution for #5722
---------
Co-authored-by: James Agnew <jamesagnew@gmail.com>
* Add backport tag
* Build fix
---------
Co-authored-by: pano-smals <135063507+pano-smals@users.noreply.github.com>
* pom change to non-snapshot
* Updating version to: 6.10.6 post release.
* Reflected XSS vulnerability in Testpage overlay (#5719)
* HAPI FHIR Testpage potential XSS vulnerability - fix
* cherry-picked fix for 5671 searchparameter locks
* Rel 6 4 mb update (#5741)
* Add backport and folder
* Add missing changelog
* Cherry p icking
* Update upgrade.md
* added new version version.yaml
* Provide default update time to batch2 entities (#4630)
* Data migration - default value for batch2 UPDATE_TIME
* fixed changelog, added 6.4.3 changelog folder
* Spotless
---------
Co-authored-by: Kevin Dougan SmileCDR <72025369+KevinDougan-SmileCDR@users.noreply.github.com>
Co-authored-by: longma1 <long@smilecdr.com>
Co-authored-by: michaelabuckley <michaelabuckley@gmail.com>
* Added correction to generated resource providers (#5743)
* Added correction to generated resource providers
* add changelog and fix issue that was adding languange SP to version that does not have language as a SP
* actually fix the test
* fix changelog wrong issue number
---------
Co-authored-by: Jens Kristian Villadsen <jenskristianvilladsen@gmail.com>
Co-authored-by: Long Ma <long@smilecdr.com>
* added docs for 7.0.1
* Add accidentally removed migration
* spotless
* Reducer LOB usage in Batch2 and Search (#5748)
* Reducer LOB usage in Batch2 and Search
* Add changelog
* Rework a number of LOB columns
* Test fix
* Test fix
* Column fixes
* Test fix
* Formatting
* Fixes
* patching bad oracle test
* Apply spotless
---------
Co-authored-by: Tadgh <garygrantgraham@gmail.com>
* Fix backport line
* Add changelog folder
* Add knowledge of new version'
* spotless
* fix unintended backported change
* Updating version to: 7.0.2 post release.
* Updating version to: 6.8.8 post release.
* Case sensitivity
* merge backed ruleImlOp, not sure why previous 2 mergebacks didnt get this
* cleanup
* Updating version to: 7.0.3 post release.
* fix changelog
---------
Co-authored-by: Tadgh <garygrantgraham@gmail.com>
Co-authored-by: TipzCM <leif.stawnyczy@gmail.com>
Co-authored-by: leif stawnyczy <leifstawnyczy@leifs-MacBook-Pro.local>
Co-authored-by: Sam Gunter <123124187+samguntersmilecdr@users.noreply.github.com>
Co-authored-by: peartree <etienne.poirier@smilecdr.com>
Co-authored-by: Brenin Rhodes <brenin@alphora.com>
Co-authored-by: chalmarm <44471040+chalmarm@users.noreply.github.com>
Co-authored-by: Chalma Maadaadi <chalma@alphora.com>
Co-authored-by: StevenXLi <stevenli_8118@hotmail.com>
Co-authored-by: Steven Li <steven@smilecdr.com>
Co-authored-by: James Agnew <jamesagnew@gmail.com>
Co-authored-by: Luke deGruchy <luke.degruchy@smilecdr.com>
Co-authored-by: Long Ma <long@smilecdr.com>
Co-authored-by: jmarchionatto <60409882+jmarchionatto@users.noreply.github.com>
Co-authored-by: Zach Smith <85943952+zachdoctolib@users.noreply.github.com>
Co-authored-by: Aleksej Parovysnik <100864000+alparodev@users.noreply.github.com>
Co-authored-by: juan.marchionatto <juan.marchionatto@smilecdr.com>
Co-authored-by: Ken Stevens <khstevens@gmail.com>
Co-authored-by: Ken Stevens <ken@smilecdr.com>
Co-authored-by: michaelabuckley <michaelabuckley@gmail.com>
Co-authored-by: Josie <80289977+pepsiofficial@users.noreply.github.com>
Co-authored-by: josie <josie.vandewetering@smilecdr.com>
Co-authored-by: TynerGjs <132295567+TynerGjs@users.noreply.github.com>
Co-authored-by: jdar8 <69840459+jdar8@users.noreply.github.com>
Co-authored-by: justindar <justin.dar@smilecdr.com>
Co-authored-by: markiantorno <markiantorno@gmail.com>
Co-authored-by: volodymyr-korzh <132366313+volodymyr-korzh@users.noreply.github.com>
Co-authored-by: Thomas Papke <web@thopap.de>
Co-authored-by: dotasek <david.otasek@smilecdr.com>
Co-authored-by: Steve Corbett <137920358+steve-corbett-smilecdr@users.noreply.github.com>
Co-authored-by: Nathan Doef <n.doef@protonmail.com>
Co-authored-by: Etienne Poirier <33007955+epeartree@users.noreply.github.com>
Co-authored-by: Justin McKelvy <60718638+Capt-Mac@users.noreply.github.com>
Co-authored-by: justin.mckelvy <justin.mckelvy@smilecdr.com>
Co-authored-by: LalithE <132382565+LalithE@users.noreply.github.com>
Co-authored-by: volodymyr <volodymyr.korzh@smilecdr.com>
Co-authored-by: Martha Mitran <martha.mitran@smilecdr.com>
Co-authored-by: Nathan Doef <nathaniel.doef@smilecdr.com>
Co-authored-by: dotasek <dotasek.dev@gmail.com>
Co-authored-by: JP <jonathan.i.percival@gmail.com>
Co-authored-by: Ole Hedegaard <ohe@trifork.com>
Co-authored-by: pano-smals <135063507+pano-smals@users.noreply.github.com>
Co-authored-by: Kevin Dougan SmileCDR <72025369+KevinDougan-SmileCDR@users.noreply.github.com>
Co-authored-by: Jens Kristian Villadsen <jenskristianvilladsen@gmail.com>
* collect-data and data-requirements operations and tests
* remove unused imports
* additional test coverage
* move assertions out of method to pass static code analysis
* camelCase test names
* remove underscore on test methods
* requested edits to changelog
* version bump to 7.1.10-SNAPSHOT
* condense unit tests to prevent pipeline timeout
* method camel case naming
* Allow tests to set paging provider by server
* Allow tests to set target server port range
---------
Co-authored-by: juan.marchionatto <juan.marchionatto@smilecdr.com>
* First commit with TODOs and logging.
* Try to add cross partition config at startup to subscription module.
* Barely working solution with JpaStorageSettings injected into the Subscription module with the correct config for cross partition enabled.
* Implement agreed upon solution where StorageSettings used in the subscription module uses the JpaStorageSettings cross partition enabled setting. Fix all compile errors. TODOs for tests to add and known test failures.
* Fix test errors caused by bad log code. Ensure all modules use StorageSettings for canonicalizer.
* Cleanup.
* Reintroduce old SubscriptionCanonicalizer constructor, but add a StorageSettings and deprecate it. Cleanup logs and TODOs.
* Deprecate FHIR_PATCH. More cleanup.
* Deprecate FHIR_PATCH correctly.
* Small fix.
* Set myCrossPartitionSubscriptionEnabled to true by default.
* Fix test failures.
* Fix another test.
* Code review feedback.
* Resolve static analysis warnings.
* added new customizer filter factory. have not yet deleted old code it replaces.
* added new customizer filter factory. have not yet deleted old code it replaces.
* replaced websocket filter. works. still some cleanup to do
* replaced websocket filter. works. still some cleanup to do
* cosmetic change
* add coverage and fix bugs it found
* spotless
* move capability statement classes
* add changelog and rename new classes
* review feedback
* Add support for latest version of CR and new $questionnaire operation
* Fix formatting in javadoc causing warning
* Update to 3.0.0 CR release
* Add support for expected parameter names from updated IG's
* Update Clinical Reasoning documentation
* Update pom.xml
* Create 5750-update-cr-operations.yaml
* fix doc
* Update to latest CR version
* Update pom.xml
* In version
* Update changelog
* Remove commented code
* Reducer LOB usage in Batch2 and Search (#5748)
* Reducer LOB usage in Batch2 and Search
* Add changelog
* Rework a number of LOB columns
* Test fix
* Test fix
* Column fixes
* Test fix
* Formatting
* Fixes
* patching bad oracle test
* Apply spotless
---------
Co-authored-by: Tadgh <garygrantgraham@gmail.com>
* Clean up
* Revert change
* One more revert
* Resolve compile issue
---------
Co-authored-by: Tadgh <garygrantgraham@gmail.com>
* Add SQL logging: Attempt to add test.
* Small fix.
* moar tests
* Tweak unit tests to be parameterized.
* Enhance tests and more logging.
* Better tests. More logging. More TODOs.
* Better tests. More logging. More TODOs.
* Changes
* Changes
* Updates to tests. More logging and experimental code.
* Introduce fix along with more logging and TODOs and tweaks to tests.
* Cleanup solution. Get rid of logs and todos. Rename test class, test methods and clean up unnecessary code.
* Add changelog.
* Implement simpler chain algorithm without conditional logic and leave a long comment explaining why.
* Implement simpler chain algorithm without conditional logic and leave a long comment explaining why.
* Fix comment.
---------
Co-authored-by: Ken Stevens <khstevens@gmail.com>
* Added correction to generated resource providers
* add changelog and fix issue that was adding languange SP to version that does not have language as a SP
* actually fix the test
* fix changelog wrong issue number
---------
Co-authored-by: Jens Kristian Villadsen <jenskristianvilladsen@gmail.com>
Co-authored-by: Long Ma <long@smilecdr.com>
* Add test for CDA with binary database blog storage and some logging for the Terser.
* More logging and a new FhirTerser test.
* Add more comments and prove Enumeration is a valid subtype of Type.
* More logging and comments.
* James solution: Comment out some code. Spotless.
* Get rid of logging and TODOs. Use AtomicBoolean for test.
* Try just commenting out the continue; line.
* Integrate changes from ja_20240222_choice_specialization_fix.
* Spotless.
* Changelog and fix for bad import.
* Code review feedback.
* Added content message delivery for SubscriptionWebsocketHandler
* 5687: Code clean up and small bug fix on empty payload
* 5687: Provided unit tests for the SubscriptionWebsocketHandler with subscription topic content: id-only, empty and full-resource
* 5687: Apply mvn spotless:apply
* 5687: Code formatting
* Credit for #5692
---------
Co-authored-by: artiom.darie <artiom.darie@adswizz.com>
Co-authored-by: Artiom Darie <5781864-artiom.darie@users.noreply.gitlab.com>
Co-authored-by: James Agnew <jamesagnew@gmail.com>