diff --git a/backend/src/main/java/uk/ac/ebi/spot/ols/controller/api/v1/V1SearchController.java b/backend/src/main/java/uk/ac/ebi/spot/ols/controller/api/v1/V1SearchController.java index 355b2a93..23d3ce99 100644 --- a/backend/src/main/java/uk/ac/ebi/spot/ols/controller/api/v1/V1SearchController.java +++ b/backend/src/main/java/uk/ac/ebi/spot/ols/controller/api/v1/V1SearchController.java @@ -35,7 +35,6 @@ import org.springframework.web.bind.annotation.RestController; import uk.ac.ebi.spot.ols.repository.Validation; -import uk.ac.ebi.spot.ols.repository.neo4j.OlsNeo4jClient; import uk.ac.ebi.spot.ols.repository.solr.OlsSolrClient; import uk.ac.ebi.spot.ols.repository.transforms.LocalizationTransform; import uk.ac.ebi.spot.ols.repository.transforms.RemoveLiteralDatatypesTransform; @@ -92,8 +91,10 @@ public void search( String[] fields = {"label_s", "synonym_s", "short_form_s", "obo_id_s", "iri_s", "annotations_trimmed"}; solrQuery.setQuery( "((" + - createUnionQuery(query.toLowerCase(), SolrFieldMapper.mapFieldsList(List.of(fields)).toArray(new String[0]), true) - + ") AND (isDefiningOntology:\"true\"^100 OR isDefiningOntology:false^0))" + createUnionQuery(query.toLowerCase(), SolrFieldMapper.mapFieldsList(List.of(fields)) + .toArray(new String[0]), true) + + ") AND ("+ IS_DEFINING_ONTOLOGY.getText() + ":\"true\"^100 OR " + + IS_DEFINING_ONTOLOGY.getText() + ":false^0))" ); } else { @@ -106,13 +107,14 @@ public void search( solrQuery.set("qf", String.join(" ", SolrFieldMapper.mapFieldsList(List.of(fields)))); solrQuery.set("bq", - "isDefiningOntology:\"true\"^100 " + + IS_DEFINING_ONTOLOGY.getText() + ":\"true\"^100 " + "lowercase_label:\"" + query.toLowerCase() + "\"^5 " + "lowercase_synonym:\"" + query.toLowerCase() + "\"^3"); } } else { if (exact) { - String[] fields = SolrFieldMapper.mapFieldsList(queryFields.stream().map(queryField -> queryField + "_s").collect(Collectors.toList())).toArray(new String[0]); + String[] fields = SolrFieldMapper.mapFieldsList(queryFields.stream().map(queryField -> queryField + "_s") + .collect(Collectors.toList())).toArray(new String[0]); solrQuery.setQuery(createUnionQuery(query.toLowerCase(), fields, true)); } else { @@ -140,7 +142,7 @@ public void search( } if (isLocal) { - solrQuery.addFilterQuery("imported:false"); + solrQuery.addFilterQuery(IMPORTED.getText() + ":false"); } if (isLeaf) { @@ -207,7 +209,7 @@ public void search( "ontologyIri", "ontologyPreferredPrefix", "type", - "isDefiningOntology", + IS_DEFINING_ONTOLOGY.getText(), IS_OBSOLETE.getText()); /* * Fix: End @@ -259,8 +261,9 @@ public void search( if (fieldList.contains("description")) outDoc.put("description", JsonHelper.getStrings(json, "definition")); if (fieldList.contains("short_form")) outDoc.put("short_form", JsonHelper.getString(json, "shortForm")); if (fieldList.contains("obo_id")) outDoc.put("obo_id", JsonHelper.getString(json, "curie")); - if (fieldList.contains("is_defining_ontology")) outDoc.put("is_defining_ontology", - JsonHelper.getString(json, "isDefiningOntology") != null && JsonHelper.getString(json, "isDefiningOntology").equals("true")); + if (fieldList.contains(IS_DEFINING_ONTOLOGY.getOls3Text())) outDoc.put(IS_DEFINING_ONTOLOGY.getOls3Text(), + JsonHelper.getString(json, IS_DEFINING_ONTOLOGY.getText()) != null && + JsonHelper.getString(json, IS_DEFINING_ONTOLOGY.getText()).equals("true")); if (fieldList.contains("type")) { outDoc.put("type", JsonHelper.getType(json, "type")); } diff --git a/backend/src/main/java/uk/ac/ebi/spot/ols/controller/api/v1/V1SelectController.java b/backend/src/main/java/uk/ac/ebi/spot/ols/controller/api/v1/V1SelectController.java index 0af18fed..2f57d289 100644 --- a/backend/src/main/java/uk/ac/ebi/spot/ols/controller/api/v1/V1SelectController.java +++ b/backend/src/main/java/uk/ac/ebi/spot/ols/controller/api/v1/V1SelectController.java @@ -17,7 +17,6 @@ import org.springframework.web.bind.annotation.RequestParam; import org.springframework.web.bind.annotation.RestController; import uk.ac.ebi.spot.ols.repository.Validation; -import uk.ac.ebi.spot.ols.repository.neo4j.OlsNeo4jClient; import uk.ac.ebi.spot.ols.repository.solr.OlsSolrClient; import uk.ac.ebi.spot.ols.repository.transforms.LocalizationTransform; import uk.ac.ebi.spot.ols.repository.transforms.RemoveLiteralDatatypesTransform; @@ -72,7 +71,9 @@ public void select( solrQuery.setQuery(query); solrQuery.set("defType", "edismax"); solrQuery.set("qf", "label whitespace_edge_label synonym whitespace_edge_synonym shortForm whitespace_edge_shortForm curie iri"); - solrQuery.set("bq", "type:ontology^10.0 isDefiningOntology:true^100.0 str_label:\"" + queryLc + "\"^1000 edge_label:\"" + queryLc + "\"^500 str_synonym:\"" + queryLc + "\" edge_synonym:\"" + queryLc + "\"^100"); + solrQuery.set("bq", "type:ontology^10.0 " + + IS_DEFINING_ONTOLOGY.getText() +":true^100.0 str_label:\"" + queryLc + "\"^1000 edge_label:\"" + + queryLc + "\"^500 str_synonym:\"" + queryLc + "\" edge_synonym:\"" + queryLc + "\"^100"); solrQuery.set("wt", "json"); solrQuery.setFields("_json", "id"); @@ -94,7 +95,7 @@ public void select( } if (isLocal) { - solrQuery.addFilterQuery("isDefiningOntology:true"); + solrQuery.addFilterQuery(IS_DEFINING_ONTOLOGY.getText() + ":true"); } if (childrenOf != null) { @@ -163,8 +164,9 @@ public void select( if (fieldList.contains("description")) outDoc.put("description", JsonHelper.getStrings(json, "definition")); if (fieldList.contains("short_form")) outDoc.put("short_form", JsonHelper.getString(json, "shortForm")); if (fieldList.contains("obo_id")) outDoc.put("obo_id", JsonHelper.getString(json, "curie")); - if (fieldList.contains("is_defining_ontology")) outDoc.put("is_defining_ontology", - JsonHelper.getString(json, "isDefiningOntology") != null && JsonHelper.getString(json, "isDefiningOntology").equals("true")); + if (fieldList.contains(IS_DEFINING_ONTOLOGY.getOls3Text())) outDoc.put(IS_DEFINING_ONTOLOGY.getOls3Text(), + JsonHelper.getString(json, IS_DEFINING_ONTOLOGY.getText()) != null && + JsonHelper.getString(json, IS_DEFINING_ONTOLOGY.getText()).equals("true")); if (fieldList.contains("type")) { outDoc.put("type", JsonHelper.getType(json, "type")); } diff --git a/backend/src/main/java/uk/ac/ebi/spot/ols/controller/api/v2/V2IndividualController.java b/backend/src/main/java/uk/ac/ebi/spot/ols/controller/api/v2/V2IndividualController.java index 63385d3a..00feeb84 100644 --- a/backend/src/main/java/uk/ac/ebi/spot/ols/controller/api/v2/V2IndividualController.java +++ b/backend/src/main/java/uk/ac/ebi/spot/ols/controller/api/v2/V2IndividualController.java @@ -101,10 +101,8 @@ public HttpEntity getIndividual( } - // The instances of classes are individuals. So, the /instances endpoint is part of the Class controller. - // - @RequestMapping(path = "/ontologies/{onto}/classes/{class}/instances", produces = {MediaType.APPLICATION_JSON_VALUE }, method = RequestMethod.GET) - public HttpEntity> getClassInstances( + @RequestMapping(path = "/ontologies/{onto}/classes/{class}/individuals", produces = {MediaType.APPLICATION_JSON_VALUE }, method = RequestMethod.GET) + public HttpEntity> getClassIndividuals( @PageableDefault(size = 20, page = 0) Pageable pageable, @PathVariable("onto") String ontologyId, @PathVariable("class") String classIri, @@ -115,7 +113,7 @@ public HttpEntity> getClassInstances( return new ResponseEntity<>( new V2PagedResponse<>( - individualRepository.getInstancesOfClass(ontologyId, classIri, pageable, lang) + individualRepository.getIndividualsOfClass(ontologyId, classIri, pageable, lang) ), HttpStatus.OK); diff --git a/backend/src/main/java/uk/ac/ebi/spot/ols/repository/v1/JsonHelper.java b/backend/src/main/java/uk/ac/ebi/spot/ols/repository/v1/JsonHelper.java index 3d729eaf..44842360 100644 --- a/backend/src/main/java/uk/ac/ebi/spot/ols/repository/v1/JsonHelper.java +++ b/backend/src/main/java/uk/ac/ebi/spot/ols/repository/v1/JsonHelper.java @@ -14,6 +14,9 @@ public static String getString(JsonObject json, String key) { return objectToString(json.get(key)); } + public static boolean getBoolean(JsonObject json, String key) { + return json.getAsJsonPrimitive(key).getAsBoolean(); + } public static String objectToString(JsonElement value) { diff --git a/backend/src/main/java/uk/ac/ebi/spot/ols/repository/v1/V1AncestorsJsTreeBuilder.java b/backend/src/main/java/uk/ac/ebi/spot/ols/repository/v1/V1AncestorsJsTreeBuilder.java index 6ecc9f12..1df8d767 100644 --- a/backend/src/main/java/uk/ac/ebi/spot/ols/repository/v1/V1AncestorsJsTreeBuilder.java +++ b/backend/src/main/java/uk/ac/ebi/spot/ols/repository/v1/V1AncestorsJsTreeBuilder.java @@ -8,6 +8,7 @@ import java.nio.charset.StandardCharsets; import java.util.*; import java.util.stream.Collectors; +import static uk.ac.ebi.ols.shared.DefinedFields.*; public class V1AncestorsJsTreeBuilder { @@ -90,8 +91,8 @@ private void createJsTreeEntries(List> jstree, JsonObject ent boolean opened = (!selected); - boolean hasDirectChildren = Objects.equals(JsonHelper.getString(entity, "hasDirectChildren"), "true"); - boolean hasHierarchicalChildren = Objects.equals(JsonHelper.getString(entity, "hasHierarchicalChildren"), "true"); + boolean hasDirectChildren = Objects.equals(JsonHelper.getString(entity, HAS_DIRECT_CHILDREN.getText()), "true"); + boolean hasHierarchicalChildren = Objects.equals(JsonHelper.getString(entity, HAS_DIRECT_CHILDREN.getText()), "true"); // only nodes that aren't already opened are marked as having children, (iff they actually have children!) boolean children = (!opened) && (hasDirectChildren || hasHierarchicalChildren); diff --git a/backend/src/main/java/uk/ac/ebi/spot/ols/repository/v1/V1ChildrenJsTreeBuilder.java b/backend/src/main/java/uk/ac/ebi/spot/ols/repository/v1/V1ChildrenJsTreeBuilder.java index 2c5f8ee1..fe8ff843 100644 --- a/backend/src/main/java/uk/ac/ebi/spot/ols/repository/v1/V1ChildrenJsTreeBuilder.java +++ b/backend/src/main/java/uk/ac/ebi/spot/ols/repository/v1/V1ChildrenJsTreeBuilder.java @@ -4,6 +4,7 @@ import java.nio.charset.StandardCharsets; import java.util.*; +import static uk.ac.ebi.ols.shared.DefinedFields.*; public class V1ChildrenJsTreeBuilder { @@ -34,7 +35,7 @@ List> buildJsTree() { jstreeEntry.put("text", JsonHelper.getString(child.getAsJsonObject(), "label")); jstreeEntry.put("state", Map.of("opened", false)); jstreeEntry.put("children", - JsonHelper.getString(child.getAsJsonObject(), "hasDirectChildren").equals("true") + JsonHelper.getString(child.getAsJsonObject(), HAS_DIRECT_CHILDREN.getText()).equals("true") || JsonHelper.getString(child.getAsJsonObject(), "hasHierarchicalChildren").equals("true") ); diff --git a/backend/src/main/java/uk/ac/ebi/spot/ols/repository/v1/V1IndividualRepository.java b/backend/src/main/java/uk/ac/ebi/spot/ols/repository/v1/V1IndividualRepository.java index fe883ebb..b5490176 100644 --- a/backend/src/main/java/uk/ac/ebi/spot/ols/repository/v1/V1IndividualRepository.java +++ b/backend/src/main/java/uk/ac/ebi/spot/ols/repository/v1/V1IndividualRepository.java @@ -19,6 +19,7 @@ import uk.ac.ebi.spot.ols.repository.solr.OlsFacetedResultsPage; import uk.ac.ebi.spot.ols.repository.v1.mappers.V1IndividualMapper; import uk.ac.ebi.spot.ols.repository.v1.mappers.V1TermMapper; +import static uk.ac.ebi.ols.shared.DefinedFields.*; //@RepositoryRestResource(collectionResourceRel = "individuals", exported = false) @Component @@ -116,7 +117,7 @@ public OlsFacetedResultsPage findAllByIsDefiningOntology(String la OlsSolrQuery query = new OlsSolrQuery(); query.addFilter("type", List.of("individual"), SearchType.WHOLE_FIELD); - query.addFilter("isDefiningOntology", List.of("true"), SearchType.WHOLE_FIELD); + query.addFilter(IS_DEFINING_ONTOLOGY.getText(), List.of("true"), SearchType.WHOLE_FIELD); OlsFacetedResultsPage entities = solrClient.searchSolrPaginated(query, pageable); @@ -145,7 +146,7 @@ public OlsFacetedResultsPage findAllByIriAndIsDefiningOntology(Str OlsSolrQuery query = new OlsSolrQuery(); query.addFilter("type", List.of("individual"), SearchType.WHOLE_FIELD); - query.addFilter("isDefiningOntology", List.of("true"), SearchType.WHOLE_FIELD); + query.addFilter(IS_DEFINING_ONTOLOGY.getText(), List.of("true"), SearchType.WHOLE_FIELD); query.addFilter("iri", List.of(iri), SearchType.WHOLE_FIELD); OlsFacetedResultsPage entities = solrClient.searchSolrPaginated(query, pageable); @@ -176,7 +177,7 @@ public OlsFacetedResultsPage findAllByShortFormAndIsDefiningOntolo OlsSolrQuery query = new OlsSolrQuery(); query.addFilter("type", List.of("individual"), SearchType.WHOLE_FIELD); - query.addFilter("isDefiningOntology", List.of("true"), SearchType.WHOLE_FIELD); + query.addFilter(IS_DEFINING_ONTOLOGY.getText(), List.of("true"), SearchType.WHOLE_FIELD); query.addFilter("shortForm", List.of(shortForm), SearchType.WHOLE_FIELD); OlsFacetedResultsPage entities = solrClient.searchSolrPaginated(query, pageable); @@ -204,7 +205,7 @@ public OlsFacetedResultsPage findAllByOboIdAndIsDefiningOntology(S OlsSolrQuery query = new OlsSolrQuery(); query.addFilter("type", List.of("individual"), SearchType.WHOLE_FIELD); - query.addFilter("isDefiningOntology", List.of("true"), SearchType.WHOLE_FIELD); + query.addFilter(IS_DEFINING_ONTOLOGY.getText(), List.of("true"), SearchType.WHOLE_FIELD); query.addFilter("oboId", List.of(oboId), SearchType.WHOLE_FIELD); OlsFacetedResultsPage entities = solrClient.searchSolrPaginated(query, pageable); diff --git a/backend/src/main/java/uk/ac/ebi/spot/ols/repository/v1/V1PropertyRepository.java b/backend/src/main/java/uk/ac/ebi/spot/ols/repository/v1/V1PropertyRepository.java index 5627576b..3098f086 100644 --- a/backend/src/main/java/uk/ac/ebi/spot/ols/repository/v1/V1PropertyRepository.java +++ b/backend/src/main/java/uk/ac/ebi/spot/ols/repository/v1/V1PropertyRepository.java @@ -94,8 +94,8 @@ public Page getRoots(String ontologyId, boolean obsolete, String lan OlsSolrQuery query = new OlsSolrQuery(); query.addFilter("type", List.of("property"), SearchType.WHOLE_FIELD); query.addFilter("ontologyId", List.of(ontologyId), SearchType.WHOLE_FIELD); - query.addFilter("hasDirectParent", List.of("false"), SearchType.WHOLE_FIELD); - query.addFilter("hasHierarchicalParent", List.of("false"), SearchType.WHOLE_FIELD); + query.addFilter(HAS_DIRECT_PARENTS.getText(), List.of("false"), SearchType.WHOLE_FIELD); + query.addFilter(HAS_HIERARCHICAL_PARENTS.getText(), List.of("false"), SearchType.WHOLE_FIELD); if(!obsolete) query.addFilter(IS_OBSOLETE.getText(), List.of("false"), SearchType.WHOLE_FIELD); @@ -119,7 +119,7 @@ public Page findAllByIsDefiningOntology(String lang, Pageable pageab OlsSolrQuery query = new OlsSolrQuery(); query.addFilter("type", List.of("property"), SearchType.WHOLE_FIELD); - query.addFilter("isDefiningOntology", List.of("true"), SearchType.WHOLE_FIELD); + query.addFilter(IS_DEFINING_ONTOLOGY.getText(), List.of("true"), SearchType.WHOLE_FIELD); return solrClient.searchSolrPaginated(query, pageable) .map(result -> V1PropertyMapper.mapProperty(result, lang)); @@ -141,7 +141,7 @@ public Page findAllByIriAndIsDefiningOntology(String iri, String lan OlsSolrQuery query = new OlsSolrQuery(); query.addFilter("type", List.of("property"), SearchType.WHOLE_FIELD); query.addFilter("iri", List.of(iri), SearchType.WHOLE_FIELD); - query.addFilter("isDefiningOntology", List.of("true"), SearchType.WHOLE_FIELD); + query.addFilter(IS_DEFINING_ONTOLOGY.getText(), List.of("true"), SearchType.WHOLE_FIELD); return solrClient.searchSolrPaginated(query, pageable) .map(result -> V1PropertyMapper.mapProperty(result, lang)); @@ -163,7 +163,7 @@ public Page findAllByShortFormAndIsDefiningOntology(String shortForm OlsSolrQuery query = new OlsSolrQuery(); query.addFilter("type", List.of("property"), SearchType.WHOLE_FIELD); query.addFilter("shortForm", List.of(shortForm), SearchType.WHOLE_FIELD); - query.addFilter("isDefiningOntology", List.of("true"), SearchType.WHOLE_FIELD); + query.addFilter(IS_DEFINING_ONTOLOGY.getText(), List.of("true"), SearchType.WHOLE_FIELD); return solrClient.searchSolrPaginated(query, pageable) .map(result -> V1PropertyMapper.mapProperty(result, lang)); @@ -186,7 +186,7 @@ public Page findAllByOboIdAndIsDefiningOntology(String oboId, String OlsSolrQuery query = new OlsSolrQuery(); query.addFilter("type", List.of("property"), SearchType.WHOLE_FIELD); query.addFilter("oboId", List.of(oboId), SearchType.WHOLE_FIELD); - query.addFilter("isDefiningOntology", List.of("true"), SearchType.WHOLE_FIELD); + query.addFilter(IS_DEFINING_ONTOLOGY.getText(), List.of("true"), SearchType.WHOLE_FIELD); return solrClient.searchSolrPaginated(query, pageable) .map(result -> V1PropertyMapper.mapProperty(result, lang)); diff --git a/backend/src/main/java/uk/ac/ebi/spot/ols/repository/v1/V1TermRepository.java b/backend/src/main/java/uk/ac/ebi/spot/ols/repository/v1/V1TermRepository.java index 3a89e3d9..cd03273b 100644 --- a/backend/src/main/java/uk/ac/ebi/spot/ols/repository/v1/V1TermRepository.java +++ b/backend/src/main/java/uk/ac/ebi/spot/ols/repository/v1/V1TermRepository.java @@ -181,8 +181,8 @@ public Page getRoots(String ontologyId, boolean obsolete, String lang, P OlsSolrQuery query = new OlsSolrQuery(); query.addFilter("type", List.of("class"), SearchType.WHOLE_FIELD); query.addFilter("ontologyId", List.of(ontologyId), SearchType.WHOLE_FIELD); - query.addFilter("hasDirectParent", List.of("false"), SearchType.WHOLE_FIELD); - query.addFilter("hasHierarchicalParent", List.of("false"), SearchType.WHOLE_FIELD); + query.addFilter(HAS_DIRECT_PARENTS.getText(), List.of("false"), SearchType.WHOLE_FIELD); + query.addFilter(HAS_HIERARCHICAL_PARENTS.getText(), List.of("false"), SearchType.WHOLE_FIELD); if (!obsolete) query.addFilter(IS_OBSOLETE.getText(), List.of("false"), SearchType.WHOLE_FIELD); @@ -225,7 +225,7 @@ public Page findAllByIsDefiningOntology(String lang, Pageable pageable) OlsSolrQuery query = new OlsSolrQuery(); query.addFilter("type", List.of("class"), SearchType.WHOLE_FIELD); - query.addFilter("isDefiningOntology", List.of("true"), SearchType.WHOLE_FIELD); + query.addFilter(IS_DEFINING_ONTOLOGY.getText(), List.of("true"), SearchType.WHOLE_FIELD); return solrClient.searchSolrPaginated(query, pageable) .map(result -> V1TermMapper.mapTerm(result, lang)); @@ -246,7 +246,7 @@ public Page findAllByIriAndIsDefiningOntology(String iri, String lang, P OlsSolrQuery query = new OlsSolrQuery(); query.addFilter("type", List.of("class"), SearchType.WHOLE_FIELD); - query.addFilter("isDefiningOntology", List.of("true"), SearchType.WHOLE_FIELD); + query.addFilter(IS_DEFINING_ONTOLOGY.getText(), List.of("true"), SearchType.WHOLE_FIELD); query.addFilter("iri", List.of(iri), SearchType.WHOLE_FIELD); return solrClient.searchSolrPaginated(query, pageable) @@ -267,7 +267,7 @@ public Page findAllByShortFormAndIsDefiningOntology(String shortForm, St OlsSolrQuery query = new OlsSolrQuery(); query.addFilter("type", List.of("class"), SearchType.WHOLE_FIELD); - query.addFilter("isDefiningOntology", List.of("true"), SearchType.WHOLE_FIELD); + query.addFilter(IS_DEFINING_ONTOLOGY.getText(), List.of("true"), SearchType.WHOLE_FIELD); query.addFilter("shortForm", List.of(shortForm), SearchType.WHOLE_FIELD); return solrClient.searchSolrPaginated(query, pageable) @@ -289,7 +289,7 @@ public Page findAllByOboIdAndIsDefiningOntology(String oboId, String lan OlsSolrQuery query = new OlsSolrQuery(); query.addFilter("type", List.of("class"), SearchType.WHOLE_FIELD); - query.addFilter("isDefiningOntology", List.of("true"), SearchType.WHOLE_FIELD); + query.addFilter(IS_DEFINING_ONTOLOGY.getText(), List.of("true"), SearchType.WHOLE_FIELD); query.addFilter("curie", List.of(oboId), SearchType.WHOLE_FIELD); return solrClient.searchSolrPaginated(query, pageable) diff --git a/backend/src/main/java/uk/ac/ebi/spot/ols/repository/v1/mappers/V1PropertyMapper.java b/backend/src/main/java/uk/ac/ebi/spot/ols/repository/v1/mappers/V1PropertyMapper.java index 150dde16..19153f65 100644 --- a/backend/src/main/java/uk/ac/ebi/spot/ols/repository/v1/mappers/V1PropertyMapper.java +++ b/backend/src/main/java/uk/ac/ebi/spot/ols/repository/v1/mappers/V1PropertyMapper.java @@ -8,6 +8,8 @@ import java.util.Objects; +import static uk.ac.ebi.ols.shared.DefinedFields.*; + public class V1PropertyMapper { public static V1Property mapProperty(JsonElement json, String lang) { @@ -34,12 +36,12 @@ public static V1Property mapProperty(JsonElement json, String lang) { property.shortForm = JsonHelper.getString(localizedJson, "shortForm"); property.oboId = property.shortForm.replace("_", ":"); - property.hasChildren = Boolean.parseBoolean(JsonHelper.getString(localizedJson, "hasDirectChildren")) - || Boolean.parseBoolean(JsonHelper.getString(localizedJson, "hasHierarchicalChildren")); + property.hasChildren = Boolean.parseBoolean(JsonHelper.getString(localizedJson, HAS_DIRECT_CHILDREN.getText())) + || Boolean.parseBoolean(JsonHelper.getString(localizedJson, HAS_DIRECT_CHILDREN.getText())); property.isRoot = !( - Boolean.parseBoolean(JsonHelper.getString(localizedJson, "hasDirectParent")) || - Boolean.parseBoolean(JsonHelper.getString(localizedJson, "hasHierarchicalParent")) + JsonHelper.getBoolean(localizedJson, HAS_DIRECT_PARENTS.getText()) || + JsonHelper.getBoolean(localizedJson, HAS_HIERARCHICAL_PARENTS.getText()) ); return property; diff --git a/backend/src/main/java/uk/ac/ebi/spot/ols/repository/v1/mappers/V1TermMapper.java b/backend/src/main/java/uk/ac/ebi/spot/ols/repository/v1/mappers/V1TermMapper.java index 8e13a298..a3027046 100644 --- a/backend/src/main/java/uk/ac/ebi/spot/ols/repository/v1/mappers/V1TermMapper.java +++ b/backend/src/main/java/uk/ac/ebi/spot/ols/repository/v1/mappers/V1TermMapper.java @@ -45,14 +45,14 @@ public static V1Term mapTerm(JsonElement json, String lang) { term.oboSynonyms = V1OboSynonymExtractor.extractFromJson(localizedJson); term.isPreferredRoot = false; - term.isDefiningOntology = Boolean.parseBoolean(JsonHelper.getString(localizedJson, "isDefiningOntology")); + term.isDefiningOntology = Boolean.parseBoolean(JsonHelper.getString(localizedJson, IS_DEFINING_ONTOLOGY.getText())); - term.hasChildren = Boolean.parseBoolean(JsonHelper.getString(localizedJson, "hasDirectChildren")) + term.hasChildren = Boolean.parseBoolean(JsonHelper.getString(localizedJson, HAS_DIRECT_CHILDREN.getText())) || Boolean.parseBoolean(JsonHelper.getString(localizedJson, "hasHierarchicalChildren")); term.isRoot = !( - Boolean.parseBoolean(JsonHelper.getString(localizedJson, "hasDirectParent")) || - Boolean.parseBoolean(JsonHelper.getString(localizedJson, "hasHierarchicalParent")) + JsonHelper.getBoolean(localizedJson, HAS_DIRECT_PARENTS.getText()) || + JsonHelper.getBoolean(localizedJson, HAS_HIERARCHICAL_PARENTS.getText()) ); term.isObsolete = Boolean.parseBoolean(JsonHelper.getString(localizedJson, IS_OBSOLETE.getText())); diff --git a/backend/src/main/java/uk/ac/ebi/spot/ols/repository/v2/V2IndividualRepository.java b/backend/src/main/java/uk/ac/ebi/spot/ols/repository/v2/V2IndividualRepository.java index ed449380..467e4cf8 100644 --- a/backend/src/main/java/uk/ac/ebi/spot/ols/repository/v2/V2IndividualRepository.java +++ b/backend/src/main/java/uk/ac/ebi/spot/ols/repository/v2/V2IndividualRepository.java @@ -101,7 +101,7 @@ public V2Entity getByOntologyIdAndIri(String ontologyId, String iri, String lang ); } - public OlsFacetedResultsPage getInstancesOfClass( + public OlsFacetedResultsPage getIndividualsOfClass( String ontologyId, String classIri, Pageable pageable, String lang) throws IOException { Validation.validateOntologyId(ontologyId); diff --git a/backend/src/main/java/uk/ac/ebi/spot/ols/repository/v2/helpers/V2SearchFieldsParser.java b/backend/src/main/java/uk/ac/ebi/spot/ols/repository/v2/helpers/V2SearchFieldsParser.java index 55a150bf..aa54693b 100644 --- a/backend/src/main/java/uk/ac/ebi/spot/ols/repository/v2/helpers/V2SearchFieldsParser.java +++ b/backend/src/main/java/uk/ac/ebi/spot/ols/repository/v2/helpers/V2SearchFieldsParser.java @@ -6,6 +6,7 @@ import java.util.ArrayList; import java.util.Collection; import java.util.List; +import static uk.ac.ebi.ols.shared.DefinedFields.*; public class V2SearchFieldsParser { @@ -32,7 +33,7 @@ public static void addBoostFieldsToQuery(OlsSolrQuery query, String boostFields) if(boostFields == null) { query.addBoostField("type", "ontology", 10, SearchType.WHOLE_FIELD); - query.addBoostField("isDefiningOntology", "true", 1000, SearchType.WHOLE_FIELD); + query.addBoostField(IS_DEFINING_ONTOLOGY.getText(), "true", 1000, SearchType.WHOLE_FIELD); query.addBoostField("label", query.getSearchText(), 1000, SearchType.WHOLE_FIELD); query.addBoostField("label", query.getSearchText(), 500, SearchType.EDGES); query.addBoostField("curie", query.getSearchText(), 500, SearchType.EDGES); diff --git a/dataload/extras/json2sssom/pom.xml b/dataload/extras/json2sssom/pom.xml index e75746de..871bc252 100644 --- a/dataload/extras/json2sssom/pom.xml +++ b/dataload/extras/json2sssom/pom.xml @@ -10,6 +10,11 @@ jar + + uk.ac.ebi.spot.ols + ols4-shared + 1.0.0-SNAPSHOT + org.apache.jena apache-jena-libs diff --git a/dataload/extras/json2sssom/src/main/java/JSON2SSSOM.java b/dataload/extras/json2sssom/src/main/java/JSON2SSSOM.java index 68086c36..1215778f 100644 --- a/dataload/extras/json2sssom/src/main/java/JSON2SSSOM.java +++ b/dataload/extras/json2sssom/src/main/java/JSON2SSSOM.java @@ -13,6 +13,8 @@ import java.util.stream.Collectors; import java.util.stream.Stream; +import static uk.ac.ebi.ols.shared.DefinedFields.*; + public class JSON2SSSOM { static Gson gson = new Gson(); @@ -191,7 +193,7 @@ public static void writeMappingsForEntity( CSVPrinter writer, CurieMap curieMap) throws IOException { - JsonElement isDefiningOntology = entity.get("isDefiningOntology"); + JsonElement isDefiningOntology = entity.get(IS_DEFINING_ONTOLOGY.getText()); if(isDefiningOntology != null && isDefiningOntology.getAsBoolean() == false) { // don't print mappings for imported entities (they will already be printed in the defining ontology) diff --git a/dataload/linker/pom.xml b/dataload/linker/pom.xml index a63e7d66..c5541a6a 100644 --- a/dataload/linker/pom.xml +++ b/dataload/linker/pom.xml @@ -10,6 +10,11 @@ jar + + uk.ac.ebi.spot.ols + ols4-shared + 1.0.0-SNAPSHOT + com.google.guava guava diff --git a/dataload/linker/src/main/java/EntityDefinitionSet.java b/dataload/linker/src/main/java/EntityDefinitionSet.java index 7cab8687..fcbab376 100644 --- a/dataload/linker/src/main/java/EntityDefinitionSet.java +++ b/dataload/linker/src/main/java/EntityDefinitionSet.java @@ -1,6 +1,5 @@ import java.util.HashMap; import java.util.HashSet; -import java.util.List; import java.util.Map; import java.util.Set; diff --git a/dataload/linker/src/main/java/LinkerPass2.java b/dataload/linker/src/main/java/LinkerPass2.java index 449ecce3..59ae7f39 100644 --- a/dataload/linker/src/main/java/LinkerPass2.java +++ b/dataload/linker/src/main/java/LinkerPass2.java @@ -1,15 +1,16 @@ - -import com.google.gson.JsonArray; import com.google.gson.JsonElement; -import com.google.gson.JsonObject; import com.google.gson.JsonParser; -import com.google.gson.JsonPrimitive; import com.google.gson.stream.JsonReader; import com.google.gson.stream.JsonToken; import com.google.gson.stream.JsonWriter; import java.io.*; -import java.util.*; +import java.util.HashSet; +import java.util.Set; +import java.util.TreeSet; + +import static uk.ac.ebi.ols.shared.DefinedFields.HAS_LOCAL_DEFINITION; +import static uk.ac.ebi.ols.shared.DefinedFields.IS_DEFINING_ONTOLOGY; public class LinkerPass2 { @@ -159,7 +160,7 @@ private static void writeEntityArray(JsonReader jsonReader, JsonWriter jsonWrite EntityDefinitionSet defOfThisEntity = pass1Result.iriToDefinitions.get(entityIri); if(defOfThisEntity != null) { - jsonWriter.name("isDefiningOntology"); + jsonWriter.name(IS_DEFINING_ONTOLOGY.getText()); jsonWriter.value(defOfThisEntity.definingOntologyIds.contains(ontologyId)); if (defOfThisEntity.definingDefinitions.size() > 0) { @@ -351,7 +352,7 @@ private static void writeIriMapping(JsonWriter jsonWriter, EntityDefinitionSet d jsonWriter.name("numAppearsIn"); jsonWriter.value(Integer.toString(definitions.definitions.size())); - jsonWriter.name("hasLocalDefinition"); + jsonWriter.name(HAS_LOCAL_DEFINITION.getText()); jsonWriter.value(definitions.ontologyIdToDefinitions.containsKey(ontologyId)); EntityDefinition defFromThisOntology = definitions.ontologyIdToDefinitions.get(ontologyId); diff --git a/dataload/rdf2json/src/main/java/uk/ac/ebi/rdf2json/OntologyGraph.java b/dataload/rdf2json/src/main/java/uk/ac/ebi/rdf2json/OntologyGraph.java index ac8f47b1..8d1c1f23 100644 --- a/dataload/rdf2json/src/main/java/uk/ac/ebi/rdf2json/OntologyGraph.java +++ b/dataload/rdf2json/src/main/java/uk/ac/ebi/rdf2json/OntologyGraph.java @@ -24,6 +24,7 @@ import java.util.*; import java.util.stream.Collectors; import static uk.ac.ebi.rdf2json.OntologyNode.NodeType.*; +import static uk.ac.ebi.ols.shared.DefinedFields.*; public class OntologyGraph implements StreamRDF { @@ -146,7 +147,7 @@ private String urlToFilename(String url) { for(String id : nodes.keySet()) { OntologyNode c = nodes.get(id); if(c.uri != null) { - c.properties.addProperty("imported", PropertyValueLiteral.fromString("false")); + c.properties.addProperty(IMPORTED.getText(), PropertyValueLiteral.fromBoolean("false")); } } @@ -163,8 +164,8 @@ private String urlToFilename(String url) { for(String id : nodes.keySet()) { OntologyNode c = nodes.get(id); if(c.uri != null) { - if(!c.properties.hasProperty("imported")) { - c.properties.addProperty("imported", PropertyValueLiteral.fromString("true")); + if(!c.properties.hasProperty(IMPORTED.getText())) { + c.properties.addProperty(IMPORTED.getText(), PropertyValueLiteral.fromBoolean("true")); } } } diff --git a/dataload/rdf2json/src/main/java/uk/ac/ebi/rdf2json/annotators/HasIndividualsAnnotator.java b/dataload/rdf2json/src/main/java/uk/ac/ebi/rdf2json/annotators/HasIndividualsAnnotator.java index ec91f385..62c617af 100644 --- a/dataload/rdf2json/src/main/java/uk/ac/ebi/rdf2json/annotators/HasIndividualsAnnotator.java +++ b/dataload/rdf2json/src/main/java/uk/ac/ebi/rdf2json/annotators/HasIndividualsAnnotator.java @@ -8,6 +8,8 @@ import java.util.List; +import static uk.ac.ebi.ols.shared.DefinedFields.*; + public class HasIndividualsAnnotator { public static void annotateHasIndividuals(OntologyGraph graph) { @@ -32,7 +34,7 @@ public static void annotateHasIndividuals(OntologyGraph graph) { && typeNode.types.contains(OntologyNode.NodeType.CLASS) && typeNode.uri != null) { - typeNode.properties.addProperty("hasIndividuals", PropertyValueLiteral.fromString("true")); + typeNode.properties.addProperty(HAS_INDIVIDUALS.getText(), PropertyValueLiteral.fromBoolean("true")); } } } diff --git a/dataload/rdf2json/src/main/java/uk/ac/ebi/rdf2json/annotators/HierarchyFlagsAnnotator.java b/dataload/rdf2json/src/main/java/uk/ac/ebi/rdf2json/annotators/HierarchyFlagsAnnotator.java index 85f4a4bc..410f8997 100644 --- a/dataload/rdf2json/src/main/java/uk/ac/ebi/rdf2json/annotators/HierarchyFlagsAnnotator.java +++ b/dataload/rdf2json/src/main/java/uk/ac/ebi/rdf2json/annotators/HierarchyFlagsAnnotator.java @@ -10,6 +10,8 @@ import java.util.List; import java.util.Set; +import static uk.ac.ebi.ols.shared.DefinedFields.*; + public class HierarchyFlagsAnnotator { public static void annotateHierarchyFlags(OntologyGraph graph) { @@ -37,7 +39,7 @@ public static void annotateHierarchyFlags(OntologyGraph graph) { List parents = c.properties.getPropertyValues("directParent"); - boolean hasDirectParent = false; + boolean hasDirectParents = false; if(parents != null) { for (PropertyValue parent : parents) { @@ -49,19 +51,20 @@ public static void annotateHierarchyFlags(OntologyGraph graph) { continue; } - hasDirectParent = true; + hasDirectParents = true; hasChildren.add(iri); } } - c.properties.addProperty("hasDirectParent", PropertyValueLiteral.fromString(hasDirectParent ? "true" : "false")); + c.properties.addProperty(HAS_DIRECT_PARENTS.getText(), + PropertyValueLiteral.fromBoolean(hasDirectParents ? "true" : "false")); // 2. Hierarchical parents // List hierarchicalParents = c.properties.getPropertyValues("hierarchicalParent"); - boolean hasHierarchicalParent = false; + boolean hasHierarchicalParents = false; if(hierarchicalParents != null) { for (PropertyValue parent : hierarchicalParents) { @@ -73,12 +76,12 @@ public static void annotateHierarchyFlags(OntologyGraph graph) { continue; } - hasHierarchicalParent = true; + hasHierarchicalParents = true; hasHierarchicalChildren.add(iri); } } - c.properties.addProperty("hasHierarchicalParent", PropertyValueLiteral.fromString(hasHierarchicalParent ? "true" : "false")); + c.properties.addProperty(HAS_HIERARCHICAL_PARENTS.getText(), PropertyValueLiteral.fromBoolean(hasHierarchicalParents ? "true" : "false")); } } @@ -94,15 +97,15 @@ public static void annotateHierarchyFlags(OntologyGraph graph) { continue; if(hasChildren.contains(c.uri)) { - c.properties.addProperty("hasDirectChildren", PropertyValueLiteral.fromString("true")); + c.properties.addProperty(HAS_DIRECT_CHILDREN.getText(), PropertyValueLiteral.fromBoolean("true")); } else { - c.properties.addProperty("hasDirectChildren", PropertyValueLiteral.fromString("false")); + c.properties.addProperty(HAS_DIRECT_CHILDREN.getText(), PropertyValueLiteral.fromBoolean("false")); } if(hasHierarchicalChildren.contains(c.uri)) { - c.properties.addProperty("hasHierarchicalChildren", PropertyValueLiteral.fromString("true")); + c.properties.addProperty(HAS_HIERARCHICAL_CHILDREN.getText(), PropertyValueLiteral.fromBoolean("true")); } else { - c.properties.addProperty("hasHierarchicalChildren", PropertyValueLiteral.fromString("false")); + c.properties.addProperty(HAS_HIERARCHICAL_CHILDREN.getText(), PropertyValueLiteral.fromBoolean("false")); } } } diff --git a/dataload/rdf2json/src/main/java/uk/ac/ebi/rdf2json/annotators/PreferredRootsAnnotator.java b/dataload/rdf2json/src/main/java/uk/ac/ebi/rdf2json/annotators/PreferredRootsAnnotator.java index 30c52f55..a01e3f30 100644 --- a/dataload/rdf2json/src/main/java/uk/ac/ebi/rdf2json/annotators/PreferredRootsAnnotator.java +++ b/dataload/rdf2json/src/main/java/uk/ac/ebi/rdf2json/annotators/PreferredRootsAnnotator.java @@ -10,6 +10,8 @@ import uk.ac.ebi.rdf2json.OntologyNode; import uk.ac.ebi.rdf2json.properties.*; +import static uk.ac.ebi.ols.shared.DefinedFields.*; + public class PreferredRootsAnnotator { public static Set getPreferredRoots(OntologyGraph graph) { @@ -58,9 +60,9 @@ public static void annotatePreferredRoots(OntologyGraph graph) { continue; if(preferredRoots.contains(c.uri)) { - c.properties.addProperty("isPreferredRoot", PropertyValueLiteral.fromString("true")); + c.properties.addProperty(IS_PREFERRED_ROOT.getText(), PropertyValueLiteral.fromBoolean("true")); } else { - c.properties.addProperty("isPreferredRoot", PropertyValueLiteral.fromString("false")); + c.properties.addProperty(IS_PREFERRED_ROOT.getText(), PropertyValueLiteral.fromBoolean("false")); } } } diff --git a/frontend/src/model/Entity.ts b/frontend/src/model/Entity.ts index cf8b65d4..a38d6d02 100644 --- a/frontend/src/model/Entity.ts +++ b/frontend/src/model/Entity.ts @@ -45,11 +45,11 @@ export default abstract class Entity extends Thing { } hasDirectChildren(): boolean { - return this.properties["hasDirectChildren"] === "true"; + return this.properties["hasDirectChildren"] === true; } hasHierarchicalChildren(): boolean { - return this.properties["hasHierarchicalChildren"] === "true"; + return this.properties["hasHierarchicalChildren"] === true; } hasChildren(): boolean { diff --git a/frontend/src/pages/ontologies/ontologiesSlice.ts b/frontend/src/pages/ontologies/ontologiesSlice.ts index e11ca825..bb7710f0 100644 --- a/frontend/src/pages/ontologies/ontologiesSlice.ts +++ b/frontend/src/pages/ontologies/ontologiesSlice.ts @@ -216,7 +216,7 @@ export const getClassInstances = createAsyncThunk( const doubleEncodedTermUri = encodeURIComponent( encodeURIComponent(classIri) ); - path = `api/v2/ontologies/${ontologyId}/classes/${doubleEncodedTermUri}/instances?${new URLSearchParams( + path = `api/v2/ontologies/${ontologyId}/classes/${doubleEncodedTermUri}/individuals?${new URLSearchParams( apiSearchParams )}`; const instances = (await getPaginated(path)).map((i) => @@ -346,7 +346,7 @@ export const getRootEntities = createAsyncThunk( ), getPaginated( `api/v2/ontologies/${ontologyId}/individuals?${new URLSearchParams({ - hasDirectParent: "false", + hasDirectParents: "false", size: "1000", lang, includeObsoleteEntities: showObsoleteEnabled, @@ -387,7 +387,7 @@ export const getRootEntities = createAsyncThunk( } else { const rootsPage = await getPaginated( `api/v2/ontologies/${ontologyId}/${entityType}?${new URLSearchParams({ - hasDirectParent: "false", + hasDirectParents: "false", size: "1000", lang, includeObsoleteEntities: showObsoleteEnabled, @@ -433,7 +433,7 @@ export const getNodeChildren = createAsyncThunk( ); } else if (entityTypePlural === "individuals") { childrenPage = await getPaginated( - `api/v2/ontologies/${ontologyId}/classes/${doubleEncodedUri}/instances?${new URLSearchParams( + `api/v2/ontologies/${ontologyId}/classes/${doubleEncodedUri}/individuals?${new URLSearchParams( { size: "1000", lang, diff --git a/ols-shared/src/main/java/uk/ac/ebi/ols/shared/DefinedFields.java b/ols-shared/src/main/java/uk/ac/ebi/ols/shared/DefinedFields.java index 535a5c15..51e65cd7 100644 --- a/ols-shared/src/main/java/uk/ac/ebi/ols/shared/DefinedFields.java +++ b/ols-shared/src/main/java/uk/ac/ebi/ols/shared/DefinedFields.java @@ -1,9 +1,26 @@ package uk.ac.ebi.ols.shared; public enum DefinedFields { - IS_OBSOLETE("isObsolete", "is_obsolete", "Set to true if this entity is obsolete, otherwise is set to false."), - DEFINITION("definition", "description","The definition of this entity."), - DIRECT_PARENT("directParent", "parents","The list of direct parents for this entity."); + DEFINITION("definition", "","The definition of this entity."), + HAS_DIRECT_CHILDREN("hasDirectChildren", "has_children", + "Whether this class has direct children or not."), + HAS_DIRECT_PARENTS("hasDirectParents", "", + "Indicates whether this class has direct parents or not."), + HAS_HIERARCHICAL_CHILDREN("hasHierarchicalChildren", "", + "Whether this class has hierarchical children or not."), + HAS_HIERARCHICAL_PARENTS("hasHierarchicalParents", "", + "Whether this class has hierarchical parents or not."), + HAS_INDIVIDUALS("hasIndividuals", "", ""), + HAS_LOCAL_DEFINITION("hasLocalDefinition", "", + "True if term is definined within this ontology."), + IMPORTED("imported", "", + "Whether this entity is imported or not."), + IS_DEFINING_ONTOLOGY("isDefiningOntology", + "is_defining_ontology","Whether this entity is defined in this ontology or not."), + IS_OBSOLETE("isObsolete", "isObsolete", + "Set to true if this entity is obsolete, otherwise is set to false."), + IS_PREFERRED_ROOT("isPreferredRoot", "is_preferred_root", + "Set to true if this entity is a preferred root or not."); private final String text; private final String ols3Text;