diff --git a/pom.xml b/pom.xml
index b400bb7..486eb21 100644
--- a/pom.xml
+++ b/pom.xml
@@ -58,7 +58,7 @@
gr.cite.opendmp
repositorydepositbase
- 1.0.3
+ 1.0.4
diff --git a/src/main/java/eu/eudat/depositinterface/dataverserepository/config/ConfigLoader.java b/src/main/java/eu/eudat/depositinterface/dataverserepository/config/ConfigLoader.java
index 9d1f841..34d71a8 100644
--- a/src/main/java/eu/eudat/depositinterface/dataverserepository/config/ConfigLoader.java
+++ b/src/main/java/eu/eudat/depositinterface/dataverserepository/config/ConfigLoader.java
@@ -1,6 +1,8 @@
package eu.eudat.depositinterface.dataverserepository.config;
+import java.util.List;
+
public interface ConfigLoader {
- byte[] getLogo();
- DataverseConfig getDataverseConfig();
+ byte[] getLogo(String repositoryId);
+ List getDataverseConfig();
}
diff --git a/src/main/java/eu/eudat/depositinterface/dataverserepository/config/ConfigLoaderImpl.java b/src/main/java/eu/eudat/depositinterface/dataverserepository/config/ConfigLoaderImpl.java
index 0c37067..ec4ec14 100644
--- a/src/main/java/eu/eudat/depositinterface/dataverserepository/config/ConfigLoaderImpl.java
+++ b/src/main/java/eu/eudat/depositinterface/dataverserepository/config/ConfigLoaderImpl.java
@@ -1,5 +1,6 @@
package eu.eudat.depositinterface.dataverserepository.config;
+import com.fasterxml.jackson.core.type.TypeReference;
import com.fasterxml.jackson.databind.ObjectMapper;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
@@ -11,46 +12,58 @@ 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("dataverseConfigLoader")
public class ConfigLoaderImpl implements ConfigLoader{
private static final Logger logger = LoggerFactory.getLogger(ConfigLoaderImpl.class);
private static final ObjectMapper mapper = new ObjectMapper();
- private DataverseConfig dataverseConfig;
+ private List dataverseConfigs = new ArrayList<>();
+
+ private final Environment environment;
@Autowired
- private Environment environment;
+ public ConfigLoaderImpl(Environment environment){
+ this.environment = environment;
+ }
@Override
- public DataverseConfig getDataverseConfig() {
- if(dataverseConfig == null){
+ public List getDataverseConfig() {
+ if(dataverseConfigs == null || dataverseConfigs.isEmpty()){
try{
- dataverseConfig = mapper.readValue(getStreamFromPath(environment.getProperty("configuration.dataverse")), DataverseConfig.class);
+ dataverseConfigs = mapper.readValue(getStreamFromPath(environment.getProperty("dataverse.plugin.configuration.dataverse")), new TypeReference>() {});
} catch (IOException e) {
logger.error(e.getLocalizedMessage(), e);
}
}
- return dataverseConfig;
+ return dataverseConfigs;
}
@Override
- public byte[] getLogo() {
- String logo = environment.getProperty("configuration.dataverse.logo");
- InputStream logoStream;
- if(logo != null && !logo.isEmpty()) {
- logoStream = getStreamFromPath(logo);
- }
- else{
- logoStream = getClass().getClassLoader().getResourceAsStream("dataverse.png");
- }
- try {
- return (logoStream != null) ? logoStream.readAllBytes() : null;
- }
- catch (IOException e){
- logger.error(e.getMessage(), e);
+ public byte[] getLogo(String repositoryId) {
+ if (!dataverseConfigs.isEmpty()) {
+ DataverseConfig dataverseConfig = dataverseConfigs.stream().filter(x -> x.getRepositoryId().equals(repositoryId)).findFirst().orElse(null);
+ if (dataverseConfig != null) {
+ String logo = dataverseConfig.getLogo();
+ InputStream logoStream;
+ if (logo != null && !logo.isEmpty()) {
+ logoStream = getStreamFromPath(logo);
+ }
+ else {
+ logoStream = getClass().getClassLoader().getResourceAsStream("dataverse.png");
+ }
+ try {
+ return (logoStream != null) ? logoStream.readAllBytes() : null;
+ }
+ catch (IOException e) {
+ logger.error(e.getMessage(), e);
+ }
+ }
return null;
}
+ return null;
}
private InputStream getStreamFromPath(String filePath) {
diff --git a/src/main/java/eu/eudat/depositinterface/dataverserepository/config/DataverseConfig.java b/src/main/java/eu/eudat/depositinterface/dataverserepository/config/DataverseConfig.java
index f1f95a7..f99770f 100644
--- a/src/main/java/eu/eudat/depositinterface/dataverserepository/config/DataverseConfig.java
+++ b/src/main/java/eu/eudat/depositinterface/dataverserepository/config/DataverseConfig.java
@@ -47,6 +47,8 @@ public class DataverseConfig {
private String parentDataverseAlias;
@JsonProperty("hasLogo")
private boolean hasLogo;
+ @JsonProperty("logo")
+ private String logo;
public int getDepositType() {
return depositType;
@@ -104,6 +106,13 @@ public class DataverseConfig {
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/dataverserepository/interfaces/DataverseDeposit.java b/src/main/java/eu/eudat/depositinterface/dataverserepository/interfaces/DataverseDeposit.java
index ab2b5c2..3b57452 100644
--- a/src/main/java/eu/eudat/depositinterface/dataverserepository/interfaces/DataverseDeposit.java
+++ b/src/main/java/eu/eudat/depositinterface/dataverserepository/interfaces/DataverseDeposit.java
@@ -45,89 +45,85 @@ public class DataverseDeposit implements RepositoryDeposit {
private static final Logger logger = LoggerFactory.getLogger(DataverseDeposit.class);
private static final ObjectMapper objectMapper = new ObjectMapper();
- private DataverseAPI api;
- private boolean isApiSet;
-
- private ConfigLoader configLoader;
- private Environment environment;
+ private final ConfigLoader configLoader;
+ private final Environment environment;
@Autowired
public DataverseDeposit(ConfigLoader configLoader, Environment environment){
this.configLoader = configLoader;
this.environment = environment;
- this.isApiSet = false;
- }
-
- private void setDataverseApi() throws MalformedURLException {
- if(!this.isApiSet) {
- this.api = new DataverseAPIImpl();
- eu.eudat.depositinterface.dataverserepository.config.DataverseConfig jsonConfig = this.configLoader.getDataverseConfig();
- DataverseConfig config = new DataverseConfig(new URL(jsonConfig.getServer()), jsonConfig.getApiToken(), jsonConfig.getParentDataverseAlias());
- api.configure(config);
- this.isApiSet = true;
- }
}
@Override
- public String deposit(DMPDepositModel dmpDepositModel, String repositoryAccessToken) throws Exception {
+ public String deposit(String repositoryId, DMPDepositModel dmpDepositModel, String repositoryAccessToken) throws Exception {
- if(!this.isApiSet)
- this.setDataverseApi();
+ eu.eudat.depositinterface.dataverserepository.config.DataverseConfig jsonConfig = this.configLoader.getDataverseConfig().stream().filter(x -> x.getRepositoryId().equals(repositoryId)).findFirst().orElse(null);
- String dmpDescription = dmpDepositModel.getDescription();
- if(dmpDescription == null || dmpDescription.isEmpty()){
- dmpDescription = "-";
- }
- String doi;
- DatasetFacade dataset = DatasetFacade.builder()
- .title(dmpDepositModel.getLabel())
- .authors(dmpDepositModel.getUsers().stream().map(x -> DatasetAuthor.builder().authorName(x.getUser().getName()).build()).collect(Collectors.toList()))
- .contacts(dmpDepositModel.getUsers().stream().map(x -> DatasetContact.builder().datasetContactEmail(x.getUser().getEmail()).build()).collect(Collectors.toList()))
- .subject("Other")
- .description(DatasetDescription.builder().description(dmpDescription).build())
- .languages(new ArrayList<>())
- .depositor("")
- .build();
+ if(jsonConfig != null) {
- if(dmpDepositModel.getPreviousDOI() == null || dmpDepositModel.getPreviousDOI().isEmpty()){
- Identifier id = this.api.getDataverseOperations().createDataset(dataset, this.configLoader.getDataverseConfig().getParentDataverseAlias());
+ DataverseAPI api = new DataverseAPIImpl();
+ DataverseConfig config = new DataverseConfig(new URL(jsonConfig.getServer()), jsonConfig.getApiToken(), jsonConfig.getParentDataverseAlias());
+ api.configure(config);
- doi = this.api.getDatasetOperations().getDataset(id).getDoiId().orElse(null);
- this.uploadFiles(dmpDepositModel, doi);
-
- this.api.getDatasetOperations().publishDataset(id, MAJOR);
- }
- else{
- Map datasetJson = this.getDatasetIdentifier(dmpDepositModel.getPreviousDOI());
- Identifier id = new Identifier();
- id.setId(((Integer) datasetJson.get("id")).longValue());
- JsonNode jsonNode = objectMapper.convertValue(datasetJson, JsonNode.class);
- JsonNode latestVersion = jsonNode.get("latestVersion");
- JsonNode files = latestVersion.get("files");
- if(files.isArray()){
- for (JsonNode file : files) {
- int fileId = file.get("dataFile").get("id").asInt();
- this.deleteFile(fileId);
- }
+ String dmpDescription = dmpDepositModel.getDescription();
+ if (dmpDescription == null || dmpDescription.isEmpty()) {
+ dmpDescription = "-";
}
- this.uploadFiles(dmpDepositModel, dmpDepositModel.getPreviousDOI());
+ String doi;
+ DatasetFacade dataset = DatasetFacade.builder()
+ .title(dmpDepositModel.getLabel())
+ .authors(dmpDepositModel.getUsers().stream().map(x -> DatasetAuthor.builder().authorName(x.getUser().getName()).build()).collect(Collectors.toList()))
+ .contacts(dmpDepositModel.getUsers().stream().map(x -> DatasetContact.builder().datasetContactEmail(x.getUser().getEmail()).build()).collect(Collectors.toList()))
+ .subject("Other")
+ .description(DatasetDescription.builder().description(dmpDescription).build())
+ .languages(new ArrayList<>())
+ .depositor("")
+ .build();
+
+ if (dmpDepositModel.getPreviousDOI() == null || dmpDepositModel.getPreviousDOI().isEmpty()) {
+ Identifier id = api.getDataverseOperations().createDataset(dataset, jsonConfig.getParentDataverseAlias());
+
+ doi = api.getDatasetOperations().getDataset(id).getDoiId().orElse(null);
+
+ this.uploadFiles(jsonConfig, dmpDepositModel, doi);
+
+ api.getDatasetOperations().publishDataset(id, MAJOR);
+ } else {
+ Map datasetJson = this.getDatasetIdentifier(jsonConfig, dmpDepositModel.getPreviousDOI());
+ Identifier id = new Identifier();
+ id.setId(((Integer) datasetJson.get("id")).longValue());
+ JsonNode jsonNode = objectMapper.convertValue(datasetJson, JsonNode.class);
+ JsonNode latestVersion = jsonNode.get("latestVersion");
+ JsonNode files = latestVersion.get("files");
+ if (files.isArray()) {
+ for (JsonNode file : files) {
+ int fileId = file.get("dataFile").get("id").asInt();
+ this.deleteFile(jsonConfig, fileId);
+ }
+ }
+
+ this.uploadFiles(jsonConfig, dmpDepositModel, dmpDepositModel.getPreviousDOI());
+
+ api.getDatasetOperations().updateDataset(dataset, id);
+ DataverseResponse publishedDataset = api.getDatasetOperations().publishDataset(id, MAJOR);
+ doi = publishedDataset.getData().getAuthority() + "/" + publishedDataset.getData().getIdentifier();
+ }
+
+
+ return doi;
- this.api.getDatasetOperations().updateDataset(dataset, id);
- DataverseResponse publishedDataset = this.api.getDatasetOperations().publishDataset(id, MAJOR);
- doi = publishedDataset.getData().getAuthority() + "/" + publishedDataset.getData().getIdentifier();
}
-
- return doi;
+ return null;
}
- private void deleteFile(int fileId){
- HttpHeaders headers = this.createBasicAuthHeaders(this.configLoader.getDataverseConfig().getApiToken(), "");
- String serverUrl = this.configLoader.getDataverseConfig().getServer() + "/dvn/api/data-deposit/v1.1/swordv2/edit-media/file/" + fileId;
+ private void deleteFile(eu.eudat.depositinterface.dataverserepository.config.DataverseConfig jsonConfig, int fileId){
+ HttpHeaders headers = this.createBasicAuthHeaders(jsonConfig.getApiToken(), "");
+ String serverUrl = jsonConfig.getServer() + "/dvn/api/data-deposit/v1.1/swordv2/edit-media/file/" + fileId;
RestTemplate restTemplate = new RestTemplate();
restTemplate.exchange(serverUrl, HttpMethod.DELETE, new HttpEntity<>(headers), Object.class);
}
@@ -142,8 +138,8 @@ public class DataverseDeposit implements RepositoryDeposit {
}};
}
- private void uploadFiles(DMPDepositModel dmpDepositModel, String doi) throws IOException {
- this.uploadFile(dmpDepositModel.getPdfFile().getFilename(), dmpDepositModel.getPdfFile().getFile(), doi);
+ private void uploadFiles(eu.eudat.depositinterface.dataverserepository.config.DataverseConfig jsonConfig, DMPDepositModel dmpDepositModel, String doi) throws IOException {
+ this.uploadFile(jsonConfig, dmpDepositModel.getPdfFile().getFilename(), dmpDepositModel.getPdfFile().getFile(), doi);
FileEnvelope rdaJsonEnvelope = dmpDepositModel.getRdaJsonFile();
HttpHeaders responseHeaders = new HttpHeaders();
@@ -159,7 +155,7 @@ public class DataverseDeposit implements RepositoryDeposit {
String contentDisposition = jsonFile.getHeaders().get("Content-Disposition").get(0);
String jsonFileName = contentDisposition.substring(contentDisposition.lastIndexOf('=') + 1);
- File rdaJson = new File(this.environment.getProperty("storage.temp") + jsonFileName);
+ File rdaJson = new File(this.environment.getProperty("dataverse_plugin.storage.temp") + jsonFileName);
OutputStream output = new FileOutputStream(rdaJson);
try {
output.write(Objects.requireNonNull(jsonFile.getBody()));
@@ -168,26 +164,26 @@ public class DataverseDeposit implements RepositoryDeposit {
} catch (IOException e) {
logger.error(e.getMessage(), e);
}
- this.uploadFile(jsonFileName, rdaJson, doi);
+ this.uploadFile(jsonConfig, jsonFileName, rdaJson, doi);
Files.deleteIfExists(rdaJson.toPath());
if(dmpDepositModel.getSupportingFilesZip() != null) {
- this.uploadFile(dmpDepositModel.getSupportingFilesZip().getName(), dmpDepositModel.getSupportingFilesZip(), doi);
+ this.uploadFile(jsonConfig, dmpDepositModel.getSupportingFilesZip().getName(), dmpDepositModel.getSupportingFilesZip(), doi);
}
}
- private Map getDatasetIdentifier(String previousDOI) {
+ private Map getDatasetIdentifier(eu.eudat.depositinterface.dataverserepository.config.DataverseConfig jsonConfig, String previousDOI) {
HttpHeaders headers = new HttpHeaders();
- headers.set("X-Dataverse-key", this.configLoader.getDataverseConfig().getApiToken());
- String serverUrl = this.configLoader.getDataverseConfig().getServer() + "/api/datasets/:persistentId?persistentId=doi:" + previousDOI;
+ headers.set("X-Dataverse-key", jsonConfig.getApiToken());
+ String serverUrl = jsonConfig.getServer() + "/api/datasets/:persistentId?persistentId=doi:" + previousDOI;
RestTemplate restTemplate = new RestTemplate();
return (Map) restTemplate.exchange(serverUrl, HttpMethod.GET, new HttpEntity<>(headers), Map.class).getBody().get("data");
}
- private void uploadFile(String filename, File file, String doi) throws IOException {
+ private void uploadFile(eu.eudat.depositinterface.dataverserepository.config.DataverseConfig jsonConfig, String filename, File file, String doi) throws IOException {
HttpHeaders headers = new HttpHeaders();
headers.setContentType(MediaType.MULTIPART_FORM_DATA);
- headers.set("X-Dataverse-key", this.configLoader.getDataverseConfig().getApiToken());
+ headers.set("X-Dataverse-key", jsonConfig.getApiToken());
MultiValueMap fileMap = new LinkedMultiValueMap<>();
ContentDisposition contentDisposition = ContentDisposition
.builder("form-data")
@@ -202,29 +198,31 @@ public class DataverseDeposit implements RepositoryDeposit {
HttpEntity> requestEntity
= new HttpEntity<>(body, headers);
- String serverUrl = this.configLoader.getDataverseConfig().getServer() + "/api/datasets/:persistentId/add?persistentId=doi:" + doi;
+ String serverUrl = jsonConfig.getServer() + "/api/datasets/:persistentId/add?persistentId=doi:" + doi;
RestTemplate restTemplate = new RestTemplate();
ResponseEntity