- added another network definition for personal web portals (replacing robinson peers in freeworld) for default use case selection. This solves the problem that the public network freeworld can spoil the personal web index during configuration phase with index entries that the user does not want for his personal web portal

- changed network selection to new network 'webportal' in ConfigBasic servlet
- removed unused servlets from yacy/ui


git-svn-id: https://svn.berlios.de/svnroot/repos/yacy/trunk@4837 6c8d7289-2bf4-0310-a012-ef5d649a1542
pull/1/head
orbiter 17 years ago
parent 2f8c180bec
commit e4d93599e6

@ -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

@ -1,2 +1,3 @@
defaults/yacy.network.freeworld.unit
defaults/yacy.network.webportal.unit
defaults/yacy.network.intranet.unit

@ -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");
}
// 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);
if (!networkName.equals("webportal")) {
// switch to webportal network
sb.switchNetwork("defaults/yacy.network.webportal.unit");
}
} else {
// switch from intranet to robinson mode
sb.switchNetwork("defaults/yacy.network.freeworld.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");
}
// 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
} 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);

@ -1,84 +0,0 @@
#(input)#
::
<script type="text/javascript">
$(function() {
$("input[@name='search']").setValue("#[former]#");
$("input[@name='contentdom']").setValue("#[contentdom]#");
$("input[@name='former']").setValue("#[former]#");
$("input[@name='count']").setValue("#[count]#");
$("input[@name='offset']").setValue("#[offset]#");
$("input[@name='resource']").setValue("#[resource]#");
$("input[@name='urlmaskfilter']").setValue("#[urlmaskfilter]#");
$("input[@name='prefermaskfilter']").setValue("#[prefermaskfilter]#");
$("input[@name='depth']").setValue("#[depth]#");
$("input[@name='cat']").setValue("#[cat]#");
$("input[@name='type']").setValue("#[type]#");
$("input[@name='display']").setValue("#[display]#");
$("input[@name='input']").setValue("#[input]#");
$("input[@name='constraint']").setValue("#[constraint]#");
});
</script>
::
#(/input)#
<!-- type the number of results -->
#(num-results)#
::
<p>No Results.</p>
::
<p>No Results. (length of search words must be at least 3 characters)</p>
::
<script type="text/javascript">
$(function() {
var totalcount = #[totalcount]#;
var size = $("input[@name='count']").getValue();
var offset = $("input[@name='offset']").getValue();
if (offset != 0) {
var page = ((offset-1)/size);
} else {
var page = 0;
}
$("#pagination").pagination(totalcount, {
current_page:page,
items_per_page:size,
num_edge_entries:2,
num_display_entries:10,
callback: loadContents
});
});
function loadContents(page_id, jq) {
var count = $("input[@name='count']").getValue();
var offset = ((page_id*count)+1);
$("input[@name='offset']").setValue(offset);
var result = "result.html?" + $('#searchbox').formSerialize();
var selected = $('#container ul').data('selected.ui-tabs');
$('#container ul').tabs('url', selected, result);
$('#container ul').tabs('load', selected);
$('#pagination').trigger("update");
}
</script>
::
#(/num-results)#
<div id="#[ID]#"></div>
<div id="pagination" class="pagination">[Pagination]</div>
<!-- linklist begin -->
#(resultTable)#::<table width="100%"><tr class="TableHeader"><td width="30%">Media</td><td width="70%">URL</tr>#(/resultTable)#
#{results}#
<script type="text/javascript">
$(function() {
var id = "#"+"#[ID]#";
$.get("/yacy/ui/ritem.html?rss=false&item=#[item]#&eventID=#[eventID]#", function(html) {
$(id).append(html);
$(id).trigger("update");
});
return false;
});
</script>
#{/results}#
#(resultTable)#::</table>#(/resultTable)#

@ -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<Long> trackerHandles = sb.localSearchTracker.get(client);
if (trackerHandles == null) trackerHandles = new TreeSet<Long>();
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<String>[] 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<String> 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<String> 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
"<input type=\"hidden\" name=\"display\" value=\"" + display + "\" />" +
"<input type=\"hidden\" name=\"search\" value=\"" + theQuery.queryString() + "\" />" +
"<input type=\"hidden\" name=\"count\" value=\"" + theQuery.displayResults() + "\" />" +
"<input type=\"hidden\" name=\"offset\" value=\"" + (page * theQuery.displayResults()) + "\" />" +
"<input type=\"hidden\" name=\"resource\" value=\"" + theQuery.searchdom() + "\" />" +
"<input type=\"hidden\" name=\"urlmaskfilter\" value=\"" + theQuery.urlMask + "\" />" +
"<input type=\"hidden\" name=\"prefermaskfilter\" value=\"" + theQuery.prefer + "\" />" +
"<input type=\"hidden\" name=\"cat\" value=\"href\" />" +
"<input type=\"hidden\" name=\"constraint\" value=\"" + ((theQuery.constraint == null) ? "" : theQuery.constraint.exportB64()) + "\" />" +
"<input type=\"hidden\" name=\"contentdom\" value=\"" + theQuery.contentdom() + "\" />" +
"<input type=\"hidden\" name=\"former\" value=\"" + theQuery.queryString() + "\" />";
}
*/
}

@ -1,46 +0,0 @@
#(content)#::
<div class="searchresults">
<h3 class="linktitle">
<img src="../../ViewImage.png?width=16&height=16&code=#[faviconCode]#" id="f#[urlhash]#" class="favicon" width="16" height="16" alt="" />
<a href="#[url]#" target="_parent">#[description]#</a></h3>
<p class="snippet">#[snippet]#</p>
<p class="url"><a href="#[url]#" id="url#[urlhash]#" target="_parent">#[urlname]#</a></p>
</div>
::
#{items}#
<div class="thumbcontainer">
<a href="#[hrefCache]#" class="thumblink" onclick="return hs.expand(this)">
<img src="/ViewImage.png?maxwidth=96&maxheight=96&code=#[code]#" alt="#[name]#">
</a>
<div class="highslide-caption"><a href="#[href]#">#[name]#<br \><a href="#[source]#">#[sourcedom]#</a></a></div>
<div class="TableCellDark"><a href="#[href]#">#[name]#</a><br \>#[attr]#</div>
</div>
#{/items}#
::
#{items}#
<tr class="#(col)#TableCellLight::TableCellDark#(/col)#"><td>#[name]#</td><td><a href="#[href]#">#[hrefshort]#</a></tr>
#{/items}#
::
#{items}#
<tr class="#(col)#TableCellLight::TableCellDark#(/col)#"><td>#[name]#</td><td><a href="#[href]#">#[hrefshort]#</a></tr>
#{/items}#
::
#{items}#
<tr class="#(col)#TableCellLight::TableCellDark#(/col)#"><td>#[name]#</td><td><a href="#[href]#">#[hrefshort]#</a></tr>
#{/items}#
#(/content)#
#(rss)#::
<item>
<title>#[title]#</title>
<link>#[link]#</link>
<description>#[description]#</description>
<pubDate>#[date]#</pubDate>
<guid isPermaLink="false">#[urlhash]#</guid>
</item>
#(/rss)#
#(dynamic)#::
<script type="text/javascript">
statistics("#[offset]#", "#[itemscount]#", "#[totalcount]#", "#[localResourceSize]#", "#[remoteResourceSize]#", "#[remoteIndexCount]#", "#[remotePeerCount]#");
progressbar.step(1);
</script>
#(/dynamic)#

@ -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<String>[] 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<plasmaSnippetCache.MediaSnippet> 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);
}
}
Loading…
Cancel
Save