Skip to content

Commit 37ca46d

Browse files
committed
Fix #101, updated ror provider to v2, adapted tests
1 parent 2c8dcb5 commit 37ca46d

6 files changed

Lines changed: 93 additions & 60 deletions

File tree

src/main/java/edu/kit/datamanager/ro_crate/RoCrate.java

Lines changed: 14 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -10,9 +10,13 @@
1010
import edu.kit.datamanager.ro_crate.entities.AbstractEntity;
1111
import edu.kit.datamanager.ro_crate.entities.contextual.ContextualEntity;
1212
import edu.kit.datamanager.ro_crate.entities.contextual.JsonDescriptor;
13+
import edu.kit.datamanager.ro_crate.entities.contextual.OrganizationEntity;
1314
import edu.kit.datamanager.ro_crate.entities.data.DataEntity;
15+
import edu.kit.datamanager.ro_crate.entities.data.DataEntity.DataEntityBuilder;
16+
import edu.kit.datamanager.ro_crate.entities.data.FileEntity;
1417
import edu.kit.datamanager.ro_crate.entities.data.RootDataEntity;
1518
import edu.kit.datamanager.ro_crate.externalproviders.dataentities.ImportFromDataCite;
19+
import edu.kit.datamanager.ro_crate.externalproviders.organizationprovider.RorProvider;
1620
import edu.kit.datamanager.ro_crate.objectmapper.MyObjectMapper;
1721
import edu.kit.datamanager.ro_crate.payload.CratePayload;
1822
import edu.kit.datamanager.ro_crate.payload.RoCratePayload;
@@ -22,9 +26,12 @@
2226
import edu.kit.datamanager.ro_crate.special.JsonUtilFunctions;
2327
import edu.kit.datamanager.ro_crate.validation.JsonSchemaValidation;
2428
import edu.kit.datamanager.ro_crate.validation.Validator;
29+
import edu.kit.datamanager.ro_crate.writer.FolderWriter;
30+
import edu.kit.datamanager.ro_crate.writer.RoCrateWriter;
2531

2632
import java.io.File;
2733
import java.net.URI;
34+
import java.nio.file.Paths;
2835
import java.util.*;
2936
import java.util.stream.Collectors;
3037
import java.util.stream.StreamSupport;
@@ -58,22 +65,27 @@ public void setRoCratePreview(CratePreview preview) {
5865
this.roCratePreview = preview;
5966
}
6067

68+
@Override
6169
public void setMetadataContext(CrateMetadataContext metadataContext) {
6270
this.metadataContext = metadataContext;
6371
}
6472

73+
@Override
6574
public ContextualEntity getJsonDescriptor() {
6675
return jsonDescriptor;
6776
}
6877

78+
@Override
6979
public void setJsonDescriptor(ContextualEntity jsonDescriptor) {
7080
this.jsonDescriptor = jsonDescriptor;
7181
}
72-
82+
83+
@Override
7384
public RootDataEntity getRootDataEntity() {
7485
return rootDataEntity;
7586
}
76-
87+
88+
@Override
7789
public void setRootDataEntity(RootDataEntity rootDataEntity) {
7890
this.rootDataEntity = rootDataEntity;
7991
}

src/main/java/edu/kit/datamanager/ro_crate/entities/data/DataEntity.java

Lines changed: 0 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -8,9 +8,7 @@
88
import edu.kit.datamanager.ro_crate.util.ZipUtil;
99

1010
import java.io.File;
11-
import java.io.FileInputStream;
1211
import java.io.IOException;
13-
import java.io.InputStream;
1412
import java.net.URI;
1513
import java.nio.file.Path;
1614
import java.util.ArrayList;

