class AbstractBundleResourceProvider extends AbstractUntypedResourceProvider {

    @Nonnull
    protected T processInternal( @Nonnull RequestDetails requestDetails, T bundle )
    {
        validateUseCase( requestDetails );

        if ( bundle == null )
        {
            throw new InvalidRequestException( "Bundle has not been specified." );
        }

        final FhirBatchRequest batchRequest = createBatchRequest( bundle );
        process( batchRequest );

        return createBatchResponse( batchRequest );
    }

    public  AbstractBundleResourceProvider(
        @Nonnull FhirClientResourceRepository fhirClientResourceRepository,
        @Nonnull FhirClientSystemRepository fhirClientSystemRepository,
        @Nonnull FhirRepository fhirRepository, @Nonnull DhisRepository dhisRepository,
        @Nonnull RequestCacheService requestCacheService );

}