package eu.eudat.managers; import java.util.List; import java.util.Map; import java.util.UUID; import eu.eudat.dao.entities.ProjectDao; import eu.eudat.dao.entities.UserInfoDao; import eu.eudat.models.criteria.ProjectCriteria; import eu.eudat.models.external.ExternalListingItem; import eu.eudat.models.external.ExternalSourcesItemModel; import eu.eudat.models.external.ProjectsExternalSourcesModel; import eu.eudat.models.helpers.DataTableData; import eu.eudat.models.project.Project; import eu.eudat.models.project.ProjectCriteriaRequest; import eu.eudat.models.project.ProjectTableRequest; import eu.eudat.models.security.Principal; import eu.eudat.proxy.config.exceptions.HugeResultSet; import eu.eudat.proxy.config.exceptions.NoURLFound; import eu.eudat.proxy.fetching.RemoteFetcher; import eu.eudat.queryable.QueryableList; import eu.eudat.utilities.builders.DomainModelConverter; public class ProjectManager { public DataTableData getPaged(ProjectDao projectRepository, ProjectTableRequest projectTableRequest) throws IllegalAccessException, InstantiationException { QueryableList items = projectRepository.getWithCriteria(projectTableRequest.getCriteria()); QueryableList pagedItems = PaginationManager.applyPaging(items, projectTableRequest); List projects = new DomainModelConverter().fromDataModel(pagedItems.toList(), eu.eudat.models.project.Project.class); DataTableData dataTable = new DataTableData(); dataTable.setData(projects); dataTable.setTotalCount(items.count()); return dataTable; } public eu.eudat.models.project.Project getSingle(ProjectDao projectRepository, String id) throws InstantiationException, IllegalAccessException { eu.eudat.models.project.Project project = new eu.eudat.models.project.Project(); project.fromDataModel(projectRepository.find(UUID.fromString(id))); return project; } public eu.eudat.entities.Project inactivate(ProjectDao projectRepository, String id) throws InstantiationException, IllegalAccessException { eu.eudat.entities.Project project = projectRepository.find(UUID.fromString(id)); project.setStatus(Project.Status.DELETED.getValue()); project = projectRepository.createOrUpdate(project); return project; } public List getCriteriaWithExternal(ProjectDao projectRepository, ProjectCriteriaRequest projectCriteria, RemoteFetcher remoteFetcher) throws IllegalAccessException, InstantiationException, HugeResultSet, NoURLFound { QueryableList items = projectRepository.getWithCriteria(projectCriteria.getCriteria()); List projects = new DomainModelConverter().fromDataModel(items.toList(), eu.eudat.models.project.Project.class); List> remoteRepos = remoteFetcher.getProjects(projectCriteria.getCriteria().getLike()); ProjectsExternalSourcesModel projectsExternalSourcesModel = new ProjectsExternalSourcesModel().fromExternalItem(remoteRepos); for (ExternalSourcesItemModel externalListingItem : projectsExternalSourcesModel) { eu.eudat.models.project.Project project = new eu.eudat.models.project.Project(); project.setReference(externalListingItem.getRemoteId()); project.setLabel(externalListingItem.getName()); project.setDescription(externalListingItem.getDescription()); project.setUri(externalListingItem.getUri()); project.setAbbreviation(externalListingItem.getAbbreviation()); project.setStatus((short) 0); projects.add(project); } return projects; } public List getCriteria(ProjectDao projectRepository, ProjectCriteriaRequest projectCriteria, RemoteFetcher remoteFetcher) throws IllegalAccessException, InstantiationException, HugeResultSet, NoURLFound { QueryableList items = projectRepository.getWithCriteria(projectCriteria.getCriteria()); List projects = new DomainModelConverter().fromDataModel(items.toList(), eu.eudat.models.project.Project.class); return projects; } public static void createOrUpdate(ProjectDao projectRepository, UserInfoDao userInfoRepository, eu.eudat.models.project.Project project, Principal principal) { eu.eudat.entities.Project projectEntity = project.toDataModel(); projectEntity.setCreationUser(userInfoRepository.find(principal.getId())); projectRepository.createOrUpdate(projectEntity); } }