Package org.fao.geonet.kernel.search.keyword

Source Code of org.fao.geonet.kernel.search.keyword.KeywordSearchParams

package org.fao.geonet.kernel.search.keyword;

import java.io.IOException;
import java.util.ArrayList;
import java.util.LinkedHashSet;
import java.util.List;
import java.util.Set;

import org.fao.geonet.kernel.KeywordBean;
import org.fao.geonet.kernel.Thesaurus;
import org.fao.geonet.kernel.ThesaurusFinder;
import org.fao.geonet.kernel.rdf.Query;
import org.fao.geonet.kernel.rdf.QueryBuilder;
import org.openrdf.sesame.config.AccessDeniedException;
import org.openrdf.sesame.query.MalformedQueryException;
import org.openrdf.sesame.query.QueryEvaluationException;

public class KeywordSearchParams {

    private final QueryBuilder<KeywordBean> queryBuilder;
    private final LinkedHashSet<String> thesauriNames;
    private final String thesauriDomainName;
    private int maxResults;
    public KeywordSearchParams(QueryBuilder<KeywordBean> query, Set<String> thesauriNames, String thesauriDomainName, int maxResults) {
        this.queryBuilder = query;
        this.thesauriNames = new LinkedHashSet<String>(thesauriNames);
        this.thesauriDomainName = thesauriDomainName;
        this.maxResults = maxResults;
    }
   
    /**
     * Create the actual Query object for performing the search.
     *
     * @return the actual Query object for performing the search.
     */
    public List<KeywordBean> search(ThesaurusFinder finder) throws IOException, MalformedQueryException, QueryEvaluationException, AccessDeniedException {
        if(thesauriNames.isEmpty()) {
            return executeAll(queryBuilder, finder);
        } else if(thesauriNames.size() == 1) {
            return executeOne(queryBuilder, finder);
        } else {
            return executeSpecific(queryBuilder, finder);
        }
    }
    private List<KeywordBean> executeOne(QueryBuilder<KeywordBean> queryBuilder, ThesaurusFinder finder) throws IOException, MalformedQueryException, QueryEvaluationException, AccessDeniedException {
        List<KeywordBean> results = new ArrayList<KeywordBean>();
        int id = 0;
        String thesaurusName = thesauriNames.iterator().next();
        Thesaurus thesaurus = finder.getThesaurusByName(thesaurusName);
        Query<KeywordBean> query = queryBuilder.limit(maxResults-results.size()).build();
        if (thesaurus == null) {
            throw new IllegalArgumentException("The thesaurus "+thesaurusName+" does not exist, there for the query cannot be excuted: '"+query+"'" );
        }
        for (KeywordBean keywordBean : query.execute(thesaurus)) {
            keywordBean.setId(id);
            results.add(keywordBean);
            id++;
        }
        return results;
    }
    private List<KeywordBean> executeSpecific(QueryBuilder<KeywordBean> queryBuilder, ThesaurusFinder finder) throws IOException, MalformedQueryException, QueryEvaluationException, AccessDeniedException {
        List<KeywordBean> results = new ArrayList<KeywordBean>();
        int id = 0;

        for (Thesaurus thesaurus : finder.getThesauriMap().values()) {
            Query<KeywordBean> query = queryBuilder.limit(maxResults-results.size()).build();
            if(thesauriNames.contains(thesaurus.getKey())) {
                for (KeywordBean keywordBean : query.execute(thesaurus)) {
                    keywordBean.setId(id);
                    results.add(keywordBean);
                    id++;
                }
            }
        }
        return results;
    }
    private List<KeywordBean> executeAll(QueryBuilder<KeywordBean> queryBuilder, ThesaurusFinder finder) throws IOException, MalformedQueryException, QueryEvaluationException, AccessDeniedException {
        int id = 0;
        List<KeywordBean> results = new ArrayList<KeywordBean>();
        for (Thesaurus thesaurus : finder.getThesauriMap().values()) {
            if(thesauriDomainName==null || thesauriDomainName.equals(thesaurus.getDname())) {
                Query<KeywordBean> query = queryBuilder.limit(maxResults-results.size()).build();
                for (KeywordBean keywordBean : query.execute(thesaurus)) {
                    keywordBean.setId(id);
                    results.add(keywordBean);
                    id++;
                }
            }
        }

        return results;
    }
   
}
TOP

Related Classes of org.fao.geonet.kernel.search.keyword.KeywordSearchParams

TOP
Copyright © 2018 www.massapi.com. All rights reserved.
All source code are property of their respective owners. Java is a trademark of Sun Microsystems, Inc and owned by ORACLE Inc. Contact coftware#gmail.com.