argos/dmp-backend/src/main/java/eu/eudat/managers/DataManagementPlanManager.java

108 lines
6.4 KiB
Java
Raw Normal View History

2017-12-15 00:01:26 +01:00
package eu.eudat.managers;
2018-01-17 13:03:51 +01:00
import java.text.ParseException;
2017-12-15 00:01:26 +01:00
import java.util.List;
import java.util.UUID;
2018-01-08 12:44:48 +01:00
import java.util.stream.Collectors;
2017-12-15 00:01:26 +01:00
2017-12-22 09:31:05 +01:00
import eu.eudat.dao.entities.*;
import eu.eudat.entities.DMP;
2017-12-22 09:31:05 +01:00
import eu.eudat.entities.Project;
import eu.eudat.entities.UserInfo;
2018-01-08 12:44:48 +01:00
import eu.eudat.exceptions.UnauthorisedException;
2017-12-19 09:38:47 +01:00
import eu.eudat.models.criteria.DataManagementPlanCriteria;
2017-12-20 15:52:09 +01:00
import eu.eudat.models.criteria.OrganisationCriteria;
2017-12-22 09:31:05 +01:00
import eu.eudat.models.criteria.ProjectCriteria;
2017-12-20 15:52:09 +01:00
import eu.eudat.models.criteria.ResearcherCriteria;
2017-12-19 09:38:47 +01:00
import eu.eudat.models.dmp.DataManagementPlan;
import eu.eudat.models.dmp.DataManagementPlanCriteriaRequest;
2017-12-15 00:01:26 +01:00
import eu.eudat.models.dmp.DataManagementPlanTableRequest;
import eu.eudat.models.helpers.DataTableData;
2017-12-19 15:09:49 +01:00
import eu.eudat.models.listingmodels.DataManagementPlanListingModel;
2017-12-20 15:52:09 +01:00
import eu.eudat.models.security.Principal;
import eu.eudat.queryable.QueryableList;
2018-01-04 10:32:39 +01:00
import eu.eudat.services.ApiContext;
2017-12-15 00:01:26 +01:00
import eu.eudat.utilities.builders.DomainModelConverter;
public class DataManagementPlanManager {
2018-01-11 17:19:15 +01:00
public DataTableData<DataManagementPlanListingModel> getPaged(ApiContext apiContext, DataManagementPlanTableRequest dataManagementPlanTableRequest, Principal principal) throws IllegalAccessException, InstantiationException {
2018-01-12 09:05:44 +01:00
UserInfo userInfo = new UserInfo();
userInfo.setId(principal.getId());
2018-01-11 17:19:15 +01:00
QueryableList<DMP> items = apiContext.getDatabaseRepository().getDmpDao().getWithCriteria(dataManagementPlanTableRequest.getCriteria());
QueryableList<DMP> authItems = apiContext.getDatabaseRepository().getDmpDao().getAuthenticated(items, userInfo);
QueryableList<DMP> pagedItems = PaginationManager.applyPaging(authItems, dataManagementPlanTableRequest);
2018-01-08 15:57:21 +01:00
2018-01-11 17:19:15 +01:00
if (dataManagementPlanTableRequest.getWithHint()) pagedItems.withHint("fullyDetailed");
List<DataManagementPlanListingModel> datamanagementPlans = new DomainModelConverter<eu.eudat.entities.DMP, DataManagementPlanListingModel>().fromDataModel(pagedItems.toList(), DataManagementPlanListingModel.class);
DataTableData<DataManagementPlanListingModel> dataTable = new DataTableData<DataManagementPlanListingModel>();
dataTable.setData(datamanagementPlans);
dataTable.setTotalCount(items.count());
return dataTable;
}
2017-12-19 09:38:47 +01:00
2018-01-11 17:19:15 +01:00
public eu.eudat.models.dmp.DataManagementPlan getSingle(DMPDao dmpsRepository, String id, Principal principal) throws InstantiationException, IllegalAccessException {
DMP dataManagementPlanEntity = dmpsRepository.find(UUID.fromString(id));
if (dataManagementPlanEntity.getCreator().getId()!=principal.getId()&&dataManagementPlanEntity.getUsers().stream().filter(userInfo -> userInfo.getId() == principal.getId()).collect(Collectors.toList()).size() == 0)
throw new UnauthorisedException();
eu.eudat.models.dmp.DataManagementPlan datamanagementPlan = new eu.eudat.models.dmp.DataManagementPlan();
datamanagementPlan.fromDataModel(dataManagementPlanEntity);
return datamanagementPlan;
}
2017-12-20 15:52:09 +01:00
2018-01-11 17:19:15 +01:00
public List<DataManagementPlan> getWithCriteria(DMPDao dmpsRepository, DataManagementPlanCriteriaRequest dataManagementPlanCriteria) throws IllegalAccessException, InstantiationException {
QueryableList<DMP> items = dmpsRepository.getWithCriteria(dataManagementPlanCriteria.getCriteria());
List<eu.eudat.models.dmp.DataManagementPlan> datamanagementPlans = new DomainModelConverter<eu.eudat.entities.DMP, eu.eudat.models.dmp.DataManagementPlan>().fromDataModel(items.toList(), eu.eudat.models.dmp.DataManagementPlan.class);
return datamanagementPlans;
}
2017-12-20 15:52:09 +01:00
2018-01-17 13:03:51 +01:00
public static void createOrUpdate(ApiContext apiContext, DataManagementPlan dataManagementPlan, Principal principal) throws Exception {
2018-01-11 17:19:15 +01:00
DMP newDmp = dataManagementPlan.toDataModel();
createOrganisationsIfTheyDontExist(newDmp, apiContext.getDatabaseRepository().getOrganisationDao());
createResearchersIfTheyDontExist(newDmp, apiContext.getDatabaseRepository().getResearcherDao());
UserInfo user = apiContext.getDatabaseRepository().getUserInfoDao().find(principal.getId());
createProjectIfItDoesntExist(newDmp, apiContext.getDatabaseRepository().getProjectDao(), user);
newDmp.setCreator(user);
apiContext.getDatabaseRepository().getDmpDao().createOrUpdate(newDmp);
2017-12-20 15:52:09 +01:00
2018-01-11 17:19:15 +01:00
}
2017-12-20 15:52:09 +01:00
2018-01-11 17:19:15 +01:00
private static void createResearchersIfTheyDontExist(DMP newDmp, ResearcherDao researcherRepository) {
if (newDmp.getResearchers() != null && !newDmp.getResearchers().isEmpty()) {
for (eu.eudat.entities.Researcher researcher : newDmp.getResearchers()) {
ResearcherCriteria criteria = new ResearcherCriteria();
criteria.setLike(researcher.getReference());
List<eu.eudat.entities.Researcher> entries = researcherRepository.listBy(criteria);
if (entries != null && !entries.isEmpty()) researcher.setId(entries.get(0).getId());
else researcher = researcherRepository.create(researcher);
}
}
}
2017-12-22 09:31:05 +01:00
2018-01-11 17:19:15 +01:00
private static void createOrganisationsIfTheyDontExist(DMP newDmp, OrganisationDao organisationRepository) {
if (newDmp.getOrganisations() != null && !newDmp.getOrganisations().isEmpty()) {
for (eu.eudat.entities.Organisation organisation : newDmp.getOrganisations()) {
OrganisationCriteria criteria = new OrganisationCriteria();
criteria.setLike(organisation.getReference());
List<eu.eudat.entities.Organisation> entries = organisationRepository.listBy(criteria);
if (entries != null && !entries.isEmpty()) organisation.setId(entries.get(0).getId());
else organisation = organisationRepository.create(organisation);
}
}
}
private static void createProjectIfItDoesntExist(DMP newDmp, ProjectDao projectDao, UserInfo userInfo) {
if (newDmp.getProject() != null) {
Project project = newDmp.getProject();
ProjectCriteria criteria = new ProjectCriteria();
criteria.setLike(project.getReference());
List<eu.eudat.entities.Project> entries = projectDao.getWithCriteria(criteria).toList();
if (entries != null && !entries.isEmpty()) project.setId(entries.get(0).getId());
else {
project.setCreationUser(userInfo);
projectDao.createOrUpdate(project);
}
}
}
2017-12-15 00:01:26 +01:00
}