5555import java .util .function .Predicate ;
5656import java .util .stream .Collectors ;
5757
58- import static ubic .basecode .ontology .jena .JenaUtils .where ;
58+ import static ubic .basecode .ontology .jena .JenaUtils .as ;
5959
6060/**
6161 * Base class for Jena-based ontology services.
@@ -324,7 +324,7 @@ private static boolean hasCauseMatching( Throwable t, Predicate<Throwable> predi
324324 }
325325
326326 @ Override
327- public Set <OntologySearchResult <OntologyIndividual >> findIndividuals ( String search , int maxResults , boolean keepObsoletes ) throws
327+ public Collection <OntologySearchResult <OntologyIndividual >> findIndividuals ( String search , int maxResults , boolean keepObsoletes ) throws
328328 OntologySearchException {
329329 State state = this .state ;
330330 if ( state == null ) {
@@ -335,10 +335,13 @@ public Set<OntologySearchResult<OntologyIndividual>> findIndividuals( String sea
335335 log .warn ( "Attempt to search {} when index is null, no results will be returned." , this );
336336 return Collections .emptySet ();
337337 }
338- return state .index .searchIndividuals ( state .model , search , maxResults )
339- .mapWith ( i -> new OntologySearchResult <>( ( OntologyIndividual ) new OntologyIndividualImpl ( i .result .as ( Individual .class ), state .additionalRestrictions ), i .score ) )
340- .filterKeep ( where ( ontologyTerm -> keepObsoletes || !ontologyTerm .getResult ().isObsolete () ) )
341- .toSet ();
338+ return state .index .searchIndividuals ( state .model , search , maxResults ).stream ()
339+ .map ( i -> as ( i .result , Individual .class ).map ( r -> new OntologySearchResult <>( ( OntologyIndividual ) new OntologyIndividualImpl ( r , state .additionalRestrictions ), i .score ) ) )
340+ .filter ( Optional ::isPresent )
341+ .map ( Optional ::get )
342+ .filter ( ontologyTerm -> keepObsoletes || !ontologyTerm .getResult ().isObsolete () )
343+ .sorted ( Comparator .comparing ( OntologySearchResult ::getScore , Comparator .reverseOrder () ) )
344+ .collect ( Collectors .toCollection ( LinkedHashSet ::new ) );
342345 }
343346
344347 @ Override
@@ -353,25 +356,24 @@ public Collection<OntologySearchResult<OntologyResource>> findResources( String
353356 log .warn ( "Attempt to search {} when index is null, no results will be returned." , this );
354357 return Collections .emptySet ();
355358 }
356- return state .index .search ( state .model , searchString , maxResults )
357- .filterKeep ( where ( r -> r .result .canAs ( OntClass .class ) || r .result .canAs ( Individual .class ) ) )
358- .mapWith ( r -> {
359- try {
360- if ( r .result .canAs ( OntClass .class ) ) {
361- return new OntologySearchResult <>( ( OntologyResource ) new OntologyTermImpl ( r .result .as ( OntClass .class ), state .additionalRestrictions ), r .score );
362- } else if ( r .result .canAs ( Individual .class ) ) {
363- return new OntologySearchResult <>( ( OntologyResource ) new OntologyIndividualImpl ( r .result .as ( Individual .class ), state .additionalRestrictions ), r .score );
364- } else {
365- return null ;
366- }
367- } catch ( ConversionException e ) {
368- log .warn ( "Conversion failed for {}" , r , e );
369- return null ;
359+ return state .index .search ( state .model , searchString , maxResults ).stream ()
360+ .filter ( ( r -> r .result .canAs ( OntClass .class ) || r .result .canAs ( Individual .class ) ) )
361+ .map ( r -> {
362+ if ( r .result .canAs ( OntClass .class ) ) {
363+ return as ( r .result , OntClass .class )
364+ .map ( r2 -> new OntologySearchResult <>( ( OntologyResource ) new OntologyTermImpl ( r2 , state .additionalRestrictions ), r .score ) );
365+ } else if ( r .result .canAs ( Individual .class ) ) {
366+ return as ( r .result , Individual .class )
367+ .map ( r2 -> new OntologySearchResult <>( ( OntologyResource ) new OntologyIndividualImpl ( r2 , state .additionalRestrictions ), r .score ) );
368+ } else {
369+ return Optional .<OntologySearchResult <OntologyResource >>empty ();
370370 }
371371 } )
372- .filterKeep ( where ( Objects ::nonNull ) )
373- .filterKeep ( where ( ontologyTerm -> keepObsoletes || !ontologyTerm .getResult ().isObsolete () ) )
374- .toSet ();
372+ .filter ( Optional ::isPresent )
373+ .map ( Optional ::get )
374+ .filter ( ontologyTerm -> keepObsoletes || !ontologyTerm .getResult ().isObsolete () )
375+ .sorted ( Comparator .comparing ( OntologySearchResult ::getScore , Comparator .reverseOrder () ) )
376+ .collect ( Collectors .toCollection ( LinkedHashSet ::new ) );
375377 }
376378
377379 @ Override
@@ -385,10 +387,13 @@ public Collection<OntologySearchResult<OntologyTerm>> findTerm( String search, i
385387 log .warn ( "Attempt to search {} when index is null, no results will be returned." , this );
386388 return Collections .emptySet ();
387389 }
388- return state .index .searchClasses ( state .model , search , maxResults )
389- .mapWith ( r -> new OntologySearchResult <>( ( OntologyTerm ) new OntologyTermImpl ( r .result .as ( OntClass .class ), state .additionalRestrictions ), r .score ) )
390- .filterKeep ( where ( ontologyTerm -> keepObsoletes || !ontologyTerm .getResult ().isObsolete () ) )
391- .toSet ();
390+ return state .index .searchClasses ( state .model , search , maxResults ).stream ()
391+ .map ( r -> as ( r .result , OntClass .class ).map ( s -> new OntologySearchResult <>( ( OntologyTerm ) new OntologyTermImpl ( s , state .additionalRestrictions ), r .score ) ) )
392+ .filter ( Optional ::isPresent )
393+ .map ( Optional ::get )
394+ .filter ( ontologyTerm -> keepObsoletes || !ontologyTerm .getResult ().isObsolete () )
395+ .sorted ( Comparator .comparing ( OntologySearchResult ::getScore , Comparator .reverseOrder () ) )
396+ .collect ( Collectors .toCollection ( LinkedHashSet ::new ) );
392397 }
393398
394399 @ Override
0 commit comments