diff --git a/pom.xml b/pom.xml
index dc3c853..54b5b87 100644
--- a/pom.xml
+++ b/pom.xml
@@ -52,7 +52,7 @@
gr.cite.opendmp
repositorydepositbase
- 1.0.2
+ 1.0.4
diff --git a/src/main/java/eu/eudat/depositinterface/dspacerepository/config/ConfigLoader.java b/src/main/java/eu/eudat/depositinterface/dspacerepository/config/ConfigLoader.java
index 4eca44b..1060f4c 100644
--- a/src/main/java/eu/eudat/depositinterface/dspacerepository/config/ConfigLoader.java
+++ b/src/main/java/eu/eudat/depositinterface/dspacerepository/config/ConfigLoader.java
@@ -1,6 +1,8 @@
package eu.eudat.depositinterface.dspacerepository.config;
+import java.util.List;
+
public interface ConfigLoader {
- byte[] getLogo();
- DSpaceConfig getDSpaceConfig();
+ byte[] getLogo(String repositoryId);
+ List getDSpaceConfig();
}
diff --git a/src/main/java/eu/eudat/depositinterface/dspacerepository/config/ConfigLoaderImpl.java b/src/main/java/eu/eudat/depositinterface/dspacerepository/config/ConfigLoaderImpl.java
index 01b17e1..d3c6356 100644
--- a/src/main/java/eu/eudat/depositinterface/dspacerepository/config/ConfigLoaderImpl.java
+++ b/src/main/java/eu/eudat/depositinterface/dspacerepository/config/ConfigLoaderImpl.java
@@ -1,5 +1,6 @@
package eu.eudat.depositinterface.dspacerepository.config;
+import com.fasterxml.jackson.core.type.TypeReference;
import com.fasterxml.jackson.databind.ObjectMapper;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
@@ -8,46 +9,58 @@ import org.springframework.core.env.Environment;
import org.springframework.stereotype.Service;
import java.io.*;
+import java.util.ArrayList;
+import java.util.List;
@Service("dspaceConfigLoader")
public class ConfigLoaderImpl implements ConfigLoader{
private static final Logger logger = LoggerFactory.getLogger(ConfigLoaderImpl.class);
private static final ObjectMapper mapper = new ObjectMapper();
- private DSpaceConfig dspaceConfig;
+ private List dSpaceConfigs = new ArrayList<>();
+
+ private final Environment environment;
@Autowired
- private Environment environment;
+ public ConfigLoaderImpl(Environment environment){
+ this.environment = environment;
+ }
@Override
- public DSpaceConfig getDSpaceConfig() {
- if(dspaceConfig == null){
+ public List getDSpaceConfig() {
+ if(dSpaceConfigs == null || dSpaceConfigs.isEmpty()){
try{
- dspaceConfig = mapper.readValue(getStreamFromPath(environment.getProperty("configuration.dspace")), DSpaceConfig.class);
+ dSpaceConfigs = mapper.readValue(getStreamFromPath(environment.getProperty("configuration.dspace")), new TypeReference>() {});
} catch (IOException e) {
logger.error(e.getLocalizedMessage(), e);
}
}
- return dspaceConfig;
+ return dSpaceConfigs;
}
@Override
- public byte[] getLogo() {
- String logo = environment.getProperty("configuration.logo");
- InputStream logoStream;
- if(logo != null && !logo.isEmpty()) {
- logoStream = getStreamFromPath(logo);
- }
- else{
- logoStream = getClass().getClassLoader().getResourceAsStream("dspace.svg");
- }
- try {
- return (logoStream != null) ? logoStream.readAllBytes() : null;
- }
- catch (IOException e){
- logger.error(e.getMessage(), e);
+ public byte[] getLogo(String repositoryId) {
+ if (!dSpaceConfigs.isEmpty()) {
+ DSpaceConfig dSpaceConfig = dSpaceConfigs.stream().filter(x -> x.getRepositoryId().equals(repositoryId)).findFirst().orElse(null);
+ if (dSpaceConfig != null) {
+ String logo = dSpaceConfig.getLogo();
+ InputStream logoStream;
+ if(logo != null && !logo.isEmpty()) {
+ logoStream = getStreamFromPath(logo);
+ }
+ else{
+ logoStream = getClass().getClassLoader().getResourceAsStream("dspace.svg");
+ }
+ 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/dspacerepository/config/DSpaceConfig.java b/src/main/java/eu/eudat/depositinterface/dspacerepository/config/DSpaceConfig.java
index 834c45f..c7ec791 100644
--- a/src/main/java/eu/eudat/depositinterface/dspacerepository/config/DSpaceConfig.java
+++ b/src/main/java/eu/eudat/depositinterface/dspacerepository/config/DSpaceConfig.java
@@ -51,6 +51,8 @@ public class DSpaceConfig {
private String collection;
@JsonProperty("hasLogo")
private boolean hasLogo;
+ @JsonProperty("logo")
+ private String logo;
public int getDepositType() {
return depositType;
@@ -122,6 +124,13 @@ public class DSpaceConfig {
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/dspacerepository/interfaces/DSpaceDeposit.java b/src/main/java/eu/eudat/depositinterface/dspacerepository/interfaces/DSpaceDeposit.java
index 2262bc2..1e74a78 100644
--- a/src/main/java/eu/eudat/depositinterface/dspacerepository/interfaces/DSpaceDeposit.java
+++ b/src/main/java/eu/eudat/depositinterface/dspacerepository/interfaces/DSpaceDeposit.java
@@ -32,14 +32,15 @@ import java.nio.file.Files;
import java.text.DateFormat;
import java.text.SimpleDateFormat;
import java.util.*;
+import java.util.stream.Collectors;
@Component
public class DSpaceDeposit implements RepositoryDeposit {
private static final Logger logger = LoggerFactory.getLogger(DSpaceDeposit.class);
private static final ObjectMapper objectMapper = new ObjectMapper();
- private ConfigLoader configLoader;
- private Environment environment;
+ private final ConfigLoader configLoader;
+ private final Environment environment;
private String csrfToken;
private String bearerToken;
@@ -51,83 +52,90 @@ public class DSpaceDeposit implements RepositoryDeposit {
public DSpaceDeposit(ConfigLoader configLoader, Environment environment){
this.configLoader = configLoader;
this.environment = environment;
- this.repositoryApiUrl = configLoader.getDSpaceConfig().getRepositoryUrl();
}
@Override
- public String deposit(DMPDepositModel dmpDepositModel, String repositoryAccessToken) throws Exception {
+ public String deposit(String repositoryId, DMPDepositModel dmpDepositModel, String repositoryAccessToken) throws Exception {
- DSpaceConfig dSpaceConfig = this.configLoader.getDSpaceConfig();
+ DSpaceConfig dSpaceConfig = this.configLoader.getDSpaceConfig().stream().filter(x -> x.getRepositoryId().equals(repositoryId)).findFirst().orElse(null);
- this.setCsrfToken();
- this.setBearerToken(dSpaceConfig.getEmail(), dSpaceConfig.getPassword());
- this.setSubmitterId();
+ if (dSpaceConfig != null) {
- if(dmpDepositModel.getPreviousDOI() == null || dmpDepositModel.getPreviousDOI().isEmpty()){
- RestTemplate restTemplate = new RestTemplate();
- restTemplate.setRequestFactory(new HttpComponentsClientHttpRequestFactory());
+ this.repositoryApiUrl = dSpaceConfig.getRepositoryUrl();
- HttpHeaders headers = this.createHeaders();
- headers.setContentType(MediaType.APPLICATION_JSON);
- String url = this.repositoryApiUrl + "submission/workspaceitems?owningCollection=" + dSpaceConfig.getCollection();
- Object response = restTemplate.exchange(url, HttpMethod.POST, new HttpEntity<>("", headers), Object.class).getBody();
- Map respMap = objectMapper.convertValue(response, Map.class);
- String id = String.valueOf(respMap.get("id"));
- respMap = (Map) respMap.get("_embedded");
- respMap = (Map) respMap.get("item");
- String itemId = String.valueOf(respMap.get("id"));
+ this.setCsrfToken();
+ this.setBearerToken(dSpaceConfig.getEmail(), dSpaceConfig.getPassword());
+ this.setSubmitterId();
- url = this.repositoryApiUrl + "submission/workspaceitems/" + id;
- sendPatchRequest(url, "add", "/sections/traditionalpageone/dc.title", dmpDepositModel.getLabel());
- DateFormat df = new SimpleDateFormat("yyyy-MM-dd");
- sendPatchRequest(url, "add", "/sections/traditionalpageone/dc.date.issued", df.format(new Date()));
+ if (dmpDepositModel.getPreviousDOI() == null || dmpDepositModel.getPreviousDOI().isEmpty()) {
+ RestTemplate restTemplate = new RestTemplate();
+ restTemplate.setRequestFactory(new HttpComponentsClientHttpRequestFactory());
- PatchBooleanEntity entity = new PatchBooleanEntity();
- entity.setOp("add");
- entity.setPath("/sections/license/granted");
- entity.setValue(true);
+ HttpHeaders headers = this.createHeaders();
+ headers.setContentType(MediaType.APPLICATION_JSON);
+ String url = this.repositoryApiUrl + "submission/workspaceitems?owningCollection=" + dSpaceConfig.getCollection();
+ Object response = restTemplate.exchange(url, HttpMethod.POST, new HttpEntity<>("", headers), Object.class).getBody();
+ Map respMap = objectMapper.convertValue(response, Map.class);
+ String id = String.valueOf(respMap.get("id"));
+ respMap = (Map) respMap.get("_embedded");
+ respMap = (Map) respMap.get("item");
+ String itemId = String.valueOf(respMap.get("id"));
- List entityList = new ArrayList<>();
- entityList.add(entity);
- logger.debug(objectMapper.writeValueAsString(entityList));
- restTemplate.exchange(url, HttpMethod.PATCH, new HttpEntity<>(entityList, headers), Object.class);
+ url = this.repositoryApiUrl + "submission/workspaceitems/" + id;
+ sendPatchRequest(url, "add", "/sections/traditionalpageone/dc.title", dmpDepositModel.getLabel());
+ DateFormat df = new SimpleDateFormat("yyyy-MM-dd");
+ sendPatchRequest(url, "add", "/sections/traditionalpageone/dc.date.issued", df.format(new Date()));
- sendPatchRequest(url, "add", "/sections/traditionalpageone/dc.contributor.author", "Argos User");
- sendPatchRequest(url, "add", "/sections/traditionalpageone/dc.publisher", "Argos User");
+ PatchBooleanEntity entity = new PatchBooleanEntity();
+ entity.setOp("add");
+ entity.setPath("/sections/license/granted");
+ entity.setValue(true);
- this.uploadFiles(dmpDepositModel, url);
+ List entityList = new ArrayList<>();
+ entityList.add(entity);
+ logger.debug(objectMapper.writeValueAsString(entityList));
+ restTemplate.exchange(url, HttpMethod.PATCH, new HttpEntity<>(entityList, headers), Object.class);
- String workFlowId = this.createWorkflow(url);
+ sendPatchRequest(url, "add", "/sections/traditionalpageone/dc.contributor.author", "Argos User");
+ sendPatchRequest(url, "add", "/sections/traditionalpageone/dc.publisher", "Argos User");
- this.setBearerToken(dSpaceConfig.getWorkflowEmail(), dSpaceConfig.getWorkflowPassword());
- String claimedTaskId = this.createClaimedTask(workFlowId);
+ this.uploadFiles(dmpDepositModel, url);
- this.submitTask(claimedTaskId);
+ String workFlowId = this.createWorkflow(url);
- return this.getHandle(itemId);
+ this.setBearerToken(dSpaceConfig.getWorkflowEmail(), dSpaceConfig.getWorkflowPassword());
+ String claimedTaskId = this.createClaimedTask(workFlowId);
+
+ this.submitTask(claimedTaskId);
+
+ return this.getHandle(itemId);
+
+ }
+ else {
+ String itemId = this.getItemIdFromHandle(dSpaceConfig.getRepositoryRecordUrl(), dmpDepositModel.getPreviousDOI());
+
+ this.setBearerToken(dSpaceConfig.getWorkflowEmail(), dSpaceConfig.getWorkflowPassword());
+ String workSpaceItemId = this.createNewVersion(itemId);
+
+ this.deleteFiles(workSpaceItemId);
+
+ String workSpaceItemUrl = this.repositoryApiUrl + "submission/workspaceitems/" + workSpaceItemId;
+
+ this.uploadFiles(dmpDepositModel, workSpaceItemUrl);
+
+ String workFlowId = this.createWorkflow(workSpaceItemUrl);
+
+ String claimedTaskId = this.createClaimedTask(workFlowId);
+
+ this.submitTask(claimedTaskId);
+
+ return this.getHandle(itemId);
+
+ }
}
- else{
- String itemId = this.getItemIdFromHandle(dSpaceConfig.getRepositoryRecordUrl(), dmpDepositModel.getPreviousDOI());
- this.setBearerToken(dSpaceConfig.getWorkflowEmail(), dSpaceConfig.getWorkflowPassword());
- String workSpaceItemId = this.createNewVersion(itemId);
-
- this.deleteFiles(workSpaceItemId);
-
- String workSpaceItemUrl = this.repositoryApiUrl + "submission/workspaceitems/" + workSpaceItemId;
-
- this.uploadFiles(dmpDepositModel, workSpaceItemUrl);
-
- String workFlowId = this.createWorkflow(workSpaceItemUrl);
-
- String claimedTaskId = this.createClaimedTask(workFlowId);
-
- this.submitTask(claimedTaskId);
-
- return this.getHandle(itemId);
-
- }
+ return null;
}
@@ -372,22 +380,24 @@ public class DSpaceDeposit implements RepositoryDeposit {
}
@Override
- public RepositoryDepositConfiguration getConfiguration() {
- eu.eudat.depositinterface.dspacerepository.config.DSpaceConfig dspaceConfig = this.configLoader.getDSpaceConfig();
- return dspaceConfig.toRepoConfig();
+ public List getConfiguration() {
+ List dSpaceConfigs = this.configLoader.getDSpaceConfig();
+ return dSpaceConfigs.stream().map(DSpaceConfig::toRepoConfig).collect(Collectors.toList());
}
@Override
- public String authenticate(String code) {
+ public String authenticate(String repositoryId, String code) {
return null;
}
@Override
- public String getLogo() {
- RepositoryDepositConfiguration conf = this.getConfiguration();
- if(conf.isHasLogo()){
- byte[] logo = this.configLoader.getLogo();
- return (logo != null && logo.length != 0) ? Base64.getEncoder().encodeToString(logo) : null;
+ public String getLogo(String repositoryId) {
+ RepositoryDepositConfiguration conf = this.getConfiguration().stream().filter(x -> x.getRepositoryId().equals(repositoryId)).findFirst().orElse(null);
+ if(conf != null) {
+ if(conf.isHasLogo()){
+ byte[] logo = this.configLoader.getLogo(repositoryId);
+ return (logo != null && logo.length != 0) ? Base64.getEncoder().encodeToString(logo) : null;
+ }
}
return null;
}
diff --git a/src/main/resources/application.properties b/src/main/resources/application.properties
index 4507f9f..acfb7b1 100644
--- a/src/main/resources/application.properties
+++ b/src/main/resources/application.properties
@@ -1,3 +1,2 @@
storage.temp=${STORAGE_TMP_DSPACE}
-configuration.dspace=${CONFIGURATION_DSPACE}
-configuration.dspace.logo=${CONFIGURATION_LOGO_DSPACE}
\ No newline at end of file
+configuration.dspace=${CONFIGURATION_DSPACE}
\ No newline at end of file