Skip to content

Commit 189cae5

Browse files
committed
set up file post
successful post of file
1 parent 9cf9a1f commit 189cae5

8 files changed

Lines changed: 84 additions & 26 deletions

File tree

src/integration-test/java/com/researchspace/dataverse/http/DatasetOperationsTest.java

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -59,7 +59,18 @@ public void testPostSampleDataset() throws IOException, InterruptedException, UR
5959
String toPost = FileUtils.readFileToString(exampleDatasetJson);
6060
Identifier datasetId = dataverseOps.createDataset(toPost, dataverseAlias);
6161
assertNotNull(datasetId.getId());
62+
}
6263

64+
@Test
65+
public void uploadFileToDataSetWithNativeApi() throws IOException, URISyntaxException {
66+
DatasetFacade facade = createFacade();
67+
Identifier datasetId = dataverseOps.createDataset(facade, dataverseAlias);
68+
assertNotNull(datasetId.getId());
69+
DatasetFileList datasetFileList = datasetOps.uploadNativeFile(datasetId, new byte[]{1, 2, 3, 4, 5}, "myFileName.dat");
70+
assertNotNull(datasetFileList);
71+
assertEquals(1, datasetFileList.getFiles().size());
72+
assertTrue(datasetFileList.getFiles().get(0).getCategories().contains("Data"));
73+
assertTrue(datasetFileList.getFiles().get(0).getDescription().equals(("My description.")));
6374
}
6475

6576
@Test

src/main/java/com/researchspace/dataverse/api/v1/DatasetOperations.java

Lines changed: 6 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -3,19 +3,12 @@
33
*/
44
package com.researchspace.dataverse.api.v1;
55

6+
import com.researchspace.dataverse.entities.*;
7+
import com.researchspace.dataverse.entities.facade.DatasetFacade;
8+
69
import java.io.File;
710
import java.io.InputStream;
811
import java.util.List;
9-
10-
import com.researchspace.dataverse.entities.DataSetMetadataBlock;
11-
import com.researchspace.dataverse.entities.Dataset;
12-
import com.researchspace.dataverse.entities.DatasetVersion;
13-
import com.researchspace.dataverse.entities.DataverseResponse;
14-
import com.researchspace.dataverse.entities.DvMessage;
15-
import com.researchspace.dataverse.entities.Identifier;
16-
import com.researchspace.dataverse.entities.PublishedDataset;
17-
import com.researchspace.dataverse.entities.Version;
18-
import com.researchspace.dataverse.entities.facade.DatasetFacade;
1912
/**
2013
<pre>
2114
Copyright 2016 ResearchSpace
@@ -63,7 +56,9 @@ public interface DatasetOperations {
6356
*/
6457
List<DatasetVersion> getDatasetVersions(Identifier dsIdentifier);
6558

66-
/**
59+
DatasetFileList uploadNativeFile(Identifier dsIdentifier, byte[] data, String fileName);
60+
61+
/**
6762
* Uploads a file to a dataset
6863
* @param doi The DOI of the Dataset
6964
* @param file The file to add to the DataSet

src/main/java/com/researchspace/dataverse/entities/DatasetFile.java

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,10 @@
11
package com.researchspace.dataverse.entities;
22

3+
import lombok.Data;
4+
35
import java.util.List;
46

7+
@Data
58
public class DatasetFile {
69
private String description;
710
private String label;

src/main/java/com/researchspace/dataverse/entities/DatasetFileDetails.java

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,7 @@
22

33
import lombok.Data;
44

5-
import java.time.LocalDate;
5+
import java.util.Date;
66

77
@Data
88
public class DatasetFileDetails {
@@ -17,5 +17,5 @@ public class DatasetFileDetails {
1717
private String rootDataFileId;
1818
private String md5;
1919
private Checksum checksum;
20-
private LocalDate creationDate;
20+
private Date creationDate;
2121
}

src/main/java/com/researchspace/dataverse/http/AbstractOpsImplV1.java

Lines changed: 11 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -3,21 +3,19 @@
33
*/
44
package com.researchspace.dataverse.http;
55

6-
import java.util.Arrays;
7-
6+
import com.researchspace.dataverse.api.v1.DataverseConfig;
7+
import com.researchspace.dataverse.entities.DataverseResponse;
8+
import com.researchspace.springrest.ext.LoggingResponseErrorHandler;
9+
import com.researchspace.springrest.ext.RestUtil;
10+
import lombok.extern.slf4j.Slf4j;
811
import org.apache.commons.lang.StringUtils;
912
import org.springframework.http.HttpHeaders;
1013
import org.springframework.http.MediaType;
1114
import org.springframework.http.ResponseEntity;
1215
import org.springframework.web.client.RestClientException;
1316
import org.springframework.web.client.RestTemplate;
1417

15-
import com.researchspace.dataverse.api.v1.DataverseConfig;
16-
import com.researchspace.dataverse.entities.DataverseResponse;
17-
import com.researchspace.springrest.ext.LoggingResponseErrorHandler;
18-
import com.researchspace.springrest.ext.RestUtil;
19-
20-
import lombok.extern.slf4j.Slf4j;
18+
import java.util.Arrays;
2119

