package eu.eudat.logic.managers; import eu.eudat.data.dao.criteria.OrganisationCriteria; import eu.eudat.data.dao.entities.OrganisationDao; import eu.eudat.data.entities.DMP; import eu.eudat.data.query.items.table.dmp.DataManagmentPlanPublicTableRequest; import eu.eudat.data.query.items.table.organisations.OrganisationsTableRequest; import eu.eudat.logic.services.ApiContext; import eu.eudat.logic.services.operations.DatabaseRepository; import eu.eudat.models.HintedModelFactory; import eu.eudat.models.data.dmp.Organisation; import eu.eudat.models.data.helpers.common.DataTableData; import eu.eudat.models.data.listingmodels.DataManagementPlanListingModel; import eu.eudat.models.data.security.Principal; import eu.eudat.queryable.QueryableList; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Component; import java.util.ArrayList; import java.util.LinkedList; import java.util.List; import java.util.stream.Collectors; @Component public class OrganisationsManager { private ApiContext apiContext; private DatabaseRepository databaseRepository; @Autowired public OrganisationsManager(ApiContext apiContext) { this.apiContext = apiContext; this.databaseRepository = apiContext.getOperationsContext().getDatabaseRepository(); } public DataTableData getPagedOrganisations(OrganisationsTableRequest organisationsTableRequest, Principal principal) throws Exception { eu.eudat.data.entities.UserInfo userInfo = new eu.eudat.data.entities.UserInfo(); userInfo.setId(principal.getId()); OrganisationDao organisationDao = databaseRepository.getOrganisationDao(); QueryableList items = organisationDao.getWithCriteria(organisationsTableRequest.getCriteria()); QueryableList authItems = organisationDao.getAuthenticated(items, userInfo); QueryableList pagedItems = PaginationManager.applyPaging(authItems, organisationsTableRequest); List org = pagedItems.toList().stream().distinct().map(item -> new Organisation().fromDataModel(item)).collect(Collectors.toList()); DataTableData organisationDataTableData = new DataTableData<>(); organisationDataTableData.setData(org); organisationDataTableData.setTotalCount(pagedItems.count()); return organisationDataTableData; } public DataTableData getPublicPagedOrganisations(OrganisationsTableRequest organisationsTableRequest) throws Exception { organisationsTableRequest.getCriteria().setPublic(true); OrganisationDao organisationDao = databaseRepository.getOrganisationDao(); QueryableList items = organisationDao.getWithCriteria(organisationsTableRequest.getCriteria()); QueryableList pagedItems = PaginationManager.applyPaging(items, organisationsTableRequest); List org = pagedItems.toList().stream().distinct().map(item -> new Organisation().fromDataModel(item)).collect(Collectors.toList()); DataTableData organisationDataTableData = new DataTableData<>(); organisationDataTableData.setData(org); organisationDataTableData.setTotalCount(pagedItems.count()); return organisationDataTableData; } }