package eu.eudat.managers; import java.util.List; import java.util.UUID; import eu.eudat.dao.entities.DMPDao; import eu.eudat.dao.entities.OrganisationDao; import eu.eudat.dao.entities.ResearcherDao; import eu.eudat.dao.entities.UserInfoDao; import eu.eudat.entities.DMP; import eu.eudat.models.criteria.DataManagementPlanCriteria; import eu.eudat.models.criteria.OrganisationCriteria; import eu.eudat.models.criteria.ResearcherCriteria; import eu.eudat.models.dmp.DataManagementPlan; import eu.eudat.models.dmp.DataManagementPlanCriteriaRequest; import eu.eudat.models.dmp.DataManagementPlanTableRequest; import eu.eudat.models.helpers.DataTableData; import eu.eudat.models.listingmodels.DataManagementPlanListingModel; import eu.eudat.models.security.Principal; import eu.eudat.queryable.QueryableList; import eu.eudat.utilities.builders.DomainModelConverter; public class DataManagementPlanManager { public DataTableData getPaged(DMPDao dmpsRepository, DataManagementPlanTableRequest dataManagementPlanTableRequest) throws IllegalAccessException, InstantiationException{ QueryableList items = dmpsRepository.getWithCriteria(dataManagementPlanTableRequest.getCriteria()); QueryableList pagedItems = PaginationManager.applyPaging(items,dataManagementPlanTableRequest); List datamanagementPlans = new DomainModelConverter().fromDataModel( pagedItems.toList(), DataManagementPlanListingModel.class); DataTableData dataTable = new DataTableData(); dataTable.setData(datamanagementPlans); dataTable.setTotalCount(items.count()); return dataTable; } public eu.eudat.models.dmp.DataManagementPlan getSingle(DMPDao dmpsRepository, String id) throws InstantiationException, IllegalAccessException{ eu.eudat.models.dmp.DataManagementPlan datamanagementPlan = new eu.eudat.models.dmp.DataManagementPlan(); datamanagementPlan.fromDataModel(dmpsRepository.find(UUID.fromString(id))); return datamanagementPlan; } public List getWithCriteria(DMPDao dmpsRepository, DataManagementPlanCriteriaRequest dataManagementPlanCriteria) throws IllegalAccessException, InstantiationException{ QueryableList items = dmpsRepository.getWithCriteria(dataManagementPlanCriteria.getCriteria()); List datamanagementPlans = new DomainModelConverter().fromDataModel( items.toList(), eu.eudat.models.dmp.DataManagementPlan.class); return datamanagementPlans; } public static void createOrUpdate(DMPDao dmpsRepository, ResearcherDao researcherRepository, UserInfoDao userInfoDao, OrganisationDao organisationRepository, DataManagementPlan dataManagementPlan, Principal principal){ DMP newDmp = dataManagementPlan.toDataModel(); createOrganisationsIfTheyDontExist(newDmp,organisationRepository); createResearchersIfTheyDontExist(newDmp,researcherRepository); newDmp.setCreator(userInfoDao.read(principal.getId())); dmpsRepository.createOrUpdate(newDmp); } 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 entries = researcherRepository.listBy(criteria); if(entries!=null&&!entries.isEmpty())researcher.setId(entries.get(0).getId()); else researcher = researcherRepository.create(researcher); } } } 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 entries = organisationRepository.listBy(criteria); if(entries!=null&&!entries.isEmpty())organisation.setId(entries.get(0).getId()); else organisation = organisationRepository.create(organisation); } } } }