src/main/java/edu/kit/datamanager/ro_crate/entities/validation/JsonSchemaValidation.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -68,7 +68,7 @@ public boolean validateEntity(JsonNode entity) {
6868
@Override
6969
public boolean validateFieldOfEntity(JsonNode field) {
7070
Set<ValidationMessage> errors = this.entityFieldSchema.validate(field);
71-
if (errors.size() != 0) {
71+
if (!errors.isEmpty()) {
7272
ObjectMapper objectMapper = MyObjectMapper.getMapper();
7373
System.err.println("The property: ");
7474
try {
Lines changed: 56 additions & 35 deletions
Original file line numberDiff line numberDiff line change
@@ -1,11 +1,14 @@
11
package edu.kit.datamanager.ro_crate.externalproviders.organizationprovider;
22

3+
import com.fasterxml.jackson.databind.JsonNode;
4+
import com.fasterxml.jackson.databind.ObjectMapper;
35
import com.fasterxml.jackson.databind.node.ObjectNode;
46

57
import edu.kit.datamanager.ro_crate.entities.contextual.OrganizationEntity;
68
import edu.kit.datamanager.ro_crate.objectmapper.MyObjectMapper;
79

810
import java.io.IOException;
11+
import java.util.ArrayList;
912

1013
import org.apache.http.HttpStatus;
1114
import org.apache.http.client.methods.CloseableHttpResponse;
@@ -20,45 +23,63 @@
2023
*/
2124
public class RorProvider {
2225

23-
private static Logger logger = LoggerFactory.getLogger(RorProvider.class);
26+
private static Logger logger = LoggerFactory.getLogger(RorProvider.class);
2427

25-
private RorProvider() {}
28+
private RorProvider() {
29+
}
30+
31+
/**
32+
* The method that parses a ror entry to a crate entity.
33+
*
34+
* @param url the url of the ror entry.
35+
* @return the created Organization entity.
36+
*/
37+
public static OrganizationEntity getOrganization(String url) {
38+
if (!url.startsWith("https://ror.org/")) {
39+
throw new IllegalArgumentException("Should provide ror url");
40+
}
41+
String newUrl = "https://api.ror.org/v2/organizations/" + url.replaceAll("https://ror.org/", "");
42+
HttpGet request = new HttpGet(newUrl);
2643

27-
/**
28-
* The method that parses a ror entry to a crate entity.
29-
*
30-
* @param url the url of the ror entry.
31-
* @return the created Organization entity.
32-
*/
33-
public static OrganizationEntity getOrganization(String url) {
34-
if (!url.startsWith("https://ror.org/")) {
35-
throw new IllegalArgumentException("Should provide ror url");
44+
try (
45+
CloseableHttpClient httpClient = HttpClients.createDefault(); CloseableHttpResponse response = httpClient.execute(request);) {
46+
boolean isError = response.getStatusLine().getStatusCode() != HttpStatus.SC_OK;
47+
if (isError) {
48+
String errorMessage = String.format("Identifier not found: %s", response.getStatusLine().toString());
49+
logger.error(errorMessage);
50+
return null;
51+
}
52+
ObjectNode jsonNode = MyObjectMapper.getMapper().readValue(response.getEntity().getContent(),
53+
ObjectNode.class);
54+
55+
return new OrganizationEntity.OrganizationEntityBuilder()
56+
.setId(jsonNode.get("id").asText())
57+
.addProperty("name", getOrganizationNameV2(jsonNode.get("names")))
58+
.addProperty("email", jsonNode.get("email_address"))
59+
.addProperty("url", jsonNode.get("id").asText())
60+
.build();
61+
} catch (IOException e) {
62+
String errorMessage = String.format("IO error: %s", e.getMessage());
63+
logger.error(errorMessage);
64+
}
65+
return null;
3666
}
37-
String newUrl = "https://api.ror.org/organizations/" + url.replaceAll("https://ror.org/", "");
38-
HttpGet request = new HttpGet(newUrl);
3967

40-
try (
41-
CloseableHttpClient httpClient = HttpClients.createDefault();
42-
CloseableHttpResponse response = httpClient.execute(request);
43-
) {
44-
boolean isError = response.getStatusLine().getStatusCode() != HttpStatus.SC_OK;
45-
if (isError) {
46-
String errorMessage = String.format("Identifier not found: %s", response.getStatusLine().toString());
47-
logger.error(errorMessage);
48-
return null;
68+
private static String getOrganizationNameV2(JsonNode node) {
69+
if (node.isArray()) {
70+
for (JsonNode n : node) {
71+
if (n.has("types") && n.get("types").isArray()) {
72+
ArrayList l = new ObjectMapper().convertValue(n.get("types"), ArrayList.class);
73+
if (l.contains("ror_display")) {
74+
return n.get("value").asText();
75+
}
76+
}
77+
}
78+
//fallback
79+
return node.get(0).get("value").asText();
80+
} else {
81+
return node.asText();
4982
}
50-
ObjectNode jsonNode = MyObjectMapper.getMapper().readValue(response.getEntity().getContent(),
51-
ObjectNode.class);
52-
return new OrganizationEntity.OrganizationEntityBuilder()
53-
.setId(jsonNode.get("id").asText())
54-
.addProperty("name", jsonNode.get("name"))
55-
.addProperty("email", jsonNode.get("email_address"))
56-
.addProperty("url", jsonNode.get("links"))
57-
.build();
58-
} catch (IOException e) {
59-
String errorMessage = String.format("IO error: %s", e.getMessage());
60-
logger.error(errorMessage);
6183
}
62-
return null;
63-
}
84+
6485
}

src/main/resources/json_schemas/entity_field_structure_schema.json

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -12,7 +12,6 @@
1212
{"type": "boolean"},
1313
{"type": "null"}
1414
]
15-
1615
}
1716
},
1817
{

src/test/java/edu/kit/datamanager/ro_crate/externalproviders/RorProviderTest.java

Lines changed: 22 additions & 19 deletions
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,7 @@
55
import edu.kit.datamanager.ro_crate.HelpFunctions;
66
import edu.kit.datamanager.ro_crate.entities.contextual.OrganizationEntity;
77
import edu.kit.datamanager.ro_crate.externalproviders.organizationprovider.RorProvider;
8+
import org.junit.jupiter.api.Assertions;
89

910
import org.junit.jupiter.api.Test;
1011

@@ -18,23 +19,25 @@
1819
*/
1920
public class RorProviderTest {
2021

21-
@Test
22-
void testExternalRorProvider() throws IOException {
23-
OrganizationEntity organizationEntity = RorProvider.getOrganization("https://ror.org/04t3en479");
24-
assertNotNull(organizationEntity);
25-
HelpFunctions.compareEntityWithFile(organizationEntity, "/json/entities/contextual/rorkit.json");
26-
}
27-
28-
@Test
29-
void testInvalidRorUrl() {
30-
assertThrows(IllegalArgumentException.class, () -> {
31-
RorProvider.getOrganization("https://notror.org/04t3en479");
32-
});
33-
}
34-
35-
@Test
36-
void testInvalidRorId() {
37-
OrganizationEntity organizationEntity = RorProvider.getOrganization("https://ror.org/42");
38-
assertNull(organizationEntity);
39-
}
22+
@Test
23+
void testExternalRorProvider() throws IOException {
24+
OrganizationEntity organizationEntity = RorProvider.getOrganization("https://ror.org/04t3en479");
25+
assertNotNull(organizationEntity);
26+
Assertions.assertEquals("https://ror.org/04t3en479", organizationEntity.getProperty("@id").asText());
27+
Assertions.assertEquals("https://ror.org/04t3en479", organizationEntity.getProperty("url").asText());
28+
Assertions.assertEquals("Karlsruhe Institute of Technology", organizationEntity.getProperty("name").asText());
29+
}
30+
31+
@Test
32+
void testInvalidRorUrl() {
33+
assertThrows(IllegalArgumentException.class, () -> {
34+
RorProvider.getOrganization("https://notror.org/04t3en479");
35+
});
36+
}
37+
38+
@Test
39+
void testInvalidRorId() {
40+
OrganizationEntity organizationEntity = RorProvider.getOrganization("https://ror.org/42");
41+
assertNull(organizationEntity);
42+
}
4043
}

0 commit comments

Comments
 (0)