diff --git a/dmp-backend/core/pom.xml b/dmp-backend/core/pom.xml
index 09e82047c..2275a1d4f 100644
--- a/dmp-backend/core/pom.xml
+++ b/dmp-backend/core/pom.xml
@@ -35,6 +35,11 @@
oidc-authz
2.1.0
+
+ gr.cite.opendmp
+ repositorydepositbase
+ 1.0.4
+
diff --git a/dmp-backend/core/src/main/java/eu/eudat/configurations/DepositConfiguration.java b/dmp-backend/core/src/main/java/eu/eudat/configurations/DepositConfiguration.java
new file mode 100644
index 000000000..cf208d12b
--- /dev/null
+++ b/dmp-backend/core/src/main/java/eu/eudat/configurations/DepositConfiguration.java
@@ -0,0 +1,35 @@
+package eu.eudat.configurations;
+
+import eu.eudat.depositinterface.repository.RepositoryDeposit;
+import eu.eudat.repository.DepositRepository;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.beans.factory.annotation.Qualifier;
+import org.springframework.boot.context.properties.EnableConfigurationProperties;
+import org.springframework.context.annotation.Bean;
+import org.springframework.context.annotation.Configuration;
+import org.springframework.web.reactive.function.client.WebClient;
+
+import java.util.ArrayList;
+import java.util.List;
+
+@Configuration
+@EnableConfigurationProperties({DepositProperties.class})
+public class DepositConfiguration {
+
+ private final DepositProperties properties;
+
+ @Autowired
+ public DepositConfiguration(DepositProperties properties) {
+ this.properties = properties;
+ }
+
+ @Bean
+ @Qualifier("depositClients")
+ public List depositClients() {
+ List clients = new ArrayList<>();
+ for (String url: properties.getUrls()) {
+ clients.add(new DepositRepository(WebClient.builder().baseUrl(url + "/api/deposit").build()));
+ }
+ return clients;
+ }
+}
diff --git a/dmp-backend/core/src/main/java/eu/eudat/configurations/DepositProperties.java b/dmp-backend/core/src/main/java/eu/eudat/configurations/DepositProperties.java
new file mode 100644
index 000000000..aa7a37f40
--- /dev/null
+++ b/dmp-backend/core/src/main/java/eu/eudat/configurations/DepositProperties.java
@@ -0,0 +1,25 @@
+package eu.eudat.configurations;
+
+import org.springframework.boot.context.properties.ConfigurationProperties;
+import org.springframework.boot.context.properties.bind.ConstructorBinding;
+
+import java.util.List;
+
+@ConfigurationProperties(prefix = "deposit")
+public class DepositProperties {
+
+ private List urls;
+
+ @ConstructorBinding
+ public DepositProperties(List urls) {
+ this.urls = urls;
+ }
+
+ public List getUrls() {
+ return urls;
+ }
+
+ public void setUrls(List urls) {
+ this.urls = urls;
+ }
+}
diff --git a/dmp-backend/core/src/main/java/eu/eudat/repository/DepositRepository.java b/dmp-backend/core/src/main/java/eu/eudat/repository/DepositRepository.java
new file mode 100644
index 000000000..c0dd332b3
--- /dev/null
+++ b/dmp-backend/core/src/main/java/eu/eudat/repository/DepositRepository.java
@@ -0,0 +1,39 @@
+package eu.eudat.repository;
+
+import eu.eudat.depositinterface.models.DMPDepositModel;
+import eu.eudat.depositinterface.repository.RepositoryDeposit;
+import eu.eudat.depositinterface.repository.RepositoryDepositConfiguration;
+import org.springframework.core.ParameterizedTypeReference;
+import org.springframework.web.reactive.function.client.WebClient;
+
+import java.util.List;
+
+public class DepositRepository implements RepositoryDeposit {
+
+ private final WebClient depositClient;
+
+ public DepositRepository(WebClient depositClient) {
+ this.depositClient = depositClient;
+ }
+
+
+ @Override
+ public String deposit(String repositoryId, DMPDepositModel dmpDepositModel, String repositoryAccessToken) throws Exception {
+ return depositClient.post().uri("/" + repositoryId, uriBuilder -> uriBuilder.queryParam("authToken", repositoryAccessToken).build()).bodyValue(dmpDepositModel).exchangeToMono(mono -> mono.bodyToMono(String.class)).block();
+ }
+
+ @Override
+ public String authenticate(String repositoryId, String code) {
+ return depositClient.get().uri("/authenticate/" + repositoryId, uriBuilder -> uriBuilder.queryParam("authToken", code).build()).exchangeToMono(mono -> mono.bodyToMono(String.class)).block();
+ }
+
+ @Override
+ public List getConfiguration() {
+ return depositClient.get().uri("/configuration").exchangeToMono(mono -> mono.bodyToMono(new ParameterizedTypeReference>() {})).block();
+ }
+
+ @Override
+ public String getLogo(String repositoryId) {
+ return depositClient.get().uri("/logo/" + repositoryId).exchangeToMono(mono -> mono.bodyToMono(String.class)).block();
+ }
+}
diff --git a/dmp-backend/web/src/main/java/eu/eudat/logic/managers/DataManagementPlanManager.java b/dmp-backend/web/src/main/java/eu/eudat/logic/managers/DataManagementPlanManager.java
index 37dca6d08..2148b5f81 100644
--- a/dmp-backend/web/src/main/java/eu/eudat/logic/managers/DataManagementPlanManager.java
+++ b/dmp-backend/web/src/main/java/eu/eudat/logic/managers/DataManagementPlanManager.java
@@ -1960,6 +1960,7 @@ public class DataManagementPlanManager {
return fileEnvelope;
}
+ @Transactional
public FileEnvelope getRDAJsonDocument(String id, Principal principal) throws Exception {
DMP dmp = databaseRepository.getDmpDao().find(UUID.fromString(id));
if (!dmp.isPublic() && dmp.getUsers().stream().noneMatch(userInfo -> userInfo.getUser().getId() == principal.getId()))
@@ -2464,6 +2465,7 @@ public class DataManagementPlanManager {
return null;
}
+ @Transactional
public Doi createDoi(DepositRequest depositRequest, Principal principal) throws Exception {
DMP dmp = this.apiContext.getOperationsContext().getDatabaseRepository().getDmpDao().find(UUID.fromString(depositRequest.getDmpId()));
if (!isUserOwnerOfDmp(dmp, principal))
diff --git a/dmp-backend/web/src/main/java/eu/eudat/logic/managers/DepositManager.java b/dmp-backend/web/src/main/java/eu/eudat/logic/managers/DepositManager.java
index fa8e20d42..a1208e747 100644
--- a/dmp-backend/web/src/main/java/eu/eudat/logic/managers/DepositManager.java
+++ b/dmp-backend/web/src/main/java/eu/eudat/logic/managers/DepositManager.java
@@ -6,10 +6,14 @@ import eu.eudat.models.data.doi.DepositRequest;
import eu.eudat.models.data.doi.Doi;
import eu.eudat.models.data.doi.RepositoryConfig;
import eu.eudat.models.data.security.Principal;
+import jakarta.transaction.Transactional;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.beans.factory.annotation.Qualifier;
+import org.springframework.core.ParameterizedTypeReference;
import org.springframework.stereotype.Component;
+import org.springframework.web.reactive.function.client.WebClient;
import java.util.ArrayList;
import java.util.List;
@@ -19,18 +23,20 @@ import java.util.Optional;
public class DepositManager {
private static final Logger logger = LoggerFactory.getLogger(DepositManager.class);
- private List repositories;
+ //private List repositories;
private DataManagementPlanManager dataManagementPlanManager;
+ private final List depositClients;
@Autowired
- public DepositManager(List repositories, DataManagementPlanManager dataManagementPlanManager){
- this.repositories = repositories;
+ public DepositManager(/*List repositories,*/ DataManagementPlanManager dataManagementPlanManager, @Qualifier("depositClients") List depositClients){
+ //this.repositories = repositories;
this.dataManagementPlanManager = dataManagementPlanManager;
+ this.depositClients = depositClients;
}
public List getAvailableRepos() {
List reposConfigModel = new ArrayList<>();
- for (RepositoryDeposit r: this.repositories) {
+ for (RepositoryDeposit r: this.depositClients) {
List repoConf = r.getConfiguration();
if(repoConf != null) {
for(RepositoryDepositConfiguration cf: repoConf){
@@ -43,7 +49,7 @@ public class DepositManager {
}
public String authenticate(String id, String code) {
- for(RepositoryDeposit r: this.repositories){
+ for(RepositoryDeposit r: this.depositClients){
if(r.getConfiguration().stream().anyMatch(x -> x.getRepositoryId().equals(id))){
return r.authenticate(id, code);
}
@@ -51,12 +57,13 @@ public class DepositManager {
return null;
}
+ @Transactional
public Doi deposit(DepositRequest depositRequest, Principal principal) throws Exception {
return this.dataManagementPlanManager.createDoi(depositRequest, principal);
}
public String getRepositoryLogo(String repositoryId){
- for(RepositoryDeposit r: this.repositories){
+ for(RepositoryDeposit r: this.depositClients){
Optional cf = r.getConfiguration().stream().filter(x -> x.getRepositoryId().equals(repositoryId)).findFirst();
if(cf.isPresent()){
return cf.get().isHasLogo() ? r.getLogo(repositoryId) : null;
diff --git a/dmp-backend/web/src/main/java/eu/eudat/logic/security/repositorydeposit/mapper/DMPToDepositMapper.java b/dmp-backend/web/src/main/java/eu/eudat/logic/security/repositorydeposit/mapper/DMPToDepositMapper.java
index db21be3e7..ccb614755 100644
--- a/dmp-backend/web/src/main/java/eu/eudat/logic/security/repositorydeposit/mapper/DMPToDepositMapper.java
+++ b/dmp-backend/web/src/main/java/eu/eudat/logic/security/repositorydeposit/mapper/DMPToDepositMapper.java
@@ -5,6 +5,7 @@ import com.fasterxml.jackson.databind.ObjectMapper;
import eu.eudat.data.old.*;
import eu.eudat.depositinterface.models.*;
import eu.eudat.logic.utilities.builders.XmlBuilder;
+import jakarta.transaction.Transactional;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.w3c.dom.Document;
@@ -25,6 +26,7 @@ public class DMPToDepositMapper {
private static final Logger logger = LoggerFactory.getLogger(DMPToDepositMapper.class);
private static final ObjectMapper mapper = new ObjectMapper();
+ @Transactional
public static DMPDepositModel fromDMP(DMP entity, FileEnvelope pdfFile, FileEnvelope jsonFile, File supportingFilesZip, String previousDOI) {
DMPDepositModel deposit = new DMPDepositModel();
deposit.setId(entity.getId());
@@ -49,6 +51,7 @@ public class DMPToDepositMapper {
return deposit;
}
+ @Transactional
private static DatasetDepositModel fromDataset(Dataset entity){
DatasetDepositModel deposit = new DatasetDepositModel();
deposit.setLabel(entity.getLabel());
diff --git a/dmp-backend/web/src/main/java/eu/eudat/models/rda/mapper/DmpRDAMapper.java b/dmp-backend/web/src/main/java/eu/eudat/models/rda/mapper/DmpRDAMapper.java
index 6ac1c3a02..b2c061b15 100644
--- a/dmp-backend/web/src/main/java/eu/eudat/models/rda/mapper/DmpRDAMapper.java
+++ b/dmp-backend/web/src/main/java/eu/eudat/models/rda/mapper/DmpRDAMapper.java
@@ -88,20 +88,24 @@ public class DmpRDAMapper {
rda.getCost().add(CostRDAMapper.toRDA((Map)costl));
});
}
- UserInfo contactDb = apiContext.getOperationsContext().getDatabaseRepository().getUserInfoDao().find(UUID.fromString((String) extraProperties.get("contact")));
- UserInfo contact = new UserInfo();
- contact.setId(contactDb.getId());
- contact.setName(contactDb.getName());
- contact.setEmail(contactDb.getEmail());
- if(contact.getEmail() == null){
- for(UserDMP userDMP: dmp.getUsers()){
- if(userDMP.getDmp().getId() == dmp.getId() && userDMP.getUser().getEmail() != null){
- contact.setEmail(userDMP.getUser().getEmail());
- break;
+ try {
+ UserInfo contactDb = apiContext.getOperationsContext().getDatabaseRepository().getUserInfoDao().find(UUID.fromString((String) extraProperties.get("contact")));
+ UserInfo contact = new UserInfo();
+ contact.setId(contactDb.getId());
+ contact.setName(contactDb.getName());
+ contact.setEmail(contactDb.getEmail());
+ if (contact.getEmail() == null) {
+ for (UserDMP userDMP : dmp.getUsers()) {
+ if (userDMP.getDmp().getId() == dmp.getId() && userDMP.getUser().getEmail() != null) {
+ contact.setEmail(userDMP.getUser().getEmail());
+ break;
+ }
}
}
+ rda.setContact(ContactRDAMapper.toRDA(contact));
+ } catch (NoResultException e) {
+ logger.error(e.getMessage(), e);
}
- rda.setContact(ContactRDAMapper.toRDA(contact));
}
/*UserInfo creator;
diff --git a/dmp-backend/web/src/main/resources/config/application.yml b/dmp-backend/web/src/main/resources/config/application.yml
index ced49fdd3..e795cc7d6 100644
--- a/dmp-backend/web/src/main/resources/config/application.yml
+++ b/dmp-backend/web/src/main/resources/config/application.yml
@@ -14,5 +14,6 @@ spring:
optional:classpath:config/elasticsearch.yml[.yml], optional:classpath:config/elasticsearch-${spring.profiles.active}.yml[.yml], optional:file:../config/elasticsearch-${spring.profiles.active}.yml[.yml],
optional:classpath:config/file-path.yml[.yml], optional:classpath:config/file-path-${spring.profiles.active}.yml[.yml], optional:file:../config/file-path-${spring.profiles.active}.yml[.yml],
optional:classpath:config/idpclaims.yml[.yml], optional:classpath:config/idpclaims-${spring.profiles.active}.yml[.yml], optional:file:../config/idpclaims-${spring.profiles.active}.yml[.yml],
- optional:classpath:config/external.yml[.yml], optional:classpath:config/external-${spring.profiles.active}.yml[.yml], optional:file:../config/external-${spring.profiles.active}.yml[.yml]
- optional:classpath:config/swagger.yml[.yml], optional:classpath:config/swagger-${spring.profiles.active}.yml[.yml], optional:file:../config/swagger-${spring.profiles.active}.yml[.yml]
+ optional:classpath:config/external.yml[.yml], optional:classpath:config/external-${spring.profiles.active}.yml[.yml], optional:file:../config/external-${spring.profiles.active}.yml[.yml],
+ optional:classpath:config/swagger.yml[.yml], optional:classpath:config/swagger-${spring.profiles.active}.yml[.yml], optional:file:../config/swagger-${spring.profiles.active}.yml[.yml],
+ optional:classpath:config/deposit.yml[.yml], optional:classpath:config/deposit-${spring.profiles.active}.yml[.yml], optional:file:../config/deposit-${spring.profiles.active}.yml[.yml]
diff --git a/dmp-backend/web/src/main/resources/config/deposit.yml b/dmp-backend/web/src/main/resources/config/deposit.yml
new file mode 100644
index 000000000..bf19ffbd5
--- /dev/null
+++ b/dmp-backend/web/src/main/resources/config/deposit.yml
@@ -0,0 +1,3 @@
+deposit:
+ urls:
+ - http://localhost:8080
\ No newline at end of file