All Downloads are FREE. Search and download functionalities are using the official Maven repository.

edu.stanford.protege.webprotege.search.PerformEntitySearchActionHandler Maven / Gradle / Ivy

The newest version!
package edu.stanford.protege.webprotege.search;

import com.google.common.collect.ImmutableList;
import edu.stanford.protege.webprotege.access.AccessManager;
import edu.stanford.protege.webprotege.common.DictionaryLanguage;
import edu.stanford.protege.webprotege.common.DictionaryLanguageFilter;
import edu.stanford.protege.webprotege.common.LocalNameDictionaryLanguage;
import edu.stanford.protege.webprotege.common.OboIdDictionaryLanguage;
import edu.stanford.protege.webprotege.common.Page;
import edu.stanford.protege.webprotege.common.PageRequest;
import edu.stanford.protege.webprotege.common.PrefixedNameDictionaryLanguage;
import edu.stanford.protege.webprotege.dispatch.AbstractProjectActionHandler;
import edu.stanford.protege.webprotege.ipc.ExecutionContext;
import edu.stanford.protege.webprotege.lang.LanguageManager;

import javax.annotation.Nonnull;
import javax.inject.Inject;

import static edu.stanford.protege.webprotege.common.DictionaryLanguageFilter.EmptyLangTagTreatment.INCLUDE_EMPTY_LANG_TAGS;

/**
 * Matthew Horridge
 * Stanford Center for Biomedical Informatics Research
 * 21 Apr 2017
 */
public class PerformEntitySearchActionHandler extends AbstractProjectActionHandler {

    @Nonnull
    private final EntitySearcherFactory entitySearcherFactory;

    @Nonnull
    private final LanguageManager languageManager;

    @Inject
    public PerformEntitySearchActionHandler(@Nonnull AccessManager accessManager,
                                            @Nonnull EntitySearcherFactory entitySearcherFactory,
                                            @Nonnull LanguageManager languageManager) {
        super(accessManager);
        this.entitySearcherFactory = entitySearcherFactory;
        this.languageManager = languageManager;
    }

    @Nonnull
    @Override
    public Class getActionClass() {
        return PerformEntitySearchAction.class;
    }

    @Nonnull
    @Override
    public PerformEntitySearchResult execute(@Nonnull PerformEntitySearchAction action,
                                             @Nonnull ExecutionContext executionContext) {
        var entityTypes = action.entityTypes();
        var searchString = action.searchString();
        var languages = ImmutableList.builder();
        var langTagFilter = action.langTagFilter();
        var dictionaryLanguageFilter = DictionaryLanguageFilter.get(langTagFilter, INCLUDE_EMPTY_LANG_TAGS);
        languageManager.getLanguages().stream().filter(dictionaryLanguageFilter::isIncluded).forEach(languages::add);
        languages.add(OboIdDictionaryLanguage.get());
        languages.add(LocalNameDictionaryLanguage.get());
        languages.add(PrefixedNameDictionaryLanguage.get());

        var searchFilters = action.searchFilters();

        var entitySearcher = entitySearcherFactory.create(entityTypes,
                                                          searchString,
                                                          executionContext.userId(),
                                                          languages.build(),
                                                          searchFilters);
        PageRequest pageRequest = action.pageRequest();
        entitySearcher.setPageRequest(pageRequest);
        entitySearcher.invoke();

        Page results = entitySearcher.getResults();
        return new PerformEntitySearchResult(searchString, results);
    }
}





© 2015 - 2025 Weber Informatics LLC | Privacy Policy