Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Upgrade to spring boot #68

Merged
merged 37 commits into from
Feb 4, 2025
Merged
Changes from 10 commits
Commits
Show all changes
37 commits
Select commit Hold shift + click to select a range
762d0c1
Modified class hierarchy provider to support a fixed root class
matthewhorridge Sep 27, 2024
dcec889
Major changes in the way we provide hierarchies (wip)
matthewhorridge Oct 15, 2024
97a5a20
Removed System.err printing
matthewhorridge Oct 15, 2024
b40c65d
Set backend-api dependency to 2.0.1
matthewhorridge Oct 17, 2024
9456dae
Added functionality to persist named hierarchies
matthewhorridge Oct 18, 2024
47c730b
Added isBuiltIn method to HierarchyId
matthewhorridge Oct 18, 2024
e1bcd40
Added test for NamedHierarchy
matthewhorridge Oct 18, 2024
cc82c29
Changes to support filtering of search results with criteria
matthewhorridge Nov 4, 2024
15620db
Merge branch 'main' into filtered-hierarchies
matthewhorridge Dec 2, 2024
7bc5073
Merge pull request #61 from protegeproject/filtered-hierarchies
alexsilaghi Dec 10, 2024
88810c5
ci: version bump 1.3.15
Dec 10, 2024
2f8d2e3
Upgrade to Spring Boot 3.4.1
matthewhorridge Jan 9, 2025
ca3d29d
Removed junit vintage engine
matthewhorridge Jan 9, 2025
674c9f1
Removed glassfish javax.json dependency
matthewhorridge Jan 9, 2025
84fe6fb
Removed legacy API classes. Removed jersey-container-servelet depend…
matthewhorridge Jan 9, 2025
c3c5a3b
Removed commons-io dependency
matthewhorridge Jan 9, 2025
db0d3aa
Removed commons-lang dependency
matthewhorridge Jan 9, 2025
45ec175
Upgraded testcontainers dependency
matthewhorridge Jan 9, 2025
cbd472d
Upgraded webprotege-jackson
matthewhorridge Jan 9, 2025
96687c5
Upgraded webprotege-common
matthewhorridge Jan 9, 2025
4135123
Upgraded webprotege-entity-frames
matthewhorridge Jan 9, 2025
0971ade
Upgraded webprotege-ipc
matthewhorridge Jan 9, 2025
615356d
Upgraded webprotege-revision-manager
matthewhorridge Jan 9, 2025
117876c
Upgraded mongodb and rabbitmq testcontainers
matthewhorridge Jan 9, 2025
32d208b
Upgraded ampq dependencies
matthewhorridge Jan 9, 2025
27922f2
Upgraded webprotege-backend-api
matthewhorridge Jan 9, 2025
ddc5485
backend-api should be 2.1.0
matthewhorridge Jan 13, 2025
0f01a7e
Merge pull request #66 from protegeproject/upgrade-spring-boot
alexsilaghi Jan 17, 2025
1e9fed2
ci: version bump 1.3.16
Jan 17, 2025
6a26ce2
Merge remote-tracking branch 'origin/main' into UPGRADE-to-spring-boot
alexsilaghi Jan 24, 2025
88ebf1b
adapt to spring boot 3.
alexsilaghi Jan 24, 2025
20c8178
bump ipc.
alexsilaghi Jan 24, 2025
7c6e329
removed unused property.
alexsilaghi Jan 28, 2025
034dce3
Merge pull request #67 from protegeproject/get-all-classes-in-ontology
alexsilaghi Feb 4, 2025
c5628ba
Bump version to 2.0.17-WHO
github-actions[bot] Feb 4, 2025
2cef944
Merge remote-tracking branch 'origin/main-WHO' into UPGRADE-to-spring…
alexsilaghi Feb 4, 2025
d3facad
fix after merge.
alexsilaghi Feb 4, 2025
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 1 addition & 1 deletion pom.xml
Original file line number Diff line number Diff line change
@@ -86,7 +86,7 @@
<dependency>
<groupId>edu.stanford.protege</groupId>
<artifactId>webprotege-backend-api</artifactId>
<version>2.0.1</version>
<version>2.1.0</version>
</dependency>
<dependency>
<groupId>edu.stanford.protege</groupId>
Original file line number Diff line number Diff line change
@@ -3,6 +3,7 @@
import edu.stanford.protege.webprotege.index.*;
import edu.stanford.protege.webprotege.inject.DataDirectoryProvider;
import edu.stanford.protege.webprotege.match.EntityMatcherFactory;
import edu.stanford.protege.webprotege.match.MatcherFactory;
import edu.stanford.protege.webprotege.project.BuiltInPrefixDeclarations;
import edu.stanford.protege.webprotege.project.ProjectDisposablesManager;
import edu.stanford.protege.webprotege.common.ProjectId;
@@ -97,8 +98,9 @@ LuceneIndexImpl luceneIndexImpl(LuceneEntityDocumentTranslator p1,
SearcherManager p2,
LuceneQueryFactory p3,
LuceneDictionaryLanguageValuesMatcher p4,
QueryAnalyzerFactory p5) {
return new LuceneIndexImpl(p1, p2, p3, p4, p5);
QueryAnalyzerFactory p5,
MatcherFactory p6) {
return new LuceneIndexImpl(p1, p2, p3, p4, p5, p6);
}

