diff --git a/dmp-backend/data/src/main/java/eu/eudat/data/dao/entities/DoiFunderDao.java b/dmp-backend/data/src/main/java/eu/eudat/data/dao/entities/DoiFunderDao.java new file mode 100644 index 000000000..038b4b4b2 --- /dev/null +++ b/dmp-backend/data/src/main/java/eu/eudat/data/dao/entities/DoiFunderDao.java @@ -0,0 +1,11 @@ +package eu.eudat.data.dao.entities; + +import eu.eudat.data.dao.DatabaseAccessLayer; +import eu.eudat.data.entities.DoiFunder; + +import java.util.UUID; + +public interface DoiFunderDao extends DatabaseAccessLayer { + + DoiFunder findFunderByName(String name); +} diff --git a/dmp-backend/data/src/main/java/eu/eudat/data/dao/entities/DoiFunderDaoImpl.java b/dmp-backend/data/src/main/java/eu/eudat/data/dao/entities/DoiFunderDaoImpl.java new file mode 100644 index 000000000..3e775b952 --- /dev/null +++ b/dmp-backend/data/src/main/java/eu/eudat/data/dao/entities/DoiFunderDaoImpl.java @@ -0,0 +1,55 @@ +package eu.eudat.data.dao.entities; + +import eu.eudat.data.dao.DatabaseAccess; +import eu.eudat.data.dao.databaselayer.service.DatabaseService; +import eu.eudat.data.entities.DoiFunder; +import eu.eudat.queryable.QueryableList; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Component; + +import java.util.UUID; +import java.util.concurrent.CompletableFuture; + +@Component("DoiFunderDao") +public class DoiFunderDaoImpl extends DatabaseAccess implements DoiFunderDao { + + @Autowired + public DoiFunderDaoImpl(DatabaseService databaseService) { + super(databaseService); + } + + @Override + public DoiFunder findFunderByName(String name) { + return this.asQueryable().toList().stream().filter(doiFunder -> name.contains(doiFunder.getName()) || doiFunder.getName().contains(name)).findFirst().orElse(null); + } + + @Override + public DoiFunder createOrUpdate(DoiFunder item) { + return this.getDatabaseService().createOrUpdate(item, DoiFunder.class); + } + + @Override + public CompletableFuture createOrUpdateAsync(DoiFunder item) { + return CompletableFuture.supplyAsync(() -> this.createOrUpdate(item)); + } + + @Override + public DoiFunder find(UUID id) { + return this.getDatabaseService().getQueryable(DoiFunder.class).where(((builder, root) -> builder.equal(root.get("id"), id))).getSingle(); + } + + @Override + public DoiFunder find(UUID id, String hint) { + throw new UnsupportedOperationException(); + } + + @Override + public void delete(DoiFunder item) { + this.getDatabaseService().delete(item); + } + + @Override + public QueryableList asQueryable() { + return this.getDatabaseService().getQueryable(DoiFunder.class); + } +} diff --git a/dmp-backend/data/src/main/java/eu/eudat/data/entities/DoiFunder.java b/dmp-backend/data/src/main/java/eu/eudat/data/entities/DoiFunder.java new file mode 100644 index 000000000..6ee816210 --- /dev/null +++ b/dmp-backend/data/src/main/java/eu/eudat/data/entities/DoiFunder.java @@ -0,0 +1,61 @@ +package eu.eudat.data.entities; + +import eu.eudat.queryable.queryableentity.DataEntity; + +import javax.persistence.*; +import java.util.List; +import java.util.UUID; + +@Entity +@Table(name = "\"DoiFunder\"") +public class DoiFunder implements DataEntity { + + @Id + private UUID id; + + @Column(name = "name") + private String name; + + @Column(name = "doi") + private String doi; + + public UUID getId() { + return id; + } + + public void setId(UUID id) { + this.id = id; + } + + public String getName() { + return name; + } + + public void setName(String name) { + this.name = name; + } + + public String getDoi() { + return doi; + } + + public void setDoi(String doi) { + this.doi = doi; + } + + @Override + public void update(DoiFunder entity) { + this.name = entity.name; + this.doi = entity.doi; + } + + @Override + public UUID getKeys() { + return id; + } + + @Override + public DoiFunder buildFromTuple(List tuple, List fields, String base) { + return null; + } +} 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 1d1c9bec8..a2815c328 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 @@ -1667,6 +1667,14 @@ public class DataManagementPlanManager { i++; } dataBuilder.append("],\n"); + String grantReferenceHead = dmp.getGrant().getReference().split(":")[0]; + if (grantReferenceHead.equals("openaire")) { + String grantReferenceTail = dmp.getGrant().getReference().split(":")[3]; + DoiFunder doiFunder = this.apiContext.getOperationsContext().getDatabaseRepository().getDoiFunderDao().findFunderByName(dmp.getGrant().getFunder().getLabel()); + String finalId = doiFunder.getDoi() + "::" + grantReferenceTail; + dataBuilder.append(" \"grants\": [{\n"); + dataBuilder.append(" \t\t\"id\": \"").append(finalId).append("\"\n}],\n"); + } dataBuilder.append(" \"creators\": [{\n"); dataBuilder.append(" \t\t\"name\": \"").append(dmp.getUsers().stream().filter(userDMP -> userDMP.getRole().equals(UserDMP.UserDMPRoles.OWNER.getValue())).findFirst().get().getUser().getName()).append("\",\n"); dataBuilder.append(" \t\t\"affiliation\": \"OpenDMP\"}]\n"); diff --git a/dmp-backend/web/src/main/java/eu/eudat/logic/services/operations/DatabaseRepository.java b/dmp-backend/web/src/main/java/eu/eudat/logic/services/operations/DatabaseRepository.java index 516f7e949..ff6518354 100644 --- a/dmp-backend/web/src/main/java/eu/eudat/logic/services/operations/DatabaseRepository.java +++ b/dmp-backend/web/src/main/java/eu/eudat/logic/services/operations/DatabaseRepository.java @@ -58,5 +58,7 @@ public interface DatabaseRepository { UserAssociationDao getUserAssociationDao(); + DoiFunderDao getDoiFunderDao(); + void detachEntity(T entity); } diff --git a/dmp-backend/web/src/main/java/eu/eudat/logic/services/operations/DatabaseRepositoryImpl.java b/dmp-backend/web/src/main/java/eu/eudat/logic/services/operations/DatabaseRepositoryImpl.java index ff5f6506e..01aa5093a 100644 --- a/dmp-backend/web/src/main/java/eu/eudat/logic/services/operations/DatabaseRepositoryImpl.java +++ b/dmp-backend/web/src/main/java/eu/eudat/logic/services/operations/DatabaseRepositoryImpl.java @@ -38,6 +38,7 @@ public class DatabaseRepositoryImpl implements DatabaseRepository { private LockDao lockDao; private NotificationDao notificationDao; private UserAssociationDao userAssociationDao; + private DoiFunderDao doiFunderDao; private EntityManager entityManager; @@ -296,6 +297,16 @@ public class DatabaseRepositoryImpl implements DatabaseRepository { return userAssociationDao; } + @Override + public DoiFunderDao getDoiFunderDao() { + return doiFunderDao; + } + + @Autowired + public void setDoiFunderDao(DoiFunderDao doiFunderDao) { + this.doiFunderDao = doiFunderDao; + } + @Autowired public void setUserAssociationDao(UserAssociationDao userAssociationDao) { this.userAssociationDao = userAssociationDao; diff --git a/dmp-db-scema/updates/09/02_doifunder.sql b/dmp-db-scema/updates/09/02_doifunder.sql new file mode 100644 index 000000000..228c6b4a5 --- /dev/null +++ b/dmp-db-scema/updates/09/02_doifunder.sql @@ -0,0 +1,24 @@ +CREATE TABLE public."DoiFunder" ( + id uuid DEFAULT public.uuid_generate_v4() NOT NULL, + name character varying, + doi character varying +); + + +ALTER TABLE public."DoiFunder" OWNER TO dmptool; + +COPY public."DoiFunder" (id, name, doi) FROM stdin; +ad9bad58-52a9-4c0c-85e1-ca8d0bf72c5f Australian Research Council 10.13039/501100000923 +a778e6fe-17d1-4e5b-978f-2a290f096530 European Commission 10.13039/501100000780 +ef314bc9-b72c-4c88-9ca8-e23d4f564136 Fundação para a Ciência e a Tecnologia 10.13039/501100001871 +19a21b03-9313-4497-b69c-91c8396aeda8 Ministarstvo Prosvete, Nauke i Tehnološkog Razvoja 10.13039/501100004564 +d6430393-daac-403a-bb76-36100662b4d6 Ministarstvo Znanosti, Obrazovanja i Sporta 10.13039/501100006588 +4b06a13f-8392-4aa4-ae28-6b6ab68fc266 National Health and Medical Research Council 10.13039/501100000925 +cbcac800-69cb-42fe-95af-5de1594987e2 National Science Foundation 10.13039/100000001 +3c8b88c6-710c-4a9c-bf39-bc35259cc7bf Nederlandse Organisatie voor Wetenschappelijk Onderzoek 10.13039/501100003246 +1816a401-cf74-4ff9-939d-faf1aad21b60 Wellcome Trust 10.13039/100004440 +\. + +ALTER TABLE ONLY public."DoiFunder" + ADD CONSTRAINT "DoiFunder_pkey" PRIMARY KEY (id); +