diff --git a/defaults/yacy.network.webportal.unit b/defaults/yacy.network.webportal.unit new file mode 100644 index 000000000..5180de255 --- /dev/null +++ b/defaults/yacy.network.webportal.unit @@ -0,0 +1,22 @@ +# Network definition file for a private web index +# to be used as a network without any other peers +# for a personal web portal + +# general network definition +network.unit.name = webportal +network.unit.description = Personal Web Portal +network.unit.domain = global +network.unit.search.time = 4 +network.unit.dht = false +network.unit.dhtredundancy.junior = 1 +network.unit.dhtredundancy.senior = 1 + +# each network may use different yacy distributions. +# the auto-updater can access network-specific update locations +network.unit.update.location0 = http://yacy.net/index.html +network.unit.update.location1 = http://latest.yacy.de +network.unit.update.location2 = http://www.findenstattsuchen.info/YaCy/latest/index.php +network.unit.update.location3 = http://www.yacystats.de/yacybuild/ + +# properties for in-protocol response authentification: +network.unit.protocol.control = uncontrolled \ No newline at end of file diff --git a/defaults/yacy.networks b/defaults/yacy.networks index 15e18248c..b2ef25cde 100644 --- a/defaults/yacy.networks +++ b/defaults/yacy.networks @@ -1,2 +1,3 @@ defaults/yacy.network.freeworld.unit +defaults/yacy.network.webportal.unit defaults/yacy.network.intranet.unit \ No newline at end of file diff --git a/htroot/ConfigBasic.java b/htroot/ConfigBasic.java index 3fdda7da3..66559c46f 100644 --- a/htroot/ConfigBasic.java +++ b/htroot/ConfigBasic.java @@ -151,59 +151,42 @@ public class ConfigBasic { // set a use case String networkName = sb.getConfig("network.unit.name", ""); if (post != null && post.containsKey("usecase")) { - boolean indexDistribute = sb.getConfig(plasmaSwitchboard.INDEX_DIST_ALLOW, "true").equals("true"); - boolean indexReceive = sb.getConfig(plasmaSwitchboard.INDEX_RECEIVE_ALLOW, "true").equals("true"); - if (post.get("usecase", "").equals("freeworld")) { - if (networkName.equals("freeworld")) { - if (!indexDistribute && !indexReceive) { - // switch from robinson mode to p2p mode - sb.setConfig(plasmaSwitchboard.INDEX_DIST_ALLOW, true); - sb.setConfig(plasmaSwitchboard.INDEX_RECEIVE_ALLOW, true); - } - } else { - // switch from intranet to p2p mode + if (!networkName.equals("freeworld")) { + // switch to freeworld network sb.switchNetwork("defaults/yacy.network.freeworld.unit"); - sb.setConfig(plasmaSwitchboard.INDEX_DIST_ALLOW, true); - sb.setConfig(plasmaSwitchboard.INDEX_RECEIVE_ALLOW, true); } + // switch to p2p mode + sb.setConfig(plasmaSwitchboard.INDEX_DIST_ALLOW, true); + sb.setConfig(plasmaSwitchboard.INDEX_RECEIVE_ALLOW, true); } if (post.get("usecase", "").equals("portal")) { - if (networkName.equals("freeworld")) { - if (indexDistribute || indexReceive) { - // switch from p2p mode to robinson mode - sb.setConfig(plasmaSwitchboard.INDEX_DIST_ALLOW, false); - sb.setConfig(plasmaSwitchboard.INDEX_RECEIVE_ALLOW, false); - } - } else { - // switch from intranet to robinson mode - sb.switchNetwork("defaults/yacy.network.freeworld.unit"); - sb.setConfig(plasmaSwitchboard.INDEX_DIST_ALLOW, false); - sb.setConfig(plasmaSwitchboard.INDEX_RECEIVE_ALLOW, false); + if (!networkName.equals("webportal")) { + // switch to webportal network + sb.switchNetwork("defaults/yacy.network.webportal.unit"); } + // switch to robinson mode + sb.setConfig(plasmaSwitchboard.INDEX_DIST_ALLOW, false); + sb.setConfig(plasmaSwitchboard.INDEX_RECEIVE_ALLOW, false); } if (post.get("usecase", "").equals("intranet")) { if (!networkName.equals("intranet")) { - // switch from p2p or robinson mode to intranet mode + // switch to intranet network sb.switchNetwork("defaults/yacy.network.intranet.unit"); - sb.setConfig(plasmaSwitchboard.INDEX_DIST_ALLOW, true); - sb.setConfig(plasmaSwitchboard.INDEX_RECEIVE_ALLOW, true); } + // switch to p2p mode: enable ad-hoc networks between intranet users + sb.setConfig(plasmaSwitchboard.INDEX_DIST_ALLOW, true); + sb.setConfig(plasmaSwitchboard.INDEX_RECEIVE_ALLOW, true); } } networkName = sb.getConfig("network.unit.name", ""); if (networkName.equals("freeworld")) { prop.put("setUseCase", 1); - boolean indexDistribute = sb.getConfig(plasmaSwitchboard.INDEX_DIST_ALLOW, "true").equals("true"); - boolean indexReceive = sb.getConfig(plasmaSwitchboard.INDEX_RECEIVE_ALLOW, "true").equals("true"); - if (indexDistribute || indexReceive) { - // p2p mode - prop.put("setUseCase_freeworldChecked", 1); - } else { - // robinson mode - prop.put("setUseCase_portalChecked", 1); - } + prop.put("setUseCase_freeworldChecked", 1); + } else if (networkName.equals("webportal")) { + prop.put("setUseCase", 1); + prop.put("setUseCase_portalChecked", 1); } else if (networkName.equals("intranet")) { prop.put("setUseCase", 1); prop.put("setUseCase_intranetChecked", 1); diff --git a/htroot/yacy/ui/result.html b/htroot/yacy/ui/result.html deleted file mode 100644 index 3be7b0784..000000000 --- a/htroot/yacy/ui/result.html +++ /dev/null @@ -1,84 +0,0 @@ -#(input)# - :: - - :: -#(/input)# - -#(num-results)# - :: -