@Bean
Original file line number Diff line number Diff line change
@@ -1551,8 +1551,8 @@ CommentPostedSlackWebhookInvoker commentPostedSlackWebhookInvoker(ApplicationNam
}

@Bean
EntitySearcherFactory entitySearcherFactory(ProjectId p1, DictionaryManager p2, EntityNodeRenderer p3) {
return new EntitySearcherFactory(p1, p2, p3);
EntitySearcherFactory entitySearcherFactory(ProjectId p1, DictionaryManager p2, EntityNodeRenderer p3, MatcherFactory p4) {
return new EntitySearcherFactory(p1, p2, p3, p4);
}

@Bean
Original file line number Diff line number Diff line change
@@ -3,6 +3,7 @@
import com.google.common.base.MoreObjects;
import com.google.common.collect.ImmutableSet;
import edu.stanford.protege.webprotege.criteria.CompositeRootCriteria;
import edu.stanford.protege.webprotege.criteria.EntityMatchCriteria;
import edu.stanford.protege.webprotege.search.SearchType;
import org.semanticweb.owlapi.model.EntityType;

@@ -37,7 +38,7 @@ public class EntityLookupRequest implements Serializable {
private SearchType searchType = SearchType.getDefault();

private ImmutableSet<EntityType<?>> searchedEntityTypes = ImmutableSet.of();

private int searchLimit = DEFAULT_MATCH_LIMIT;


Original file line number Diff line number Diff line change
@@ -1,12 +1,14 @@
package edu.stanford.protege.webprotege.entity;

import com.google.common.collect.ImmutableList;
import com.google.common.collect.ImmutableSet;
import edu.stanford.protege.webprotege.access.AccessManager;
import edu.stanford.protege.webprotege.access.BuiltInAction;
import edu.stanford.protege.webprotege.app.PlaceUrl;
import edu.stanford.protege.webprotege.common.DictionaryLanguage;
import edu.stanford.protege.webprotege.common.PageRequest;
import edu.stanford.protege.webprotege.common.ProjectId;
import edu.stanford.protege.webprotege.criteria.EntityTypeIsOneOfCriteria;
import edu.stanford.protege.webprotege.dispatch.AbstractProjectActionHandler;
import edu.stanford.protege.webprotege.ipc.ExecutionContext;
import edu.stanford.protege.webprotege.lang.LanguageManager;
@@ -103,7 +105,8 @@ private List<EntityLookupResult> lookupEntities(final EntityLookupRequest entity
var result = dictionaryManager.getShortFormsContaining(searchStrings,
entityLookupRequest.getSearchedEntityTypes(),
languageManager.getLanguages(), ImmutableList.of(),
PageRequest.requestFirstPage());
PageRequest.requestFirstPage(),
EntityTypeIsOneOfCriteria.get(ImmutableSet.copyOf(entityLookupRequest.getSearchedEntityTypes())));

List<EntityLookupResult> lookupResults = new ArrayList<>();
for (var match : result.getPageElements()) {
Original file line number Diff line number Diff line change
@@ -6,7 +6,9 @@
import com.google.common.collect.ImmutableMap;
import edu.stanford.protege.webprotege.DataFactory;
import edu.stanford.protege.webprotege.common.*;
import edu.stanford.protege.webprotege.criteria.EntityMatchCriteria;
import edu.stanford.protege.webprotege.entity.EntityNodeRenderer;
import edu.stanford.protege.webprotege.match.MatcherFactory;
import edu.stanford.protege.webprotege.shortform.*;
import edu.stanford.protege.webprotege.shortform.SearchString;
import org.semanticweb.owlapi.model.EntityType;
@@ -73,6 +75,10 @@ public class EntitySearcher {
private final ImmutableList<EntitySearchFilter> searchFilters;

private final EntityNodeRenderer entityNodeRenderer;
@Nonnull
private final EntityMatchCriteria resultsSetFilter;
@Nonnull
private final MatcherFactory matcherFactory;


public EntitySearcher(@Nonnull ProjectId projectId,
@@ -82,7 +88,9 @@ public EntitySearcher(@Nonnull ProjectId projectId,
@Nonnull UserId userId,
@Nonnull ImmutableList<DictionaryLanguage> searchLanguages,
ImmutableList<EntitySearchFilter> searchFilters,
@Nonnull EntityNodeRenderer entityNodeRenderer) {
@Nonnull EntityNodeRenderer entityNodeRenderer,
@Nonnull EntityMatchCriteria resultsSetFilter,
@Nonnull MatcherFactory matcherFactory) {
this.projectId = checkNotNull(projectId);
this.userId = checkNotNull(userId);
this.dictionaryManager = checkNotNull(dictionaryManager);
@@ -95,6 +103,8 @@ public EntitySearcher(@Nonnull ProjectId projectId,
this.searchLanguages = checkNotNull(searchLanguages);
this.searchFilters = checkNotNull(searchFilters);
this.entityNodeRenderer = entityNodeRenderer;
this.resultsSetFilter = resultsSetFilter;
this.matcherFactory = checkNotNull(matcherFactory);
}

public void setPageRequest(@Nonnull PageRequest pageRequest) {
@@ -118,7 +128,8 @@ public void invoke() {
entityTypes,
searchLanguages,
searchFilters,
pageRequest);
pageRequest,
resultsSetFilter);
results = entityMatches.transform(matches -> {
var entity = matches.getEntity();
var shortForms = dictionaryManager.getShortForms(entity);
Original file line number Diff line number Diff line change
@@ -2,8 +2,11 @@

import com.google.common.collect.ImmutableList;
import edu.stanford.protege.webprotege.common.DictionaryLanguage;
import edu.stanford.protege.webprotege.criteria.CompositeRootCriteria;
import edu.stanford.protege.webprotege.criteria.EntityMatchCriteria;
import edu.stanford.protege.webprotege.entity.EntityNodeRenderer;
import edu.stanford.protege.webprotege.common.ProjectId;
import edu.stanford.protege.webprotege.match.MatcherFactory;
import edu.stanford.protege.webprotege.shortform.DictionaryManager;
import edu.stanford.protege.webprotege.common.UserId;
import org.semanticweb.owlapi.model.EntityType;
@@ -22,27 +25,34 @@ public class EntitySearcherFactory {
private final DictionaryManager dictionaryManger;

private final EntityNodeRenderer entityNodeRenderer;
private final MatcherFactory matcherFactory;

public EntitySearcherFactory(ProjectId projectId,
DictionaryManager dictionaryManger,
EntityNodeRenderer entityNodeRenderer) {
EntityNodeRenderer entityNodeRenderer,
MatcherFactory matcherFactory) {
this.projectId = projectId;
this.dictionaryManger = dictionaryManger;
this.entityNodeRenderer = entityNodeRenderer;
this.matcherFactory = matcherFactory;
}

public EntitySearcher create(Set<EntityType<?>> entityTypes,
String searchString,
UserId userId,
ImmutableList<DictionaryLanguage> languages,
ImmutableList<EntitySearchFilter> searchFilters) {
ImmutableList<EntitySearchFilter> searchFilters,
EntityMatchCriteria resultsSetFilter) {
return new EntitySearcher(projectId,
dictionaryManger,
entityTypes,
searchString,
userId,
languages,
searchFilters,
entityNodeRenderer);
entityNodeRenderer,
resultsSetFilter,
matcherFactory
);
}
}
Original file line number Diff line number Diff line change
@@ -12,6 +12,8 @@
import edu.stanford.protege.webprotege.dispatch.AbstractProjectActionHandler;
import edu.stanford.protege.webprotege.ipc.ExecutionContext;
import edu.stanford.protege.webprotege.lang.LanguageManager;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;

import javax.annotation.Nonnull;
import javax.inject.Inject;
@@ -31,6 +33,8 @@ public class PerformEntitySearchActionHandler extends AbstractProjectActionHandl
@Nonnull
private final LanguageManager languageManager;

private static final Logger logger = LoggerFactory.getLogger(PerformEntitySearchActionHandler.class);

@Inject
public PerformEntitySearchActionHandler(@Nonnull AccessManager accessManager,
@Nonnull EntitySearcherFactory entitySearcherFactory,
@@ -50,6 +54,7 @@ public Class<PerformEntitySearchAction> getActionClass() {
@Override
public PerformEntitySearchResult execute(@Nonnull PerformEntitySearchAction action,
@Nonnull ExecutionContext executionContext) {
logger.info("Performing search: {}", action);
var entityTypes = action.entityTypes();
var searchString = action.searchString();
var languages = ImmutableList.<DictionaryLanguage>builder();
@@ -66,7 +71,8 @@ public PerformEntitySearchResult execute(@Nonnull PerformEntitySearchAction acti
searchString,
executionContext.userId(),
languages.build(),
searchFilters);
searchFilters,
action.resultsSetFilter());
PageRequest pageRequest = action.pageRequest();
entitySearcher.setPageRequest(pageRequest);
entitySearcher.invoke();
Original file line number Diff line number Diff line change
@@ -4,6 +4,7 @@
import com.google.common.collect.ImmutableMap;
import edu.stanford.protege.webprotege.common.DictionaryLanguage;
import edu.stanford.protege.webprotege.common.EntityShortFormMatches;
import edu.stanford.protege.webprotege.criteria.EntityMatchCriteria;
import edu.stanford.protege.webprotege.inject.ProjectSingleton;
import edu.stanford.protege.webprotege.lang.LanguageManager;
import edu.stanford.protege.webprotege.common.Page;
@@ -13,6 +14,7 @@
import org.semanticweb.owlapi.model.OWLEntity;

import javax.annotation.Nonnull;
import javax.annotation.Nullable;
import javax.inject.Inject;
import java.util.Collection;
import java.util.List;
@@ -98,8 +100,9 @@ public Page<EntityShortFormMatches> getShortFormsContaining(@Nonnull List<Search
@Nonnull Set<EntityType<?>> entityTypes,
@Nonnull List<DictionaryLanguage> languages,
@Nonnull ImmutableList<EntitySearchFilter> searchFilters,
@Nonnull PageRequest pageRequest) {
return dictionary.getShortFormsContaining(searchStrings, entityTypes, languages, searchFilters, pageRequest);
@Nonnull PageRequest pageRequest,
@Nullable EntityMatchCriteria resultsSetFilter) {
return dictionary.getShortFormsContaining(searchStrings, entityTypes, languages, searchFilters, pageRequest, resultsSetFilter);
}

public void update(@Nonnull Collection<OWLEntity> entities) {
Original file line number Diff line number Diff line change
@@ -1,12 +1,14 @@
package edu.stanford.protege.webprotege.shortform;

import edu.stanford.protege.webprotege.common.*;
import edu.stanford.protege.webprotege.criteria.EntityMatchCriteria;
import edu.stanford.protege.webprotege.search.EntitySearchFilter;
import org.apache.lucene.queryparser.classic.ParseException;
import org.semanticweb.owlapi.model.EntityType;
import org.semanticweb.owlapi.model.OWLEntity;

import javax.annotation.Nonnull;
import javax.annotation.Nullable;
import java.io.IOException;
import java.util.List;
import java.util.Optional;
@@ -29,7 +31,8 @@ Optional<Page<EntityShortFormMatches>> search(@Nonnull List<SearchString> queryS
@Nonnull List<DictionaryLanguage> dictionaryLanguages,
@Nonnull List<EntitySearchFilter> searchFilters,
@Nonnull Set<EntityType<?>> entityTypes,
@Nonnull PageRequest pageRequest) throws IOException, ParseException;
@Nonnull PageRequest pageRequest,
@Nullable EntityMatchCriteria resultsSetFilter) throws IOException, ParseException;

/**
* Finds entities that have the specified short form.
Original file line number Diff line number Diff line change
@@ -2,6 +2,8 @@

import com.google.common.collect.ImmutableSet;
import edu.stanford.protege.webprotege.common.*;
import edu.stanford.protege.webprotege.criteria.EntityMatchCriteria;
import edu.stanford.protege.webprotege.match.MatcherFactory;
import edu.stanford.protege.webprotege.search.EntitySearchFilter;
import edu.stanford.protege.webprotege.search.EntitySearchFilterId;
import org.apache.lucene.document.Document;
@@ -15,6 +17,7 @@
import org.slf4j.LoggerFactory;

import javax.annotation.Nonnull;
import javax.annotation.Nullable;
import javax.inject.Inject;
import javax.inject.Provider;
import java.io.IOException;
@@ -52,18 +55,22 @@ public class LuceneIndexImpl implements LuceneIndex {

@Nonnull
private final QueryAnalyzerFactory queryAnalyzerFactory;
@Nonnull
private final MatcherFactory matcherFactory;

@Inject
public LuceneIndexImpl(@Nonnull LuceneEntityDocumentTranslator luceneEntityDocumentTranslator,
@Nonnull SearcherManager searcherManager,
@Nonnull LuceneQueryFactory queryFactory,
@Nonnull LuceneDictionaryLanguageValuesMatcher luceneDictionaryLanguageValuesMatcher,
@Nonnull QueryAnalyzerFactory queryAnalyzerFactory) {
@Nonnull QueryAnalyzerFactory queryAnalyzerFactory,
@Nonnull MatcherFactory matcherFactory) {
this.luceneEntityDocumentTranslator = luceneEntityDocumentTranslator;
this.searcherManager = searcherManager;
this.queryFactory = queryFactory;
this.luceneDictionaryLanguageValuesMatcher = luceneDictionaryLanguageValuesMatcher;
this.queryAnalyzerFactory = queryAnalyzerFactory;
this.matcherFactory = matcherFactory;
}

@Nonnull
@@ -106,7 +113,8 @@ public Optional<Page<EntityShortFormMatches>> search(@Nonnull List<SearchString>
@Nonnull List<DictionaryLanguage> dictionaryLanguages,
@Nonnull List<EntitySearchFilter> searchFilters,
@Nonnull Set<EntityType<?>> entityTypes,
@Nonnull PageRequest pageRequest) throws IOException, ParseException {
@Nonnull PageRequest pageRequest,
@Nullable EntityMatchCriteria resultsSetFilter) throws IOException, ParseException {
var indexSearcher = searcherManager.acquire();
// indexSearcher.setSimilarity(new EntityBasedSimilarity());
try {
@@ -141,9 +149,13 @@ public Optional<Page<EntityShortFormMatches>> search(@Nonnull List<SearchString>
var topDocs = indexSearcher.search(query, Integer.MAX_VALUE);
explain(query, topDocs, indexSearcher);
var languagesSet = ImmutableSet.copyOf(dictionaryLanguages);
var matcher = matcherFactory.getMatcher(resultsSetFilter);

var page = getDictionaryLanguageValues(dictionaryLanguages,
indexSearcher,
topDocs).collect(PageCollector.toPage(pageRequest.getPageNumber(),
topDocs)
.filter(p -> matcher.matches(p.getEntity()))
.collect(PageCollector.toPage(pageRequest.getPageNumber(),
pageRequest.getPageSize()));
return page.map(pg -> pg.transform(entityShortForms -> {
var matches = luceneDictionaryLanguageValuesMatcher.getShortFormMatches(entityShortForms,
Original file line number Diff line number Diff line change
@@ -6,11 +6,13 @@
import edu.stanford.protege.webprotege.common.EntityShortFormMatches;
import edu.stanford.protege.webprotege.common.Page;
import edu.stanford.protege.webprotege.common.PageRequest;
import edu.stanford.protege.webprotege.criteria.EntityMatchCriteria;
import edu.stanford.protege.webprotege.search.EntitySearchFilter;
import org.semanticweb.owlapi.model.EntityType;
import org.semanticweb.owlapi.model.OWLEntity;

import javax.annotation.Nonnull;
import javax.annotation.Nullable;
import javax.inject.Inject;
import java.util.List;
import java.util.Set;
@@ -71,10 +73,11 @@ public Page<EntityShortFormMatches> getShortFormsContaining(@Nonnull List<Search
@Nonnull Set<EntityType<?>> entityTypes,
@Nonnull List<DictionaryLanguage> languages,
@Nonnull ImmutableList<EntitySearchFilter> searchFilters,
@Nonnull PageRequest pageRequest) {
@Nonnull PageRequest pageRequest,
@Nullable EntityMatchCriteria resultsSetFilter) {
return searchableMultiLingualShortFormDictionary.getShortFormsContaining(searchStrings,
entityTypes,
languages, searchFilters, pageRequest);
languages, searchFilters, pageRequest, resultsSetFilter);
}
}

Loading