Skip to content

Commit 9cf9a1f

Browse files
committed
deserialise response from file upload
1 parent f453c4c commit 9cf9a1f

4 files changed

Lines changed: 164 additions & 33 deletions

File tree

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

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,7 @@
33
*/
44
package com.researchspace.dataverse.entities;
55

6+
import com.fasterxml.jackson.databind.annotation.JsonDeserialize;
67
import lombok.Data;
78
/**
89
* <pre>
@@ -30,6 +31,7 @@ public class DataverseResponse <T> {
3031

3132
private String status;
3233
private T data;
34+
@JsonDeserialize(using = ObjectOrStringMessageDeserializer.class )
3335
private String message;
3436

3537
}
Lines changed: 28 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,28 @@
1+
package com.researchspace.dataverse.entities;
2+
3+
import com.fasterxml.jackson.core.JsonParser;
4+
import com.fasterxml.jackson.databind.DeserializationContext;
5+
import com.fasterxml.jackson.databind.JsonDeserializer;
6+
import com.fasterxml.jackson.databind.JsonNode;
7+
8+
import java.io.IOException;
9+
10+
/**
11+
* 'message' property can be a string or an object with property 'message'; this handles both
12+
*/
13+
public class ObjectOrStringMessageDeserializer extends JsonDeserializer<String> {
14+
@Override
15+
public String deserialize(JsonParser jp, DeserializationContext ctxt)
16+
throws IOException {
17+
18+
JsonNode node = jp.getCodec().readTree((jp));
19+
if (node.isTextual()){
20+
return node.toString();
21+
} else if (node.isObject()){
22+
return node.get("message").toString();
23+
} else{
24+
throw new IllegalArgumentException("expect a string or an object with a string property");
25+
}
26+
27+
}
28+
}

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

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

6-
import static org.apache.commons.lang3.StringUtils.isEmpty;
7-
import static org.apache.commons.lang3.Validate.isTrue;
8-
import static org.apache.commons.lang3.Validate.noNullElements;
9-
10-
import java.io.*;
11-
import java.net.URI;
12-
import java.net.URISyntaxException;
13-
import java.util.List;
14-
6+
import com.fasterxml.jackson.core.JsonProcessingException;
7+
import com.fasterxml.jackson.databind.ObjectMapper;
8+
import com.researchspace.dataverse.api.v1.DatasetOperations;
9+
import com.researchspace.dataverse.api.v1.DataverseOperations;
10+
import com.researchspace.dataverse.api.v1.InfoOperations;
11+
import com.researchspace.dataverse.api.v1.MetadataOperations;
12+
import com.researchspace.dataverse.entities.*;
13+
import com.researchspace.dataverse.entities.facade.DatasetBuilder;
14+
import com.researchspace.dataverse.entities.facade.DatasetFacade;
15+
import com.researchspace.dataverse.sword.FileUploader;
16+
import lombok.extern.slf4j.Slf4j;
1517
import org.apache.commons.lang3.StringUtils;
1618
import org.springframework.core.ParameterizedTypeReference;
1719
import org.springframework.http.HttpEntity;
@@ -23,28 +25,14 @@
2325
import org.swordapp.client.SWORDClientException;
2426
import org.swordapp.client.SWORDError;
2527

