diff --git a/build.gradle b/build.gradle index 70dfaef..68fab6c 100644 --- a/build.gradle +++ b/build.gradle @@ -7,7 +7,7 @@ plugins { id("com.dorongold.task-tree") version "3.0.0" } -version = "0.5.11" +version = "0.5.12" group = "org.jacksonlaboratory" repositories { diff --git a/src/main/java/org/jacksonlaboratory/Application.java b/src/main/java/org/jacksonlaboratory/Application.java index 6fe0bef..be612d7 100644 --- a/src/main/java/org/jacksonlaboratory/Application.java +++ b/src/main/java/org/jacksonlaboratory/Application.java @@ -8,7 +8,7 @@ info = @Info( title = "ontology-service-${ontology}", description = "A restful service for the ${ontology} ontology.", - version = "0.5.11", + version = "0.5.12", contact = @Contact(name = "Michael Gargano", email = "Michael.Gargano@jax.org") ) ) diff --git a/src/main/java/org/jacksonlaboratory/service/TermService.java b/src/main/java/org/jacksonlaboratory/service/TermService.java index 0903ce3..fcf4d23 100644 --- a/src/main/java/org/jacksonlaboratory/service/TermService.java +++ b/src/main/java/org/jacksonlaboratory/service/TermService.java @@ -60,19 +60,49 @@ public List searchOntologyTerm(String q){ }).collect(Collectors.toList()); } return this.termRepository.search(q, false).stream().sorted((a, b) -> { - boolean aStarts = a.getName().toLowerCase().startsWith(q); - boolean bStarts = b.getName().toLowerCase().startsWith(q); + // Bring synonym matches to the top + boolean aStarts = a.getSynonyms().stream().anyMatch(s -> s.toLowerCase().startsWith(q.toLowerCase())); + boolean bStarts = b.getSynonyms().stream().anyMatch(s -> s.toLowerCase().startsWith(q.toLowerCase())); - // Sort objects based on whether the name starts with the prefix - if (aStarts && !bStarts) { - return -1; // o1 comes before o2 - } else if (!aStarts && bStarts) { - return 1; // o2 comes before o1 - } else { - boolean aContains = a.getName().toLowerCase().contains(q); - boolean bContains = b.getName().toLowerCase().contains(q); - return aContains && !bContains ? -1 : !aContains && bContains ? 1 : 0; - } - }).collect(Collectors.toList()); + if (aStarts && !bStarts) { + return -1; + } else if (!aStarts && bStarts) { + return 1; + } + return 0; + }).sorted((a, b) -> { + // Bring synonym matches to the top + boolean aStarts = a.getName().toLowerCase().contains(q.toLowerCase()); + boolean bStarts = b.getName().toLowerCase().contains(q.toLowerCase()); + + if (aStarts && !bStarts) { + return -1; + } else if (!aStarts && bStarts) { + return 1; + } + return 0; + }).sorted((a, b) -> { + // Then bring synonym matches to the top + boolean aStarts = a.getName().toLowerCase().startsWith(q.toLowerCase()); + boolean bStarts = b.getName().toLowerCase().startsWith(q.toLowerCase()); + + if (aStarts && !bStarts) { + return -1; + } else if (!aStarts && bStarts) { + return 1; + } + return 0; + }).sorted((a, b) -> { + // Then bring exact matches to the top + boolean aStarts = a.getName().toLowerCase().equalsIgnoreCase(q); + boolean bStarts = b.getName().toLowerCase().equalsIgnoreCase(q); + + if (aStarts && !bStarts) { + return -1; + } else if (!aStarts && bStarts) { + return 1; + } + return 0; + }).collect(Collectors.toList()); } } diff --git a/src/main/resources/application-test.yml b/src/main/resources/application-test.yml index 5ffa159..5f0c057 100644 --- a/src/main/resources/application-test.yml +++ b/src/main/resources/application-test.yml @@ -16,7 +16,7 @@ micronaut: inclusion: ALWAYS endpoints: all: - path: /${api-url.prefix}/${ontology}/ + path: /${api-url.prefix}/${ontology}/monitor/ datasources: default: url: jdbc:h2:mem:devDb;LOCK_TIMEOUT=10000;DB_CLOSE_ON_EXIT=FALSE diff --git a/src/main/resources/application.yml b/src/main/resources/application.yml index 5c2d012..bf8cd2d 100644 --- a/src/main/resources/application.yml +++ b/src/main/resources/application.yml @@ -2,6 +2,7 @@ micronaut: server: cors: enabled: true + port: 8081 application: name: ontology-service-${ONTOLOGY_SERVICE_ONTOLOGY:unknown} router: @@ -17,7 +18,7 @@ micronaut: inclusion: ALWAYS endpoints: all: - path: /${api-url.prefix}/${ontology}/ + path: /${api-url.prefix}/${ontology}/monitor/ datasources: default: url: jdbc:h2:mem:devDb;LOCK_TIMEOUT=10000;DB_CLOSE_ON_EXIT=FALSE