21700: Install Bundler system-wide in Rails postinst
[arvados.git] / sdk / java-v2 / src / main / java / org / arvados / client / api / client / KeepWebApiClient.java
1 /*
2  * Copyright (C) The Arvados Authors. All rights reserved.
3  *
4  * SPDX-License-Identifier: AGPL-3.0 OR Apache-2.0
5  *
6  */
7
8 package org.arvados.client.api.client;
9
10 import okhttp3.HttpUrl;
11 import okhttp3.Request;
12 import okhttp3.RequestBody;
13 import okhttp3.Response;
14 import okhttp3.ResponseBody;
15
16 import org.arvados.client.config.ConfigProvider;
17
18 import java.io.File;
19 import java.io.IOException;
20 import java.io.InputStream;
21
22 public class KeepWebApiClient extends BaseApiClient {
23
24     public KeepWebApiClient(ConfigProvider config) {
25         super(config);
26     }
27
28     public byte[] download(String collectionUuid, String filePathName) {
29         Request request = getRequestBuilder()
30                 .url(getUrlBuilder(collectionUuid,filePathName).build())
31                 .get()
32                 .build();
33
34         return newFileCall(request);
35     }
36
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 + "-";
40         if (end != null) {
41             rangeValue += end;
42         }
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()) {
47             response.close();
48             throw new IOException("Failed to download file: " + response);
49         }
50         ResponseBody body = response.body();
51         if (body == null) {
52             response.close();
53             throw new IOException("Response body is null for request: " + request);
54         }
55         return body.byteStream();
56     }
57
58     public String delete(String collectionUuid, String filePathName) {
59         Request request = getRequestBuilder()
60                 .url(getUrlBuilder(collectionUuid, filePathName).build())
61                 .delete()
62                 .build();
63
64         return newCall(request);
65     }
66
67     public String upload(String collectionUuid, File file, ProgressListener progressListener) {
68         RequestBody requestBody = new CountingFileRequestBody(file, progressListener);
69
70         Request request = getRequestBuilder()
71                 .url(getUrlBuilder(collectionUuid, file.getName()).build())
72                 .put(requestBody)
73                 .build();
74         return newCall(request);
75     }
76
77     public String upload(String collectionUuid, InputStream inputStream, String fileName, ProgressListener progressListener) {
78         RequestBody requestBody = new CountingStreamRequestBody(inputStream, progressListener);
79
80         Request request = getRequestBuilder()
81                 .url(getUrlBuilder(collectionUuid, fileName).build())
82                 .put(requestBody)
83                 .build();
84         return newCall(request);
85     }
86
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);
94     }
95 }