26-
import com.fasterxml.jackson.core.JsonProcessingException;
27-
import com.fasterxml.jackson.databind.ObjectMapper;
28-
import com.researchspace.dataverse.api.v1.DatasetOperations;
29-
import com.researchspace.dataverse.api.v1.DataverseOperations;
30-
import com.researchspace.dataverse.api.v1.InfoOperations;
31-
import com.researchspace.dataverse.api.v1.MetadataOperations;
32-
import com.researchspace.dataverse.entities.Dataset;
33-
import com.researchspace.dataverse.entities.DatasetVersion;
34-
import com.researchspace.dataverse.entities.DataverseGet;
35-
import com.researchspace.dataverse.entities.DataverseObject;
36-
import com.researchspace.dataverse.entities.DataversePost;
37-
import com.researchspace.dataverse.entities.DataverseResponse;
38-
import com.researchspace.dataverse.entities.DvMessage;
39-
import com.researchspace.dataverse.entities.Identifier;
40-
import com.researchspace.dataverse.entities.MetadataBlock;
41-
import com.researchspace.dataverse.entities.PublishedDataset;
42-
import com.researchspace.dataverse.entities.Version;
43-
import com.researchspace.dataverse.entities.facade.DatasetBuilder;
44-
import com.researchspace.dataverse.entities.facade.DatasetFacade;
45-
import com.researchspace.dataverse.sword.FileUploader;
28+
import java.io.*;
29+
import java.net.URI;
30+
import java.net.URISyntaxException;
31+
import java.util.List;
4632

