private void finishMultipartUploadImpl()

in teamcity-s3-sdk/src/main/java/jetbrains/buildServer/artifacts/s3/publish/presigned/upload/TeamCityServerPresignedUrlsProviderClient.java [213:248]


  private void finishMultipartUploadImpl(@NotNull String objectKey, @Nullable List<String> etags, @NotNull String uploadId, boolean isSuccessful)
    throws IOException, URISyntaxException, ExecutionException, InterruptedException {
    final HTTPRequestBuilder post = postTemplate();
    final List<Pair<String, String>> parameters = getParameters(objectKey, etags, uploadId, isSuccessful);
    post
      .withData(new EntityProducer() {
        @Override
        public HttpEntity entity4() {
          try {
            final MultipartEntity multipartEntity = new MultipartEntity(HttpMultipartMode.BROWSER_COMPATIBLE);
            for (Pair<String, String> entry : parameters) {
              multipartEntity.addPart(entry.getFirst(), new StringBody(entry.getSecond()));
            }
            return multipartEntity;
          } catch (UnsupportedEncodingException e) {
            throw new RuntimeException(e);
          }
        }

        @Override
        public RequestEntity entity3() {
          Part[] parts = parameters.stream()
                                   .map(entry -> new StringPart(entry.getFirst(), entry.getSecond()))
                                   .collect(Collectors.toList()).toArray(new Part[0]);
          return new MultipartRequestEntity(parts, new HttpMethodParams());
        }
      });

    try {
      HttpClientUtil.executeAndReleaseConnection(post, myErrorHandler).get();
      LOGGER.debug(() -> "Multipart upload " + uploadId + " signaling " + (isSuccessful ? "success" : "failure") + " finished");
    } catch (Exception e) {
      LOGGER.warnAndDebugDetails("Multipart upload " + uploadId + " signaling " + (isSuccessful ? "success" : "failure") + " failed: " + e.getMessage(), e);
      throw e;
    }
  }