package eu.eudat.logic.managers; import eu.eudat.data.entities.DMP; import eu.eudat.depositinterface.models.DMPDepositModel; import eu.eudat.depositinterface.repository.RepositoryDeposit; import eu.eudat.depositinterface.repository.RepositoryDepositConfiguration; import eu.eudat.exceptions.security.NonValidTokenException; import eu.eudat.logic.security.repositorydeposit.mapper.DMPToDepositMapper; import eu.eudat.logic.utilities.documents.helpers.FileEnvelope; import eu.eudat.logic.utilities.documents.pdf.PDFUtils; 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 org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.http.ResponseEntity; import org.springframework.stereotype.Component; import java.io.File; import java.nio.file.Files; import java.util.ArrayList; import java.util.List; import java.util.Optional; @Component public class DepositManager { private static final Logger logger = LoggerFactory.getLogger(DepositManager.class); private List repositories; private DataManagementPlanManager dataManagementPlanManager; @Autowired public DepositManager(List repositories, DataManagementPlanManager dataManagementPlanManager){ this.repositories = repositories; this.dataManagementPlanManager = dataManagementPlanManager; } public List getAvailableRepos() { List reposConfigModel = new ArrayList<>(); for (RepositoryDeposit r: this.repositories) { RepositoryConfig repoModel = new RepositoryConfig(); RepositoryDepositConfiguration repoConf = r.getConfiguration(); if(repoConf != null) { reposConfigModel.add(repoModel.toModel(repoConf)); } } return reposConfigModel; } public String authenticate(String id, String code) { Optional repo = repositories.stream().filter(x -> x.getConfiguration().getRepositoryId().equals(id)).findFirst(); return repo.map(repositoryDeposit -> repositoryDeposit.authenticate(code)).orElse(null); } public Doi deposit(DepositRequest depositRequest, Principal principal) throws Exception { return this.dataManagementPlanManager.createDoi(depositRequest, principal); } }