class FhirRepositoryImpl implements FhirRepository {

    @Nonnull
    protected FhirRequestMethod getRequestMethod( @Nonnull FhirRepositoryOperation fhirRepositoryOperation )
    {
        switch ( fhirRepositoryOperation.getOperationType() )
        {
            case CREATE:
                return FhirRequestMethod.CREATE;
            case UPDATE:
                return FhirRequestMethod.UPDATE;
            case CREATE_OR_UPDATE:
                return FhirRequestMethod.CREATE_OR_UPDATE;
            default:
                throw new AssertionError( "Unhandled operation type: " + fhirRepositoryOperation.getOperationType() );
        }
    }

    public  FhirRepositoryImpl( @Nonnull AuthorizationContext authorizationContext,
        @Nonnull LockManager lockManager, @Nonnull RequestCacheService requestCacheService,
        @Nonnull FhirClientSystemRepository fhirClientSystemRepository,
        @Nonnull FhirClientResourceRepository fhirClientResourceRepository,
        @Nonnull SubscriptionFhirResourceRepository subscriptionFhirResourceRepository,
        @Nonnull StoredFhirResourceService storedItemService,
        @Nonnull FhirResourceRepository fhirResourceRepository,
        @Nonnull FhirToDhisTransformerService fhirToDhisTransformerService,
        @Nonnull DhisResourceRepository dhisResourceRepository,
        @Nonnull FhirDhisAssignmentRepository fhirDhisAssignmentRepository );

}