diff --git a/pom.xml b/pom.xml
index f92323a..f7b83bf 100644
--- a/pom.xml
+++ b/pom.xml
@@ -56,7 +56,7 @@
gr.cite.opendmp
repositorydepositbase
- 1.0.2
+ 1.0.4
diff --git a/src/main/java/eu/eudat/depositinterface/ckanrepository/config/CkanConfig.java b/src/main/java/eu/eudat/depositinterface/ckanrepository/config/CkanConfig.java
index 9bda7f1..90fb1e3 100644
--- a/src/main/java/eu/eudat/depositinterface/ckanrepository/config/CkanConfig.java
+++ b/src/main/java/eu/eudat/depositinterface/ckanrepository/config/CkanConfig.java
@@ -45,6 +45,8 @@ public class CkanConfig {
private String organization;
@JsonProperty("hasLogo")
private boolean hasLogo;
+ @JsonProperty("logo")
+ private String logo;
public int getDepositType() {
return depositType;
@@ -95,6 +97,13 @@ public class CkanConfig {
this.hasLogo = hasLogo;
}
+ public String getLogo() {
+ return logo;
+ }
+ public void setLogo(String logo) {
+ this.logo = logo;
+ }
+
public RepositoryDepositConfiguration toRepoConfig() {
RepositoryDepositConfiguration config = new RepositoryDepositConfiguration();
config.setDepositType(this.depositType);
diff --git a/src/main/java/eu/eudat/depositinterface/ckanrepository/config/ConfigLoader.java b/src/main/java/eu/eudat/depositinterface/ckanrepository/config/ConfigLoader.java
index 26d084a..4a19d2e 100644
--- a/src/main/java/eu/eudat/depositinterface/ckanrepository/config/ConfigLoader.java
+++ b/src/main/java/eu/eudat/depositinterface/ckanrepository/config/ConfigLoader.java
@@ -1,6 +1,8 @@
package eu.eudat.depositinterface.ckanrepository.config;
+import java.util.List;
+
public interface ConfigLoader {
- byte[] getLogo();
- CkanConfig getCkanConfig();
+ byte[] getLogo(String repositoryId);
+ List getCkanConfig();
}
diff --git a/src/main/java/eu/eudat/depositinterface/ckanrepository/config/ConfigLoaderImpl.java b/src/main/java/eu/eudat/depositinterface/ckanrepository/config/ConfigLoaderImpl.java
index 675afe6..9c14e0e 100644
--- a/src/main/java/eu/eudat/depositinterface/ckanrepository/config/ConfigLoaderImpl.java
+++ b/src/main/java/eu/eudat/depositinterface/ckanrepository/config/ConfigLoaderImpl.java
@@ -1,5 +1,6 @@
package eu.eudat.depositinterface.ckanrepository.config;
+import com.fasterxml.jackson.core.type.TypeReference;
import com.fasterxml.jackson.databind.ObjectMapper;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
@@ -11,41 +12,56 @@ import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.IOException;
import java.io.InputStream;
+import java.util.ArrayList;
+import java.util.List;
@Service("ckanConfigLoader")
public class ConfigLoaderImpl implements ConfigLoader{
private static final Logger logger = LoggerFactory.getLogger(ConfigLoaderImpl.class);
private static final ObjectMapper mapper = new ObjectMapper();
- private CkanConfig ckanConfig;
+ private List ckanConfigs = new ArrayList<>();
+
+ private final Environment environment;
@Autowired
- private Environment environment;
+ public ConfigLoaderImpl(Environment environment){
+ this.environment = environment;
+ }
@Override
- public CkanConfig getCkanConfig() {
- if(ckanConfig == null){
+ public List getCkanConfig() {
+ if(ckanConfigs == null || ckanConfigs.isEmpty()) {
try{
- ckanConfig = mapper.readValue(getStreamFromPath(environment.getProperty("configuration.ckan")), CkanConfig.class);
+ ckanConfigs = mapper.readValue(getStreamFromPath(environment.getProperty("configuration.ckan")), new TypeReference>() {});
} catch (IOException e) {
logger.error(e.getLocalizedMessage(), e);
}
}
- return ckanConfig;
+ return ckanConfigs;
}
@Override
- public byte[] getLogo() {
- String logo = environment.getProperty("configuration.logo");
- if(logo != null && !logo.isEmpty()){
- InputStream logoStream = getStreamFromPath(logo);
- try {
- return logoStream.readAllBytes();
- }
- catch (IOException e){
- logger.error(e.getMessage(), e);
- return null;
+ public byte[] getLogo(String repositoryId) {
+ if (!ckanConfigs.isEmpty()) {
+ CkanConfig ckanConfig = ckanConfigs.stream().filter(x -> x.getRepositoryId().equals(repositoryId)).findFirst().orElse(null);
+ if (ckanConfig != null) {
+ String logo = ckanConfig.getLogo();
+ InputStream logoStream;
+ if (logo != null && !logo.isEmpty()) {
+ logoStream = getStreamFromPath(logo);
+ }
+ else {
+ logoStream = getClass().getClassLoader().getResourceAsStream("ckan.png");
+ }
+ try {
+ return (logoStream != null) ? logoStream.readAllBytes() : null;
+ }
+ catch (IOException e) {
+ logger.error(e.getMessage(), e);
+ }
}
+ return null;
}
return null;
}
diff --git a/src/main/java/eu/eudat/depositinterface/ckanrepository/interfaces/CkanDeposit.java b/src/main/java/eu/eudat/depositinterface/ckanrepository/interfaces/CkanDeposit.java
index 38edeb8..2f22968 100644
--- a/src/main/java/eu/eudat/depositinterface/ckanrepository/interfaces/CkanDeposit.java
+++ b/src/main/java/eu/eudat/depositinterface/ckanrepository/interfaces/CkanDeposit.java
@@ -28,14 +28,15 @@ import java.io.IOException;
import java.io.OutputStream;
import java.nio.file.Files;
import java.util.*;
+import java.util.stream.Collectors;
@Component
public class CkanDeposit implements RepositoryDeposit {
private static final Logger logger = LoggerFactory.getLogger(CkanDeposit.class);
private static final ObjectMapper objectMapper = new ObjectMapper();
- private ConfigLoader configLoader;
- private Environment environment;
+ private final ConfigLoader configLoader;
+ private final Environment environment;
@Autowired
public CkanDeposit(ConfigLoader configLoader, Environment environment){
@@ -44,65 +45,70 @@ public class CkanDeposit implements RepositoryDeposit {
}
@Override
- public String deposit(DMPDepositModel dmpDepositModel, String repositoryAccessToken) throws Exception {
+ public String deposit(String repositoryId, DMPDepositModel dmpDepositModel, String repositoryAccessToken) throws Exception {
- CkanConfig ckanConfig = this.configLoader.getCkanConfig();
+ CkanConfig ckanConfig = this.configLoader.getCkanConfig().stream().filter(x -> x.getRepositoryId().equals(repositoryId)).findFirst().orElse(null);
- String doi;
+ if(ckanConfig != null) {
- CkanDataset dataset = new CkanDataset();
- dataset.setName(dmpDepositModel.getLabel().replaceAll("[^a-zA-Z0-9]+", "_").toLowerCase());
- //dataset.setPrivate(!dmpDepositModel.isPublic());
- dataset.setPrivate(true);
- dataset.setNotes(dmpDepositModel.getDescription());
- dataset.setVersion(String.valueOf(dmpDepositModel.getVersion()));
- dataset.setOwner_org(ckanConfig.getOrganization());
- dataset.setAuthor("Argos User");
- dataset.setAuthor_email("argosUser@example.com");
+ String doi;
- if(dmpDepositModel.getPreviousDOI() == null || dmpDepositModel.getPreviousDOI().isEmpty()){
- RestTemplate restTemplate = new RestTemplate();
- HttpHeaders headers = new HttpHeaders();
- headers.set("Authorization", ckanConfig.getApiToken());
- headers.setContentType(MediaType.APPLICATION_JSON);
- String url = ckanConfig.getRepositoryUrl() + "package_create";
- Object response = restTemplate.exchange(url, HttpMethod.POST, new HttpEntity<>(dataset, headers), Object.class).getBody();
- Map respMap = objectMapper.convertValue(response, Map.class);
- respMap = (Map) respMap.get("result");
- String id = String.valueOf(respMap.get("id"));
+ CkanDataset dataset = new CkanDataset();
+ dataset.setName(dmpDepositModel.getLabel().replaceAll("[^a-zA-Z0-9]+", "_").toLowerCase());
+ //dataset.setPrivate(!dmpDepositModel.isPublic());
+ dataset.setPrivate(true);
+ dataset.setNotes(dmpDepositModel.getDescription());
+ dataset.setVersion(String.valueOf(dmpDepositModel.getVersion()));
+ dataset.setOwner_org(ckanConfig.getOrganization());
+ dataset.setAuthor("Argos User");
+ dataset.setAuthor_email("argosUser@example.com");
- doi = String.valueOf(respMap.get("doi"));
+ if (dmpDepositModel.getPreviousDOI() == null || dmpDepositModel.getPreviousDOI().isEmpty()) {
+ RestTemplate restTemplate = new RestTemplate();
+ HttpHeaders headers = new HttpHeaders();
+ headers.set("Authorization", ckanConfig.getApiToken());
+ headers.setContentType(MediaType.APPLICATION_JSON);
+ String url = ckanConfig.getRepositoryUrl() + "package_create";
+ Object response = restTemplate.exchange(url, HttpMethod.POST, new HttpEntity<>(dataset, headers), Object.class).getBody();
+ Map respMap = objectMapper.convertValue(response, Map.class);
+ respMap = (Map) respMap.get("result");
+ String id = String.valueOf(respMap.get("id"));
- this.uploadFiles(dmpDepositModel, id);
- }
- else{
- JsonNode datasetJson = this.getDatasetIdentifier(dmpDepositModel.getPreviousDOI()).get(0);
- String datasetId = datasetJson.get("id").asText();
- String version = datasetJson.get("version").asText();
+ doi = String.valueOf(respMap.get("doi"));
- JsonNode files = datasetJson.get("resources");
- if(files.isArray()) {
- for (JsonNode file : files) {
- String fileId = file.get("id").asText();
- this.deleteFile(fileId);
+ this.uploadFiles(ckanConfig, dmpDepositModel, id);
+ } else {
+ JsonNode datasetJson = this.getDatasetIdentifier(ckanConfig, dmpDepositModel.getPreviousDOI()).get(0);
+ String datasetId = datasetJson.get("id").asText();
+ String version = datasetJson.get("version").asText();
+
+ JsonNode files = datasetJson.get("resources");
+ if (files.isArray()) {
+ for (JsonNode file : files) {
+ String fileId = file.get("id").asText();
+ this.deleteFile(ckanConfig, fileId);
+ }
}
+
+ this.uploadFiles(ckanConfig, dmpDepositModel, datasetId);
+
+ Map resp = this.updateVersion(ckanConfig, datasetId, version);
+ doi = (String) resp.get("doi");
}
- this.uploadFiles(dmpDepositModel, datasetId);
+ return doi;
- Map resp = this.updateVersion(datasetId, version);
- doi = (String) resp.get("doi");
}
- return doi;
+ return null;
}
- private Map updateVersion(String datasetId, String version){
+ private Map updateVersion(CkanConfig ckanConfig, String datasetId, String version){
HttpHeaders headers = new HttpHeaders();
- headers.set("Authorization", this.configLoader.getCkanConfig().getApiToken());
+ headers.set("Authorization", ckanConfig.getApiToken());
headers.setContentType(MediaType.APPLICATION_JSON);
- String serverUrl = this.configLoader.getCkanConfig().getRepositoryUrl() + "package_patch";
+ String serverUrl = ckanConfig.getRepositoryUrl() + "package_patch";
Map body = new HashMap<>();
body.put("id", datasetId);
body.put("version", String.valueOf(Integer.parseInt(version) + 1));
@@ -110,19 +116,19 @@ public class CkanDeposit implements RepositoryDeposit {
return (Map)restTemplate.exchange(serverUrl, HttpMethod.POST, new HttpEntity<>(body, headers), Map.class).getBody().get("result");
}
- private void deleteFile(String fileId){
+ private void deleteFile(CkanConfig ckanConfig, String fileId){
HttpHeaders headers = new HttpHeaders();
- headers.set("Authorization", this.configLoader.getCkanConfig().getApiToken());
+ headers.set("Authorization", ckanConfig.getApiToken());
headers.setContentType(MediaType.APPLICATION_JSON);
- String serverUrl = this.configLoader.getCkanConfig().getRepositoryUrl() + "resource_delete";
+ String serverUrl = ckanConfig.getRepositoryUrl() + "resource_delete";
Map map = new HashMap<>();
map.put("id", fileId);
RestTemplate restTemplate = new RestTemplate();
restTemplate.exchange(serverUrl, HttpMethod.POST, new HttpEntity<>(map, headers), Object.class);
}
- private void uploadFiles(DMPDepositModel dmpDepositModel, String id) throws IOException {
- this.uploadFile(dmpDepositModel.getPdfFile().getFilename(), dmpDepositModel.getPdfFile().getFile(), id);
+ private void uploadFiles(CkanConfig ckanConfig, DMPDepositModel dmpDepositModel, String id) throws IOException {
+ this.uploadFile(ckanConfig, dmpDepositModel.getPdfFile().getFilename(), dmpDepositModel.getPdfFile().getFile(), id);
FileEnvelope rdaJsonEnvelope = dmpDepositModel.getRdaJsonFile();
HttpHeaders responseHeaders = new HttpHeaders();
@@ -147,28 +153,28 @@ public class CkanDeposit implements RepositoryDeposit {
} catch (IOException e) {
logger.error(e.getMessage(), e);
}
- this.uploadFile(jsonFileName, rdaJson, id);
+ this.uploadFile(ckanConfig, jsonFileName, rdaJson, id);
Files.deleteIfExists(rdaJson.toPath());
if(dmpDepositModel.getSupportingFilesZip() != null) {
- this.uploadFile(dmpDepositModel.getSupportingFilesZip().getName(), dmpDepositModel.getSupportingFilesZip(), id);
+ this.uploadFile(ckanConfig, dmpDepositModel.getSupportingFilesZip().getName(), dmpDepositModel.getSupportingFilesZip(), id);
}
}
- private JsonNode getDatasetIdentifier(String previousDOI) throws JsonProcessingException {
+ private JsonNode getDatasetIdentifier(CkanConfig ckanConfig, String previousDOI) throws JsonProcessingException {
HttpHeaders headers = new HttpHeaders();
- headers.set("Authorization", this.configLoader.getCkanConfig().getApiToken());
- String serverUrl = this.configLoader.getCkanConfig().getRepositoryUrl() + "package_search?q=doi:" + previousDOI + "&include_private=True";
+ headers.set("Authorization", ckanConfig.getApiToken());
+ String serverUrl = ckanConfig + "package_search?q=doi:" + previousDOI + "&include_private=True";
RestTemplate restTemplate = new RestTemplate();
Object response = restTemplate.exchange(serverUrl, HttpMethod.GET, new HttpEntity<>(headers), Map.class).getBody().get("result");
JsonNode jsonNode = objectMapper.readTree(new JSONObject((Map)response).toString());
return jsonNode.findValues("results").get(0);
}
- private void uploadFile(String filename, File file, String datasetId) {
+ private void uploadFile(CkanConfig ckanConfig, String filename, File file, String datasetId) {
HttpHeaders headers = new HttpHeaders();
headers.setContentType(MediaType.MULTIPART_FORM_DATA);
- headers.set("Authorization", this.configLoader.getCkanConfig().getApiToken());
+ headers.set("Authorization", ckanConfig.getApiToken());
MultipartBodyBuilder multipartBodyBuilder = new MultipartBodyBuilder();
Resource resource = new FileSystemResource(file);
multipartBodyBuilder.part("upload", resource)
@@ -178,30 +184,32 @@ public class CkanDeposit implements RepositoryDeposit {
MultiValueMap> multipartBody = multipartBodyBuilder.build();
HttpEntity>> requestEntity = new HttpEntity<>(multipartBody, headers);
- String serverUrl = this.configLoader.getCkanConfig().getRepositoryUrl() + "resource_create";
+ String serverUrl = ckanConfig.getRepositoryUrl() + "resource_create";
RestTemplate restTemplate = new RestTemplate();
ResponseEntity