Java tutorial
/* * Copyright (2005-2012) Schibsted ASA * This file is part of Possom. * * Possom is free software: you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * Possom is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public License * along with Possom. If not, see <http://www.gnu.org/licenses/>. * */ package no.sesat.search.mode.config; import java.util.ArrayList; import java.util.Arrays; import java.util.Collection; import java.util.Collections; import java.util.HashMap; import java.util.List; import java.util.Map; import no.sesat.search.mode.SearchModeFactory.Context; import no.sesat.search.mode.config.CommandConfig.Controller; import no.sesat.search.result.Navigator; import org.apache.commons.lang.StringUtils; import org.apache.log4j.Logger; import org.w3c.dom.Element; import org.w3c.dom.NodeList; /** Configure a Fast 4 search command * * @version <tt>$Id$</tt> */ @Controller("Fast4SearchCommand") public class FastCommandConfig extends CommandConfig { private static final Logger LOG = Logger.getLogger(FastCommandConfig.class); /** @deprecated TODO not possom related. move out. **/ private static final String[] ALL_COLLECTIONS = { "retriever", "tv", "webcrawlno1", "webcrawlno1", "webcrawlno1deep1", "webcrawlno2", "wikipedia", "wikipedia2", "WikipediaSV", "robots", "yellow", "white", "weather", "carelscrawl", "moreover", "retrievernordic", "mano", "skiinfo" }; private final List<String> collections = new ArrayList<String>(); private final Map<String, String> searchParameters = new HashMap<String, String>(); private boolean lemmatise; private boolean spellcheck; private String spellchecklanguage = ""; private final Map<String, Navigator> navigators = new HashMap<String, Navigator>(); private String sortBy = ""; private String alternativeSortBy = ""; private boolean collapsing; private String queryServerUrl = ""; private boolean keywordClusteringEnabled = false; private String qtPipeline = ""; private transient volatile String collectionString; private boolean expansion; private String resultView = ""; private boolean clustering = false; private boolean ignoreNavigation = false; private int offensiveScoreLimit = -1; private int spamScoreLimit = -1; private String filter = ""; private String queryType = "all"; private String filtertype = ""; private String project = ""; private boolean relevantQueries = false; /** * */ public FastCommandConfig() { } /** * * @return */ public String[] getCollections() { String[] res = new String[collections.size()]; collections.toArray(res); return res; } /** * @param collectionArray * Add collections to this configuration. */ public void addCollections(final String[] collectionArray) { for (String string : collectionArray) { if (!string.equals("")) collections.add(string); } } /** * * @return */ public String getCollectionFilterString() { if (collectionString == null) { collectionString = createCollectionFilterString(); } return collectionString; } private String createCollectionFilterString() { String result = ""; if (collections.size() > 1) { // <-- DEPRECATED. not sesat. final Collection<String> invertedCollection = new ArrayList<String>(Arrays.asList(ALL_COLLECTIONS)); invertedCollection.removeAll(collections); final String[] coll = prependMetaCollection(invertedCollection); result = StringUtils.join(coll, ' '); // --> } else if (collections.size() == 1) { result = "+meta.collection:" + collections.get(0); } return result; } private String[] prependMetaCollection(final Collection<String> collectionStrings) { final String coll[] = collectionStrings.toArray(new String[collectionStrings.size()]); if ("adv".equals(this.filtertype)) { for (int i = 0; i < coll.length; i++) { if (i == 0) { coll[i] = " size:>0 ANDNOT meta.collection:" + coll[i]; } else { coll[i] = " ANDNOT meta.collection:" + coll[i]; } } } else { for (int i = 0; i < coll.length; i++) { coll[i] = " -meta.collection:" + coll[i]; } } return coll; } /** * * @return */ public String getQueryServerUrl() { return queryServerUrl; } /** * * @return */ public Map<String, String> getSearchParameterMap() { return Collections.unmodifiableMap(searchParameters); } /** * @param parameters * Add search parameters */ public void setSearchParameters(final String[] parameters) { for (String parameter : parameters) { final String[] paramSplit = parameter.split("="); searchParameters.put(paramSplit[0].trim(), paramSplit[1].trim()); } } /** * * @return Array of search parameters. */ public String[] getSearchParameters() { String[] res = new String[searchParameters.size()]; int index = 0; for (String key : searchParameters.keySet()) { res[index] = key + "=" + searchParameters.get(key); index++; } return res; } /** * * @return */ public boolean isLemmatise() { return lemmatise; } /** * * @param lemmatise */ public void setLemmatise(final boolean lemmatise) { this.lemmatise = lemmatise; } /** * * @return */ public boolean isSpellcheck() { return spellcheck; } /** * * @param spellcheckEnabled */ public void setSpellcheck(final boolean spellcheckEnabled) { this.spellcheck = spellcheckEnabled; } /** * * @return */ public String getSpellchecklanguage() { return spellchecklanguage; } /** * * @param spellchecklanguage */ public void setSpellchecklanguage(final String spellchecklanguage) { this.spellchecklanguage = spellchecklanguage; } /** * * @return */ public Map<String, Navigator> getNavigators() { return Collections.unmodifiableMap(navigators); } /** * * @param navigator * @param navKey */ public void addNavigator(final Navigator navigator, final String navKey) { navigators.put(navKey, navigator); } /** * * @param navigatorKey * @return */ public Navigator getNavigator(final String navigatorKey) { return navigators.get(navigatorKey); } /** * * @return */ public String getSortBy() { return sortBy; } /** * * @param sortBy */ public void setSortBy(final String sortBy) { this.sortBy = sortBy; } public String getAlternativeSortBy() { return alternativeSortBy; } public void setAlternativeSortBy(String alternativeSortBy) { this.alternativeSortBy = alternativeSortBy; } /** * * @return */ public boolean isCollapsing() { return collapsing; } /** * * @param collapsingEnabled */ public void setCollapsing(final boolean collapsingEnabled) { this.collapsing = collapsingEnabled; } /** * * @return */ public String getResultView() { return resultView; } /** * * @param resultView */ public void setResultView(final String resultView) { this.resultView = resultView; } /** * * @param queryServerUrl */ public void setQueryServerUrl(final String queryServerUrl) { this.queryServerUrl = queryServerUrl; } /** * * @return */ public boolean isKeywordClusteringEnabled() { return keywordClusteringEnabled; } /** * * @param keywordClusteringEnabled */ public void setKeywordClusteringEnabled(final boolean keywordClusteringEnabled) { this.keywordClusteringEnabled = keywordClusteringEnabled; } /** * * @return */ public String getQtPipeline() { return qtPipeline; } /** * * @param qtPipeline */ public void setQtPipeline(final String qtPipeline) { this.qtPipeline = qtPipeline; } /** * * @return */ public boolean isClustering() { return clustering; } /** * * @return */ public boolean isIgnoreNavigation() { return ignoreNavigation; } /** * * @param ignoreNavigationEnabled */ public void setIgnoreNavigation(final boolean ignoreNavigationEnabled) { this.ignoreNavigation = ignoreNavigationEnabled; } /** * * @return */ public int getOffensiveScoreLimit() { return offensiveScoreLimit; } /** * * @return */ public int getSpamScoreLimit() { return spamScoreLimit; } /** * * @return */ public boolean isRelevantQueries() { return relevantQueries; } /** * * @return */ public String getFilter() { return filter; } /** * * @return */ public String getFiltertype() { return filtertype; } /** * * @param filtertype */ public void setFiltertype(final String filtertype) { this.filtertype = filtertype; } /** @see #setQueryType(java.lang.String) * * @return */ public String getQueryType() { return queryType; } /** Set the query type @see BaseParameter.TYPE * * "any" for simple query syntax * "adv" for advanced * * @param queryType */ public void setQueryType(final String queryType) { this.queryType = queryType; } /** * * @return */ public String getProject() { return project; } /** * * @param project */ public void setProject(final String project) { this.project = project; } public void setSpamScoreLimit(final int i) { spamScoreLimit = i; } /** * Setter for property clustering. * * @param clusteringEnabled New value of property clustering. */ public void setClustering(final boolean clusteringEnabled) { this.clustering = clusteringEnabled; } /** * Setter for property filter. * @param filter New value of property filter. */ public void setFilter(final String filter) { this.filter = filter; } /** * Setter for property offensiveScoreLimit. * @param offensiveScoreLimit New value of property offensiveScoreLimit. */ public void setOffensiveScoreLimit(final int offensiveScoreLimit) { this.offensiveScoreLimit = offensiveScoreLimit; } /** * Setter for property relevantQueries. * * @param relevantQueriesEnabled New value of property relevantQueries. */ public void setRelevantQueries(final boolean relevantQueriesEnabled) { this.relevantQueries = relevantQueriesEnabled; } /** * Returns true if expansion is enabled. Expansion means the possibility * to retrieve all of the documents that has been collapsed for a domain. If * this is set to false the templates won't get the information that there * are collapsed documents. * * @return true if expansion is enabled. */ public boolean isExpansion() { return expansion; } /** * Setter for the expansionEnabled property. * * @param expansion */ public void setExpansion(final boolean expansion) { this.expansion = expansion; } @Override public SearchConfiguration readSearchConfiguration(final Element element, final SearchConfiguration inherit, Context context) { super.readSearchConfiguration(element, inherit, context); final FastCommandConfig fscInherit = inherit instanceof FastCommandConfig ? (FastCommandConfig) inherit : null; if (getQueryServerUrl() == null || "".equals(getQueryServerUrl())) { LOG.debug("queryServerURL is empty for " + getId()); } if (fscInherit != null && fscInherit.getNavigators() != null) { navigators.putAll(fscInherit.getNavigators()); } final NodeList nList = element.getElementsByTagName("navigators"); for (int i = 0; i < nList.getLength(); ++i) { final Collection<Navigator> navigators = parseNavigators((Element) nList.item(i)); for (Navigator navigator : navigators) { addNavigator(navigator, navigator.getId()); } } return this; } }