Class BulkBuilder

java.lang.Object
de.captaingoldfish.scim.sdk.client.builder.RequestBuilder<BulkResponse>
de.captaingoldfish.scim.sdk.client.builder.BulkBuilder

public class BulkBuilder extends RequestBuilder<BulkResponse>
author Pascal Knueppel
created at: 08.03.2020

  • Constructor Details

    • BulkBuilder

      public BulkBuilder(String baseUrl, ScimHttpClient scimHttpClient, boolean isFullUrl, Supplier<ServiceProvider> serviceProviderSupplier)
      if the resource should be retrieved by using the fully qualified url
      Parameters:
      baseUrl - the fully qualified url to the required resource
      scimHttpClient - the http client instance
      isFullUrl - if the given base url is the fully qualified url or not
      serviceProviderSupplier - contains the configuration of the service provider that is used to determine the max-operations of a bulk request and to help to split the operations into several requests if necessary.
      This object might be null
  • Method Details

    • setExpectedResponseHeaders

      public BulkBuilder setExpectedResponseHeaders(Map<String,String> requiredResponseHeaders)
      Set this if the SCIM provider is not behaving SCIM compliant by manipulating the expected headers that will be returned from the server
      • null: The headers are checked as normally for the content-type "application/scim+json"
      • empty map: The check of response headers is disabled
      • filled map: The check of the response headers will be done with the entries of this map
      Overrides:
      setExpectedResponseHeaders in class RequestBuilder<BulkResponse>
    • getOperationByBulkId

      public BulkRequestOperation getOperationByBulkId(String bulkId)
      retrieves a request operation from the builder by its bulkId. Modifying the returned operation will also modify the request
      Parameters:
      bulkId - the bulkId of the operation that should be returned
      Returns:
      the request operation with the matching bulkId
    • isExpectedResponseCode

      protected boolean isExpectedResponseCode(int httpStatus)
      tells this abstract class if the http status from the server is the expected success status
      Specified by:
      isExpectedResponseCode in class RequestBuilder<BulkResponse>
      Parameters:
      httpStatus - the http status from the server
      Returns:
      true if the response status shows success
    • getHttpUriRequest

      protected org.apache.http.client.methods.HttpUriRequest getHttpUriRequest()
      builds the request for the server
      Specified by:
      getHttpUriRequest in class RequestBuilder<BulkResponse>
    • getHttpUriRequest

      protected org.apache.http.client.methods.HttpUriRequest getHttpUriRequest(com.fasterxml.jackson.databind.JsonNode requestData)
    • getResource

      public String getResource()
      overrides the default method from the superclass to have easier control of the resource that will be put into the request body
      Overrides:
      getResource in class RequestBuilder<BulkResponse>
    • isResponseParseable

      protected Function<HttpResponse,Boolean> isResponseParseable()
      checks if the response contains a schema-uri that matches the value of SchemaUris.BULK_RESPONSE_URI
      Overrides:
      isResponseParseable in class RequestBuilder<BulkResponse>
    • failOnErrors

      public BulkBuilder failOnErrors(Integer failOnErrors)
      sets how many errors are allowed on the server side before the request should be rolled back
      Parameters:
      failOnErrors - the number of errors that are accepted on the server side
    • bulkRequestOperation

      public BulkBuilder.BulkRequestOperationCreator bulkRequestOperation(String path)
      sets the path to the resource endpoint e.g. "/Users" or "/Groups"
    • bulkRequestOperation

      public BulkBuilder.BulkRequestOperationCreator bulkRequestOperation(String path, String id)
      sets the path to the resource endpoint e.g. "/Users" or "/Groups"
      Parameters:
      path - "/Users", "/Groups" or any other registered resource path
      id - the id of an existing resource in case of patch, update or delete
    • addOperations

      public BulkBuilder addOperations(List<BulkRequestOperation> requestOperations)
      adds the given list of operations
    • sendRequest

      public ServerResponse<BulkResponse> sendRequest(boolean runSplittedRequestsParallel)
      send the request to the server
      Parameters:
      runSplittedRequestsParallel - if the requests should be run parallel. This is only recommended if no relations between the different bulk-request-operations are set. So if no bulkId-references are set. Otherwise, the relation between these requests might break
      Returns:
      the response from the server
    • sendRequest

      public ServerResponse<BulkResponse> sendRequest(Consumer<ServerResponse<BulkResponse>> responseHandler)
      send the request to the server
      Parameters:
      responseHandler - a helper method to will allow the client to react to each individual response. This makes only sense if the feature ScimClientConfig.isEnableAutomaticBulkRequestSplitting() is enabled
      Returns:
      the response from the server
    • sendRequest

      public ServerResponse<BulkResponse> sendRequest(Consumer<ServerResponse<BulkResponse>> responseHandler, boolean runSplittedRequestsParallel)
      send the request to the server
      Parameters:
      responseHandler - a helper method to will allow the client to react to each individual response. This makes only sense if the feature ScimClientConfig.isEnableAutomaticBulkRequestSplitting() is enabled
      runSplittedRequestsParallel - if the requests should be run parallel. This is only recommended if no relations between the different bulk-request-operations are set. So if no bulkId-references are set. Otherwise, the relation between these requests might break
      Returns:
      the response from the server
    • sendRequest

      public ServerResponse<BulkResponse> sendRequest(Map<String,String> headers, Consumer<ServerResponse<BulkResponse>> responseHandler)
      send the request to the server
      Parameters:
      headers - the http headers to send additionally to the default headery within the request
      responseHandler - a helper method to will allow the client to react to each individual response. This makes only sense if the feature ScimClientConfig.isEnableAutomaticBulkRequestSplitting() is enabled
      Returns:
      the response from the server
    • sendRequest

      public ServerResponse<BulkResponse> sendRequest(Map<String,String> headers, Consumer<ServerResponse<BulkResponse>> responseHandler, boolean runSplittedRequestsParallel)
      send the request to the server
      Parameters:
      headers - the http headers to send additionally to the default headery within the request
      responseHandler - a helper method to will allow the client to react to each individual response. This makes only sense if the feature ScimClientConfig.isEnableAutomaticBulkRequestSplitting() is enabled
      runSplittedRequestsParallel - if the requests should be run parallel. This is only recommended if no relations between the different bulk-request-operations are set. So if no bulkId-references are set. Otherwise, the relation between these requests might break
      Returns:
      the response from the server
    • sendRequestWithMultiHeaders

      public ServerResponse<BulkResponse> sendRequestWithMultiHeaders(Map<String,String[]> httpHeaders)
      sends the defined request to the service provider
      Overrides:
      sendRequestWithMultiHeaders in class RequestBuilder<BulkResponse>
      Parameters:
      httpHeaders - allows the user to add additional http headers to the request
      Returns:
      the response from the given request. A response must not be returned in any case from the service provider so the returned type is still optional
    • sendRequestWithMultiHeaders

      public ServerResponse<BulkResponse> sendRequestWithMultiHeaders(Map<String,String[]> httpHeaders, boolean runSplittedRequestsParallel)
      Parameters:
      runSplittedRequestsParallel - if the requests should be run parallel. This is only recommended if no relations between the different bulk-request-operations are set. So if no bulkId-references are set. Otherwise, the relation between these requests might break
    • sendRequestWithMultiHeaders

      public ServerResponse<BulkResponse> sendRequestWithMultiHeaders(Map<String,String[]> httpHeaders, Consumer<ServerResponse<BulkResponse>> responseHandler)
      Parameters:
      responseHandler - a helper method to will allow the client to react to each individual response. This makes only sense if the feature ScimClientConfig.isEnableAutomaticBulkRequestSplitting() is enabled
    • sendRequestWithMultiHeaders

      public ServerResponse<BulkResponse> sendRequestWithMultiHeaders(Map<String,String[]> httpHeaders, Consumer<ServerResponse<BulkResponse>> responseHandler, boolean runSplittedRequestsParallel)
      Parameters:
      responseHandler - a helper method to will allow the client to react to each individual response. This makes only sense if the feature ScimClientConfig.isEnableAutomaticBulkRequestSplitting() is enabled
      runSplittedRequestsParallel - if the requests should be run parallel. This is only recommended if no relations between the different bulk-request-operations are set. So if no bulkId-references are set. Otherwise, the relation between these requests might break
    • getIdFromLocationAttribute

      protected String getIdFromLocationAttribute(BulkResponseOperation bulkResponseOperation)
      extracted into its own method for unit tests.
    • getBulkRequestOperationList

      public List<BulkRequestOperation> getBulkRequestOperationList()
      the bulk request operations that should be executed
    • setServiceProviderSupplier

      public void setServiceProviderSupplier(Supplier<ServiceProvider> serviceProviderSupplier)
      contains the configuration of the service provider that is used to determine the max-operations of a bulk request and to help to split the operations into several requests if necessary.
      This object might be null