diff --git a/source/net/yacy/search/navigator/NavigatorPlugins.java b/source/net/yacy/search/navigator/NavigatorPlugins.java new file mode 100644 index 000000000..ad09a63ac --- /dev/null +++ b/source/net/yacy/search/navigator/NavigatorPlugins.java @@ -0,0 +1,95 @@ +/** + * NavigatorPlugins.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 . + */ +package net.yacy.search.navigator; + +import java.util.LinkedHashMap; +import java.util.Map; +import net.yacy.crawler.CrawlSwitchboard; +import static net.yacy.search.query.SearchEvent.log; +import net.yacy.search.schema.CollectionSchema; + +/** + * Class to create and manipulate search navigator plugin list + */ +public class NavigatorPlugins { + + /** + * Creates map of active search navigators from comma separated config string + * @param navcfg comma separated string of navigator names + * @return map key=navigatorname, value=navigator.plugin reference + */ + static public Map initFromCfgString(final String navcfg) { + + LinkedHashMap navigatorPlugins = new LinkedHashMap(); + if (navcfg == null || navcfg.isEmpty()) return navigatorPlugins; + String[] navnames = navcfg.split(","); + for (String navname : navnames) { + if (navname.contains("authors")) { + navigatorPlugins.put("authors", new StringNavigator("Authors", CollectionSchema.author_sxt)); + } + + if (navname.contains("collections")) { + RestrictedStringNavigator tmpnav = new RestrictedStringNavigator("Collection", CollectionSchema.collection_sxt); + // exclude default internal collection names + tmpnav.addForbidden("dht"); + tmpnav.addForbidden("robot_" + CrawlSwitchboard.CRAWL_PROFILE_AUTOCRAWL_DEEP); + tmpnav.addForbidden("robot_" + CrawlSwitchboard.CRAWL_PROFILE_AUTOCRAWL_SHALLOW); + tmpnav.addForbidden("robot_" + CrawlSwitchboard.CRAWL_PROFILE_PROXY); + tmpnav.addForbidden("robot_" + CrawlSwitchboard.CRAWL_PROFILE_REMOTE); + tmpnav.addForbidden("robot_" + CrawlSwitchboard.CRAWL_PROFILE_SNIPPET_LOCAL_TEXT); + tmpnav.addForbidden("robot_" + CrawlSwitchboard.CRAWL_PROFILE_SNIPPET_GLOBAL_TEXT); + tmpnav.addForbidden("robot_" + CrawlSwitchboard.CRAWL_PROFILE_GREEDY_LEARNING_TEXT); + tmpnav.addForbidden("robot_" + CrawlSwitchboard.CRAWL_PROFILE_SNIPPET_LOCAL_MEDIA); + tmpnav.addForbidden("robot_" + CrawlSwitchboard.CRAWL_PROFILE_SNIPPET_GLOBAL_MEDIA); + tmpnav.addForbidden("robot_" + CrawlSwitchboard.CRAWL_PROFILE_SURROGATE); + navigatorPlugins.put("collections", tmpnav); + } + + if (navname.contains("namespace")) { + navigatorPlugins.put("namespace", new NameSpaceNavigator("Wiki Name Space")); + } + + // YearNavigator with possible def of :fieldname:title in configstring + if (navname.contains("year")) { + if ((navname.indexOf(':')) > 0) { // example "year:dates_in_content_dts:Events" + String[] navfielddef = navname.split(":"); + try { + // year:fieldname:title + CollectionSchema field = CollectionSchema.valueOf(navfielddef[1]); + if (navfielddef.length > 2) { + navigatorPlugins.put(navfielddef[1], new YearNavigator(navfielddef[2], field)); + } else { + navigatorPlugins.put(navfielddef[1], new YearNavigator("Year-" + navfielddef[1], field)); + } + } catch (java.lang.IllegalArgumentException ex) { + log.severe("wrong navigator name in config: \"" + navname + "\" " + ex.getMessage()); + } + } else { // "year" only use default last_modified + navigatorPlugins.put("year", new YearNavigator("Year", CollectionSchema.last_modified)); + } + } + } + return navigatorPlugins; + } + +} diff --git a/source/net/yacy/search/query/SearchEvent.java b/source/net/yacy/search/query/SearchEvent.java index 7dc1145be..7cc76d4c0 100644 --- a/source/net/yacy/search/query/SearchEvent.java +++ b/source/net/yacy/search/query/SearchEvent.java @@ -68,7 +68,6 @@ import net.yacy.cora.sorting.WeakPriorityBlockingQueue.ReverseElement; import net.yacy.cora.storage.HandleSet; import net.yacy.cora.util.ConcurrentLog; import net.yacy.cora.util.SpaceExceededException; -import net.yacy.crawler.CrawlSwitchboard; import net.yacy.crawler.retrieval.Response; import net.yacy.data.WorkTables; import net.yacy.document.LargeNumberCache; @@ -98,11 +97,8 @@ import net.yacy.search.EventTracker; import net.yacy.search.Switchboard; import net.yacy.search.SwitchboardConstants; import net.yacy.search.index.Segment; -import net.yacy.search.navigator.NameSpaceNavigator; import net.yacy.search.navigator.Navigator; -import net.yacy.search.navigator.RestrictedStringNavigator; -import net.yacy.search.navigator.StringNavigator; -import net.yacy.search.navigator.YearNavigator; +import net.yacy.search.navigator.NavigatorPlugins; import net.yacy.search.ranking.ReferenceOrder; import net.yacy.search.schema.CollectionConfiguration; import net.yacy.search.schema.CollectionSchema; @@ -270,51 +266,7 @@ public final class SearchEvent { this.languageNavigator = navcfg.contains("language") ? new ConcurrentScoreMap() : null; this.vocabularyNavigator = new TreeMap>(); // prepare configured search navigation (plugins) - this.navigatorPlugins = new LinkedHashMap(); - String[] navnames = navcfg.split(","); - for (String navname : navnames) { - if (navname.contains("authors")) { - this.navigatorPlugins.put("authors", new StringNavigator("Authors", CollectionSchema.author_sxt)); - } - if (navname.contains("collections")) { - RestrictedStringNavigator tmpnav = new RestrictedStringNavigator("Collection", CollectionSchema.collection_sxt); - // exclude default internal collection names - tmpnav.addForbidden("dht"); - tmpnav.addForbidden("robot_" + CrawlSwitchboard.CRAWL_PROFILE_AUTOCRAWL_DEEP); - tmpnav.addForbidden("robot_" + CrawlSwitchboard.CRAWL_PROFILE_AUTOCRAWL_SHALLOW); - tmpnav.addForbidden("robot_" + CrawlSwitchboard.CRAWL_PROFILE_PROXY); - tmpnav.addForbidden("robot_" + CrawlSwitchboard.CRAWL_PROFILE_REMOTE); - tmpnav.addForbidden("robot_" + CrawlSwitchboard.CRAWL_PROFILE_SNIPPET_LOCAL_TEXT); - tmpnav.addForbidden("robot_" + CrawlSwitchboard.CRAWL_PROFILE_SNIPPET_GLOBAL_TEXT); - tmpnav.addForbidden("robot_" + CrawlSwitchboard.CRAWL_PROFILE_GREEDY_LEARNING_TEXT); - tmpnav.addForbidden("robot_" + CrawlSwitchboard.CRAWL_PROFILE_SNIPPET_LOCAL_MEDIA); - tmpnav.addForbidden("robot_" + CrawlSwitchboard.CRAWL_PROFILE_SNIPPET_GLOBAL_MEDIA); - tmpnav.addForbidden("robot_" + CrawlSwitchboard.CRAWL_PROFILE_SURROGATE); - this.navigatorPlugins.put("collections", tmpnav); - } - if (navname.contains("namespace")) { - this.navigatorPlugins.put("namespace", new NameSpaceNavigator("Name Space")); - } - // YearNavigator with possible def of :fieldname:title in configstring - if (navname.contains("year")) { - if ((navname.indexOf(':')) > 0) { // example "year:dates_in_content_dts:Events" - String[] navfielddef = navname.split(":"); - try { - // year:fieldname:title - CollectionSchema field = CollectionSchema.valueOf(navfielddef[1]); - if (navfielddef.length > 2) { - this.navigatorPlugins.put(navfielddef[1], new YearNavigator(navfielddef[2], field)); - } else { - this.navigatorPlugins.put(navfielddef[1], new YearNavigator("Year-" + navfielddef[1], field)); - } - } catch (java.lang.IllegalArgumentException ex) { - log.severe("wrong navigator name in config: \"" + navname + "\" " + ex.getMessage()); - } - } else { // "year" only use default last_modified - this.navigatorPlugins.put("year", new YearNavigator("Year", CollectionSchema.last_modified)); - } - } - } + this.navigatorPlugins = NavigatorPlugins.initFromCfgString(navcfg); this.snippets = new ConcurrentHashMap>(); this.secondarySearchSuperviser = (this.query.getQueryGoal().getIncludeHashes().size() > 1) ? new SecondarySearchSuperviser(this) : null; // generate abstracts only for combined searches