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 2158b892c..0d2d12a65 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 @@ -42,6 +42,13 @@ public class Organisations extends BaseController { return ResponseEntity.status(HttpStatus.OK).body(new ResponseItem>().payload(organisations).status(ApiMessageCode.NO_MESSAGE)); } + @RequestMapping(method = RequestMethod.POST, value = {"/general/organisations"}, produces = "application/json") + public @ResponseBody + ResponseEntity>> listGeneralOrganisations(@RequestBody OrganisationsTableRequest organisationsTableRequest, Principal principal) throws Exception { + List organisations = organisationsManager.getWithExternal(organisationsTableRequest, principal); + return ResponseEntity.status(HttpStatus.OK).body(new ResponseItem>().payload(organisations).status(ApiMessageCode.NO_MESSAGE)); + } + @RequestMapping(method = RequestMethod.POST, value = {"/internal/organisations"}, produces = "application/json") public @ResponseBody ResponseEntity>> getPaged(@Valid @RequestBody OrganisationsTableRequest organisationsTableRequest, Principal principal) throws Exception{ 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 5e67be552..238bf9be9 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 @@ -66,6 +66,32 @@ public class OrganisationsManager { return organisationDataTableData; } + public List getWithExternal(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()); + + ExternalUrlCriteria externalUrlCriteria = new ExternalUrlCriteria(organisationsTableRequest.getCriteria().getLabelLike()); + List> remoteRepos = apiContext.getOperationsContext().getRemoteFetcher().getOrganisations(externalUrlCriteria, null); + OrganisationsExternalSourcesModel organisationsExternalSourcesModel = new OrganisationsExternalSourcesModel().fromExternalItem(remoteRepos); + for (ExternalSourcesItemModel externalListingItem : organisationsExternalSourcesModel) { + Organisation organisation = apiContext.getOperationsContext().getBuilderFactory().getBuilder(OrganisationBuilder.class) + .name(externalListingItem.getName()) + .reference(externalListingItem.getRemoteId()) + .tag(externalListingItem.getTag()) + .key(externalListingItem.getKey()) + .build(); + org.add(organisation); + } + return org; + } + public List getCriteriaWithExternal(String query, String type) throws HugeResultSet, NoURLFound { ExternalUrlCriteria externalUrlCriteria = new ExternalUrlCriteria(query); List> remoteRepos = apiContext.getOperationsContext().getRemoteFetcher().getOrganisations(externalUrlCriteria, type); diff --git a/dmp-backend/web/src/main/java/eu/eudat/models/data/dmp/Researcher.java b/dmp-backend/web/src/main/java/eu/eudat/models/data/dmp/Researcher.java index 88bd56401..d8c205c77 100644 --- a/dmp-backend/web/src/main/java/eu/eudat/models/data/dmp/Researcher.java +++ b/dmp-backend/web/src/main/java/eu/eudat/models/data/dmp/Researcher.java @@ -95,7 +95,7 @@ public class Researcher implements DataModel>(this.actionUrl + 'internal/organisations', dataTableRequest , { headers: this.headers }); } + public searchGeneralOrganisations(dataTableRequest: RequestItem): Observable { + return this.http.post(this.actionUrl + 'general/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/dmp/editor/main-info/main-info.component.ts b/dmp-frontend/src/app/ui/dmp/editor/main-info/main-info.component.ts index 64594cf37..a676a43c3 100644 --- a/dmp-frontend/src/app/ui/dmp/editor/main-info/main-info.component.ts +++ b/dmp-frontend/src/app/ui/dmp/editor/main-info/main-info.component.ts @@ -23,6 +23,7 @@ import { LanguageInfoService } from '@app/core/services/culture/language-info-se import { UserModel } from '@app/core/model/user/user'; import { AuthService } from '@app/core/services/auth/auth.service'; import { Principal } from '@app/core/model/auth/principal'; +import { OrganisationService } from '@app/core/services/organisation/organisation.service'; interface Visible { value: boolean; @@ -81,7 +82,8 @@ export class MainInfoComponent extends BaseComponent implements OnInit { private dmpService: DmpService, private dialog: MatDialog, private languageInfoService: LanguageInfoService, - private authentication: AuthService + private authentication: AuthService, + private organizationService: OrganisationService ) { super(); } @@ -145,7 +147,7 @@ export class MainInfoComponent extends BaseComponent implements OnInit { } filterOrganisations(value: string): Observable { - return this.externalSourcesService.searchDMPOrganizations(value); + return this.organizationService.searchGeneralOrganisations({ criteria: { labelLike: value } }); } cantAddOrganizations(): boolean {