47-
import lombok.extern.slf4j.Slf4j;
33+
import static org.apache.commons.lang3.StringUtils.isEmpty;
34+
import static org.apache.commons.lang3.Validate.isTrue;
35+
import static org.apache.commons.lang3.Validate.noNullElements;
4836
/** Copyright 2016 ResearchSpace
4937
5038
Licensed under the Apache License, Version 2.0 (the "License");
@@ -85,8 +73,6 @@ public DataverseGet getDataverseById(String dataverseAlias) {
8573
log.debug(resp.getBody().toString());
8674
return resp.getBody().getData();
8775
}
88-
89-
9076

9177
@Override
9278
public DataverseResponse<DvMessage> deleteDataverse(String dataverseAlias) {
@@ -194,7 +180,7 @@ public Dataset getDataset(Identifier dsIdentifier) {
194180
@Override
195181
public List<DatasetVersion> getDatasetVersions (Identifier dsIdentifier) {
196182
String url = createV1Url("datasets", dsIdentifier.getId() +"", "versions");
197-
183+
198184
HttpEntity<String> entity = createHttpEntity("");
199185
ParameterizedTypeReference<DataverseResponse<List<DatasetVersion>>> type = new ParameterizedTypeReference<DataverseResponse<List<DatasetVersion>>>() {
200186
};
@@ -203,6 +189,17 @@ public List<DatasetVersion> getDatasetVersions (Identifier dsIdentifier) {
203189
handleError(resp);
204190
return resp.getBody().getData();
205191
}
192+
193+
public DatasetFileList uploadNativeFile(Identifier dsIdentifier){
194+
String url = createV1Url("datasets", ":persistentId", "add") + "?persistentId=" + dsIdentifier.getId();
195+
HttpEntity<String> entity = createHttpEntity("{}");
196+
ParameterizedTypeReference<DataverseResponse<DatasetFileList>> type =
197+
new ParameterizedTypeReference<DataverseResponse<DatasetFileList>>() {};
198+
ResponseEntity<DataverseResponse<DatasetFileList>> resp = template.exchange(url, HttpMethod.POST, entity, type);
199+
log.debug("{}", resp.getBody());
200+
handleError(resp);
201+
return resp.getBody().getData();
202+
}
206203

207204
/* (non-Javadoc)
208205
* @see com.researchspace.dataverse.http.DataverseAPI#uploadFile(java.lang.String, java.io.File)
Lines changed: 104 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,104 @@
1+
/*
2+
*
3+
*/
4+
package com.researchspace.dataverse.http;
5+
6+
import com.researchspace.dataverse.api.v1.DataverseConfig;
7+
import com.researchspace.dataverse.entities.DatasetFileList;
8+
import com.researchspace.dataverse.entities.Identifier;
9+
import com.researchspace.dataverse.search.entities.SearchConfig;
10+
import com.researchspace.dataverse.testutils.TestFileUtils;
11+
import org.junit.After;
12+
import org.junit.Before;
13+
import org.junit.Test;
14+
import org.springframework.http.HttpMethod;
15+
import org.springframework.test.web.client.ExpectedCount;
16+
import org.springframework.test.web.client.MockRestServiceServer;
17+
import org.springframework.test.web.client.match.MockRestRequestMatchers;
18+
import org.springframework.test.web.client.response.MockRestResponseCreators;
19+
import org.springframework.web.client.RestTemplate;
20+
21+
import java.net.MalformedURLException;
22+
import java.net.URL;
23+
24+
import static org.junit.Assert.assertEquals;
25+
import static org.junit.Assert.assertNotNull;
26+
import static org.springframework.http.MediaType.APPLICATION_JSON;
27+
import static org.springframework.test.web.client.match.MockRestRequestMatchers.method;
28+
29+
/** <pre>
30+
Copyright 2016 ResearchSpace
31+
32+
Licensed under the Apache License, Version 2.0 (the "License");
33+
you may not use this file except in compliance with the License.
34+
You may obtain a copy of the License at
35+
36+
http://www.apache.org/licenses/LICENSE-2.0
37+
38+
Unless required by applicable law or agreed to in writing, software
39+
distributed under the License is distributed on an "AS IS" BASIS,
40+
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
41+
See the License for the specific language governing permissions and
42+
limitations under the License.
43+
</pre>
44+
*/
45+
public class DatasetFilePostMockServerTest {
46+
47+
@Before
48+
public void setUp() throws Exception {
49+
}
50+
51+
@After
52+
public void tearDown() throws Exception {
53+
}
54+
55+
@Test
56+
public void testNativeFilePost() throws MalformedURLException {
57+
RestTemplate template = new RestTemplate();
58+
DataverseOperationsImplV1 tss = setupDataverseOps(template);
59+
setUpServerResponse(template, "http://anyDataverse.com/api/v1/datasets/:persistentId/add?persistentId=1234",
60+
getDataSetFileUploadResults() );
61+
62+
DataverseConfig cfg = new DataverseConfig(new URL("http://anyDataverse.com"), "any", "alias");
63+
tss.configure(cfg);
64+
Identifier id = new Identifier();
65+
id.setId(1234L);
66+
DatasetFileList resp = tss.uploadNativeFile(id);
67+
assertNotNull(resp.getFiles());
68+
assertEquals(1, resp.getFiles().size());
69+
}
70+
71+
private void setUpServerResponse(RestTemplate template, String url, String response) {
72+
MockRestServiceServer server = MockRestServiceServer.bindTo(template).build();
73+
server.expect(ExpectedCount.once(), MockRestRequestMatchers.requestTo(url))
74+
.andExpect(method(HttpMethod.POST))
75+
.andRespond(MockRestResponseCreators.withSuccess(response,
76+
APPLICATION_JSON));
77+
}
78+
79+
DataverseOperationsImplV1 setUpDataset (SearchConfig srchCfg, String url, GetJson expectedJsonGetter) throws MalformedURLException {
80+
RestTemplate template = new RestTemplate();
81+
DataverseOperationsImplV1 tss = setupDataverseOps(template);
82+
setUpServerResponse(template, url, expectedJsonGetter.getJson() );
83+
DataverseConfig cfg = new DataverseConfig(new URL("http://anyDataverse.com"), "any", "alias");
84+
tss.configure(cfg);
85+
return tss;
86+
}
87+
88+
private DataverseOperationsImplV1 setupDataverseOps(RestTemplate template) {
89+
DataverseOperationsImplV1 tss = new DataverseOperationsImplV1();
90+
tss.setTemplate(template);
91+
return tss;
92+
}
93+
94+
@FunctionalInterface
95+
static interface GetJson {
96+
String getJson ();
97+
}
98+
99+
private String getDataSetFileUploadResults() {
100+
return TestFileUtils.getJsonFromFile("nativeFileUploadResponse.json");
101+
}
102+
103+
104+
}

0 commit comments

Comments
 (0)