/**
* Navigator.java
* (C) 2016 by reger24; https://github.com/reger24
*
* This is a part of YaCy, a peer-to-peer based web search engine
*
* LICENSE
*
* This program is free software; you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation; either version 2 of the License, or
* (at your option) any later version.
*
* This program 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 General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program.
* If not, see <http://www.gnu.org/licenses/>.
*/
package net.yacy.search.navigator;
import java.util.List;
import java.util.Map;
import net.yacy.cora.sorting.ReversibleScoreMap;
import net.yacy.cora.sorting.ScoreMap;
import net.yacy.kelondro.data.meta.URIMetadataNode;
import net.yacy.search.query.QueryModifier;
/**
* Interface for search navigators used in search servlets to restrict displayed
* search results.
*/
public interface Navigator extends ScoreMap<String> {
/**
* @return name of the navigator for display in ui
*/
public String getDisplayName() ;
/**
* Display form of the element (e.g. for languages the key might be "en",
* the display form "English"
*
* @param key original key as counted in this navigator
* @return a translated display text for a key
*/
public String getElementDisplayName(final String key) ;
/**
* Returns the query modifier. This is used (needed) within the servlet
* to create a new modifier for a activated (clicked) navigator item.
*
* @return the query modifier prefix (if any, eg. "filetype:" or "author:" )
*/
public String getQueryModifier(final String key) ;
/**
* Add counts for this navigator from documents in the provided list.
* The navigator looks for a field in the document and increases the counts
* depending on the value in the document field.
*
* @param docs list of documents
*/
public void incDocList(List<URIMetadataNode> docs);
/**
* Add count for this navigator from provided Solr facet map.
* The navigator looks for a field in the facet map and increases the counts
* by the value in the facet map.
*
* @param facets Solr facets
*/
public void incFacet(Map<String, ReversibleScoreMap<String>> facets);
/**
* Add count for this navigator from provided document.
* The navigator looks for a field in the document and increases the counts
* depending on the value in the document field.
*
* @param doc document
*/
public void incDoc(URIMetadataNode doc);
/**
* Helper routine to determine if current navigator key is part of the query
* modifier (is active)
*
* @param modifier current search query modifier
* @param name the navigator key to check
* @return true if navigator key is mentioned as modifier
*/
public boolean modifieractive(final QueryModifier modifier, final String name);
/**
* @return the name of the index field, the fieldname counted in incDoc, incDoclList, incFacet
*/
public String getIndexFieldName();
}