* Start working on cascading deleets
* WOrk on cascading deletes
* Work on cascading deletes
* Enable cascading deletes
* Cascade deletes almost working
* FIx test
* Test fix
* Initial consent svc
* Ongoing consent svc work
* Add docs
* Ongoing consent service work
* Work on consent service
* More work on consent svc
* License header updates
* Ongoing consent svc work
* Some test fixes
* Some test fixes
* More work on consent svc
* Tests working
* Test fix
* Propagate RequestDetails to everything in JPA server
* More interceptor tweaks
* Fix compile error
* One more tweak to captured SQL
* Ongoing interceptor tweaks
* Ongoing interceptor tweaks
* More interceptor tweaks
* Interceptor tweaks
* Tweaks to tests
* Fix tests
* Test fix
* Raise warnings when encoding extensions with missing values
* Consent service work
* More interceptor tweaks
* Consent interceptor tweaks
* Add logging to test
* Make IBundle list interface more flexible
* Make matchResourceLinks visible
* Make matchResourceLinks visible
* Pull in-memory matching functionality out of subscription module into dedicated classes in searchparam module
* Added more accessors to version independent resource classes
* improved forcedid matching (needs to be verified by James)
filter out nulls from HashMapProvider.searchAll() (hopefully no tests depend on this)
* add AnyComposition
* cleanup of Any classes
* create searchparam config so people can use that module without using subscriptions
* create searchparam config so people can use that module without using subscriptions
* fix broken test
* added derivedFrom
* renamed daoRegistry.getResourceDaoIfExists to getResourceDaoOrNull
also added method to add a new dao to the registry and retrieve registered types
* TokenParam.equals
* add error check to searchable hashmap resource provider
* added support for R4
* add successor to measure
* delete conflict hook
start with failing test
* test passes.
hook is called.
* added delete conflict hook
all delete conflict tests pass
* added javadoc
* Performance test
* test bad interceptor case
* typo
* rename criteria matcher
* added support for multiple topics
* fix method name
* add effective period
* Temporarily excluding StressTest from build to try to get Travis under time limit
* change log
* review feedback
* review feedback
* review feedback
* reported issue with proposed fix that breaks tests
* Fix spelling
* Merge my changes into this
* Correctly check referential integrity on deletes
* Add one more test
* Reproduced issue in unit test and identified potential solution.
* Fixed using BOMInputStream.
* Added changelog.
* Added a missing word in changelog.
* Added a missing word in changelog. Take two.
* move expunge out
* move to prototype
* turns parameters into fields
* cleanup control flow
* moved transactions outside of loops
* add expungeeverything
* moved daos out
* add expungeThreadCount
* add expungeBatchSize
* added partition runner to run in separate threads
* all done. just need to consolidate test code.
* Moar tests
* consolidated pointcutlatch into hapi-fhir-jpaserver-model
* final cleanup
* update javadoc
* change log
* failing test
* added delete
also @Transactional
* remove unused parameter
* fix compile
* race condition
(cherry picked from commit e1940d2fb20838859a205f2b96c833b0ce9f05eb)
# Conflicts:
# hapi-fhir-jpaserver-base/src/test/java/ca/uhn/fhir/jpa/dao/expunge/PartitionRunnerTest.java
* ja feedback
* ja feedback
* fix bug in websocket subscription (It wasn't destroying the channel when there are no subscribers)
* add support for removing channel. Also synchronize removal (there was a race condition between sync and queue)
* keep deprecated method for backwards compatibility
* make websocket endpoint configurable
* make websocket context path configurable
* make websocket context path configurable
* trying mvn clean test instead of mvn clean install to see if the build goes faster
* that didn't work at all. reverting.
* change log
* Use a single IN clause for OR reference searches
* Add changelog
* One more attempt at getting the free port util to actually work... sigh
* One more tweak to free ports
* Bundle fix
* Search fixes
* Add some tests
* CHangelog
* Some cleanup of the query tracker
* FIx XML issue in changelog
* Test fixes
* SOme test fixes
* Address review comments
* Fix test breakage
* Avoid paging links when offset is artificially set very high
* Ongoing fixes
* Adding logging and clean up transaction processing
* Add changelog
* More work on queries
* Keep working on getting tests passing
* More test fixes
* More work on tests
* More test works
* One more test attempt
* Ongoing fixes
* One more change
* FIxes to search algorithm
* Add changelog
* Clean up for review
* Fixed NPE in token matcher when system is not null and value is null
* test opposite (null system not null value)
* added null protection to all matchers
* Address review comments
* Address broken test
* Trying to resolve DB ordering issues
* First attempt, probably has compile issues
* Fix qualified searches
* Another test fix
* More test fixes
* Add changelog
* Two more fixes
* Revert SQL logging
Squashed merge: Add elements exclude mode
* Start working on elements enhancement
* Work on elements projection
* Work on elements filter
* Feature is now working
* Just some cleanup
* Address compile issues
* Reorganizing packages and dependencies to support standalone subscription running within a CDR container where all hapi modules are on the classpath.
* EXPERIMENTAL: Moved Subscription registry out of interceptor and introduced ISubscriptionLoader that will be either a Database or FhirClient loader.
5 tests fail. Looks like we're getting too many matches--likely because there is now just one list of subscriptions instead of one list per interceptor.
* Created ActiveSubscription and moved cache bits into it
* Compiles. Next step is get app context to load.
* Application context loads. Now fix NullPointer.
* All subscription tests pass
* FIXME cleanup
* jpa-subscription tests
* fixed config so other module tests work
* MAJOR MILESTONE: All hapi-fhir tests pass.
updated READMEs in example projects
* Moved ExecutorQueue stuff out into its own class
* Organize Imports
* FIXME cleanup
* Null check -> Optional
* Add test and supporting code to validate SubscriptionConstants.EXT_SUBSCRIPTION_RESTHOOK_DELIVER_LATEST_VERSION behaviour
* Added SubscriptionCheckingSubscriber test that works without a database
* Moved a few beans to @ComponentScan
* Replaced use of beanFactory with concrete factory classes
* Switched test to use subscribablechannel
* Added SubscriptionLoaderFhirClientTest
* Undid changes that caused SearchParamProviderFhirClientTest to revert to the Database version. It's now calling the FhirClient version again. (oops)
* Confirm that our SubscriptionProviderFhirClient works with a live fhir client
* Organize imports
* Organize imports
* Register interceptors with DaoConfig instead of RestServer.
Also, Rename @VisibleForTesting methods with ForUnitTest
* Ready to go
* organize imports
* add processing queue
* Fixed interface implementation names
* Fix triggering service so it uses new subscriptionmatcherinterceptor
* fixed example
* Renamed "Database" classes to "Dao"
* Tightened up StoppableSubscriber API
* final code review
* processing -> matching naming change
* fix required by CDR
* oops
* Updated changes.xml
* Renamed subscriptioncheckingsubscriber to subscriptionmatchingsubscriber
* Renamed subscriptioncheckingsubscriber to subscriptionmatchingsubscriber
* CDR integration now works
* Changing subscribable channel abstraction layer in preparation for supporting more types of subscribable channels
* Add interface over both types of messages put on queues
* cosmetic change
* added subscription support for r4
* fixed again
* oops
* self code-review
* Reorganizing packages and dependencies to support standalone subscription running within a CDR container where all hapi modules are on the classpath.
Moved Subscription registry out of interceptor and introduced SubscriptionLoader
* Created ActiveSubscription and moved cache bits into it
* Moved ExecutorQueue stuff out into its own class
* Add test and supporting code to validate SubscriptionConstants.EXT_SUBSCRIPTION_RESTHOOK_DELIVER_LATEST_VERSION behaviour
* Added SubscriptionCheckingSubscriber
* Moved a few beans to @ComponentScan
* Replaced use of beanFactory with concrete factory classes
* Switched test to use subscribablechannel
* Added SubscriptionLoaderFhirClientTest
* Confirm that our SubscriptionProviderFhirClient works with a live fhir client
* Register interceptors with DaoConfig instead of RestServer.
Also, Rename @VisibleForTesting methods with ForUnitTest
* Fix triggering service so it uses new subscriptionmatcherinterceptor
* Renamed "Database" classes to "Dao"
* processing -> matching naming change
* Initial refactoring to move database matcher out into its own class
* MAJOR REFACTOR: Pulled indexing code out of BaseHapiFhirDao into a new class ResourceIndexedSearchParams
* Moved calculateHashes
* Replaced @Bean definitions in BaseConfig.java with @ComponentScan
Annotated bean classes with either @Service (if it's stateless) or @Component (if it's stateful). It doesn't really matter which annotation is used, but it's helpful to see at a glance whether a bean is stateful or stateless.
* Move services out of BaseHapiFhirDao
Moved services required by ResourceIndexedSearchParams out of BaseHapiFhirDao and into new classes called LogicalReferenceHelper, IdHelperService, MatchUrlService, and DaoProvider.
Converted SearchBuilder into Prototype Bean
Mark Spring components that depend on daos and entitymanagers with @Lazy so they aren't picked up by hapi-fhir-spring-boot-autoconfigure.
* Added SubscriptionMatcherInMemory
Moved static data out of BaseHapiFhirDao into ResourceMetaParams
Moved translateMatchUrl methods out of BaseHapiFhirDao into MatchUrlService bean
Simplified SubscriptionMatcherInMemory to not depend on entity or dao
Turned all subscribers into prototype beans
* Moved searchParam method out to mySearchParamProvider
Also removed dao and contest parameters from of myMatchUrlService methods
Moved code out of SearchBuilder into SearchParameterMap.clean() so it can be used by inMemoryMatcher
Introduced a new composite subscription matcher that tries to match in memory and if it finds a parameter in the criteria it doesn't support, it falls back to the database matcher.
* Added support for references
Also fixed a small bug in SearchParameterMap that was missing the ";" after "_has" when creating a normalized query from search params.
* Finished implementing all tests from FhirResourceDaoR4SearchNoFtTest
* Make in-memory matcher configurable, disabled by default
* Validate Subscription criteria when they're submitted
Send HTTP 422 UnprocessableEntityException if the criteria fail validation.
* fixed Sonar "Blocker" issues.
* Don't reload the resource before sending it out
Since we can always force a reload using restHookDetails.isDeliverLatestVersion
* Added tests to cover Custom Search param.
* Split ResourceIndexedSearchParam into separate state and service classes
* Cleaned up SearchBuilder.
Removed uses of myCallingDao as an injection mechanism.
Left // FIXME KHS cookie crumbs to clean up
* Reduced dependencies on BaseHapiFhirDao
Removed methods from IDao interface that were used for injection
* Updated change log