No Results.

- :: -

No Results. (length of search words must be at least 3 characters)

- :: - - :: -#(/num-results)# -
- - -#(resultTable)#::#(/resultTable)# -#{results}# - -#{/results}# -#(resultTable)#::
MediaURL
#(/resultTable)# - - - - - - - diff --git a/htroot/yacy/ui/result.java b/htroot/yacy/ui/result.java deleted file mode 100644 index e817c8690..000000000 --- a/htroot/yacy/ui/result.java +++ /dev/null @@ -1,349 +0,0 @@ -// ysearchitem.java -// (C) 2004-2008 by Michael Peter Christen; mc@yacy.net, Frankfurt a. M., Germany -// first published 2004 on http://yacy.net -// -// This is a part of YaCy, a peer-to-peer based web search engine -// -// $LastChangedDate: 2006-04-02 22:40:07 +0200 (So, 02 Apr 2006) $ -// $LastChangedRevision: 1986 $ -// $LastChangedBy: orbiter $ -// -// 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, write to the Free Software -// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA - -import java.util.TreeSet; - -import de.anomic.http.httpHeader; -import de.anomic.index.indexWord; -import de.anomic.kelondro.kelondroBitfield; -import de.anomic.kelondro.kelondroMSetTools; -import de.anomic.plasma.plasmaCondenser; -import de.anomic.plasma.plasmaSearchEvent; -import de.anomic.plasma.plasmaSearchQuery; -import de.anomic.plasma.plasmaSearchRankingProfile; -import de.anomic.plasma.plasmaSwitchboard; -import de.anomic.server.serverCore; -import de.anomic.server.serverObjects; -import de.anomic.server.serverSwitch; -import de.anomic.server.logging.serverLog; -import de.anomic.tools.yFormatter; -import de.anomic.xml.RSSFeed; -import de.anomic.xml.RSSMessage; -import de.anomic.yacy.yacyURL; - -public class result { - - public static serverObjects respond(httpHeader header, serverObjects post, serverSwitch env) { - final plasmaSwitchboard sb = (plasmaSwitchboard) env; - sb.localSearchLastAccess = System.currentTimeMillis(); - - boolean searchAllowed = sb.getConfigBool("publicSearchpage", true) || sb.verifyAuthentication(header, false); - boolean authenticated = sb.adminAuthenticated(header) >= 2; - int display = (post == null) ? 0 : post.getInt("display", 0); - if ((display == 1) && (!authenticated)) display = 0; - int input = (post == null) ? 2 : post.getInt("input", 2); - String promoteSearchPageGreeting = env.getConfig("promoteSearchPageGreeting", ""); - if (env.getConfigBool("promoteSearchPageGreeting.useNetworkName", false)) promoteSearchPageGreeting = env.getConfig("network.unit.description", ""); - if (promoteSearchPageGreeting.length() == 0) promoteSearchPageGreeting = "P2P WEB SEARCH"; - String client = (String) header.get(httpHeader.CONNECTION_PROP_CLIENTIP); // the search client who initiated the search - - // get query - String querystring = (post == null) ? "" : post.get("search", "").trim(); - final serverObjects prop = new serverObjects(); - - boolean rss = (post == null) ? false : post.get("rss", "false").equals("true"); - if ((post == null) || (env == null) || (querystring.length() == 0) || (!searchAllowed)) { - // we create empty entries for template strings - prop.put("searchagain", "0"); - prop.put("input", input); - prop.put("display", display); - prop.put("input_input", input); - prop.put("input_display", display); - prop.put("promoteSearchPageGreeting", promoteSearchPageGreeting); - prop.put("input_former", ""); - prop.put("former", ""); - prop.put("input_count", "10"); - prop.put("input_offset", "0"); - prop.put("input_resource", "global"); - prop.put("input_urlmaskfilter", ".*"); - prop.put("input_prefermaskfilter", ""); - prop.put("input_indexof", "off"); - prop.put("input_constraint", ""); - prop.put("input_cat", "href"); - prop.put("input_depth", "0"); - prop.put("input_contentdom", "text"); - prop.put("input_contentdomCheckText", "1"); - prop.put("input_contentdomCheckAudio", "0"); - prop.put("input_contentdomCheckVideo", "0"); - prop.put("input_contentdomCheckImage", "0"); - prop.put("input_contentdomCheckApp", "0"); - prop.put("excluded", "0"); - prop.put("results", ""); - prop.put("resultTable", "0"); - prop.put("num-results", searchAllowed ? "0" : "4"); - - return prop; - } - - // collect search attributes - int maxDistance = Integer.MAX_VALUE; - - if ((querystring.length() > 2) && (querystring.charAt(0) == '"') && (querystring.charAt(querystring.length() - 1) == '"')) { - querystring = querystring.substring(1, querystring.length() - 1).trim(); - maxDistance = 1; - } - if (sb.facilityDB != null) try { sb.facilityDB.update("zeitgeist", querystring, post); } catch (Exception e) {} - - int itemsPerPage = post.getInt("count", 10); - int offset = post.getInt("offset", 0); - boolean global = (post == null) ? true : post.get("resource", "global").equals("global"); - final boolean indexof = post.get("indexof","").equals("on"); - String urlmask = ""; - if (post.containsKey("urlmask") && post.get("urlmask").equals("no")) { - urlmask = ".*"; - } else { - urlmask = (post.containsKey("urlmaskfilter")) ? (String) post.get("urlmaskfilter") : ".*"; - } - String prefermask = post.get("prefermaskfilter", ""); - if ((prefermask.length() > 0) && (prefermask.indexOf(".*") < 0)) prefermask = ".*" + prefermask + ".*"; - - kelondroBitfield constraint = ((post.containsKey("constraint")) && (post.get("constraint", "").length() > 0)) ? new kelondroBitfield(4, post.get("constraint", "______")) : null; - if (indexof) { - constraint = new kelondroBitfield(4); - constraint.set(plasmaCondenser.flag_cat_indexof, true); - } - - int domainzone = post.getInt("zone", yacyURL.TLD_any_zone_filter); - - // SEARCH - //final boolean indexDistributeGranted = sb.getConfig(plasmaSwitchboard.INDEX_DIST_ALLOW, "true").equals("true"); - //final boolean indexReceiveGranted = sb.getConfig("allowReceiveIndex", "true").equals("true"); - //final boolean offline = yacyCore.seedDB.mySeed().isVirgin(); - final boolean clustersearch = sb.isRobinsonMode() && - (sb.getConfig("cluster.mode", "").equals("privatecluster") || - sb.getConfig("cluster.mode", "").equals("publiccluster")); - //if (offline || !indexDistributeGranted || !indexReceiveGranted) { global = false; } - if (clustersearch) global = true; // switches search on, but search target is limited to cluster nodes - - // find search domain - int contentdomCode = plasmaSearchQuery.contentdomParser(post.get("contentdom", "text")); - - // patch until better search profiles are available - if ((contentdomCode != plasmaSearchQuery.CONTENTDOM_TEXT) && (itemsPerPage <= 32)) itemsPerPage = 32; - - // check the search tracker - TreeSet trackerHandles = sb.localSearchTracker.get(client); - if (trackerHandles == null) trackerHandles = new TreeSet(); - boolean block = false; - if (trackerHandles.tailSet(new Long(System.currentTimeMillis() - 3000)).size() > 1) try { - Thread.sleep(3000); - block = true; - } catch (InterruptedException e) { e.printStackTrace(); } - if (trackerHandles.tailSet(new Long(System.currentTimeMillis() - 60000)).size() > 12) try { - Thread.sleep(10000); - block = true; - } catch (InterruptedException e) { e.printStackTrace(); } - if (trackerHandles.tailSet(new Long(System.currentTimeMillis() - 600000)).size() > 36) try { - Thread.sleep(30000); - block = true; - } catch (InterruptedException e) { e.printStackTrace(); } - - if ((!block) && (post.get("cat", "href").equals("href"))) { - - plasmaSearchRankingProfile ranking = sb.getRanking(); - final TreeSet[] query = plasmaSearchQuery.cleanQuery(querystring); // converts also umlaute - if ((query[0].contains("near")) && (querystring.indexOf("NEAR") >= 0)) { - query[0].remove("near"); - ranking.coeff_worddistance = plasmaSearchRankingProfile.COEFF_MAX; - } - if ((query[0].contains("recent")) && (querystring.indexOf("RECENT") >= 0)) { - query[0].remove("recent"); - ranking.coeff_date = plasmaSearchRankingProfile.COEFF_MAX; - } - - // filter out stopwords - final TreeSet filtered = kelondroMSetTools.joinConstructive(query[0], plasmaSwitchboard.stopwords); - if (filtered.size() > 0) { - kelondroMSetTools.excludeDestructive(query[0], plasmaSwitchboard.stopwords); - } - - // prepare search properties - final boolean yacyonline = ((sb.webIndex.seedDB != null) && (sb.webIndex.seedDB.mySeed() != null) && (sb.webIndex.seedDB.mySeed().getPublicAddress() != null)); - final boolean globalsearch = (global) && (yacyonline) && (sb.getConfigBool(plasmaSwitchboard.INDEX_RECEIVE_ALLOW, false)); - - // do the search - TreeSet queryHashes = indexWord.words2hashes(query[0]); - plasmaSearchQuery theQuery = new plasmaSearchQuery( - querystring, - queryHashes, - indexWord.words2hashes(query[1]), - ranking, - maxDistance, - prefermask, - contentdomCode, - true, - itemsPerPage, - offset, - urlmask, - (clustersearch && globalsearch) ? plasmaSearchQuery.SEARCHDOM_CLUSTERALL : - ((globalsearch) ? plasmaSearchQuery.SEARCHDOM_GLOBALDHT : plasmaSearchQuery.SEARCHDOM_LOCAL), - "", - 20, - constraint, - true, - domainzone, - client); - - - // tell all threads to do nothing for a specific time - sb.intermissionAllThreads(3000); - - // filter out words that appear in bluelist - theQuery.filterOut(plasmaSwitchboard.blueList); - - // log - serverLog.logInfo("LOCAL_SEARCH", "INIT WORD SEARCH: " + theQuery.queryString + ":" + theQuery.queryHashes + " - " + theQuery.neededResults() + " links to be computed, " + theQuery.displayResults() + " lines to be displayed"); - RSSFeed.channels(RSSFeed.LOCALSEARCH).addMessage(new RSSMessage("Local Search Request", theQuery.queryString, "")); - long timestamp = System.currentTimeMillis(); - - // create a new search event - if (plasmaSearchEvent.getEvent(theQuery.id(false)) == null) { - theQuery.setOffset(0); // in case that this is a new search, always start without a offset - offset = 0; - } - plasmaSearchEvent theSearch = plasmaSearchEvent.getEvent(theQuery, ranking, sb.webIndex, sb.crawlResults, (sb.isRobinsonMode()) ? sb.clusterhashes : null, false); - - // generate result object - serverLog.logFine("LOCAL_SEARCH", "SEARCH TIME AFTER ORDERING OF SEARCH RESULTS: " + ((System.currentTimeMillis() - timestamp) / 1000) + " seconds"); - serverLog.logFine("LOCAL_SEARCH", "SEARCH TIME AFTER RESULT PREPARATION: " + ((System.currentTimeMillis() - timestamp) / 1000) + " seconds"); - - // calc some more cross-reference - serverLog.logFine("LOCAL_SEARCH", "SEARCH TIME AFTER XREF PREPARATION: " + ((System.currentTimeMillis() - timestamp) / 1000) + " seconds"); - - // log - serverLog.logInfo("LOCAL_SEARCH", "EXIT WORD SEARCH: " + theQuery.queryString + " - " + - (theSearch.getRankingResult().getLocalResourceSize() + theSearch.getRankingResult().getRemoteResourceSize()) + " links found, " + - ((System.currentTimeMillis() - timestamp) / 1000) + " seconds"); - - // prepare search statistics - theQuery.resultcount = theSearch.getRankingResult().getLocalResourceSize() + theSearch.getRankingResult().getRemoteResourceSize(); - theQuery.searchtime = System.currentTimeMillis() - timestamp; - theQuery.urlretrievaltime = theSearch.getURLRetrievalTime(); - theQuery.snippetcomputationtime = theSearch.getSnippetComputationTime(); - sb.localSearches.add(theQuery); - - // update the search tracker - trackerHandles.add(theQuery.handle); - sb.localSearchTracker.put(client, trackerHandles); - - int totalcount = theSearch.getRankingResult().getLocalResourceSize() + theSearch.getRankingResult().getRemoteResourceSize(); - prop.put("num-results_offset", offset); - prop.put("num-results_itemscount", "0"); - prop.put("num-results_itemsPerPage", itemsPerPage); - prop.put("num-results_totalcount", yFormatter.number(totalcount, !rss)); - prop.put("num-results_globalresults", (globalsearch) ? "1" : "0"); - prop.put("num-results_globalresults_localResourceSize", yFormatter.number(theSearch.getRankingResult().getLocalResourceSize(), !rss)); - prop.put("num-results_globalresults_remoteResourceSize", yFormatter.number(theSearch.getRankingResult().getRemoteResourceSize(), !rss)); - prop.put("num-results_globalresults_remoteIndexCount", yFormatter.number(theSearch.getRankingResult().getRemoteIndexCount(), !rss)); - prop.put("num-results_globalresults_remotePeerCount", yFormatter.number(theSearch.getRankingResult().getRemotePeerCount(), !rss)); - - // generate the search result lines; they will be produced by another servlet - for (int i = 0; i < theQuery.displayResults(); i++) { - prop.put("results_" + i + "_item", offset + i); - prop.put("results_" + i + "_eventID", theQuery.id(false)); - prop.put("results_" + i + "_ID", theQuery.id(false).substring(1,6)); - } - prop.put("results", theQuery.displayResults()); - prop.put("resultTable", (contentdomCode <= 1) ? "0" : "1"); - prop.put("eventID", theQuery.id(false)); // for bottomline - prop.put("ID", theQuery.id(false).substring(1,6)); // for bottomline - - // process result of search - if (filtered.size() > 0) { - prop.put("excluded", "1"); - prop.putHTML("excluded_stopwords", filtered.toString()); - } else { - prop.put("excluded", "0"); - } - - if (prop == null || prop.isEmpty()) { - if (post.get("search", "").length() < 3) { - prop.put("num-results", "2"); // no results - at least 3 chars - } else { - prop.put("num-results", "1"); // no results - } - } else { - prop.put("num-results", "3"); - } - - prop.put("input_cat", "href"); - prop.put("input_depth", "0"); - - // adding some additional properties needed for the rss feed - String hostName = (String) header.get("Host", "localhost"); - if (hostName.indexOf(":") == -1) hostName += ":" + serverCore.getPortNr(env.getConfig("port", "8080")); - prop.put("searchBaseURL", "http://" + hostName + "/yacysearch.html"); - prop.put("rssYacyImageURL", "http://" + hostName + "/env/grafics/yacy.gif"); - } - - prop.put("searchagain", global ? "1" : "0"); - prop.put("input", input); - prop.put("display", display); - prop.put("input_input", input); - prop.put("input_display", display); - prop.put("promoteSearchPageGreeting", promoteSearchPageGreeting); - prop.putHTML("input_former", querystring); - //prop.put("former", post.get("search", "")); - prop.put("input_count", itemsPerPage); - prop.put("input_offset", offset); - prop.put("input_resource", global ? "global" : "local"); - prop.putHTML("input_urlmaskfilter", urlmask); - prop.putHTML("input_prefermaskfilter", prefermask); - prop.put("input_indexof", (indexof) ? "on" : "off"); - prop.put("input_constraint", (constraint == null) ? "" : constraint.exportB64()); - prop.put("input_contentdom", post.get("contentdom", "text")); - prop.put("input_contentdomCheckText", (contentdomCode == plasmaSearchQuery.CONTENTDOM_TEXT) ? "1" : "0"); - prop.put("input_contentdomCheckAudio", (contentdomCode == plasmaSearchQuery.CONTENTDOM_AUDIO) ? "1" : "0"); - prop.put("input_contentdomCheckVideo", (contentdomCode == plasmaSearchQuery.CONTENTDOM_VIDEO) ? "1" : "0"); - prop.put("input_contentdomCheckImage", (contentdomCode == plasmaSearchQuery.CONTENTDOM_IMAGE) ? "1" : "0"); - prop.put("input_contentdomCheckApp", (contentdomCode == plasmaSearchQuery.CONTENTDOM_APP) ? "1" : "0"); - - // for RSS: don't HTML encode some elements - prop.putHTML("rss_query", querystring, true); - prop.put("rss_queryenc", yacyURL.escape(querystring.replace(' ', '+'))); - - sb.localSearchLastAccess = System.currentTimeMillis(); - - // return rewrite properties - return prop; - } -/* - private static String navhidden(int page, int display, plasmaSearchQuery theQuery) { - return - "" + - "" + - "" + - "" + - "" + - "" + - "" + - "" + - "" + - "" + - ""; - } - */ -} diff --git a/htroot/yacy/ui/ritem.html b/htroot/yacy/ui/ritem.html deleted file mode 100644 index ed761b966..000000000 --- a/htroot/yacy/ui/ritem.html +++ /dev/null @@ -1,46 +0,0 @@ -#(content)#:: -
-

