import {Filter} from "../../searchPages/searchUtils/searchHelperClasses.class"; export class SearchFields { //main Entities //RESULTS //Used for datasets and publications and software and orp //In case Datasets or Software should display different fields, use seperate tables for fields // "resultacceptanceyear", public RESULT_RANGE_FIELDS = [ ["resultacceptanceyear", "resultacceptanceyear"] ]; // Remove Collected From Filter "collectedfrom","collectedfrom" public RESULT_REFINE_FIELDS = [ "resultbestaccessright", "instancetypename", "fos", "relfunder", "relfundinglevel0_id", "relfundinglevel1_id", "relfundinglevel2_id", "relproject", "sdg", "country", "resultlanguagename", "resulthostingdatasource", "community"]; public RESULT_ADVANCED_FIELDS: string[] = ["q", "resulttitle", "resultauthor", "authorid", "resultdescription", "resultsubject", "resultpublisher", "resultbestaccessright", "community", "collectedfromdatasourceid", "resulthostingdatasourceid", "resultdateofacceptance", "relfunder", "relfundinglevel0_id", "relfundinglevel1_id", "relfundinglevel2_id", "resultlanguagename", "relorganizationid", "pid", "relprojectid", "instancetypename", "fos", "sdg"]; public RESULT_FIELDS: { [key: string]: FieldDetails } = { ["q"]: {name: "Any field", type: "keyword", param: "q", operator: "op", equalityOperator: "=", filterType: null}, ["resulttitle"]: { name: "Title", type: "keyword", param: "title", operator: "tt", equalityOperator: "=", filterType: null }, ["resultauthor"]: { name: "Author", type: "keyword", param: "author", operator: "at", equalityOperator: "=", filterType: null }, ["authorid"]: { name: "Author ORCID", type: "keyword", param: "orcid", operator: "oc", equalityOperator: " exact ", filterType: null }, ["resultsubject"]: { name: "Subject", type: "keyword", param: "subject", operator: "sb", equalityOperator: "=", filterType: null }, ["resultdescription"]: { name: "Abstract", type: "keyword", param: "description", operator: "ds", equalityOperator: "=", filterType: null }, ["resultpublisher"]: { name: "Publisher", type: "keyword", param: "publisher", operator: "pb", equalityOperator: "=", filterType: null }, ["pid"]: {name: "PID", type: "keyword", param: "pid", operator: "pd", equalityOperator: " exact ", filterType: null}, ["resulthostingdatasourceid"]: { name: "Hosting "+OpenaireEntities.DATASOURCE, type: "entity", param: "hostedBy", operator: "hs", equalityOperator: " exact ", filterType: null }, ["resulthostingdatasource"]: { name: "Source", type: "refine", param: "hostedBy", operator: "hs", equalityOperator: " exact ", filterType: "checkbox" }, ["instancetypename"]: { name: "Document Type", type: "vocabulary", param: "type", operator: "tp", equalityOperator: " exact ", filterType: "checkbox" }, ["resultlanguagename"]: { name: "Language", type: "vocabulary", param: "lang", operator: "ln", equalityOperator: " exact ", filterType: "checkbox" }, ["community"]: { name: OpenaireEntities.COMMUNITY, type: "refine", param: "community", operator: "cm", equalityOperator: " exact ", filterType: "checkbox" }, ["relproject"]: { name: "Project", type: "refine", param: "project", operator: "po", equalityOperator: " exact ", filterType: "checkbox" }, ["relprojectid"]: { name: OpenaireEntities.PROJECT, type: "entity", param: "project", operator: "po", equalityOperator: " exact ", filterType: null }, ["relfunder"]: { name: "Funder", type: "refine", param: "funder", operator: "fn", equalityOperator: " exact ", filterType: "checkbox" }, ["relfundinglevel0_id"]: { name: "Funding Stream", type: "refine", param: "funderlv0", operator: "fn0", equalityOperator: " exact ", filterType: "checkbox" }, ["relfundinglevel1_id"]: { name: "Funding Substream level 1", type: "refine", param: "funderlv1", operator: "fn1", equalityOperator: " exact ", filterType: "checkbox" }, ["relfundinglevel2_id"]: { name: "Funding Substream level 2", type: "refine", param: "funderlv2", operator: "fn0", equalityOperator: " exact ", filterType: "checkbox" }, ["resultacceptanceyear"]: { name: "Publication Date", type: "keyword", param: "year", operator: "ya", equalityOperator: " = ", filterType: null }, ["resultdateofacceptance"]: { name: "Publication Date", type: "date", param: "date", operator: "dt", equalityOperator: " within ", filterType: null }, ["resultacceptanceyear-range-resultacceptanceyear"]: { name: "Year range", type: "keyword", param: "year", operator: "ya", equalityOperator: " within ", filterType: "range" }, ["resultbestaccessright"]: { name: "Access", type: "vocabulary", param: "access", operator: "ac", equalityOperator: " exact ", filterType: "radio" }, ["collectedfrom"]: { name: "Collected From", type: "refine", param: "datasource", operator: "cl", equalityOperator: " exact ", filterType: "checkbox" }, ["relorganizationid"]: { name: "Organization", type: "entity", param: "organization", operator: "og", equalityOperator: " exact ", filterType: null }, ["collectedfromdatasourceid"]: { name: "Collected from "+OpenaireEntities.DATASOURCE, type: "entity", param: "collectedFrom", operator: "cl", equalityOperator: " exact ", filterType: null }, ["resulttypeid"]: { name: "Type", type: "refine", param: "types", operator: "tp", equalityOperator: " exact ", filterType: "radio" }, ["country"]: { name: "Country", type: "refine", param: "country", operator: "cu", equalityOperator: " exact ", filterType: "checkbox" }, ["sdg"]: { name: "SDG [Beta]", type: "vocabulary", param: "sdg", operator: "sg", equalityOperator: " exact ", filterType: "checkbox" }, ["fos"]: { name: "Field of Science [Beta]", type: "vocabulary", param: "fos", operator: "fs", equalityOperator: " exact ", filterType: "checkbox" } }; //PROJECT public PROJECT_RANGE_FIELDS = [ ["projectendyear", "projectstartyear"] ]; public PROJECT_REFINE_FIELDS: string[] = ["funder", "fundinglevel0_id", "fundinglevel1_id", "fundinglevel2_id", "projectstartyear", "projectendyear", "projectoamandatepublications"]; public PROJECT_ADVANCED_FIELDS: string[] = ["q", "projectacronym", "projecttitle", "projectkeywords", "funder", "fundinglevel0_id", "fundinglevel1_id", "fundinglevel2_id", "projectstartdate", "projectenddate", "projectcode_nt", "relorganizationid", "collectedfromdatasourceid"]; public PROJECT_FIELDS: { [key: string]: FieldDetails } = { ["q"]: {name: "Any field", type: "keyword", param: "q", operator: "op", equalityOperator: "=", filterType: null}, ["projectacronym"]: { name: "Acronym", type: "keyword", param: "acronym", operator: "ar", equalityOperator: "=", filterType: null }, ["projecttitle"]: { name: "Title", type: "keyword", param: "title", operator: "tt", equalityOperator: "=", filterType: null }, ["projectkeywords"]: { name: "Keyword", type: "keyword", param: "keywords", operator: "ky", equalityOperator: "=", filterType: null }, ["funder"]: { name: "Funder", type: "refine", param: "funder", operator: "fn", equalityOperator: " exact ", filterType: "checkbox" }, ["fundinglevel0_id"]: { name: "Funding Stream", type: "refine", param: "funderlv0", operator: "fn0", equalityOperator: " exact ", filterType: "checkbox" }, ["fundinglevel1_id"]: { name: "Funding Substream level 1", type: "refine", param: "funderlv1", operator: "fn1", equalityOperator: " exact ", filterType: "checkbox" }, ["fundinglevel2_id"]: { name: "Funding Substream level 2", type: "refine", param: "funderlv2", operator: "fn2", equalityOperator: " exact ", filterType: "checkbox" }, ["projectstartyear"]: { name: "Start Year", type: "year", param: "startyear", operator: "sy", equalityOperator: " <= ", filterType: "checkbox" }, ["projectendyear"]: { name: "End Year", type: "year", param: "endyear", operator: "ey", equalityOperator: " >= ", filterType: "checkbox" }, ["projectendyear-range-projectstartyear"]: { name: "Active within", type: "year", param: "year", operator: "ya", equalityOperator: " = ", filterType: "range" }, ["projectstartdate"]: { name: "Start Date", type: "date", param: "startdate", operator: "sd", equalityOperator: " within ", filterType: null }, ["projectenddate"]: { name: "End Date", type: "date", param: "enddate", operator: "ed", equalityOperator: " within ", filterType: null }, // ["projectecsc39"]: { // name: "Special Clause 39", // type: "boolean", // param: "sc39", // operator: "sc", // equalityOperator: " exact ", // filterType: "radio" // }, ["projectoamandatepublications"]: { name: "OA "+OpenaireEntities.PUBLICATIONS+" Mandate", type: "boolean", param: "oapubl", operator: "oap", equalityOperator: " exact ", filterType: "radio" }, ["projectoamandatedata"]: { name: "OA "+OpenaireEntities.DATASETS+" Mandate", type: "boolean", param: "oadata", operator: "oad", equalityOperator: " exact ", filterType: "radio" }, ["projectcode_nt"]: { name: "Project Code", type: "keyword", param: "code", operator: "cd", equalityOperator: " exact ", filterType: null }, ["relorganizationid"]: { name: "Organization", type: "entity", param: "organization", operator: "og", equalityOperator: " exact ", filterType: null }, ["collectedfromdatasourceid"]: { name: "Collected from "+OpenaireEntities.DATASOURCE, type: "entity", param: "collectedFrom", operator: "cl", equalityOperator: " exact ", filterType: null } }; //DATAPROVIDERS // add Collected From Filter "collectedfromname" public DATASOURCE_REFINE_FIELDS: string[] = ["datasourcetypeuiname", "datasourceodlanguages", "datasourceodcontenttypes", "datasourcecompatibilityname", "country", "collectedfromname","datasourcethematic", "datasourcejurisdiction"]; public DATASOURCE_ADVANCED_FIELDS: string[] = ["q", "datasourceofficialname", "datasourceenglishname", "datasourceodsubjects", "datasourcetypename", "datasourceodlanguages", "datasourceodcontenttypes", "datasourcecompatibilityname", "relorganizationid", "collectedfromdatasourceid", "pid"]; public DATASOURCE_FIELDS: { [key: string]: FieldDetails } = { ["q"]: {name: "Any field", type: "keyword", param: "q", operator: "op", equalityOperator: "=", filterType: null}, ["datasourceofficialname"]: { name: "English name", type: "keyword", param: "officialname", operator: "of", equalityOperator: "=", filterType: null }, ["datasourceenglishname"]: { name: "Title", type: "keyword", param: "engname", operator: "eg", equalityOperator: "=", filterType: null }, ["datasourceodsubjects"]: { name: "Subject", type: "keyword", param: "subjects", operator: "sb", equalityOperator: "=", filterType: null }, ["datasourcetypeuiid"]: { name: "Type", type: "refine", param: "type", operator: "tp", equalityOperator: " exact ", filterType: null }, ["datasourcetypeuiname"]: { name: "Type", type: "refine", param: "type", operator: "tp", equalityOperator: " exact ", filterType: "radio" }, ["datasourcetypename"]: { name: "Type", type: "vocabulary", param: "type", operator: "tp", equalityOperator: " exact ", filterType: "radio" }, ["datasourceodlanguages"]: { name: "Language", type: "vocabulary", param: "lang", operator: "ln", equalityOperator: " exact ", filterType: "checkbox" }, ["datasourceodcontenttypes"]: { name: "Content", type: "refine", param: "content", operator: "cn", equalityOperator: " exact ", filterType: "checkbox" }, ["datasourcecompatibilityid"]: { name: "Compatibility Level", type: "refine", param: "compatibility", operator: "cm", equalityOperator: " exact ", filterType: null }, ["datasourcecompatibilityname"]: { name: "Compatibility Level", type: "vocabulary", param: "compatibility", operator: "cm", equalityOperator: " exact ", filterType: "checkbox" }, ["relorganizationid"]: { name: "Organization", type: "entity", param: "organization", operator: "og", equalityOperator: " exact ", filterType: null }, ["collectedfromname"]: { name: "Collected from", type: "entity", param: "collectedFrom", operator: "cl", equalityOperator: " exact ", filterType: "checkbox" }, ["collectedfromdatasourceid"]: { name: "Collected from "+OpenaireEntities.DATASOURCE, type: "entity", param: "collectedFrom", operator: "cl", equalityOperator: " exact ", filterType: null }, ["country"]: { name: "Country", type: "vocabulary", param: "country", operator: "cu", equalityOperator: " exact ", filterType: "checkbox" }, ["datasourcethematic"]: { name: "Thematic", type: "boolean", param: "thematic", operator: "th", equalityOperator: " exact ", filterType: "radio" }, ["datasourcejurisdiction"]: { name: "Jurisdiction", type: "vocabulary", param: "jurisdiction", operator: "ju", equalityOperator: " exact ", filterType: "checkbox" }, ["pid"]: {name: "PID", type: "keyword", param: "pid", operator: "pd", equalityOperator: " exact ", filterType: null} }; public DEPOSIT_DATASOURCE_KEYWORD_FIELDS: { "name": string, "equalityOperator": string } [] = [ {"name": "relorganizationname", "equalityOperator": "="}, {"name": "relorganizationshortname", "equalityOperator": "="}, {"name": "datasourceofficialname", "equalityOperator": "="}, {"name": "datasourceenglishname", "equalityOperator": "="}, {"name": "datasourcetypeuiname", "equalityOperator": " exact "}, {"name": "country", "equalityOperator": " exact "}, {"name": "datasourcesubject", "equalityOperator": " all "} ]; public DEPOSIT_DATASOURCE_REFINE_FIELDS: string[] = ["datasourcetypename", "country", "datasourceodsubjects", "datasourceodcontenttypes", "datasourcecompatibilityname","datasourcethematic", "datasourcejurisdiction"]; public DEPOSIT_DATASOURCE_FIELDS: { [key: string]: FieldDetails } = { ["datasourcetypeuiname"]: { name: "Repository type", type: "refine", param: "type", operator: "tp", equalityOperator: " exact ", filterType: "radio" }, ["country"]: { name: "Countries", type: "vocabulary", param: "country", operator: "cu", equalityOperator: " exact ", filterType: "checkbox" }, ["datasourceodsubjects"]: { name: "Subjects", type: "keyword", param: "subjects", operator: "sb", equalityOperator: "=", filterType: "checkbox" }, ["datasourceodcontenttypes"]: { name: "Content type", type: "refine", param: "content", operator: "cn", equalityOperator: " exact ", filterType: "checkbox" }, ["datasourcecompatibilityname"]: { name: "Compatibility Level", type: "vocabulary", param: "compatibility", operator: "cm", equalityOperator: " exact ", filterType: "checkbox" }, }; // public COMPATIBLE_DATAPROVIDER_FIELDS: string[] = ["datasourcetypename", "datasourcecompatibilityname"]; public COMPATIBLE_DATAPROVIDER_FIELDS: string[] = ["datasourcetypename", "datasourceodlanguages", "datasourceodcontenttypes", "datasourcecompatibilityname", "country", "collectedfromname","datasourcethematic", "datasourcejurisdiction"]; // public ENTITY_REGISTRIES_FIELDS: string[] = ["datasourcetypename", "datasourcecompatibilityname"]; public ENTITY_REGISTRIES_FIELDS: string[] = ["datasourcetypename", "datasourceodlanguages", "datasourceodcontenttypes", "datasourcecompatibilityname", "country", "collectedfromname","datasourcethematic", "datasourcejurisdiction"]; // public JOURNAL_FIELDS: string[] = ["datasourcetypename", "datasourcecompatibilityname"]; public JOURNAL_FIELDS: string[] = ["datasourcetypename", "datasourceodlanguages", "datasourceodcontenttypes", "datasourcecompatibilityname", "country", "collectedfromname","datasourcethematic", "datasourcejurisdiction"]; //ORGANIZATION public ORGANIZATION_REFINE_FIELDS: string[] = ["country"] public ORGANIZATION_ADVANCED_FIELDS: string[] = ["q", "organizationlegalname", "organizationlegalshortname", "country"]; public ORGANIZATION_FIELDS: { [key: string]: FieldDetails } = { ["q"]: {name: "Any field", type: "keyword", param: "q", operator: "op", equalityOperator: "=", filterType: null}, ["organizationlegalname"]: { name: "Legal Name", type: "keyword", param: "name", operator: "nm", equalityOperator: "=", filterType: null }, ["organizationlegalshortname"]: { name: "Legal Short Name", type: "keyword", param: "shortname", operator: "so", equalityOperator: "=", filterType: null }, ["country"]: { name: "Country", type: "vocabulary", param: "country", operator: "cu", equalityOperator: " exact ", filterType: "checkbox" }, }; // public ORGANIZATION_INDEX:string[] = ["organizationcountryname"]//,"organizationeclegalbody"]; // public ADVANCED_SEARCH_ORGANIZATION_PARAM:string[] = ["q","contenttype","compatibility","country","type"]; // public ORGANIZATION_INDEX_PARAM_MAP:{ [key:string]:string } = {["organizationlegalname"]:"contenttype", ["organizationlegalshortname"]:"type", // ["organizationcountryname"]:"country"};//,["organizationeclegalbody"]:"type"}; // public ORGANIZATION_FIELDS_MAP: { [key:string]:{ name:string, operator:string, type:string, indexField:string , operator: "op", equalityOperator:string}} ={ // ["q"]:{name:"Any field",operator:"op", type:"keyword", indexField:null, operator: "op", equalityOperator: "="}, // ["contenttype"]:{name:"Legal Name",operator:"cn", type:"keyword" , indexField:"organizationlegalname", operator: "op", equalityOperator: "="}, // ["compatibility"]:{name:"Legal Short Name",operator:"cm", type:"keyword", indexField:"organizationlegalshortname", operator: "op", equalityOperator: "="}, // ["country"]:{name:"Country",operator:"cu", type:"vocabulary", indexField:"organizationcountryname", operator: "op", equalityOperator: " exact "}, // ["type"]:{name:"Type",operator:"tp", type:"refine", indexField:"organizationeclegalbody", operator: "op", equalityOperator: " exact "}, // // }; //add project field depending on funder public HIDDEN_FIELDS: string[] = ["fundinglevel0_id", "fundinglevel1_id", "fundinglevel2_id", "relfundinglevel0_id", "relfundinglevel1_id", "relfundinglevel2_id", "relproject"]; public DEPENDENT_FIELDS: { [key: string]: string } = { ["relproject"]: "relfunder", ["fundinglevel0_id"]: "funder", ["fundinglevel1_id"]: "fundinglevel0_id", ["fundinglevel2_id"]: "fundinglevel1_id", ["relfundinglevel0_id"]: "relfunder", ["relfundinglevel1_id"]: "relfundinglevel0_id", ["relfundinglevel2_id"]: "relfundinglevel1_id" }; public ADVANCED_SEARCH_OPERATORS: string[] = ["and", "or"]; public COMMUNITIES_SEARCH_FIELDS: string[] = ["type", "access", "role"]; public STAKEHOLDER_SEARCH_FIELDS: string[] = ["type", "access", "role"]; constructor() { } getField(fieldId: string, fieldType: string): any { if (fieldType == "publication" || fieldType == "dataset" || fieldType == "software" || fieldType == "other" || fieldType == "result") { return this.RESULT_FIELDS[fieldId]; } else if (fieldType == "project") { return this.PROJECT_FIELDS[fieldId]; } else if (fieldType == "organization") { return this.ORGANIZATION_FIELDS[fieldId]; } else if (fieldType == "datasource" || fieldType == "dataprovider") { return this.DATASOURCE_FIELDS[fieldId]; } else if (fieldType == "service") { return this.DATASOURCE_FIELDS[fieldId]; } else { return null; } } getFieldName(fieldId: string, fieldType: string): string { let field = this.getField(fieldId, fieldType); return field?field.name:"UNDEFINED"; } sortFieldsByName(fieldIds: string[], fieldIdsMap: { [key: string]: FieldDetails }) { fieldIds.sort((a: string, b: string) => { if(a == "q") { return -1; } else if(b == "q") { return 1; } let nameA: string = fieldIdsMap[a].name; let nameB: string = fieldIdsMap[b].name; return nameA.localeCompare(nameB); }) } getFieldFilterType(fieldId: string, fieldType: string, usedBy: string = "search"): string { let field = this.getField(fieldId, fieldType); return field?field.filterType:"checkbox"; } getFieldParam(fieldId: string, fieldType: string): string { let field = this.getField(fieldId, fieldType); return field?field.param:"UNDEFINED"; } public static getParameterOrder(fieldId: string, params): number { let fields = []; let searchFields = new SearchFields(); if (searchFields.RESULT_REFINE_FIELDS.indexOf(fieldId) !=-1) { fields = searchFields.RESULT_REFINE_FIELDS; } else if (searchFields.PROJECT_REFINE_FIELDS.indexOf(fieldId) !=-1) { fields = searchFields.PROJECT_REFINE_FIELDS } else if (searchFields.ORGANIZATION_REFINE_FIELDS.indexOf(fieldId) !=-1) { fields = searchFields.ORGANIZATION_REFINE_FIELDS; } else if (searchFields.DATASOURCE_REFINE_FIELDS.indexOf(fieldId) !=-1) { fields = searchFields.DATASOURCE_REFINE_FIELDS; } let index = fields.indexOf(fieldId); let paramIndex = 0; if(index != -1){ for(let keyValue of params){ if(fields.indexOf(keyValue[0])>index){ break; } paramIndex++ } } return paramIndex; } /* AND Funder: relfunder, relfundinglevel0_id, relfundinglevel1_id, relfundinglevel2_id Project: relproject Community: community OR Type: instancetypename, datasourcetypeuiname Language: resultlanguagename, datasourceodlanguages Compatibility Level: datasourcecompatibilityname Country: country Content: datasourceodcontenttypes Datasource: resulthostingdatasource Collected From: collectedfrom BULLETS Access Mode: resultbestaccessright Special Clause 39: projectecsc39 Versioning: RANGE Publication date: resultacceptanceyear Project life: projectstartyear, projectendyear ? WHAT ABOUT ?: Subjects: Supported Identifiers: */ getFieldOperator(fieldId: string): string { if (fieldId == "relfunder" || fieldId == "relfundinglevel0_id" || fieldId == "relfundinglevel1_id" || fieldId == "relfundinglevel2_id" || fieldId == "relproject" || fieldId == "community" || fieldId == "projectendyear-range-projectstartyear") { return "and"; } else if (fieldId == "instancetypename" || fieldId == "datasourcetypeuiname" || fieldId == "resultlanguagename" || fieldId == "datasourceodlanguages" || fieldId == "datasourcecompatibilityname" || fieldId == "country" || fieldId == "datasourceodcontenttypes" || fieldId == "resulthostingdatasource" || fieldId == "collectedfrom") { return "or"; } return "or"; } } export class FieldDetails { name: string; type: string; param: string; equalityOperator: string; operator: string; filterType: string = "checkbox"; } export enum OpenaireEntities { RESULTS = "Research products", PUBLICATIONS = "Publications", DATASETS = "Research data", SOFTWARE = "Research software", OTHER = "Other research products", PROJECTS = "Projects", ORGANIZATIONS = "Organizations", DATASOURCES = "Data sources", SERVICES = "Services", COMMUNITIES = "Research communities", RESULT = "Research product", PUBLICATION = "Publication", DATASET = "Research data", SOFTWARE_SINGULAR = "Research software", OTHER_SINGULAR = "Other research product", PROJECT = "Project", ORGANIZATION = "Organization", DATASOURCE = "Data source", SERVICE = "Service", COMMUNITY = "Research community", RESULTS_FILE = "research-products", PUBLICATIONS_FILE = "publications", DATASETS_FILE = "research-data", SOFTWARE_FILE = "research-software", OTHER_FILE = "other-research-products", PROJECTS_FILE = "projects", ORGANIZATIONS_FILE = "organizations", DATASOURCES_FILE = "data-sources", SERVICES_FILE = "services", }