diff --git a/dmp-backend/data/src/main/java/eu/eudat/data/dao/criteria/OrganisationCriteria.java b/dmp-backend/data/src/main/java/eu/eudat/data/dao/criteria/OrganisationCriteria.java index 5c2922b52..5cc857a24 100644 --- a/dmp-backend/data/src/main/java/eu/eudat/data/dao/criteria/OrganisationCriteria.java +++ b/dmp-backend/data/src/main/java/eu/eudat/data/dao/criteria/OrganisationCriteria.java @@ -4,6 +4,7 @@ import eu.eudat.data.entities.Organisation; public class OrganisationCriteria extends Criteria { private String labelLike; + private Boolean isPublic; public String getLabelLike() { return labelLike; @@ -11,4 +12,11 @@ public class OrganisationCriteria extends Criteria { public void setLabelLike(String labelLike) { this.labelLike = labelLike; } + + public Boolean getPublic() { + return isPublic; + } + public void setPublic(Boolean aPublic) { + isPublic = aPublic; + } } diff --git a/dmp-backend/data/src/main/java/eu/eudat/data/dao/entities/OrganisationDaoImpl.java b/dmp-backend/data/src/main/java/eu/eudat/data/dao/entities/OrganisationDaoImpl.java index d75f2ff8f..ef634dd85 100644 --- a/dmp-backend/data/src/main/java/eu/eudat/data/dao/entities/OrganisationDaoImpl.java +++ b/dmp-backend/data/src/main/java/eu/eudat/data/dao/entities/OrganisationDaoImpl.java @@ -3,6 +3,7 @@ package eu.eudat.data.dao.entities; import eu.eudat.data.dao.DatabaseAccess; import eu.eudat.data.dao.criteria.OrganisationCriteria; import eu.eudat.data.dao.databaselayer.service.DatabaseService; +import eu.eudat.data.entities.DMP; import eu.eudat.data.entities.Organisation; import eu.eudat.data.entities.UserInfo; import eu.eudat.queryable.QueryableList; @@ -10,6 +11,7 @@ import org.springframework.beans.factory.annotation.Autowired; import org.springframework.scheduling.annotation.Async; import org.springframework.stereotype.Component; +import javax.persistence.criteria.JoinType; import java.util.UUID; import java.util.concurrent.CompletableFuture; @@ -29,6 +31,9 @@ public class OrganisationDaoImpl extends DatabaseAccess implements if (criteria.getLabelLike() != null) { query.where((builder, root) -> builder.like(builder.upper(root.get("label")), "%" + criteria.getLabelLike().toUpperCase() + "%")); } + if (criteria.getPublic()) { + query.where((builder, root) -> builder.equal(root.join("dmps", JoinType.LEFT).get("status"), DMP.DMPStatus.FINALISED.getValue())); + } return query; } diff --git a/dmp-backend/web/src/main/java/eu/eudat/controllers/Organisations.java b/dmp-backend/web/src/main/java/eu/eudat/controllers/Organisations.java index 5b9ffd6a0..5a14ecbf6 100644 --- a/dmp-backend/web/src/main/java/eu/eudat/controllers/Organisations.java +++ b/dmp-backend/web/src/main/java/eu/eudat/controllers/Organisations.java @@ -51,5 +51,12 @@ public class Organisations extends BaseController { DataTableData organisationDataTableData = this.organisationsManager.getPagedOrganisations(organisationsTableRequest, principal); return ResponseEntity.status(HttpStatus.OK).body(new ResponseItem>().payload(organisationDataTableData).status(ApiMessageCode.NO_MESSAGE)); } + + @RequestMapping(method = RequestMethod.POST, value = {"/public/organisations"}, produces = "application/json") + public @ResponseBody + ResponseEntity>> getPublicPaged(@Valid @RequestBody OrganisationsTableRequest organisationsTableRequest) throws Exception{ + DataTableData organisationDataTableData = this.organisationsManager.getPublicPagedOrganisations(organisationsTableRequest); + return ResponseEntity.status(HttpStatus.OK).body(new ResponseItem>().payload(organisationDataTableData).status(ApiMessageCode.NO_MESSAGE)); + } } diff --git a/dmp-backend/web/src/main/java/eu/eudat/logic/managers/OrganisationsManager.java b/dmp-backend/web/src/main/java/eu/eudat/logic/managers/OrganisationsManager.java index e19c6cd76..0f5d8617d 100644 --- a/dmp-backend/web/src/main/java/eu/eudat/logic/managers/OrganisationsManager.java +++ b/dmp-backend/web/src/main/java/eu/eudat/logic/managers/OrganisationsManager.java @@ -2,16 +2,22 @@ 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; @@ -40,6 +46,22 @@ public class OrganisationsManager { 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; } } diff --git a/dmp-frontend/src/app/core/services/external-sources/external-sources.service.ts b/dmp-frontend/src/app/core/services/external-sources/external-sources.service.ts index 2e2a5fe14..1d801b2da 100644 --- a/dmp-frontend/src/app/core/services/external-sources/external-sources.service.ts +++ b/dmp-frontend/src/app/core/services/external-sources/external-sources.service.ts @@ -63,7 +63,7 @@ export class ExternalSourcesService { public searchDMPOrganizations(like: string): Observable { return this.http.get(this.actionUrl + 'organisations' + '?query=' + like, { headers: this.headers }); - }//organizationscriteria.criteria.like + } // TODO: currently not used. public searchDMPProfiles(like: string): Observable { diff --git a/dmp-frontend/src/app/core/services/organisation/organisation.service.ts b/dmp-frontend/src/app/core/services/organisation/organisation.service.ts index a7287b221..a927bfcfa 100644 --- a/dmp-frontend/src/app/core/services/organisation/organisation.service.ts +++ b/dmp-frontend/src/app/core/services/organisation/organisation.service.ts @@ -26,4 +26,8 @@ export class OrganisationService { public searchInternalOrganisations(dataTableRequest: DataTableRequest): Observable> { return this.http.post>(this.actionUrl + 'internal/organisations', dataTableRequest , { headers: this.headers }); } + + public searchPublicOrganisations(dataTableRequest: DataTableRequest): Observable> { + return this.http.post>(this.actionUrl + 'public/organisations', dataTableRequest , { headers: this.headers }); + } } diff --git a/dmp-frontend/src/app/ui/explore-dmp/dmp-explore-filters/explore-dmp-filters.component.ts b/dmp-frontend/src/app/ui/explore-dmp/dmp-explore-filters/explore-dmp-filters.component.ts index 5b8fc877b..43ef59b1a 100644 --- a/dmp-frontend/src/app/ui/explore-dmp/dmp-explore-filters/explore-dmp-filters.component.ts +++ b/dmp-frontend/src/app/ui/explore-dmp/dmp-explore-filters/explore-dmp-filters.component.ts @@ -37,11 +37,11 @@ export class ExploreDmpFiltersComponent extends BaseCriteriaComponent implements ProjectStateType = ProjectStateType; projects: Observable; profiles: Observable; - dmpOrganisations: Observable; + dmpOrganisations: Observable; projectOptions: Observable; projectStateOptions: Observable; filteringOrganisationsAsync = false; - filteredOrganisations: ExternalSourceItemModel[]; + filteredOrganisations: OrganizationModel[]; status: ProjectStateType; IsChecked: boolean; IsIndeterminate: boolean; @@ -118,7 +118,9 @@ export class ExploreDmpFiltersComponent extends BaseCriteriaComponent implements ]); }); this.profiles = this.datasetProfileService.getDatasetProfiles(); - this.dmpOrganisations = this.externalSourcesService.searchDMPOrganizations(''); + const fields: Array = new Array(); + fields.push('asc'); + this.dmpOrganisations = this.organisationService.searchPublicOrganisations(new DataTableRequest(0 , null, { fields: fields })).map(x => x.data); } ngAfterViewInit(): void { @@ -265,8 +267,13 @@ export class ExploreDmpFiltersComponent extends BaseCriteriaComponent implements return this.datasetProfileService.getDatasetProfiles(); } - dmpOrganisationSearch(value: string): Observable { - return this.externalSourcesService.searchDMPOrganizations(value); + dmpOrganisationSearch(value: string): Observable { + const fields: Array = new Array(); + fields.push('asc'); + const dataTableRequest: DataTableRequest = new DataTableRequest(0, null, { fields: fields }); + dataTableRequest.criteria = new OrganisationCriteria(); + dataTableRequest.criteria.labelLike = value; + return this.organisationService.searchPublicOrganisations(dataTableRequest).map(x => x.data); } removeOrganisation(organisation) { @@ -279,7 +286,12 @@ export class ExploreDmpFiltersComponent extends BaseCriteriaComponent implements } getOrganisations() { - return this.externalSourcesService.searchDMPOrganizations(''); + const fields: Array = new Array(); + fields.push('asc'); + const dataTableRequest: DataTableRequest = new DataTableRequest(0, null, { fields: fields }); + dataTableRequest.criteria = new OrganisationCriteria(); + dataTableRequest.criteria.labelLike = ''; + return this.organisationService.searchPublicOrganisations(dataTableRequest).map(x => x.data); } filterProject(query: string) { @@ -309,7 +321,7 @@ export class ExploreDmpFiltersComponent extends BaseCriteriaComponent implements dataTableRequest.criteria = new OrganisationCriteria(); dataTableRequest.criteria.labelLike = value; - return this.organisationService.searchInternalOrganisations(dataTableRequest).map(x => x.data); + return this.organisationService.searchPublicOrganisations(dataTableRequest).map(x => x.data); } displayLabel(value) {