- - #[description]#

-

#[snippet]#

-

#[urlname]#

-
- :: - #{items}# - - #{/items}# - :: - #{items}# - #[name]##[hrefshort]# - #{/items}# - :: - #{items}# - #[name]##[hrefshort]# - #{/items}# - :: - #{items}# - #[name]##[hrefshort]# - #{/items}# -#(/content)# -#(rss)#:: - -#[title]# -#[link]# -#[description]# -#[date]# -#[urlhash]# - -#(/rss)# -#(dynamic)#:: - -#(/dynamic)# diff --git a/htroot/yacy/ui/ritem.java b/htroot/yacy/ui/ritem.java deleted file mode 100644 index b23fcd52a..000000000 --- a/htroot/yacy/ui/ritem.java +++ /dev/null @@ -1,202 +0,0 @@ -// ysearchitem.java -// (C) 2007 by Michael Peter Christen; mc@yacy.net, Frankfurt a. M., Germany -// first published 28.08.2007 on http://yacy.net -// -// This is a part of YaCy, a peer-to-peer based web search engine -// -// $LastChangedDate: 2006-04-02 22:40:07 +0200 (So, 02 Apr 2006) $ -// $LastChangedRevision: 1986 $ -// $LastChangedBy: orbiter $ -// -// 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, write to the Free Software -// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA - -import java.io.UnsupportedEncodingException; -import java.net.MalformedURLException; -import java.net.URLEncoder; -import java.util.ArrayList; -import java.util.TreeSet; - -import de.anomic.http.httpHeader; -import de.anomic.plasma.plasmaSearchEvent; -import de.anomic.plasma.plasmaSearchQuery; -import de.anomic.plasma.plasmaSearchRankingProcess; -import de.anomic.plasma.plasmaSnippetCache; -import de.anomic.plasma.plasmaSwitchboard; -import de.anomic.server.serverObjects; -import de.anomic.server.serverSwitch; -import de.anomic.tools.nxTools; -import de.anomic.tools.yFormatter; -import de.anomic.yacy.yacySeed; -import de.anomic.yacy.yacyURL; - -public class ritem { - - private static boolean col = true; - private static final int namelength = 60; - private static final int urllength = 120; - - public static serverObjects respond(httpHeader header, serverObjects post, serverSwitch env) { - final plasmaSwitchboard sb = (plasmaSwitchboard) env; - final serverObjects prop = new serverObjects(); - - String eventID = post.get("eventID", ""); - boolean rss = post.get("rss", "false").equals("true"); - int item = post.getInt("item", -1); - boolean auth = ((String) header.get(httpHeader.CONNECTION_PROP_CLIENTIP, "")).equals("localhost") || sb.verifyAuthentication(header, true); - - // default settings for blank item - prop.put("content", "0"); - prop.put("rss", "0"); - prop.put("references", "0"); - prop.put("dynamic", "0"); - - // find search event - plasmaSearchEvent theSearch = plasmaSearchEvent.getEvent(eventID); - if (theSearch == null) { - // the event does not exist, show empty page - return prop; - } - plasmaSearchQuery theQuery = theSearch.getQuery(); - int offset = theQuery.neededResults() - theQuery.displayResults(); - - // dynamically update count values - if (!rss) { - prop.put("dynamic_offset", offset + 1); - prop.put("dynamic_itemscount", (item < 0) ? theQuery.neededResults() : item + 1); - prop.put("dynamic_totalcount", yFormatter.number(theSearch.getRankingResult().getLocalResourceSize() + theSearch.getRankingResult().getRemoteResourceSize(), !rss)); - prop.put("dynamic_localResourceSize", yFormatter.number(theSearch.getRankingResult().getLocalResourceSize(), !rss)); - prop.put("dynamic_remoteResourceSize", yFormatter.number(theSearch.getRankingResult().getRemoteResourceSize(), !rss)); - prop.put("dynamic_remoteIndexCount", yFormatter.number(theSearch.getRankingResult().getRemoteIndexCount(), !rss)); - prop.put("dynamic_remotePeerCount", yFormatter.number(theSearch.getRankingResult().getRemotePeerCount(), !rss)); - prop.put("dynamic_resnav", ""); - prop.put("dynamic", "1"); - } - - if (theQuery.contentdom == plasmaSearchQuery.CONTENTDOM_TEXT) { - // text search - - // generate result object - plasmaSearchEvent.ResultEntry result = theSearch.oneResult(item); - if (result == null) return prop; // no content - - if (rss) { - // text search for rss output - prop.put("rss", "1"); // switch on specific content - prop.putHTML("rss_title", result.title(), true); - prop.putHTML("rss_description", result.textSnippet().getLineRaw(), true); - prop.putHTML("rss_link", result.urlstring(), true); - prop.put("rss_urlhash", result.hash()); - prop.put("rss_date", plasmaSwitchboard.dateString822(result.modified())); - return prop; - } - - prop.put("content", theQuery.contentdom + 1); // switch on specific content - prop.putHTML("content_description", result.title()); - prop.put("content_url", result.urlstring()); - - int port=result.url().getPort(); - yacyURL faviconURL; - try { - faviconURL = new yacyURL(result.url().getProtocol() + "://" + result.url().getHost() + ((port != -1) ? (":" + String.valueOf(port)) : "") + "/favicon.ico", null); - } catch (MalformedURLException e1) { - faviconURL = null; - } - - prop.putHTML("content_faviconCode", sb.licensedURLs.aquireLicense(faviconURL)); // aquire license for favicon url loading - prop.put("content_urlhash", result.hash()); - prop.put("content_urlhexhash", yacySeed.b64Hash2hexHash(result.hash())); - prop.putHTML("content_urlname", nxTools.shortenURLString(result.urlname(), urllength)); - prop.put("content_date", plasmaSwitchboard.dateString(result.modified())); - prop.put("content_ybr", plasmaSearchRankingProcess.ybr(result.hash())); - prop.putNum("content_size", result.filesize()); - - TreeSet[] query = theQuery.queryWords(); - yacyURL wordURL = null; - try { - prop.putHTML("content_words", URLEncoder.encode(query[0].toString(),"UTF-8")); - } catch (UnsupportedEncodingException e) {} - prop.putHTML("content_former", theQuery.queryString); - prop.put("content_rankingprops", result.word().toPropertyForm() + ", domLengthEstimated=" + yacyURL.domLengthEstimation(result.hash()) + - ((yacyURL.probablyRootURL(result.hash())) ? ", probablyRootURL" : "") + - (((wordURL = yacyURL.probablyWordURL(result.hash(), query[0])) != null) ? ", probablyWordURL=" + wordURL.toNormalform(false, true) : "")); - plasmaSnippetCache.TextSnippet snippet = result.textSnippet(); - prop.put("content_snippet", (snippet == null) ? "(snippet not found)" : snippet.getLineMarked(theQuery.queryHashes)); - return prop; - } - - if (theQuery.contentdom == plasmaSearchQuery.CONTENTDOM_IMAGE) { - // image search; shows thumbnails - - prop.put("content", theQuery.contentdom + 1); // switch on specific content - plasmaSnippetCache.MediaSnippet ms = theSearch.oneImage(item); - if (ms == null) { - prop.put("content_items", "0"); - } else { - prop.putHTML("content_items_0_hrefCache", (auth) ? "/ViewImage.png?url=" + ms.href.toNormalform(true, false) : ms.href.toNormalform(true, false)); - prop.putHTML("content_items_0_href", ms.href.toNormalform(true, false)); - prop.put("content_items_0_code", sb.licensedURLs.aquireLicense(ms.href)); - prop.putHTML("content_items_0_name", shorten(ms.name, namelength)); - prop.put("content_items_0_attr", (ms.attr.equals("-1 x -1")) ? "" : "(" + ms.attr + ")"); // attributes, here: original size of image - prop.put("content_items_0_source", ms.source.toNormalform(true, false)); - prop.put("content_items_0_sourcedom", ms.source.getHost()); - prop.put("content_items", 1); - } - return prop; - } - - if ((theQuery.contentdom == plasmaSearchQuery.CONTENTDOM_AUDIO) || - (theQuery.contentdom == plasmaSearchQuery.CONTENTDOM_VIDEO) || - (theQuery.contentdom == plasmaSearchQuery.CONTENTDOM_APP)) { - // any other media content - - // generate result object - plasmaSearchEvent.ResultEntry result = theSearch.oneResult(item); - if (result == null) return prop; // no content - - prop.put("content", theQuery.contentdom + 1); // switch on specific content - ArrayList media = result.mediaSnippets(); - if (item == 0) col = true; - if (media != null) { - plasmaSnippetCache.MediaSnippet ms; - int c = 0; - for (int i = 0; i < media.size(); i++) { - ms = (plasmaSnippetCache.MediaSnippet) media.get(i); - prop.putHTML("content_items_" + i + "_href", ms.href.toNormalform(true, false)); - prop.putHTML("content_items_" + i + "_hrefshort", nxTools.shortenURLString(ms.href.toNormalform(true, false), urllength)); - prop.putHTML("content_items_" + i + "_name", shorten(ms.name, namelength)); - prop.put("content_items_" + i + "_col", (col) ? "0" : "1"); - c++; - col = !col; - } - prop.put("content_items", c); - } else { - prop.put("content_items", "0"); - } - return prop; - } - - return prop; - } - - private static String shorten(String s, int length) { - if (s.length() <= length) return s; - int p = s.lastIndexOf('.'); - if (p < 0) return s.substring(0, length - 3) + "..."; - return s.substring(0, length - (s.length() - p) - 3) + "..." + s.substring(p); - } - -}