2 * Copyright (C) The Arvados Authors. All rights reserved.
4 * SPDX-License-Identifier: AGPL-3.0 OR Apache-2.0
8 package org.arvados.client.api.client;
10 import okhttp3.HttpUrl;
11 import okhttp3.Request;
12 import okhttp3.RequestBody;
13 import okhttp3.Response;
14 import okhttp3.ResponseBody;
16 import org.arvados.client.config.ConfigProvider;
19 import java.io.IOException;
20 import java.io.InputStream;
22 public class KeepWebApiClient extends BaseApiClient {
24 public KeepWebApiClient(ConfigProvider config) {
28 public byte[] download(String collectionUuid, String filePathName) {
29 Request request = getRequestBuilder()
30 .url(getUrlBuilder(collectionUuid,filePathName).build())
34 return newFileCall(request);
37 public InputStream get(String collectionUuid, String filePathName, long start, Long end) throws IOException {
38 Request.Builder builder = this.getRequestBuilder();
39 String rangeValue = "bytes=" + start + "-";
43 builder.addHeader("Range", rangeValue);
44 Request request = builder.url(this.getUrlBuilder(collectionUuid, filePathName).build()).get().build();
45 Response response = client.newCall(request).execute();
46 if (!response.isSuccessful()) {
48 throw new IOException("Failed to download file: " + response);
50 ResponseBody body = response.body();
53 throw new IOException("Response body is null for request: " + request);
55 return body.byteStream();
58 public String delete(String collectionUuid, String filePathName) {
59 Request request = getRequestBuilder()
60 .url(getUrlBuilder(collectionUuid, filePathName).build())
64 return newCall(request);
67 public String upload(String collectionUuid, File file, ProgressListener progressListener) {
68 RequestBody requestBody = new CountingFileRequestBody(file, progressListener);
70 Request request = getRequestBuilder()
71 .url(getUrlBuilder(collectionUuid, file.getName()).build())
74 return newCall(request);
77 public String upload(String collectionUuid, InputStream inputStream, String fileName, ProgressListener progressListener) {
78 RequestBody requestBody = new CountingStreamRequestBody(inputStream, progressListener);
80 Request request = getRequestBuilder()
81 .url(getUrlBuilder(collectionUuid, fileName).build())
84 return newCall(request);
87 private HttpUrl.Builder getUrlBuilder(String collectionUuid, String filePathName) {
88 return new HttpUrl.Builder()
89 .scheme(config.getApiProtocol())
90 .host(config.getKeepWebHost())
91 .port(config.getKeepWebPort())
92 .addPathSegment("c=" + collectionUuid)
93 .addPathSegment(filePathName);