From be9761b103688a68303ceed1010250ffb92e48c3 Mon Sep 17 00:00:00 2001 From: amentis Date: Tue, 31 Oct 2023 17:57:41 +0200 Subject: [PATCH] add more fields to reference-type.yml --- .../ReferenceSearchBuilder.java | 41 ++++-- .../query/lookup/ReferenceSearchLookup.java | 11 ++ .../logic/proxy/fetching/RemoteFetcher.java | 16 ++- .../services/references/ReferenceService.java | 120 ++++++++++-------- .../main/resources/config/reference-type.yml | 48 +++++++ .../dmp-editor-blueprint.component.ts | 11 +- 6 files changed, 176 insertions(+), 71 deletions(-) diff --git a/dmp-backend/core/src/main/java/eu/eudat/model/builder/referencesearch/ReferenceSearchBuilder.java b/dmp-backend/core/src/main/java/eu/eudat/model/builder/referencesearch/ReferenceSearchBuilder.java index 3ebc0fc29..cdb9cd8a7 100644 --- a/dmp-backend/core/src/main/java/eu/eudat/model/builder/referencesearch/ReferenceSearchBuilder.java +++ b/dmp-backend/core/src/main/java/eu/eudat/model/builder/referencesearch/ReferenceSearchBuilder.java @@ -7,6 +7,8 @@ import eu.eudat.commons.enums.ReferenceType; import eu.eudat.convention.ConventionService; import eu.eudat.model.Reference; import eu.eudat.model.builder.BaseBuilder; +import eu.eudat.model.referencedefinition.Definition; +import eu.eudat.model.referencedefinition.Field; import gr.cite.tools.data.builder.BuilderFactory; import gr.cite.tools.data.query.QueryFactory; import gr.cite.tools.exception.MyApplicationException; @@ -57,17 +59,40 @@ public class ReferenceSearchBuilder extends BaseBuilder> get(ReferenceType externalType, ExternalUrlCriteria externalUrlCriteria, String key) throws NoURLFound, HugeResultSet { + public List> get(ReferenceType referenceType, ExternalUrlCriteria externalUrlCriteria, String key) throws NoURLFound, HugeResultSet { FetchStrategy fetchStrategy = null; - GenericUrls exGenericUrls = this.getExternalUrls(externalType); + GenericUrls exGenericUrls = this.getExternalUrls(referenceType); List urlConfigs = key != null && !key.isEmpty() ? exGenericUrls.getUrls().stream().filter(item -> item.getKey().equals(key)).collect(Collectors.toList()) : exGenericUrls.getUrls(); - return getAll(urlConfigs, fetchStrategy, externalUrlCriteria); + List> results = getAll(urlConfigs, fetchStrategy, externalUrlCriteria); + for (Map result: results) { + result.put("referenceType", referenceType.name()); + } + return results; } - public GenericUrls getExternalUrls(ReferenceType externalType) { - switch (externalType){ + public GenericUrls getExternalUrls(ReferenceType referenceType) { + switch (referenceType){ case Taxonomies: return configLoader.getExternalUrls().getTaxonomies(); case Licenses: return configLoader.getExternalUrls().getLicenses(); case Publications: return configLoader.getExternalUrls().getPublications(); @@ -76,7 +80,7 @@ public class RemoteFetcher { case Funder: return configLoader.getExternalUrls().getFunders(); case Project: return configLoader.getExternalUrls().getProjects(); case Researcher: return configLoader.getExternalUrls().getResearchers(); - default: throw new IllegalArgumentException("Type not found" + externalType); + default: throw new IllegalArgumentException("Type not found" + referenceType); } } diff --git a/dmp-backend/web/src/main/java/eu/eudat/logic/services/references/ReferenceService.java b/dmp-backend/web/src/main/java/eu/eudat/logic/services/references/ReferenceService.java index 8e3d12434..6d89f7836 100644 --- a/dmp-backend/web/src/main/java/eu/eudat/logic/services/references/ReferenceService.java +++ b/dmp-backend/web/src/main/java/eu/eudat/logic/services/references/ReferenceService.java @@ -31,6 +31,7 @@ import eu.eudat.model.persist.ReferencePersist; import eu.eudat.model.persist.referencedefinition.DefinitionPersist; import eu.eudat.model.persist.referencedefinition.FieldPersist; import eu.eudat.models.data.FetcherReference; +import eu.eudat.query.ReferenceQuery; import eu.eudat.query.lookup.ReferenceSearchLookup; import eu.eudat.queryable.QueryableList; import gr.cite.commons.web.authz.service.AuthorizationService; @@ -188,71 +189,80 @@ public class ReferenceService { ExternalUrlCriteria externalUrlCriteria = new ExternalUrlCriteria(lookup.getLike()); List> remoteRepos = this.apiContext.getOperationsContext().getRemoteFetcher().get(lookup.getType(), externalUrlCriteria, lookup.getKey()); - for (Map repo: remoteRepos) { - repo.put("referenceType", lookup.getType().name()); - } - // List list = this.fetchFromDb(externalType, query, type, remoteRepos); + List externalModels = this.builderFactory.builder(ReferenceSearchBuilder.class).authorize(AuthorizationFlags.OwnerOrPermission).build(lookup.getProject(), remoteRepos); + List models = this.fetchFromDb(lookup); + + models.addAll(externalModels); - List models = this.builderFactory.builder(ReferenceSearchBuilder.class).authorize(AuthorizationFlags.OwnerOrPermission).build(lookup.getProject(), remoteRepos); - //List models = null; models = models.stream().filter(x -> x.getLabel().toLowerCase().contains(lookup.getLike().toLowerCase())).collect(Collectors.toList()); models.sort(Comparator.comparing(Reference::getLabel)); return models; } - private List fetchFromDb(ReferenceType externalType, String query, String type, List> remoteRepos) throws InvalidApplicationException { - List list = new LinkedList<>(); - switch (externalType) { - case DataRepositories: - case PubRepositories: - case Journals: { - DataRepositoryCriteria criteria = new DataRepositoryCriteria(); - if (!query.isEmpty()) criteria.setLike(query); - criteria.setCreationUserId(this.userScope.getUserId()); - if (type.equals("")) { - List dataRepositoryList = (this.apiContext.getOperationsContext().getDatabaseRepository().getDataRepositoryDao().getWithCriteria(criteria)).toList(); - list = dataRepositoryList.stream().map(item -> new FetcherReference().fromDataRepository(item)).collect(Collectors.toList()); - } - } - case Registries: { - RegistryCriteria criteria = new RegistryCriteria(); - if (!query.isEmpty()) criteria.setLike(query); - criteria.setCreationUserId(this.userScope.getUserId()); - if (type.equals("")) { - List registryList = (this.apiContext.getOperationsContext().getDatabaseRepository().getRegistryDao().getWithCriteria(criteria)).toList(); - list = registryList.stream().map(item -> new FetcherReference().fromRegistry(item)).collect(Collectors.toList()); - } - } - case Services: - { - ServiceCriteria criteria = new ServiceCriteria(); + private List fetchFromDb(ReferenceSearchLookup lookup){ - if (!query.isEmpty()) criteria.setLike(query); - criteria.setCreationUserId(this.userScope.getUserId()); + List fields = Arrays.asList(Reference._id, Reference._label, Reference._description, Reference._abbreviation, Reference._source, + Reference._isActive, Reference._createdAt, Reference._updatedAt, Reference._type, Reference._definition, Reference._reference, Reference._sourceType ); + lookup.setProject(new BaseFieldSet(fields)); - if (type.equals("")) { - List serviceList = (this.apiContext.getOperationsContext().getDatabaseRepository().getServiceDao().getWithCriteria(criteria)).toList(); - list = serviceList.stream().map(item -> new FetcherReference().fromService(item)).collect(Collectors.toList()); - } - } - case Datasets:{ - - ExternalDatasetCriteria criteria = apiContext.getOperationsContext().getBuilderFactory().getBuilder(ExternalDatasetCriteriaBuilder.class).like(query).build(); - - criteria.setCreationUserId(this.userScope.getUserId()); - QueryableList items = apiContext.getOperationsContext().getDatabaseRepository().getExternalDatasetDao().getWithCriteria(criteria); - - list = items.select(item -> new FetcherReference().fromDataset(item)); - } - case Taxonomies: - case Publications: - case Licenses: - break; - } - - return list; + ReferenceQuery query = lookup.enrich(this.queryFactory).authorize(AuthorizationFlags.OwnerOrPermission); + List datas = query.collectAs(lookup.getProject()); + return this.builderFactory.builder(ReferenceBuilder.class).authorize(AuthorizationFlags.OwnerOrPermission).build(lookup.getProject(), datas); } +// private List fetchFromDb(ReferenceType externalType, String query, String type, List> remoteRepos) throws InvalidApplicationException { +// List list = new LinkedList<>(); +// switch (externalType) { +// case DataRepositories: +// case PubRepositories: +// case Journals: { +// DataRepositoryCriteria criteria = new DataRepositoryCriteria(); +// if (!query.isEmpty()) criteria.setLike(query); +// criteria.setCreationUserId(this.userScope.getUserId()); +// if (type.equals("")) { +// List dataRepositoryList = (this.apiContext.getOperationsContext().getDatabaseRepository().getDataRepositoryDao().getWithCriteria(criteria)).toList(); +// list = dataRepositoryList.stream().map(item -> new FetcherReference().fromDataRepository(item)).collect(Collectors.toList()); +// } +// } +// case Registries: { +// RegistryCriteria criteria = new RegistryCriteria(); +// if (!query.isEmpty()) criteria.setLike(query); +// criteria.setCreationUserId(this.userScope.getUserId()); +// if (type.equals("")) { +// List registryList = (this.apiContext.getOperationsContext().getDatabaseRepository().getRegistryDao().getWithCriteria(criteria)).toList(); +// list = registryList.stream().map(item -> new FetcherReference().fromRegistry(item)).collect(Collectors.toList()); +// } +// } +// case Services: +// { +// ServiceCriteria criteria = new ServiceCriteria(); +// +// if (!query.isEmpty()) criteria.setLike(query); +// criteria.setCreationUserId(this.userScope.getUserId()); +// +// if (type.equals("")) { +// List serviceList = (this.apiContext.getOperationsContext().getDatabaseRepository().getServiceDao().getWithCriteria(criteria)).toList(); +// list = serviceList.stream().map(item -> new FetcherReference().fromService(item)).collect(Collectors.toList()); +// } +// } +// case Datasets:{ +// +// ExternalDatasetCriteria criteria = apiContext.getOperationsContext().getBuilderFactory().getBuilder(ExternalDatasetCriteriaBuilder.class).like(query).build(); +// +// criteria.setCreationUserId(this.userScope.getUserId()); +// QueryableList items = apiContext.getOperationsContext().getDatabaseRepository().getExternalDatasetDao().getWithCriteria(criteria); +// +// list = items.select(item -> new FetcherReference().fromDataset(item)); +// } +// case Taxonomies: +// case Publications: +// case Licenses: +// break; +// } +// +// return list; +// } + } diff --git a/dmp-backend/web/src/main/resources/config/reference-type.yml b/dmp-backend/web/src/main/resources/config/reference-type.yml index 3f39364e5..c32be6185 100644 --- a/dmp-backend/web/src/main/resources/config/reference-type.yml +++ b/dmp-backend/web/src/main/resources/config/reference-type.yml @@ -5,14 +5,30 @@ reference-type: dataType: Date - code: endDate dataType: Date + - code: pid + dataType: Text + - code: tag + dataType: Text + - code: key + dataType: Text funder: fields: - code: uri dataType: Text + - code: pid + dataType: Text + - code: tag + dataType: Text + - code: key + dataType: Text researcher: fields: + - code: pid + dataType: Text - code: tag dataType: Text + - code: key + dataType: Text - code: firstName dataType: Text - code: lastName @@ -21,14 +37,22 @@ reference-type: dataType: Text service: fields: + - code: pid + dataType: Text - code: tag dataType: Text + - code: key + dataType: Text - code: uri dataType: Text registry: fields: + - code: pid + dataType: Text - code: tag dataType: Text + - code: key + dataType: Text - code: uri dataType: Text project: @@ -41,6 +65,8 @@ reference-type: fields: - code: tag dataType: Text + - code: key + dataType: Text - code: pid dataType: Text - code: uri @@ -49,34 +75,56 @@ reference-type: dataType: Text dataset: fields: + - code: tag + dataType: Text + - code: key + dataType: Text - code: pid dataType: Text - code: pidTypeField dataType: Text dataRepository: fields: + - code: pid + dataType: Text - code: tag dataType: Text + - code: key + dataType: Text pubRepository: fields: + - code: pid + dataType: Text - code: tag dataType: Text + - code: key + dataType: Text journal: fields: + - code: pid + dataType: Text - code: tag dataType: Text + - code: key + dataType: Text publication: fields: - code: tag dataType: Text + - code: key + dataType: Text - code: pid dataType: Text - code: pidTypeField dataType: Text licence: fields: + - code: pid + dataType: Text - code: tag dataType: Text + - code: key + dataType: Text - code: uri dataType: Text taxonomy: diff --git a/dmp-frontend/src/app/ui/dmp/dmp-editor-blueprint/dmp-editor-blueprint.component.ts b/dmp-frontend/src/app/ui/dmp/dmp-editor-blueprint/dmp-editor-blueprint.component.ts index 5b62697f2..5336d5eb1 100644 --- a/dmp-frontend/src/app/ui/dmp/dmp-editor-blueprint/dmp-editor-blueprint.component.ts +++ b/dmp-frontend/src/app/ui/dmp/dmp-editor-blueprint/dmp-editor-blueprint.component.ts @@ -56,6 +56,8 @@ import { ExtraPropertiesFormModel } from '../editor/general-tab/extra-properties import { FunderFormModel } from '../editor/grant-tab/funder-form-model'; import { GrantTabModel } from '../editor/grant-tab/grant-tab-model'; import { ProjectFormModel } from '../editor/grant-tab/project-form-model'; +import { ReferenceSearchLookup } from '@app/core/query/reference-search.lookup'; +import { Reference } from '@app/core/model/reference/reference'; interface Visible { value: boolean; @@ -1035,8 +1037,13 @@ export class DmpEditorBlueprintComponent extends CheckDeactivateBaseComponent im // Researchers - filterResearchers(value: string): Observable { - return this.externalSourcesService.searchDMPResearchers({ criteria: { name: value, like: null } }); + filterResearchers(value: string): Observable { + //return this.externalSourcesService.searchDMPResearchers({ criteria: { name: value, like: null } }); + const lookup = new ReferenceSearchLookup(); + lookup.like = value; + lookup.key = ''; + lookup.type = ReferenceType.Researcher; + return this.referenceService.search(lookup); } addResearcher(event: MouseEvent) {