diff --git a/dmp-backend/web/src/main/java/eu/eudat/controllers/QuickWizardController.java b/dmp-backend/web/src/main/java/eu/eudat/controllers/QuickWizardController.java index 2b4c31a4c..3f9f073f2 100644 --- a/dmp-backend/web/src/main/java/eu/eudat/controllers/QuickWizardController.java +++ b/dmp-backend/web/src/main/java/eu/eudat/controllers/QuickWizardController.java @@ -1,6 +1,8 @@ package eu.eudat.controllers; +import eu.eudat.data.entities.Funder; +import eu.eudat.data.entities.Project; import eu.eudat.logic.managers.*; import eu.eudat.logic.services.ApiContext; import eu.eudat.models.data.datasetwizard.DatasetWizardModel; @@ -26,24 +28,28 @@ import java.util.UUID; public class QuickWizardController extends BaseController { private QuickWizardManager quickWizardManager; - private GrantManager grantManager; - - private DatasetManager datasetManager; @Autowired - public QuickWizardController(ApiContext apiContext, QuickWizardManager quickWizardManager, DatasetManager datasetManager, GrantManager grantManager) { + public QuickWizardController(ApiContext apiContext, QuickWizardManager quickWizardManager, DatasetManager datasetManager) { super(apiContext); this.quickWizardManager = quickWizardManager; this.datasetManager = datasetManager; - this.grantManager = grantManager; } - @Transactional @RequestMapping(method = RequestMethod.POST, consumes = "application/json", produces = "application/json") public @ResponseBody ResponseEntity> addQuickWizardModel(@Valid @RequestBody QuickWizardModel quickWizard, Principal principal) throws Exception { + + Funder funderEntity; + //Create Funder + if (quickWizard.getFunder().getExistFunder() == null) { + funderEntity = this.quickWizardManager.createOrUpdate(quickWizard.getFunder().toDataFunder(), principal); + } else { + funderEntity = quickWizard.getFunder().getExistFunder().toDataModel(); + } + eu.eudat.data.entities.Grant grantEntity; //Create Grant if (quickWizard.getGrant().getExistGrant() == null) { @@ -51,17 +57,26 @@ public class QuickWizardController extends BaseController { } else { grantEntity = quickWizard.getGrant().getExistGrant().toDataModel(); } + //grantEntity.setFunder(funderEntity); + + Project projectEntity; + //Create Project + if (quickWizard.getProject().getExistProject() == null) { + projectEntity = this.quickWizardManager.createOrUpdate(quickWizard.getProject().toDataProject(), principal); + } else { + projectEntity = quickWizard.getProject().getExistProject().toDataModel(); + } + //Create Dmp eu.eudat.data.entities.DMP dmpEntity = this.quickWizardManager.createOrUpdate( - quickWizard.getDmp().toDataDmp( - grantEntity, - principal), + quickWizard.getDmp().toDataDmp(grantEntity, projectEntity, principal), + funderEntity, principal); //Create Datasets quickWizard.getDmp().setId(dmpEntity.getId()); for (DatasetDescriptionQuickWizardModel dataset : quickWizard.getDatasets().getDatasetsList()) { - DataManagementPlan dmp = quickWizard.getDmp().toDataDmp( grantEntity, principal); + DataManagementPlan dmp = quickWizard.getDmp().toDataDmp(grantEntity, projectEntity, principal); UUID uuid = quickWizard.getDmp().getDatasetProfile().getId(); DatasetWizardModel datasetWizardModel = dataset.toDataModel(dmp, uuid); this.datasetManager.createOrUpdate(datasetWizardModel, principal); diff --git a/dmp-backend/web/src/main/java/eu/eudat/logic/managers/GrantManager.java b/dmp-backend/web/src/main/java/eu/eudat/logic/managers/GrantManager.java index eff59a555..6c4fae826 100644 --- a/dmp-backend/web/src/main/java/eu/eudat/logic/managers/GrantManager.java +++ b/dmp-backend/web/src/main/java/eu/eudat/logic/managers/GrantManager.java @@ -114,7 +114,9 @@ public class GrantManager { FunderCriteria funderCriteria = new FunderCriteria(); funderCriteria.setReference(grantCriteria.getCriteria().getFunderReference()); Funder funder = apiContext.getOperationsContext().getDatabaseRepository().getFunderDao().getWithCritetia(funderCriteria).getSingleOrDefault(); - grantCriteria.getCriteria().setFunderId(funder.getId().toString()); + if (funder != null) { + grantCriteria.getCriteria().setFunderId(funder.getId().toString()); + } } grantCriteria.getCriteria().setReference("dmp:"); QueryableList items = apiContext.getOperationsContext().getDatabaseRepository().getGrantDao().getWithCriteria(grantCriteria.getCriteria()); diff --git a/dmp-backend/web/src/main/java/eu/eudat/logic/managers/QuickWizardManager.java b/dmp-backend/web/src/main/java/eu/eudat/logic/managers/QuickWizardManager.java index 57c6e97b7..e39aa383f 100644 --- a/dmp-backend/web/src/main/java/eu/eudat/logic/managers/QuickWizardManager.java +++ b/dmp-backend/web/src/main/java/eu/eudat/logic/managers/QuickWizardManager.java @@ -1,6 +1,8 @@ package eu.eudat.logic.managers; +import eu.eudat.data.dao.criteria.FunderCriteria; import eu.eudat.data.dao.criteria.GrantCriteria; +import eu.eudat.data.dao.criteria.ProjectCriteria; import eu.eudat.data.entities.*; import eu.eudat.logic.services.ApiContext; import eu.eudat.logic.services.operations.DatabaseRepository; @@ -24,20 +26,35 @@ public class QuickWizardManager { this.databaseRepository = apiContext.getOperationsContext().getDatabaseRepository(); } + public Funder createOrUpdate(eu.eudat.models.data.funder.Funder funder, Principal principal) { + Funder funderEntity = funder.toDataModel(); + return databaseRepository.getFunderDao().createOrUpdate(funderEntity); + } + public Grant createOrUpdate(eu.eudat.models.data.grant.Grant grant, Principal principal) throws ParseException, IOException { eu.eudat.data.entities.Grant grantEntity = grant.toDataModel(); grantEntity.setType(eu.eudat.data.entities.Grant.GrantType.INTERNAL.getValue()); grantEntity.setCreationUser(databaseRepository.getUserInfoDao().find(principal.getId())); - Grant grantEntityRet = databaseRepository.getGrantDao().createOrUpdate(grantEntity); - return grantEntityRet; + return databaseRepository.getGrantDao().createOrUpdate(grantEntity); } - public DMP createOrUpdate(DataManagementPlan dataManagementPlan, Principal principal) throws Exception { + public Project createOrUpdate(eu.eudat.models.data.project.Project project, Principal principal) { + Project projectEntity = project.toDataModel(); + projectEntity.setCreationUser(databaseRepository.getUserInfoDao().find(principal.getId())); + return databaseRepository.getProjectDao().createOrUpdate(projectEntity); + } + + public DMP createOrUpdate(DataManagementPlan dataManagementPlan, Funder funderEntity, Principal principal) throws Exception { DMP newDmp = dataManagementPlan.toDataModel(); + if (funderEntity != null) { + newDmp.getGrant().setFunder(funderEntity); + } UserInfo user = apiContext.getOperationsContext().getDatabaseRepository().getUserInfoDao().find(principal.getId()); + createFunderIfItDoesntExist(newDmp, user); createGrantIfItDoesntExist(newDmp, user); - //newDmp.setCreator(user); - DMP dmpret = apiContext.getOperationsContext().getDatabaseRepository().getDmpDao().createOrUpdate(newDmp); + createProjectIfItDoesntExist(newDmp, user); + apiContext.getOperationsContext().getDatabaseRepository().getGrantDao().createOrUpdate(newDmp.getGrant()); + DMP dmpret = apiContext.getOperationsContext().getDatabaseRepository().getDmpDao().createOrUpdate(newDmp); if (dataManagementPlan.getAssociatedUsers().size() == 0) assignUser(newDmp, user, apiContext); return dmpret; @@ -64,4 +81,32 @@ public class QuickWizardManager { } } } + + private void createFunderIfItDoesntExist(DMP newDmp, UserInfo userInfo) { + if (newDmp.getGrant().getFunder() != null) { + Funder funder = newDmp.getGrant().getFunder(); + FunderCriteria criteria = new FunderCriteria(); + criteria.setReference(funder.getReference()); + eu.eudat.data.entities.Funder funderEntity = databaseRepository.getFunderDao().getWithCritetia(criteria).getSingleOrDefault(); + if (funderEntity != null) funder.setId(funderEntity.getId()); + else { + funder.setType(Funder.FunderType.EXTERNAL.getValue()); + databaseRepository.getFunderDao().createOrUpdate(funder); + } + } + } + + private void createProjectIfItDoesntExist(DMP newDmp, UserInfo userInfo) { + if (newDmp.getProject() != null) { + Project project = newDmp.getProject(); + ProjectCriteria criteria = new ProjectCriteria(); + criteria.setReference(project.getReference()); + eu.eudat.data.entities.Project projectEntity = databaseRepository.getProjectDao().getWithCritetia(criteria).getSingleOrDefault(); + if (projectEntity != null) project.setId(projectEntity.getId()); + else { + project.setType(Project.ProjectType.EXTERNAL.getValue()); + databaseRepository.getProjectDao().createOrUpdate(project); + } + } + } } diff --git a/dmp-backend/web/src/main/java/eu/eudat/models/data/dmp/DataManagementPlan.java b/dmp-backend/web/src/main/java/eu/eudat/models/data/dmp/DataManagementPlan.java index d018cab85..b70ee451c 100644 --- a/dmp-backend/web/src/main/java/eu/eudat/models/data/dmp/DataManagementPlan.java +++ b/dmp-backend/web/src/main/java/eu/eudat/models/data/dmp/DataManagementPlan.java @@ -283,6 +283,9 @@ public class DataManagementPlan implements DataModel { if (this.grant != null) dataManagementPlanEntity.setGrant(this.grant.toDataModel()); dataManagementPlanEntity.setStatus((short) this.status); dataManagementPlanEntity.setDescription(this.description); + if (this.project != null) { + dataManagementPlanEntity.setProject(this.project.toDataModel()); + } if (this.profiles != null) { Set datasetProfiles = new HashSet<>(); for (AssociatedProfile profile : this.profiles) { diff --git a/dmp-backend/web/src/main/java/eu/eudat/models/data/project/Project.java b/dmp-backend/web/src/main/java/eu/eudat/models/data/project/Project.java index 61474faaa..5d61d0232 100644 --- a/dmp-backend/web/src/main/java/eu/eudat/models/data/project/Project.java +++ b/dmp-backend/web/src/main/java/eu/eudat/models/data/project/Project.java @@ -161,7 +161,7 @@ public class Project implements DataModel assProfile = new LinkedList<>(); assProfile.add(this.datasetProfile); diff --git a/dmp-backend/web/src/main/java/eu/eudat/models/data/quickwizard/FunderQuickWizardModel.java b/dmp-backend/web/src/main/java/eu/eudat/models/data/quickwizard/FunderQuickWizardModel.java new file mode 100644 index 000000000..e3c45db6d --- /dev/null +++ b/dmp-backend/web/src/main/java/eu/eudat/models/data/quickwizard/FunderQuickWizardModel.java @@ -0,0 +1,31 @@ +package eu.eudat.models.data.quickwizard; + +import eu.eudat.models.data.funder.Funder; + +public class FunderQuickWizardModel { + private String label; + private Funder existFunder; + + public String getLabel() { + return label; + } + public void setLabel(String label) { + this.label = label; + } + + public Funder getExistFunder() { + return existFunder; + } + public void setExistFunder(Funder existFunder) { + this.existFunder = existFunder; + } + + public Funder toDataFunder() { + Funder toFunder = new Funder(); + toFunder.setLabel(this.label); + toFunder.setReference("dmp:" + this.label); + toFunder.setDefinition(""); + toFunder.setType(eu.eudat.data.entities.Funder.FunderType.INTERNAL.getValue()); + return toFunder; + } +} diff --git a/dmp-backend/web/src/main/java/eu/eudat/models/data/quickwizard/ProjectQuickWizardModel.java b/dmp-backend/web/src/main/java/eu/eudat/models/data/quickwizard/ProjectQuickWizardModel.java new file mode 100644 index 000000000..698cbc4c5 --- /dev/null +++ b/dmp-backend/web/src/main/java/eu/eudat/models/data/quickwizard/ProjectQuickWizardModel.java @@ -0,0 +1,41 @@ +package eu.eudat.models.data.quickwizard; + +import eu.eudat.models.data.project.Project; + +public class ProjectQuickWizardModel { + private String label; + private String description; + private Project existProject; + + public String getLabel() { + return label; + } + public void setLabel(String label) { + this.label = label; + } + + public String getDescription() { + return description; + } + public void setDescription(String description) { + this.description = description; + } + + public Project getExistProject() { + return existProject; + } + public void setExistProject(Project existProject) { + this.existProject = existProject; + } + + public Project toDataProject() { + Project toProject = new Project(); + toProject.setAbbreviation(""); + toProject.setLabel(this.label); + toProject.setReference("dmp:" + this.label); + toProject.setUri(""); + toProject.setDefinition(""); + toProject.setDescription(this.description); + return toProject; + } +} diff --git a/dmp-backend/web/src/main/java/eu/eudat/models/data/quickwizard/QuickWizardModel.java b/dmp-backend/web/src/main/java/eu/eudat/models/data/quickwizard/QuickWizardModel.java index 85dd6d984..9d4fc2d11 100644 --- a/dmp-backend/web/src/main/java/eu/eudat/models/data/quickwizard/QuickWizardModel.java +++ b/dmp-backend/web/src/main/java/eu/eudat/models/data/quickwizard/QuickWizardModel.java @@ -3,11 +3,20 @@ package eu.eudat.models.data.quickwizard; public class QuickWizardModel { + private FunderQuickWizardModel funder; private GrantQuickWizardModel grant; + private ProjectQuickWizardModel project; private DmpQuickWizardModel dmp; private DatasetQuickWizardModel datasets; private int status; + public FunderQuickWizardModel getFunder() { + return funder; + } + public void setFunder(FunderQuickWizardModel funder) { + this.funder = funder; + } + public GrantQuickWizardModel getGrant() { return grant; } @@ -15,6 +24,13 @@ public class QuickWizardModel { this.grant = grant; } + public ProjectQuickWizardModel getProject() { + return project; + } + public void setProject(ProjectQuickWizardModel project) { + this.project = project; + } + public DmpQuickWizardModel getDmp() { return dmp; }