2220
/** <pre>
2321
Copyright 2016 ResearchSpace
@@ -101,8 +99,12 @@ HttpHeaders addAPIKeyToHeader() {
10199
HttpHeaders headers = new HttpHeaders();
102100
headers.setContentType(MediaType.APPLICATION_JSON);
103101
headers.setAccept(Arrays.asList(MediaType.APPLICATION_JSON));
104-
headers.add(apiHeader, apiKey);
102+
addApiKey(headers);
105103
return headers;
106104
}
107105

106+
void addApiKey(HttpHeaders headers) {
107+
headers.add(apiHeader, apiKey);
108+
}
109+
108110
}

src/main/java/com/researchspace/dataverse/http/DataverseOperationsImplV1.java

Lines changed: 5 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -20,6 +20,7 @@
2020
import org.springframework.http.HttpHeaders;
2121
import org.springframework.http.HttpMethod;
2222
import org.springframework.http.ResponseEntity;
23+
import org.springframework.util.MultiValueMap;
2324
import org.springframework.web.client.RestClientException;
2425
import org.swordapp.client.ProtocolViolationException;
2526
import org.swordapp.client.SWORDClientException;
@@ -190,11 +191,12 @@ public List<DatasetVersion> getDatasetVersions (Identifier dsIdentifier) {
190191
return resp.getBody().getData();
191192
}
192193

193-
public DatasetFileList uploadNativeFile(Identifier dsIdentifier){
194-
String url = createV1Url("datasets", ":persistentId", "add") + "?persistentId=" + dsIdentifier.getId();
195-
HttpEntity<String> entity = createHttpEntity("{}");
194+
@Override
195+
public DatasetFileList uploadNativeFile(Identifier dsIdentifier, byte[] data, String fileName){
196+
String url = createV1Url("datasets", ":persistentId", "add") + "?persistentId=" + dsIdentifier.getPersistentId();
196197
ParameterizedTypeReference<DataverseResponse<DatasetFileList>> type =
197198
new ParameterizedTypeReference<DataverseResponse<DatasetFileList>>() {};
199+
HttpEntity<MultiValueMap<String, Object>> entity = new NativeFileUploader().uploadFile(apiKey, data, fileName);
198200
ResponseEntity<DataverseResponse<DatasetFileList>> resp = template.exchange(url, HttpMethod.POST, entity, type);
199201
log.debug("{}", resp.getBody());
200202
handleError(resp);
Lines changed: 45 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,45 @@
1+
package com.researchspace.dataverse.http;
2+
3+
import org.springframework.core.io.ByteArrayResource;
4+
import org.springframework.http.*;
5+
import org.springframework.util.LinkedMultiValueMap;
6+
import org.springframework.util.MultiValueMap;
7+
import org.springframework.web.client.RestTemplate;
8+
9+
public class NativeFileUploader {
10+
11+
public HttpEntity<MultiValueMap<String, Object>> uploadFile(String apiKey, byte [] data, String fName){
12+
RestTemplate restTemplate = new RestTemplate();
13+
MultiValueMap<String,Object> multipartRequest = new LinkedMultiValueMap<>();
14+
15+
HttpHeaders requestHeaders = new HttpHeaders();
16+
requestHeaders.add(AbstractOpsImplV1.apiHeader, apiKey);
17+
requestHeaders.setContentType(MediaType.MULTIPART_FORM_DATA);//Main request's headers
18+
19+
HttpHeaders requestHeadersAttachment = new HttpHeaders();
20+
//requestHeadersAttachment.setContentType(MediaType.APPLICATION_OCTET_STREAM);// extract mediatype from file extensionHttpEntity<ByteArrayResource> attachmentPart;
21+
ByteArrayResource fileAsResource = new ByteArrayResource(data){
22+
@Override
23+
public String getFilename(){
24+
return fName;
25+
}
26+
};
27+
HttpEntity attachmentPart = new HttpEntity<>(fileAsResource,requestHeadersAttachment);
28+
29+
multipartRequest.set("file",attachmentPart);
30+
31+
32+
HttpHeaders requestHeadersJSON = new HttpHeaders();
33+
34+
requestHeadersJSON.setContentType(MediaType.APPLICATION_JSON);
35+
String requestBody = "{\"description\":\"My description.\",\"directoryLabel\":\"data/subdir1\",\"categories\":[\"Data\"], \"restrict\":\"false\", \"tabIngest\":\"false\"}";
36+
HttpEntity<String> requestEntityJSON = new HttpEntity<>(requestBody, requestHeadersJSON);
37+
38+
multipartRequest.set("jsonData",requestEntityJSON);
39+
40+
HttpEntity<MultiValueMap<String,Object>> requestEntity = new HttpEntity<>(multipartRequest,requestHeaders);//final request
41+
42+
return requestEntity;
43+
44+
}
45+
}

src/test/java/com/researchspace/dataverse/http/DatasetFilePostMockServerTest.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -63,7 +63,7 @@ public void testNativeFilePost() throws MalformedURLException {
6363
tss.configure(cfg);
6464
Identifier id = new Identifier();
6565
id.setId(1234L);
66-
DatasetFileList resp = tss.uploadNativeFile(id);
66+
DatasetFileList resp = tss.uploadNativeFile(id, null, null);
6767
assertNotNull(resp.getFiles());
6868
assertEquals(1, resp.getFiles().size());
6969
}

0 commit comments

Comments
 (0)