From 7cda48a9d62ed1d84188c0fed6901c76e518661e Mon Sep 17 00:00:00 2001 From: reger Date: Wed, 9 Dec 2015 00:49:38 +0100 Subject: [PATCH 01/32] add hint to "default max results per page" limit on ConfigPortal (limit is applied in yacysearch & max. total results by sum result-stack size) - remove obsolete search.navigation prop (has moved to ConfigSearchPage_p) --- htroot/ConfigPortal.html | 2 +- htroot/ConfigPortal.java | 6 ------ 2 files changed, 1 insertion(+), 7 deletions(-) diff --git a/htroot/ConfigPortal.html b/htroot/ConfigPortal.html index 760d9ad17..26d183beb 100644 --- a/htroot/ConfigPortal.html +++ b/htroot/ConfigPortal.html @@ -78,7 +78,7 @@
Default maximum number of results per page
-
+
max = 100 (with CACHEONLY=5000)
Default index.html Page (by forwarder)
diff --git a/htroot/ConfigPortal.java b/htroot/ConfigPortal.java index 2205e2fa9..003404d0d 100644 --- a/htroot/ConfigPortal.java +++ b/htroot/ConfigPortal.java @@ -171,12 +171,6 @@ public class ConfigPortal { prop.put(SwitchboardConstants.REMOTESEARCH_RESULT_STORE, sb.getConfigBool(SwitchboardConstants.REMOTESEARCH_RESULT_STORE, true) ? 1 : 0); - prop.put("search.navigation.hosts", sb.getConfig("search.navigation", "").indexOf("hosts",0) >= 0 ? 1 : 0); - prop.put("search.navigation.authors", sb.getConfig("search.navigation", "").indexOf("authors",0) >= 0 ? 1 : 0); - prop.put("search.navigation.collections", sb.getConfig("search.navigation", "").indexOf("collections",0) >= 0 ? 1 : 0); - prop.put("search.navigation.namespace", sb.getConfig("search.navigation", "").indexOf("namespace",0) >= 0 ? 1 : 0); - prop.put("search.navigation.topics", sb.getConfig("search.navigation", "").indexOf("topics",0) >= 0 ? 1 : 0); - prop.put("search.verify.nocache", sb.getConfig("search.verify", "").equals("nocache") ? 1 : 0); prop.put("search.verify.iffresh", sb.getConfig("search.verify", "").equals("iffresh") ? 1 : 0); prop.put("search.verify.ifexist", sb.getConfig("search.verify", "").equals("ifexist") ? 1 : 0); From 020630efd842a77a927be2161169fe3099553ab2 Mon Sep 17 00:00:00 2001 From: reger Date: Sun, 13 Dec 2015 02:50:08 +0100 Subject: [PATCH 02/32] remove unused network scanner parameter from queryparameter Search event is not using networkscanner (removed filterscannerfail param always init to false) --- htroot/IndexControlRWIs_p.java | 1 - htroot/yacy/search.java | 2 -- htroot/yacysearch.java | 1 - source/net/yacy/cora/federate/FederateSearchManager.java | 3 +-- source/net/yacy/search/query/QueryParams.java | 4 +--- source/net/yacy/search/query/SearchEvent.java | 9 --------- 6 files changed, 2 insertions(+), 18 deletions(-) diff --git a/htroot/IndexControlRWIs_p.java b/htroot/IndexControlRWIs_p.java index 9830a02ab..31199063a 100644 --- a/htroot/IndexControlRWIs_p.java +++ b/htroot/IndexControlRWIs_p.java @@ -660,7 +660,6 @@ public class IndexControlRWIs_p { sb.getRanking(), "",//userAgent false, - false, 0.0d, 0.0d, 0.0d, new String[0]); final SearchEvent theSearch = SearchEventCache.getEvent(query, sb.peers, sb.tables, null, false, sb.loader, Integer.MAX_VALUE, Long.MAX_VALUE); diff --git a/htroot/yacy/search.java b/htroot/yacy/search.java index dd050b86f..9b092792c 100644 --- a/htroot/yacy/search.java +++ b/htroot/yacy/search.java @@ -252,7 +252,6 @@ public final class search { rankingProfile, header.get(HeaderFramework.USER_AGENT, ""), false, - false, 0.0d, 0.0d, 0.0d, @@ -318,7 +317,6 @@ public final class search { rankingProfile, header.get(HeaderFramework.USER_AGENT, ""), false, - false, 0.0d, 0.0d, 0.0d, diff --git a/htroot/yacysearch.java b/htroot/yacysearch.java index 0aea12e23..379ed2cb1 100644 --- a/htroot/yacysearch.java +++ b/htroot/yacysearch.java @@ -672,7 +672,6 @@ public class yacysearch { sb.getConfigBool(SwitchboardConstants.SEARCH_VERIFY_DELETE, false) && sb.getConfigBool(SwitchboardConstants.NETWORK_SEARCHVERIFY, false) && sb.peers.mySeed().getFlagAcceptRemoteIndex(), - false, lat, lon, rad, sb.getConfigArray("search.navigation", "")); EventTracker.delete(EventTracker.EClass.SEARCH); diff --git a/source/net/yacy/cora/federate/FederateSearchManager.java b/source/net/yacy/cora/federate/FederateSearchManager.java index bf370473f..bd17081c2 100644 --- a/source/net/yacy/cora/federate/FederateSearchManager.java +++ b/source/net/yacy/cora/federate/FederateSearchManager.java @@ -206,8 +206,7 @@ public class FederateSearchManager { sb.getRanking(), "",//userAgent false, - false, - 0.0, 0.0, -1.0, + 0.0d, 0.0d, -1.0d, new String[0]); return query(query); diff --git a/source/net/yacy/search/query/QueryParams.java b/source/net/yacy/search/query/QueryParams.java index e61b875bd..75a9ed1b1 100644 --- a/source/net/yacy/search/query/QueryParams.java +++ b/source/net/yacy/search/query/QueryParams.java @@ -141,7 +141,7 @@ public final class QueryParams { public int transmitcount; // number of results that had been shown to the user public long searchtime, urlretrievaltime, snippetcomputationtime; // time to perform the search, to get all the urls, and to compute the snippets public final String userAgent; - protected boolean filterfailurls, filterscannerfail; + protected boolean filterfailurls; protected double lat, lon, radius; public LinkedHashSet facetfields; private SolrQuery cachedQuery; @@ -174,7 +174,6 @@ public final class QueryParams { final RankingProfile ranking, final String userAgent, final boolean filterfailurls, - final boolean filterscannerfail, final double lat, final double lon, final double radius, @@ -242,7 +241,6 @@ public final class QueryParams { this.userAgent = userAgent; this.transmitcount = 0; this.filterfailurls = filterfailurls; - this.filterscannerfail = filterscannerfail; // we normalize here the location and radius because that should cause a better caching // and as surplus it will increase privacy this.lat = Math.floor(lat * this.kmNormal) / this.kmNormal; diff --git a/source/net/yacy/search/query/SearchEvent.java b/source/net/yacy/search/query/SearchEvent.java index a93b112fa..83485c1a4 100644 --- a/source/net/yacy/search/query/SearchEvent.java +++ b/source/net/yacy/search/query/SearchEvent.java @@ -58,7 +58,6 @@ import net.yacy.cora.federate.yacy.Distribution; import net.yacy.cora.lod.vocabulary.Tagging; import net.yacy.cora.order.Base64Order; import net.yacy.cora.protocol.Domains; -import net.yacy.cora.protocol.Scanner; import net.yacy.cora.sorting.ClusteredScoreMap; import net.yacy.cora.sorting.ConcurrentScoreMap; import net.yacy.cora.sorting.ReversibleScoreMap; @@ -1266,14 +1265,6 @@ public final class SearchEvent { continue; } } - - // check Scanner - if (this.query.filterscannerfail && !Scanner.acceptURL(page.url())) { - if (log.isFine()) log.fine("dropped RWI: url not accepted by scanner"); - if (page.word().local()) this.local_rwi_available.decrementAndGet(); else this.remote_rwi_available.decrementAndGet(); - continue; - } - // check vocabulary terms (metatags) {only available in Solr index as vocabulary_xxyyzzz_sxt field} // TODO: vocabulary is only valid and available in local Solr index (consider to auto-switch to Searchdom.LOCAL) From 28b8bc290a09470f0eb6bbf5aa214386b8849f7a Mon Sep 17 00:00:00 2001 From: reger Date: Sun, 13 Dec 2015 20:01:49 +0100 Subject: [PATCH 03/32] fix use of NETWORK_SEARCHVERIFY for rwi verification was not used to set the searchevent parameter (done in SearchEventCache.getEvent) - remove unused corresponding QueryParams.filterfailurls param. --- htroot/IndexControlRWIs_p.java | 4 +--- htroot/yacy/search.java | 2 -- htroot/yacysearch.java | 3 --- source/net/yacy/cora/federate/FederateSearchManager.java | 3 +-- source/net/yacy/search/query/QueryParams.java | 3 --- source/net/yacy/search/query/SearchEventCache.java | 3 ++- 6 files changed, 4 insertions(+), 14 deletions(-) diff --git a/htroot/IndexControlRWIs_p.java b/htroot/IndexControlRWIs_p.java index 31199063a..baf170002 100644 --- a/htroot/IndexControlRWIs_p.java +++ b/htroot/IndexControlRWIs_p.java @@ -659,7 +659,6 @@ public class IndexControlRWIs_p { sb.index, sb.getRanking(), "",//userAgent - false, 0.0d, 0.0d, 0.0d, new String[0]); final SearchEvent theSearch = SearchEventCache.getEvent(query, sb.peers, sb.tables, null, false, sb.loader, Integer.MAX_VALUE, Long.MAX_VALUE); @@ -670,8 +669,7 @@ public class IndexControlRWIs_p { } else { prop.put("searchresult", 3); prop.put("searchresult_allurl", theSearch.local_rwi_available.get()); - prop - .put("searchresult_description", theSearch.flagCount()[WordReferenceRow.flag_app_dc_description]); + prop.put("searchresult_description", theSearch.flagCount()[WordReferenceRow.flag_app_dc_description]); prop.put("searchresult_title", theSearch.flagCount()[WordReferenceRow.flag_app_dc_title]); prop.put("searchresult_creator", theSearch.flagCount()[WordReferenceRow.flag_app_dc_creator]); prop.put("searchresult_subject", theSearch.flagCount()[WordReferenceRow.flag_app_dc_subject]); diff --git a/htroot/yacy/search.java b/htroot/yacy/search.java index 9b092792c..0c831c5dd 100644 --- a/htroot/yacy/search.java +++ b/htroot/yacy/search.java @@ -251,7 +251,6 @@ public final class search { indexSegment, rankingProfile, header.get(HeaderFramework.USER_AGENT, ""), - false, 0.0d, 0.0d, 0.0d, @@ -316,7 +315,6 @@ public final class search { sb.index, rankingProfile, header.get(HeaderFramework.USER_AGENT, ""), - false, 0.0d, 0.0d, 0.0d, diff --git a/htroot/yacysearch.java b/htroot/yacysearch.java index 379ed2cb1..caf980487 100644 --- a/htroot/yacysearch.java +++ b/htroot/yacysearch.java @@ -669,9 +669,6 @@ public class yacysearch { indexSegment, ranking, header.get(HeaderFramework.USER_AGENT, ""), - sb.getConfigBool(SwitchboardConstants.SEARCH_VERIFY_DELETE, false) - && sb.getConfigBool(SwitchboardConstants.NETWORK_SEARCHVERIFY, false) - && sb.peers.mySeed().getFlagAcceptRemoteIndex(), lat, lon, rad, sb.getConfigArray("search.navigation", "")); EventTracker.delete(EventTracker.EClass.SEARCH); diff --git a/source/net/yacy/cora/federate/FederateSearchManager.java b/source/net/yacy/cora/federate/FederateSearchManager.java index bd17081c2..56f18e9d5 100644 --- a/source/net/yacy/cora/federate/FederateSearchManager.java +++ b/source/net/yacy/cora/federate/FederateSearchManager.java @@ -205,8 +205,7 @@ public class FederateSearchManager { sb.index, sb.getRanking(), "",//userAgent - false, - 0.0d, 0.0d, -1.0d, + 0.0d, 0.0d, 0.0d, new String[0]); return query(query); diff --git a/source/net/yacy/search/query/QueryParams.java b/source/net/yacy/search/query/QueryParams.java index 75a9ed1b1..0e0797145 100644 --- a/source/net/yacy/search/query/QueryParams.java +++ b/source/net/yacy/search/query/QueryParams.java @@ -141,7 +141,6 @@ public final class QueryParams { public int transmitcount; // number of results that had been shown to the user public long searchtime, urlretrievaltime, snippetcomputationtime; // time to perform the search, to get all the urls, and to compute the snippets public final String userAgent; - protected boolean filterfailurls; protected double lat, lon, radius; public LinkedHashSet facetfields; private SolrQuery cachedQuery; @@ -173,7 +172,6 @@ public final class QueryParams { final Segment indexSegment, final RankingProfile ranking, final String userAgent, - final boolean filterfailurls, final double lat, final double lon, final double radius, @@ -240,7 +238,6 @@ public final class QueryParams { this.indexSegment = indexSegment; this.userAgent = userAgent; this.transmitcount = 0; - this.filterfailurls = filterfailurls; // we normalize here the location and radius because that should cause a better caching // and as surplus it will increase privacy this.lat = Math.floor(lat * this.kmNormal) / this.kmNormal; diff --git a/source/net/yacy/search/query/SearchEventCache.java b/source/net/yacy/search/query/SearchEventCache.java index bdae26b28..5fb5ff671 100644 --- a/source/net/yacy/search/query/SearchEventCache.java +++ b/source/net/yacy/search/query/SearchEventCache.java @@ -170,7 +170,8 @@ public class SearchEventCache { // start a new event Switchboard sb = Switchboard.getSwitchboard(); - final boolean delete = sb == null || Switchboard.getSwitchboard().getConfigBool(SwitchboardConstants.SEARCH_VERIFY_DELETE, true); + final boolean delete = sb == null || Switchboard.getSwitchboard().getConfigBool(SwitchboardConstants.SEARCH_VERIFY_DELETE, true) + || (sb.getConfigBool(SwitchboardConstants.NETWORK_SEARCHVERIFY, false) && sb.peers.mySeed().getFlagAcceptRemoteIndex()); final boolean addToLocalIdx = sb == null || Switchboard.getSwitchboard().getConfigBool(SwitchboardConstants.REMOTESEARCH_RESULT_STORE, true); event = new SearchEvent(query, peers, workTables, preselectedPeerHashes, generateAbstracts, loader, remote_maxcount, remote_maxtime, delete, addToLocalIdx); MemoryControl.request(100 * 1024 * 1024, false); // this may trigger a short memory status which causes a reducing of cache space of other threads From 1be67d9ab6db63c804677d4c2d6dbdc94cc91967 Mon Sep 17 00:00:00 2001 From: sixcooler Date: Mon, 14 Dec 2015 21:33:27 +0100 Subject: [PATCH 04/32] CachedSolrConnector was replaced by ConcurrentUpdateSolrConnector years ago - time to let it go Commented out unused table of cache-objects --- htroot/PerformanceMemory_p.html | 33 +- htroot/PerformanceMemory_p.java | 107 +++--- .../solr/connector/CachedSolrConnector.java | 313 ------------------ 3 files changed, 49 insertions(+), 404 deletions(-) delete mode 100644 source/net/yacy/cora/federate/solr/connector/CachedSolrConnector.java diff --git a/htroot/PerformanceMemory_p.html b/htroot/PerformanceMemory_p.html index 43f150785..1f655361b 100644 --- a/htroot/PerformanceMemory_p.html +++ b/htroot/PerformanceMemory_p.html @@ -158,6 +158,7 @@ + + Flushes #{ObjectList}# @@ -206,13 +207,13 @@ #[objectMissCacheWriteUnique]# #[objectMissCacheWriteDouble]# #[objectMissCacheDeletes]# - + #[objectMissCacheFlushes]# #{/ObjectList}# Total Mem: #[objectHitCacheTotalMem]# MB (hit), #[objectMissCacheTotalMem]# MB (miss); Stop Grow when less than #[objectCacheStopGrow]# MB available left; Start Shrink when less than #[objectCacheStartShrink]# MB availabe left - + -->

Other Caching Structures:

@@ -225,32 +226,6 @@ Insert Delete - DNSCache/Hit #[namecacheHit.size]# diff --git a/htroot/PerformanceMemory_p.java b/htroot/PerformanceMemory_p.java index 7558fd2f5..50535d2ea 100644 --- a/htroot/PerformanceMemory_p.java +++ b/htroot/PerformanceMemory_p.java @@ -36,7 +36,6 @@ import org.apache.solr.search.SolrCache; import net.yacy.cora.protocol.Domains; import net.yacy.cora.protocol.RequestHeader; import net.yacy.cora.util.ConcurrentLog; -import net.yacy.kelondro.index.Cache; import net.yacy.kelondro.index.RAMIndex; import net.yacy.kelondro.table.Table; import net.yacy.kelondro.util.Formatter; @@ -183,67 +182,51 @@ public class PerformanceMemory_p { prop.put("indexcache", c); prop.putNum("indexcacheTotalMem", totalhitmem / (1024d * 1024d)); - // write object cache table - i = Cache.filenames(); - c = 0; - long missmem, totalmissmem = 0; - totalhitmem = 0; - Map mapy; - while (i.hasNext()) { - filename = i.next(); - mapy = Cache.memoryStats(filename); - prop.put("ObjectList_" + c + "_objectCachePath", ((p = filename.indexOf("DATA",0)) < 0) ? filename : filename.substring(p)); - - // hit cache - hitmem = Long.parseLong(mapy.get(Cache.StatKeys.objectHitMem)); - totalhitmem += hitmem; - prop.put("ObjectList_" + c + "_objectHitChunkSize", mapy.get(Cache.StatKeys.objectHitChunkSize)); - prop.putNum("ObjectList_" + c + "_objectHitCacheCount", mapy.get(Cache.StatKeys.objectHitCacheCount)); - prop.put("ObjectList_" + c + "_objectHitCacheMem", Formatter.bytesToString(hitmem)); - prop.putNum("ObjectList_" + c + "_objectHitCacheReadHit", mapy.get(Cache.StatKeys.objectHitCacheReadHit)); - prop.putNum("ObjectList_" + c + "_objectHitCacheReadMiss", mapy.get(Cache.StatKeys.objectHitCacheReadMiss)); - prop.putNum("ObjectList_" + c + "_objectHitCacheWriteUnique", mapy.get(Cache.StatKeys.objectHitCacheWriteUnique)); - prop.putNum("ObjectList_" + c + "_objectHitCacheWriteDouble", mapy.get(Cache.StatKeys.objectHitCacheWriteDouble)); - prop.putNum("ObjectList_" + c + "_objectHitCacheDeletes", mapy.get(Cache.StatKeys.objectHitCacheDeletes)); - prop.putNum("ObjectList_" + c + "_objectHitCacheFlushes", mapy.get(Cache.StatKeys.objectHitCacheFlushes)); - - // miss cache - missmem = Long.parseLong(mapy.get(Cache.StatKeys.objectMissMem)); - totalmissmem += missmem; - prop.put("ObjectList_" + c + "_objectMissChunkSize", mapy.get(Cache.StatKeys.objectMissChunkSize)); - prop.putNum("ObjectList_" + c + "_objectMissCacheCount", mapy.get(Cache.StatKeys.objectMissCacheCount)); - prop.putHTML("ObjectList_" + c + "_objectMissCacheMem", Formatter.bytesToString(missmem)); - prop.putNum("ObjectList_" + c + "_objectMissCacheReadHit", mapy.get(Cache.StatKeys.objectMissCacheReadHit)); - prop.putNum("ObjectList_" + c + "_objectMissCacheReadMiss", mapy.get(Cache.StatKeys.objectMissCacheReadMiss)); - prop.putNum("ObjectList_" + c + "_objectMissCacheWriteUnique", mapy.get(Cache.StatKeys.objectMissCacheWriteUnique)); - prop.putNum("ObjectList_" + c + "_objectMissCacheWriteDouble", mapy.get(Cache.StatKeys.objectMissCacheWriteDouble)); - prop.putNum("ObjectList_" + c + "_objectMissCacheDeletes", mapy.get(Cache.StatKeys.objectMissCacheDeletes)); - //prop.put("ObjectList_" + c + "_objectMissCacheFlushes", mapy.get(Cache.StatKeys.objectMissCacheFlushes)); - - c++; - } - prop.put("ObjectList", c); - prop.putNum("objectCacheStopGrow", Cache.getMemStopGrow() / (1024d * 1024d)); - prop.putNum("objectCacheStartShrink", Cache.getMemStartShrink() / (1024d * 1024d)); - prop.putNum("objectHitCacheTotalMem", totalhitmem / (1024d * 1024d)); - prop.putNum("objectMissCacheTotalMem", totalmissmem / (1024d * 1024d)); - - // other caching structures -// final CachedSolrConnector solr = (CachedSolrConnector) Switchboard.getSwitchboard().index.fulltext().getDefaultConnector(); -// prop.putNum("solrcacheHit.size", solr.nameCacheHitSize()); -// prop.putNum("solrcacheHit.Hit", solr.hitCache_Hit); -// prop.putNum("solrcacheHit.Miss", solr.hitCache_Miss); -// prop.putNum("solrcacheHit.Insert", solr.hitCache_Insert); -// -// prop.putNum("solrcacheMiss.size", solr.nameCacheMissSize()); -// prop.putNum("solrcacheMiss.Hit", solr.missCache_Hit); -// prop.putNum("solrcacheMiss.Miss", solr.missCache_Miss); -// prop.putNum("solrcacheMiss.Insert", solr.missCache_Insert); -// -// prop.putNum("solrcacheDocument.size", solr.nameCacheDocumentSize()); -// prop.putNum("solrcacheDocument.Hit", solr.documentCache_Hit); -// prop.putNum("solrcacheDocument.Miss", solr.documentCache_Miss); -// prop.putNum("solrcacheDocument.Insert", solr.documentCache_Insert); +// this cache table wasn't used for years +// // write object cache table +// i = Cache.filenames(); +// c = 0; +// long missmem, totalmissmem = 0; +// totalhitmem = 0; +// Map mapy; +// while (i.hasNext()) { +// filename = i.next(); +// mapy = Cache.memoryStats(filename); +// prop.put("ObjectList_" + c + "_objectCachePath", ((p = filename.indexOf("DATA",0)) < 0) ? filename : filename.substring(p)); +// +// // hit cache +// hitmem = Long.parseLong(mapy.get(Cache.StatKeys.objectHitMem)); +// totalhitmem += hitmem; +// prop.put("ObjectList_" + c + "_objectHitChunkSize", mapy.get(Cache.StatKeys.objectHitChunkSize)); +// prop.putNum("ObjectList_" + c + "_objectHitCacheCount", mapy.get(Cache.StatKeys.objectHitCacheCount)); +// prop.put("ObjectList_" + c + "_objectHitCacheMem", Formatter.bytesToString(hitmem)); +// prop.putNum("ObjectList_" + c + "_objectHitCacheReadHit", mapy.get(Cache.StatKeys.objectHitCacheReadHit)); +// prop.putNum("ObjectList_" + c + "_objectHitCacheReadMiss", mapy.get(Cache.StatKeys.objectHitCacheReadMiss)); +// prop.putNum("ObjectList_" + c + "_objectHitCacheWriteUnique", mapy.get(Cache.StatKeys.objectHitCacheWriteUnique)); +// prop.putNum("ObjectList_" + c + "_objectHitCacheWriteDouble", mapy.get(Cache.StatKeys.objectHitCacheWriteDouble)); +// prop.putNum("ObjectList_" + c + "_objectHitCacheDeletes", mapy.get(Cache.StatKeys.objectHitCacheDeletes)); +// prop.putNum("ObjectList_" + c + "_objectHitCacheFlushes", mapy.get(Cache.StatKeys.objectHitCacheFlushes)); +// +// // miss cache +// missmem = Long.parseLong(mapy.get(Cache.StatKeys.objectMissMem)); +// totalmissmem += missmem; +// prop.put("ObjectList_" + c + "_objectMissChunkSize", mapy.get(Cache.StatKeys.objectMissChunkSize)); +// prop.putNum("ObjectList_" + c + "_objectMissCacheCount", mapy.get(Cache.StatKeys.objectMissCacheCount)); +// prop.putHTML("ObjectList_" + c + "_objectMissCacheMem", Formatter.bytesToString(missmem)); +// prop.putNum("ObjectList_" + c + "_objectMissCacheReadHit", mapy.get(Cache.StatKeys.objectMissCacheReadHit)); +// prop.putNum("ObjectList_" + c + "_objectMissCacheReadMiss", mapy.get(Cache.StatKeys.objectMissCacheReadMiss)); +// prop.putNum("ObjectList_" + c + "_objectMissCacheWriteUnique", mapy.get(Cache.StatKeys.objectMissCacheWriteUnique)); +// prop.putNum("ObjectList_" + c + "_objectMissCacheWriteDouble", mapy.get(Cache.StatKeys.objectMissCacheWriteDouble)); +// prop.putNum("ObjectList_" + c + "_objectMissCacheDeletes", mapy.get(Cache.StatKeys.objectMissCacheDeletes)); +// //prop.put("ObjectList_" + c + "_objectMissCacheFlushes", mapy.get(Cache.StatKeys.objectMissCacheFlushes)); +// +// c++; +// } +// prop.put("ObjectList", c); +// prop.putNum("objectCacheStopGrow", Cache.getMemStopGrow() / (1024d * 1024d)); +// prop.putNum("objectCacheStartShrink", Cache.getMemStartShrink() / (1024d * 1024d)); +// prop.putNum("objectHitCacheTotalMem", totalhitmem / (1024d * 1024d)); +// prop.putNum("objectMissCacheTotalMem", totalmissmem / (1024d * 1024d)); prop.putNum("namecacheHit.size", Domains.nameCacheHitSize()); prop.putNum("namecacheHit.Hit", Domains.cacheHit_Hit); diff --git a/source/net/yacy/cora/federate/solr/connector/CachedSolrConnector.java b/source/net/yacy/cora/federate/solr/connector/CachedSolrConnector.java deleted file mode 100644 index 4036876d2..000000000 --- a/source/net/yacy/cora/federate/solr/connector/CachedSolrConnector.java +++ /dev/null @@ -1,313 +0,0 @@ -/** - * CachedSolrConnector - * Copyright 2013 by Michael Peter Christen - * First released 18.02.2013 at http://yacy.net - * - * This library 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 2.1 of the License, or (at your option) any later version. - * - * This library 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 this program in the file lgpl21.txt - * If not, see . - */ - -package net.yacy.cora.federate.solr.connector; - -import java.io.IOException; -import java.util.Collection; -import java.util.LinkedHashMap; - -import net.yacy.cora.sorting.ReversibleScoreMap; -import net.yacy.cora.storage.ARC; -import net.yacy.cora.storage.ConcurrentARC; -import net.yacy.kelondro.data.word.Word; -import net.yacy.kelondro.util.MemoryControl; -import net.yacy.search.schema.CollectionSchema; - -import org.apache.solr.client.solrj.response.QueryResponse; -import org.apache.solr.client.solrj.util.ClientUtils; -import org.apache.solr.common.SolrDocument; -import org.apache.solr.common.SolrDocumentList; -import org.apache.solr.common.SolrException; -import org.apache.solr.common.SolrInputDocument; -import org.apache.solr.common.params.ModifiableSolrParams; - -public class CachedSolrConnector extends AbstractSolrConnector implements SolrConnector { - - private final static Object EXIST = new Object(); - - private SolrConnector solr; - private final ARC documentCache; - public final ARC hitCache, missCache; - public long documentCache_Hit = 0, documentCache_Miss = 0, documentCache_Insert = 0; // for statistics only; do not write - public long hitCache_Hit = 0, hitCache_Miss = 0, hitCache_Insert = 0; // for statistics only; do not write - public long missCache_Hit = 0, missCache_Miss = 0, missCache_Insert = 0; // for statistics only; do not write - - private static final String idQuery(String id) { - return CollectionSchema.id.getSolrFieldName() + ":\"" + id + "\""; - } - - public CachedSolrConnector(SolrConnector c, int hitCacheMax, int missCacheMax, int docCacheMax) { - this.solr = c; - int partitions = Runtime.getRuntime().availableProcessors() * 2; - this.documentCache = new ConcurrentARC(docCacheMax, partitions); - this.hitCache = new ConcurrentARC(hitCacheMax, partitions); - this.missCache = new ConcurrentARC(missCacheMax, partitions); - } - - @Override - public int bufferSize() { - return solr.bufferSize(); - } - - @Override - public void clearCaches() { - this.hitCache.clear(); - this.missCache.clear(); - this.documentCache.clear(); - if (this.solr != null) this.solr.commit(true); - } - - @Override - public boolean isClosed() { - return this.solr == null || this.solr.isClosed(); - } - - @Override - protected void finalize() throws Throwable { - this.close(); - } - - @Override - public synchronized void close() { - this.clearCaches(); - if (this.solr != null) this.solr.close(); - this.solr = null; - } - - /** - * delete everything in the solr index - * @throws IOException - */ - @Override - public void clear() throws IOException { - this.clearCaches(); - if (this.solr != null) this.solr.clear(); - } - - /** - * delete an entry from solr - * @param id the url hash of the entry - * @throws IOException - */ - @Override - public void deleteById(final String id) throws IOException { - String q = idQuery(id); - this.documentCache.remove(q); - this.hitCache.remove(q); - this.missCache.put(q, EXIST); - this.missCache_Insert++; - if (this.solr != null) this.solr.deleteByQuery(q); - } - - /** - * delete a set of entries from solr; entries are identified by their url hash - * @param ids a list of url hashes - * @throws IOException - */ - @Override - public void deleteByIds(final Collection ids) throws IOException { - for (String id: ids) { - String q = idQuery(id); - this.documentCache.remove(q); - this.hitCache.remove(q); - this.missCache.put(q, EXIST); - this.missCache_Insert++; - } - if (this.solr != null) this.solr.deleteByIds(ids); - } - - @Override - public void deleteByQuery(final String querystring) throws IOException { - this.clearCaches(); - this.solr.deleteByQuery(querystring); - } - - @Override - public SolrDocument getDocumentById(final String id, final String ... fields) throws IOException { - assert id.length() == Word.commonHashLength : "wrong id: " + id; - String q = idQuery(id); - SolrDocument doc = fields.length == 0 ? this.documentCache.get(q) : null; - if (doc != null) { - this.documentCache_Hit++; - return doc; - } - documentCache_Miss++; - if (this.missCache.containsKey(q)) { - this.missCache_Hit++; - return null; - } - this.missCache_Miss++; - if (solr != null && ((doc = solr.getDocumentById(id, fields)) != null)) { - addToCache(doc, fields.length == 0); - return doc; - } - // check if there is a autocommit problem - if (this.hitCache.containsKey(q)) { - // the document should be there, therefore make a commit and check again - if (solr != null && ((doc = solr.getDocumentById(id, fields)) != null)) { - addToCache(doc, fields.length == 0); - } - } - this.missCache.put(q, EXIST); - this.missCache_Insert++; - return null; - } - - /** - * add a Solr document - * @param solrdoc - * @throws IOException - */ - @Override - public void add(final SolrInputDocument solrdoc) throws IOException { - String id = (String) solrdoc.getFieldValue(CollectionSchema.id.getSolrFieldName()); - assert id != null; - if (id == null) return; - String q = idQuery(id); - SolrDocument doc = ClientUtils.toSolrDocument(solrdoc); - addToCache(doc, true); - this.documentCache.put(q, doc); - this.documentCache_Insert++; - if (this.solr != null) this.solr.add(solrdoc); - } - - @Override - public void add(final Collection solrdocs) throws IOException, SolrException { - for (SolrInputDocument solrdoc: solrdocs) { - String id = (String) solrdoc.getFieldValue(CollectionSchema.id.getSolrFieldName()); - assert id != null; - if (id == null) continue; - String q = idQuery(id); - SolrDocument doc = ClientUtils.toSolrDocument(solrdoc); - addToCache(doc, true); - this.documentCache.put(q, doc); - this.documentCache_Insert++; - } - if (this.solr != null) this.solr.add(solrdocs); - } - - /** - * get a query result from solr - * to get all results set the query String to "*:*" - * @param querystring - * @throws IOException - */ - @Override - public SolrDocumentList getDocumentListByQuery(final String querystring, final String sort, final int offset, final int count, final String ... fields) throws IOException { - if (offset == 0 && count == 1 && querystring.startsWith("id:") && - ((querystring.length() == 17 && querystring.charAt(3) == '"' && querystring.charAt(16) == '"') || - querystring.length() == 15)) { - final SolrDocumentList list = new SolrDocumentList(); - SolrDocument doc = getDocumentById(querystring.charAt(3) == '"' ? querystring.substring(4, querystring.length() - 1) : querystring.substring(3), fields); - list.add(doc); - // no addToCache(list) here because that was already handlet in get(); - return list; - } - if (this.solr != null) { - SolrDocumentList list = this.solr.getDocumentListByQuery(querystring, sort, offset, count, fields); - addToCache(list, fields.length == 0); - return list; - } - - // combine both lists - SolrDocumentList list; - list = this.solr.getDocumentListByQuery(querystring, sort, offset, count, fields); - - // add caching - addToCache(list, fields.length == 0); - return list; - } - - @Override - public QueryResponse getResponseByParams(ModifiableSolrParams query) throws IOException, SolrException { - QueryResponse list = this.solr.getResponseByParams(query); - return list; - } - - @Override - public SolrDocumentList getDocumentListByParams(ModifiableSolrParams params) throws IOException, SolrException { - SolrDocumentList sdl = this.solr.getDocumentListByParams(params); - return sdl; - } - - @Override - public long getCountByQuery(final String querystring) throws IOException { - return this.solr.getCountByQuery(querystring); - } - - @Override - public LinkedHashMap> getFacets(final String query, final int maxresults, final String ... fields) throws IOException { - return this.solr.getFacets(query, maxresults, fields); - } - - private void addToCache(SolrDocumentList list, boolean doccache) { - if (MemoryControl.shortStatus()) clearCaches(); - for (final SolrDocument solrdoc: list) { - addToCache(solrdoc, doccache); - } - } - - private void addToCache(SolrDocument doc, boolean doccach) { - String id = (String) doc.getFieldValue(CollectionSchema.id.getSolrFieldName()); - String q = idQuery(id); - this.missCache.remove(q); - this.hitCache.put(q, EXIST); - this.hitCache_Insert++; - if (doccach) { - this.documentCache.put(q, doc); - this.documentCache_Insert++; - } - } - - @Override - public long getSize() { - long s = this.solr.getSize(); - return Math.max(this.documentCache.size(), Math.max(this.hitCache.size(), s)); // this might be incorrect if there are other requests than "id:.." in the cache - } - - public int nameCacheHitSize() { - return this.hitCache.size(); - } - - public int nameCacheMissSize() { - return this.missCache.size(); - } - - public int nameCacheDocumentSize() { - return this.documentCache.size(); - } - - @Override - public void commit(boolean softCommit) { - this.solr.commit(softCommit); - } - - @Override - public void optimize(int maxSegments) { - this.solr.optimize(maxSegments); - } - - @Override - public int getSegmentCount() { - return this.solr.getSegmentCount(); - } - -} \ No newline at end of file From 288acceac3dd9e40a49f058c48c592d1ab21404d Mon Sep 17 00:00:00 2001 From: reger Date: Tue, 15 Dec 2015 02:09:43 +0100 Subject: [PATCH 05/32] fix test htmlParserTest, charset parameter + upd maven templating-plugin version --- pom.xml | 2 +- test/net/yacy/document/parser/htmlParserTest.java | 8 ++++---- 2 files changed, 5 insertions(+), 5 deletions(-) diff --git a/pom.xml b/pom.xml index 776e920a3..26ac66275 100644 --- a/pom.xml +++ b/pom.xml @@ -213,7 +213,7 @@ org.codehaus.mojo templating-maven-plugin - 1.0-alpha-3 + 1.0.0 filter-src diff --git a/test/net/yacy/document/parser/htmlParserTest.java b/test/net/yacy/document/parser/htmlParserTest.java index 2d7ad5b73..d18a38c99 100644 --- a/test/net/yacy/document/parser/htmlParserTest.java +++ b/test/net/yacy/document/parser/htmlParserTest.java @@ -93,7 +93,7 @@ public class htmlParserTest extends TestCase { // test link with inline html in text // expectation to deliver pure text as it is possibly indexed in outboundlinks_anchortext_txt/inboundlinks_anchortext_txt final AnchorURL url = new AnchorURL("http://localhost/"); - final String mimetype = "text/html"; + final String charset = "UTF-8"; final String testhtml = "" + "testtext" // "testtext" + " Start" // "Start" @@ -101,7 +101,7 @@ public class htmlParserTest extends TestCase { + "
\"image" // + img width 550 (+html5 figure) + ""; - ContentScraper scraper = parseToScraper(url, mimetype, new VocabularyScraper(), 0, testhtml, 10); + ContentScraper scraper = parseToScraper(url, charset, new VocabularyScraper(), 0, testhtml, 10); List anchorlist = scraper.getAnchors(); String linktxt = anchorlist.get(0).getTextProperty(); @@ -126,7 +126,7 @@ public class htmlParserTest extends TestCase { @Test public void testParseToScraper_TagTest() throws Exception { final AnchorURL url = new AnchorURL("http://localhost/"); - final String mimetype = "text/html"; + final String charset = "UTF-8"; final String textSource = "test text"; final String testhtml = "" + "" @@ -134,7 +134,7 @@ public class htmlParserTest extends TestCase { + "

" + textSource + "

" + ""; - ContentScraper scraper = parseToScraper(url, mimetype, new VocabularyScraper(), 0, testhtml, 10); + ContentScraper scraper = parseToScraper(url, charset, new VocabularyScraper(), 0, testhtml, 10); String txt = scraper.getText(); System.out.println("ScraperTagTest: [" + textSource + "] = [" + txt + "]"); From 4d2b934487fc5a35465ad0286cb2b20302167e10 Mon Sep 17 00:00:00 2001 From: reger Date: Wed, 16 Dec 2015 03:01:17 +0100 Subject: [PATCH 06/32] prevent mailto links getting into parser result document's in/outbound link collection by checking mailto scheme early. - fix upper case mailto protocol assignment - add test case for getProtocol --- .../cora/document/id/MultiProtocolURL.java | 2 +- source/net/yacy/document/Document.java | 50 ++++++++++--------- .../document/id/MultiProtocolURLTest.java | 22 ++++++++ 3 files changed, 50 insertions(+), 24 deletions(-) diff --git a/source/net/yacy/cora/document/id/MultiProtocolURL.java b/source/net/yacy/cora/document/id/MultiProtocolURL.java index a35888020..b39cca1b4 100644 --- a/source/net/yacy/cora/document/id/MultiProtocolURL.java +++ b/source/net/yacy/cora/document/id/MultiProtocolURL.java @@ -204,7 +204,7 @@ public class MultiProtocolURL implements Serializable, Comparable 7 && url.substring(0,7).equalsIgnoreCase("mailto:")) { p = 6; } else { url = "http://" + url; diff --git a/source/net/yacy/document/Document.java b/source/net/yacy/document/Document.java index 54dcf21c3..62f518d74 100644 --- a/source/net/yacy/document/Document.java +++ b/source/net/yacy/document/Document.java @@ -491,6 +491,9 @@ dc_rights return this.lat; } + /** + * sorts all links (anchors) into individual collections + */ private void resortLinks() { if (this.resorted) return; synchronized (this) { @@ -513,6 +516,14 @@ dc_rights } for (final AnchorURL url: this.anchors) { if (url == null) continue; + u = url.toNormalform(true); + final String name = url.getNameProperty(); + // check mailto scheme first (not suppose to get into in/outboundlinks or hyperlinks -> crawler can't process) + if (url.getProtocol().equals("mailto")) { + this.emaillinks.put(u.substring(7), name); // TODO: check why key as string instead of Disgest/AnchorURL + continue; + } + final boolean noindex = url.getRelProperty().toLowerCase().indexOf("noindex",0) >= 0; final boolean nofollow = url.getRelProperty().toLowerCase().indexOf("nofollow",0) >= 0; if ((thishost == null && url.getHost() == null) || @@ -523,31 +534,24 @@ dc_rights } else { this.outboundlinks.put(url, "anchor" + (noindex ? " noindex" : "") + (nofollow ? " nofollow" : "")); } - u = url.toNormalform(true); - final String name = url.getNameProperty(); - if (u.startsWith("mailto:")) { - this.emaillinks.put(u.substring(7), name); - } else { - extpos = u.lastIndexOf('.'); - if (extpos > 0) { - if (((qpos = u.indexOf('?')) >= 0) && (qpos > extpos)) { - ext = u.substring(extpos + 1, qpos).toLowerCase(); - } else { - ext = u.substring(extpos + 1).toLowerCase(); - } - if (Classification.isMediaExtension(ext)) { - // this is not a normal anchor, its a media link - if (Classification.isImageExtension(ext)) { - collectedImages.put(url, new ImageEntry(url, name, -1, -1, -1)); - } - else if (Classification.isAudioExtension(ext)) this.audiolinks.put(url, name); - else if (Classification.isVideoExtension(ext)) this.videolinks.put(url, name); - else if (Classification.isApplicationExtension(ext)) this.applinks.put(url, name); - } + extpos = u.lastIndexOf('.'); + if (extpos > 0) { + if (((qpos = u.indexOf('?')) >= 0) && (qpos > extpos)) { + ext = u.substring(extpos + 1, qpos).toLowerCase(); + } else { + ext = u.substring(extpos + 1).toLowerCase(); + } + if (Classification.isMediaExtension(ext)) { + // this is not a normal anchor, its a media link + if (Classification.isImageExtension(ext)) { // TODO: guess on a-tag href extension (may not be correct) + collectedImages.put(url, new ImageEntry(url, name, -1, -1, -1)); + } else if (Classification.isAudioExtension(ext)) this.audiolinks.put(url, name); + else if (Classification.isVideoExtension(ext)) this.videolinks.put(url, name); + else if (Classification.isApplicationExtension(ext)) this.applinks.put(url, name); } - // in any case we consider this as a link and let the parser decide if that link can be followed - this.hyperlinks.put(url, name); } + // in any case we consider this as a link and let the parser decide if that link can be followed + this.hyperlinks.put(url, name); } // add image links that we collected from the anchors to the image map diff --git a/test/net/yacy/cora/document/id/MultiProtocolURLTest.java b/test/net/yacy/cora/document/id/MultiProtocolURLTest.java index 94d0d9118..b3c3abf14 100644 --- a/test/net/yacy/cora/document/id/MultiProtocolURLTest.java +++ b/test/net/yacy/cora/document/id/MultiProtocolURLTest.java @@ -144,6 +144,28 @@ public class MultiProtocolURLTest { } } + /** + * Test getProtocol() + */ + @Test + public void testGetProtocol() throws MalformedURLException { + Map testurls = new HashMap(); + // ( 1. parameter = urlstring to test, 2. parameter = expected protocol) + testurls.put("http://host.com", "http"); + testurls.put("HTTPS://host.com", "https"); + testurls.put("Ftp://host.com", "ftp"); + testurls.put("SMB://host.com", "smb"); + testurls.put("/file.com", "file"); + testurls.put("file://host.com/file.com", "file"); + testurls.put("MailTo:Abc@host.com", "mailto"); + + for (String txt : testurls.keySet()) { + MultiProtocolURL url = new MultiProtocolURL(txt); + assertEquals("test " + txt, url.getProtocol(), testurls.get(txt)); + + } + } + /** * Test of toNormalform method, of class MultiProtocolURL. */ From 14803d58cd8e2b23be370668323bd5263d734a91 Mon Sep 17 00:00:00 2001 From: reger Date: Thu, 17 Dec 2015 00:36:08 +0100 Subject: [PATCH 07/32] let html scraper accept html5 for favicon links --- source/net/yacy/document/parser/html/ContentScraper.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/source/net/yacy/document/parser/html/ContentScraper.java b/source/net/yacy/document/parser/html/ContentScraper.java index 6bd73f704..30310e017 100644 --- a/source/net/yacy/document/parser/html/ContentScraper.java +++ b/source/net/yacy/document/parser/html/ContentScraper.java @@ -475,7 +475,7 @@ public class ContentScraper extends AbstractScraper implements Scraper { final String type = tag.opts.getProperty("type", EMPTY_STRING); final String hreflang = tag.opts.getProperty("hreflang", EMPTY_STRING); - if (rel.equalsIgnoreCase("shortcut icon")) { + if (rel.equalsIgnoreCase("shortcut icon") || rel.equalsIgnoreCase("icon")) { // html5 -> rel="icon") final ImageEntry ie = new ImageEntry(newLink, linktitle, -1, -1, -1); this.images.add(ie); this.favicon = newLink; From 6b7c10cef83a6055fa23150cb37e536630402436 Mon Sep 17 00:00:00 2001 From: reger Date: Thu, 17 Dec 2015 02:53:10 +0100 Subject: [PATCH 08/32] fix dc:date in mediawikiimporter/document.writexml to use lastmodified --- source/net/yacy/document/Document.java | 6 +++--- source/net/yacy/document/content/DCEntry.java | 2 +- source/net/yacy/document/importer/MediawikiImporter.java | 4 ++-- 3 files changed, 6 insertions(+), 6 deletions(-) diff --git a/source/net/yacy/document/Document.java b/source/net/yacy/document/Document.java index 62f518d74..57c58ee37 100644 --- a/source/net/yacy/document/Document.java +++ b/source/net/yacy/document/Document.java @@ -765,7 +765,7 @@ dc_rights return this.crawldepth; } - public void writeXML(final Writer os, final Date date) throws IOException { + public void writeXML(final Writer os) throws IOException { os.write("\n"); final String title = dc_title(); if (title != null && title.length() > 0) os.write("\n"); @@ -783,7 +783,7 @@ dc_rights } final String language = dc_language(); if (language != null && language.length() > 0) os.write("" + dc_language() + "\n"); - os.write("" + ISO8601Formatter.FORMATTER.format(date) + "\n"); + os.write("" + ISO8601Formatter.FORMATTER.format(getLastModified()) + "\n"); if (this.lon != 0.0 && this.lat != 0.0) os.write("" + this.lon +"" + this.lat + "\n"); os.write("\n"); } @@ -793,7 +793,7 @@ dc_rights final ByteArrayOutputStream baos = new ByteArrayOutputStream(); try { final Writer osw = new OutputStreamWriter(baos, "UTF-8"); - writeXML(osw, this.lastModified); + writeXML(osw); osw.close(); return UTF8.String(baos.toByteArray()); } catch (final UnsupportedEncodingException e1) { diff --git a/source/net/yacy/document/content/DCEntry.java b/source/net/yacy/document/content/DCEntry.java index 153900b4e..cc90196dc 100644 --- a/source/net/yacy/document/content/DCEntry.java +++ b/source/net/yacy/document/content/DCEntry.java @@ -353,7 +353,7 @@ public class DCEntry extends MultiMapSolrParams { public void writeXML(OutputStreamWriter os) throws IOException { Document doc = document(); if (doc != null) { - doc.writeXML(os, this.getDate()); + doc.writeXML(os); } } } diff --git a/source/net/yacy/document/importer/MediawikiImporter.java b/source/net/yacy/document/importer/MediawikiImporter.java index ba349c2bb..3a0b0c81c 100644 --- a/source/net/yacy/document/importer/MediawikiImporter.java +++ b/source/net/yacy/document/importer/MediawikiImporter.java @@ -523,7 +523,7 @@ public class MediawikiImporter extends Thread implements Importer { } } public void writeXML(final OutputStreamWriter os) throws IOException { - this.document.writeXML(os, new Date()); + this.document.writeXML(os); } } @@ -710,7 +710,7 @@ public class MediawikiImporter extends Thread implements Importer { this.osw.write("\n" + SurrogateReader.SURROGATES_MAIN_ELEMENT_OPEN + "\n"); } ConcurrentLog.info("WIKITRANSLATION", "[CONSUME] Title: " + record.title); - record.document.writeXML(this.osw, new Date()); + record.document.writeXML(this.osw); this.rc++; if (this.rc >= 10000) { this.osw.write("\n"); From 71c416f383368836584de67c65785a0ab3a5eec8 Mon Sep 17 00:00:00 2001 From: reger Date: Fri, 18 Dec 2015 01:11:55 +0100 Subject: [PATCH 09/32] show mailto links in ViewFile.html linklist --- htroot/ViewFile.java | 19 +++++++++++++++++++ .../net/yacy/cora/document/id/AnchorURL.java | 4 ++-- .../cora/document/id/MultiProtocolURL.java | 2 +- 3 files changed, 22 insertions(+), 3 deletions(-) diff --git a/htroot/ViewFile.java b/htroot/ViewFile.java index 3f231b2ae..237ad8d86 100644 --- a/htroot/ViewFile.java +++ b/htroot/ViewFile.java @@ -34,6 +34,7 @@ import java.util.Collection; import java.util.Date; import java.util.Iterator; import java.util.Map; +import java.util.Map.Entry; import net.yacy.cora.document.encoding.ASCII; import net.yacy.cora.document.encoding.UTF8; @@ -325,6 +326,24 @@ public class ViewFile { prop.put("viewMode", VIEW_MODE_AS_LINKLIST); boolean dark = true; int i = 0; + + if (document.getEmaillinks() != null) { + Iterator> emailit = document.getEmaillinks().entrySet().iterator(); + while (emailit.hasNext()) { + Entry eentry = emailit.next(); + prop.put("viewMode_links_" + i + "_nr", i); + prop.put("viewMode_links_" + i + "_dark", dark ? "1" : "0"); + prop.put("viewMode_links_" + i + "_type", "email"); + prop.put("viewMode_links_" + i + "_text", (eentry.getValue().isEmpty()) ? " " : eentry.getValue()); + prop.put("viewMode_links_" + i + "_url", "#"); + prop.put("viewMode_links_" + i + "_link", eentry.getKey()); + prop.put("viewMode_links_" + i + "_rel", ""); + prop.put("viewMode_links_" + i + "_name", ""); + dark = !dark; + i++; + } + } + i += putMediaInfo(prop, wordArray, i, document.getVideolinks(), "video", (i % 2 == 0)); i += putMediaInfo(prop, wordArray, i, document.getAudiolinks(), "audio", (i % 2 == 0)); dark = (i % 2 == 0); diff --git a/source/net/yacy/cora/document/id/AnchorURL.java b/source/net/yacy/cora/document/id/AnchorURL.java index 50da8269c..c39a37fe8 100644 --- a/source/net/yacy/cora/document/id/AnchorURL.java +++ b/source/net/yacy/cora/document/id/AnchorURL.java @@ -102,8 +102,8 @@ public class AnchorURL extends DigestURL { isHTTPS(relPath) || isFTP(relPath) || isFile(relPath) || - isSMB(relPath)/*|| - relPath.contains(":") && patternMail.matcher(relPath.toLowerCase()).find()*/) { + isSMB(relPath) || + relPath.startsWith("mailto:")) { return new AnchorURL(relPath); } return new AnchorURL(baseURL, relPath); diff --git a/source/net/yacy/cora/document/id/MultiProtocolURL.java b/source/net/yacy/cora/document/id/MultiProtocolURL.java index b39cca1b4..42a068781 100644 --- a/source/net/yacy/cora/document/id/MultiProtocolURL.java +++ b/source/net/yacy/cora/document/id/MultiProtocolURL.java @@ -258,7 +258,7 @@ public class MultiProtocolURL implements Serializable, Comparable Date: Fri, 18 Dec 2015 02:35:44 +0100 Subject: [PATCH 10/32] fix (todo) remove redundant holding of email link nameproperty in parser document --- htroot/ViewFile.java | 10 +++++----- source/net/yacy/document/Document.java | 13 ++++++++----- 2 files changed, 13 insertions(+), 10 deletions(-) diff --git a/htroot/ViewFile.java b/htroot/ViewFile.java index 237ad8d86..54e1bb1f3 100644 --- a/htroot/ViewFile.java +++ b/htroot/ViewFile.java @@ -328,17 +328,17 @@ public class ViewFile { int i = 0; if (document.getEmaillinks() != null) { - Iterator> emailit = document.getEmaillinks().entrySet().iterator(); + Iterator emailit = document.getEmaillinks().iterator(); while (emailit.hasNext()) { - Entry eentry = emailit.next(); + AnchorURL eentry = emailit.next(); prop.put("viewMode_links_" + i + "_nr", i); prop.put("viewMode_links_" + i + "_dark", dark ? "1" : "0"); prop.put("viewMode_links_" + i + "_type", "email"); - prop.put("viewMode_links_" + i + "_text", (eentry.getValue().isEmpty()) ? " " : eentry.getValue()); + prop.put("viewMode_links_" + i + "_text", (eentry.getTextProperty().isEmpty()) ? " " : eentry.getTextProperty()); prop.put("viewMode_links_" + i + "_url", "#"); - prop.put("viewMode_links_" + i + "_link", eentry.getKey()); + prop.put("viewMode_links_" + i + "_link", eentry.toNormalform(true)); prop.put("viewMode_links_" + i + "_rel", ""); - prop.put("viewMode_links_" + i + "_name", ""); + prop.put("viewMode_links_" + i + "_name", eentry.getNameProperty()); dark = !dark; i++; } diff --git a/source/net/yacy/document/Document.java b/source/net/yacy/document/Document.java index 57c58ee37..d58a2bca5 100644 --- a/source/net/yacy/document/Document.java +++ b/source/net/yacy/document/Document.java @@ -83,9 +83,9 @@ public class Document { // the anchors and images - Maps are URL-to-EntityDescription mappings. // The EntityDescription appear either as visible text in anchors or as alternative // text in image tags. - private LinkedHashMap audiolinks, videolinks, applinks, hyperlinks; + private LinkedHashMap audiolinks, videolinks, applinks, hyperlinks; // TODO: check if redundant value (set to key.getNameProperty()) is needed private LinkedHashMap inboundlinks, outboundlinks; - private Map emaillinks; + private Set emaillinks; // mailto: links private MultiProtocolURL favicon; private boolean resorted; private final Set languages; @@ -473,7 +473,10 @@ dc_rights return this.applinks; } - public Map getEmaillinks() { + /** + * @return mailto links + */ + public Set getEmaillinks() { // this is part of the getAnchor-set: only links to email addresses if (!this.resorted) resortLinks(); return this.emaillinks; @@ -509,7 +512,7 @@ dc_rights this.videolinks = new LinkedHashMap(); this.audiolinks = new LinkedHashMap(); this.applinks = new LinkedHashMap(); - this.emaillinks = new LinkedHashMap(); + this.emaillinks = new LinkedHashSet(); final Map collectedImages = new HashMap(); // this is a set that is collected now and joined later to the imagelinks for (final Map.Entry entry: this.images.entrySet()) { if (entry.getKey() != null && entry.getKey().getHost() != null && entry.getKey().getHost().equals(thishost)) this.inboundlinks.put(entry.getKey(), "image"); else this.outboundlinks.put(entry.getKey(), "image"); @@ -520,7 +523,7 @@ dc_rights final String name = url.getNameProperty(); // check mailto scheme first (not suppose to get into in/outboundlinks or hyperlinks -> crawler can't process) if (url.getProtocol().equals("mailto")) { - this.emaillinks.put(u.substring(7), name); // TODO: check why key as string instead of Disgest/AnchorURL + this.emaillinks.add(url); continue; } From cb83e65f8955482d5694258b8261e03d8087f160 Mon Sep 17 00:00:00 2001 From: reger Date: Sat, 19 Dec 2015 01:42:35 +0100 Subject: [PATCH 11/32] drop returning document language "en" if unknown (fix todo) which also harmonizes handling of query.modifier for rwi and solr results (to result must match a given language filter) --- source/net/yacy/kelondro/data/meta/URIMetadataNode.java | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/source/net/yacy/kelondro/data/meta/URIMetadataNode.java b/source/net/yacy/kelondro/data/meta/URIMetadataNode.java index b4f572967..fe9b0564a 100644 --- a/source/net/yacy/kelondro/data/meta/URIMetadataNode.java +++ b/source/net/yacy/kelondro/data/meta/URIMetadataNode.java @@ -371,9 +371,13 @@ public class URIMetadataNode extends SolrDocument /* implements Comparable Date: Sat, 19 Dec 2015 20:13:33 +0100 Subject: [PATCH 12/32] fix: adjust urlstub for mailto links (skip protocol) --- htroot/ViewFile.java | 1 - source/net/yacy/cora/document/id/MultiProtocolURL.java | 2 +- source/net/yacy/search/query/SearchEvent.java | 1 - 3 files changed, 1 insertion(+), 3 deletions(-) diff --git a/htroot/ViewFile.java b/htroot/ViewFile.java index 54e1bb1f3..a139c3e85 100644 --- a/htroot/ViewFile.java +++ b/htroot/ViewFile.java @@ -34,7 +34,6 @@ import java.util.Collection; import java.util.Date; import java.util.Iterator; import java.util.Map; -import java.util.Map.Entry; import net.yacy.cora.document.encoding.ASCII; import net.yacy.cora.document.encoding.UTF8; diff --git a/source/net/yacy/cora/document/id/MultiProtocolURL.java b/source/net/yacy/cora/document/id/MultiProtocolURL.java index 42a068781..681c96538 100644 --- a/source/net/yacy/cora/document/id/MultiProtocolURL.java +++ b/source/net/yacy/cora/document/id/MultiProtocolURL.java @@ -1122,7 +1122,7 @@ public class MultiProtocolURL implements Serializable, Comparable Date: Sun, 20 Dec 2015 06:44:16 +0100 Subject: [PATCH 15/32] fix HeaderFramework.mime() to strip charset parameter. Differentiate mime() and getContentType() which gives the raw header field. This improves parser detection if charsets are included in http content-type field. --- .../yacy/cora/protocol/HeaderFramework.java | 24 +++++++++++++------ 1 file changed, 17 insertions(+), 7 deletions(-) diff --git a/source/net/yacy/cora/protocol/HeaderFramework.java b/source/net/yacy/cora/protocol/HeaderFramework.java index d4f56850a..5a7af2529 100644 --- a/source/net/yacy/cora/protocol/HeaderFramework.java +++ b/source/net/yacy/cora/protocol/HeaderFramework.java @@ -413,13 +413,23 @@ public class HeaderFramework extends TreeMap implements Map 0) { + return tmpstr.substring(0,tmpstr.indexOf(';')).trim(); + } else { + return tmpstr; + } } /* @@ -429,7 +439,7 @@ public class HeaderFramework extends TreeMap implements Map implements Map Date: Sun, 20 Dec 2015 15:49:24 +0100 Subject: [PATCH 16/32] make use of header.getContentType where possible (mime is normalized afterwards) otherwise use header.mime() differentiated in prev. commit. --- .../yacy/cora/protocol/HeaderFramework.java | 5 +- .../net/yacy/crawler/retrieval/Response.java | 51 ++++++++----------- .../yacy/http/servlets/YaCyProxyServlet.java | 2 +- .../net/yacy/repository/LoaderDispatcher.java | 4 +- .../yacy/server/http/HTTPDProxyHandler.java | 3 -- 5 files changed, 27 insertions(+), 38 deletions(-) diff --git a/source/net/yacy/cora/protocol/HeaderFramework.java b/source/net/yacy/cora/protocol/HeaderFramework.java index 5a7af2529..2aef01f6e 100644 --- a/source/net/yacy/cora/protocol/HeaderFramework.java +++ b/source/net/yacy/cora/protocol/HeaderFramework.java @@ -425,8 +425,9 @@ public class HeaderFramework extends TreeMap implements Map 0) { - return tmpstr.substring(0,tmpstr.indexOf(';')).trim(); + final int pos = tmpstr.indexOf(';'); + if (pos > 0) { + return tmpstr.substring(0, pos).trim(); } else { return tmpstr; } diff --git a/source/net/yacy/crawler/retrieval/Response.java b/source/net/yacy/crawler/retrieval/Response.java index 642994a4a..306341cc9 100644 --- a/source/net/yacy/crawler/retrieval/Response.java +++ b/source/net/yacy/crawler/retrieval/Response.java @@ -254,12 +254,16 @@ public class Response { return doctype; } + /** + * Get respons header last modified date + * if missing the first seen date or current date + * @return valid date always != null + */ public Date lastModified() { Date docDate = null; if (this.responseHeader != null) { - docDate = this.responseHeader.lastModified(); - if (docDate == null) docDate = this.responseHeader.date(); + docDate = this.responseHeader.lastModified(); // is always != null } if (docDate == null && this.request != null) docDate = this.request.appdate(); if (docDate == null) docDate = new Date(); @@ -594,13 +598,6 @@ public class Response { // -ranges in request // we checked that in shallStoreCache - // a picture cannot be indexed - /* - if (Classification.isMediaExtension(url().getFileExtension())) { - return "Media_Content_(forbidden)"; - } - */ - // -cookies in request // unfortunately, we cannot index pages which have been requested with a cookie // because the returned content may be special for the client @@ -614,14 +611,7 @@ public class Response { // the set-cookie from the server does not indicate that the content is special // thus we do not care about it here for indexing - // a picture cannot be indexed - final String mimeType = this.responseHeader.mime(); - /* - if (Classification.isPictureMime(mimeType)) { - return "Media_Content_(Picture)"; - } - */ - final String parserError = TextParser.supportsMime(mimeType); + final String parserError = TextParser.supportsMime(this.responseHeader.getContentType()); if (parserError != null) { return "Media_Content, no parser: " + parserError; } @@ -736,16 +726,10 @@ public class Response { // check if document can be indexed if (this.responseHeader != null) { - final String mimeType = this.responseHeader.mime(); + final String mimeType = this.responseHeader.getContentType(); final String parserError = TextParser.supportsMime(mimeType); if (parserError != null && TextParser.supportsExtension(url()) != null) return "no parser available: " + parserError; } - /* - if (Classification.isMediaExtension(url().getFileExtension()) && - !Classification.isImageExtension((url().getFileExtension()))) { - return "Media_Content_(forbidden)"; - } - */ // -if-modified-since in request // if the page is fresh at the very moment we can index it @@ -783,14 +767,21 @@ public class Response { return null; } + /** + * Get Mime type from http header or null if unknown (not included in response header) + * @return mime (trimmed and lowercase) or null + */ public String getMimeType() { if (this.responseHeader == null) return null; - String mimeType = this.responseHeader.mime(); - mimeType = mimeType.trim().toLowerCase(); + String mimeType = this.responseHeader.getContentType(); + if (mimeType != null) { + mimeType = mimeType.trim().toLowerCase(); - final int pos = mimeType.indexOf(';'); - return ((pos < 0) ? mimeType : mimeType.substring(0, pos)); + final int pos = mimeType.indexOf(';'); + return ((pos < 0) ? mimeType : mimeType.substring(0, pos)); + } + return null; } public String getCharacterEncoding() { @@ -864,10 +855,10 @@ public class Response { } public Document[] parse() throws Parser.Failure { - final String supportError = TextParser.supports(url(), this.responseHeader == null ? null : this.responseHeader.mime()); + final String supportError = TextParser.supports(url(), this.responseHeader == null ? null : this.responseHeader.getContentType()); if (supportError != null) throw new Parser.Failure("no parser support:" + supportError, url()); try { - return TextParser.parseSource(new AnchorURL(url()), this.responseHeader == null ? null : this.responseHeader.mime(), this.responseHeader == null ? "UTF-8" : this.responseHeader.getCharacterEncoding(), new VocabularyScraper(), this.request.timezoneOffset(), this.request.depth(), this.content); + return TextParser.parseSource(new AnchorURL(url()), this.responseHeader == null ? null : this.responseHeader.getContentType(), this.responseHeader == null ? "UTF-8" : this.responseHeader.getCharacterEncoding(), new VocabularyScraper(), this.request.timezoneOffset(), this.request.depth(), this.content); } catch (final Exception e) { return null; } diff --git a/source/net/yacy/http/servlets/YaCyProxyServlet.java b/source/net/yacy/http/servlets/YaCyProxyServlet.java index fed2e3da5..690debcfe 100644 --- a/source/net/yacy/http/servlets/YaCyProxyServlet.java +++ b/source/net/yacy/http/servlets/YaCyProxyServlet.java @@ -172,7 +172,7 @@ public class YaCyProxyServlet extends ProxyServlet implements Servlet { response.setContentType(mimeType); response.setStatus(httpStatus); - if ((mimeType != null) && (mimeType.startsWith("text/html") || mimeType.startsWith("text"))) { + if ((mimeType != null) && (mimeType.startsWith("text"))) { final StringWriter buffer = new StringWriter(); if (proxyResponseHeader.containsKey(HeaderFramework.TRANSFER_ENCODING) && proxyResponseHeader.get(HeaderFramework.TRANSFER_ENCODING).contains("chunked")) { diff --git a/source/net/yacy/repository/LoaderDispatcher.java b/source/net/yacy/repository/LoaderDispatcher.java index da52e15ab..f4b534baa 100644 --- a/source/net/yacy/repository/LoaderDispatcher.java +++ b/source/net/yacy/repository/LoaderDispatcher.java @@ -568,10 +568,10 @@ public final class LoaderDispatcher { if (responseHeader == null) throw new IOException("responseHeader == null"); Document[] documents = null; - final String supportError = TextParser.supports(url, responseHeader.mime()); + final String supportError = TextParser.supports(url, responseHeader.getContentType()); if (supportError != null) throw new IOException("no parser support: " + supportError); try { - documents = TextParser.parseSource(url, responseHeader.mime(), responseHeader.getCharacterEncoding(), response.profile().scraper(), timezoneOffset, response.depth(), response.getContent()); + documents = TextParser.parseSource(url, responseHeader.getContentType(), responseHeader.getCharacterEncoding(), response.profile().scraper(), timezoneOffset, response.depth(), response.getContent()); if (documents == null) throw new IOException("document == null"); } catch (final Exception e) { throw new IOException("parser error: " + e.getMessage()); diff --git a/source/net/yacy/server/http/HTTPDProxyHandler.java b/source/net/yacy/server/http/HTTPDProxyHandler.java index fe46a700e..b97b6be2f 100644 --- a/source/net/yacy/server/http/HTTPDProxyHandler.java +++ b/source/net/yacy/server/http/HTTPDProxyHandler.java @@ -1187,9 +1187,6 @@ public final class HTTPDProxyHandler { if (conProp.containsKey(HeaderFramework.CONNECTION_PROP_PROXY_RESPOND_HEADER)) { final HeaderFramework proxyRespondHeader = (HeaderFramework) conProp.get(HeaderFramework.CONNECTION_PROP_PROXY_RESPOND_HEADER); mime = proxyRespondHeader.mime(); - if (mime.indexOf(';') != -1) { - mime = mime.substring(0,mime.indexOf(';')); - } } logMessage.append(mime); From d5fd031449c27a678a68c6208dc9c8e5aebb2ac3 Mon Sep 17 00:00:00 2001 From: reger Date: Sun, 20 Dec 2015 15:51:54 +0100 Subject: [PATCH 17/32] fix reading of ippattern config array in URLProxy --- .../yacy/http/servlets/UrlProxyServlet.java | 37 +++++++++---------- 1 file changed, 17 insertions(+), 20 deletions(-) diff --git a/source/net/yacy/http/servlets/UrlProxyServlet.java b/source/net/yacy/http/servlets/UrlProxyServlet.java index 034c02232..85e00aa62 100644 --- a/source/net/yacy/http/servlets/UrlProxyServlet.java +++ b/source/net/yacy/http/servlets/UrlProxyServlet.java @@ -8,7 +8,7 @@ import java.net.MalformedURLException; import java.net.URL; import java.net.URLDecoder; import java.util.HashMap; -import java.util.StringTokenizer; +import java.util.regex.PatternSyntaxException; import javax.servlet.Servlet; import javax.servlet.ServletConfig; import javax.servlet.ServletException; @@ -122,22 +122,18 @@ public class UrlProxyServlet extends ProxyServlet implements Servlet { } // 2 - get target url URL proxyurl = null; - String strARGS = request.getQueryString(); - if (strARGS == null) { + final String strUrl = request.getParameter("url"); + if (strUrl == null) { response.sendError(HttpServletResponse.SC_NOT_FOUND,"url parameter missing"); return; } - if (strARGS.startsWith("url=")) { - final String strUrl = strARGS.substring(4); // strip "url=" - - try { - proxyurl = new URL(strUrl); - } catch (final MalformedURLException e) { - proxyurl = new URL(URLDecoder.decode(strUrl, UTF8.charset.name())); - - } + try { + proxyurl = new URL(strUrl); + } catch (final MalformedURLException e) { + proxyurl = new URL(URLDecoder.decode(strUrl, UTF8.charset.name())); } + if (proxyurl == null) { response.sendError(HttpServletResponse.SC_NOT_FOUND,"url parameter missing"); return; @@ -334,16 +330,17 @@ public class UrlProxyServlet extends ProxyServlet implements Servlet { private boolean proxyippatternmatch(final String key) { // the cfgippattern is a comma-separated list of patterns // each pattern may contain one wildcard-character '*' which matches anything - final String cfgippattern = Switchboard.getSwitchboard().getConfig("proxyURL.access", "*"); - if (cfgippattern.equals("*")) { + final String[] cfgippattern = Switchboard.getSwitchboard().getConfigArray("proxyURL.access", "*"); + if (cfgippattern[0].equals("*")) { return true; } - final StringTokenizer st = new StringTokenizer(cfgippattern, ","); - String pattern; - while (st.hasMoreTokens()) { - pattern = st.nextToken(); - if (key.matches(pattern)) { - return true; + for (String pattern : cfgippattern) { + try { + if (key.matches(pattern)) { + return true; + } + } catch (PatternSyntaxException ex) { + this._log.warn("wrong ip pattern in url proxy config", ex.getMessage() ); } } return false; From 67f64af4b4fde9c16f4726c1554660f9d1df4a03 Mon Sep 17 00:00:00 2001 From: reger Date: Mon, 21 Dec 2015 01:05:59 +0100 Subject: [PATCH 18/32] quick fix: go back to display search results favicon via tag and ViewImage, ! until better solution is found !. Reason: in IE-Browser no individual favicon is displayed with tag (always the default) and only few individual fav's with Firefox (randomly) hint: to be able to use return of default icon was added back to it. relates to http://mantis.tokeek.de/view.php?id=629 --- htroot/ViewImage.java | 32 +++++++++++++++++++++++++------- htroot/yacysearchitem.html | 5 ++--- 2 files changed, 27 insertions(+), 10 deletions(-) diff --git a/htroot/ViewImage.java b/htroot/ViewImage.java index 249c09432..cf95f6200 100644 --- a/htroot/ViewImage.java +++ b/htroot/ViewImage.java @@ -30,6 +30,7 @@ import java.awt.Rectangle; import java.awt.image.BufferedImage; import java.awt.image.Raster; import java.io.ByteArrayOutputStream; +import java.io.File; import java.io.IOException; import java.io.InputStream; import java.util.Iterator; @@ -49,6 +50,7 @@ import net.yacy.cora.protocol.RequestHeader; import net.yacy.cora.storage.ConcurrentARC; import net.yacy.cora.util.ConcurrentLog; import net.yacy.data.URLLicense; +import net.yacy.kelondro.util.FileUtils; import net.yacy.kelondro.util.MemoryControl; import net.yacy.kelondro.workflow.WorkflowProcessor; import net.yacy.peers.graphics.EncodedImage; @@ -60,8 +62,11 @@ import net.yacy.server.serverSwitch; public class ViewImage { - private static Map iconcache = new ConcurrentARC(1000, - Math.max(10, Math.min(32, WorkflowProcessor.availableCPU * 2))); + private static Map iconcache = new ConcurrentARC(1000, + Math.max(10, Math.min(32, WorkflowProcessor.availableCPU * 2))); + + private static String defaulticon = "htroot/env/grafics/dfltfvcn.ico"; + private static byte[] defaulticonb = null; /** * Try parsing image from post "url" parameter or from "code" parameter. @@ -132,7 +137,7 @@ public class ViewImage { ImageInputStream imageInStream = null; InputStream inStream = null; try { - String urlExt = MultiProtocolURL.getFileExtension(url.getFileName()); + String urlExt = MultiProtocolURL.getFileExtension(url.getFileName()); if (ext != null && ext.equalsIgnoreCase(urlExt) && isBrowserRendered(urlExt)) { return openInputStream(post, sb.loader, auth, url); } @@ -149,10 +154,23 @@ public class ViewImage { // read image encodedImage = parseAndScale(post, auth, urlString, ext, imageInStream); } catch(Exception e) { - /* Exceptions are not propagated here : many error causes are possible, network errors, - * incorrect or unsupported format, bad ImageIO plugin... - * Instead return an empty EncodedImage. Caller is responsible for handling this correctly (500 status code response) */ - encodedImage = new EncodedImage(new byte[0], ext, post.getBoolean("isStatic")); + /* Exceptions are not propagated here : many error causes are possible, network errors, + * incorrect or unsupported format, bad ImageIO plugin... + * Instead return an empty EncodedImage. Caller is responsible for handling this correctly (500 status code response) */ + + if ("favicon.ico".equalsIgnoreCase(url.getFileName())) { // but on missing favicon just present a default (occures frequently by call from searchitem.html) + // currently yacysearchitem assigns "hosturl/favicon.ico" (to look for the filename should not much interfere with other situatios) + if (defaulticonb == null) { // load the default icon once + try { + defaulticonb = FileUtils.read(new File(sb.getAppPath(), defaulticon)); + } catch (final IOException initicon) { + defaulticonb = new byte[0]; + } + } + encodedImage = new EncodedImage(defaulticonb, ext, post.getBoolean("isStatic")); + } else { + encodedImage = new EncodedImage(new byte[0], ext, post.getBoolean("isStatic")); + } } finally { /* * imageInStream.close() method doesn't close source input diff --git a/htroot/yacysearchitem.html b/htroot/yacysearchitem.html index 0a69ff421..da1a4e4fa 100644 --- a/htroot/yacysearchitem.html +++ b/htroot/yacysearchitem.html @@ -1,9 +1,7 @@ #(content)#::

- - - + #[title]#

#(heuristic)#:: @@ -38,6 +36,7 @@ #(showHostBrowser)#:: | #(/showHostBrowser)# #(showVocabulary)#::
#{vocabulary}##[name]#:#[terms]# #{/vocabulary}##(/showVocabulary)# #(showSnapshots)#::Snapshots#(/showSnapshots)# + #[ranking]#

:: From 45b9bd84038995f87ca93e71766e77d2a968a856 Mon Sep 17 00:00:00 2001 From: reger Date: Mon, 21 Dec 2015 04:42:26 +0100 Subject: [PATCH 19/32] adjust MultiProtocolURL.protocol detection to handle mailto with "://" in parameters, and feeding hyperlinks to webgraph processing. --- htroot/Crawler_p.java | 2 +- source/net/yacy/cora/document/id/MultiProtocolURL.java | 2 +- source/net/yacy/document/Document.java | 10 ++++++++++ .../yacy/search/schema/CollectionConfiguration.java | 4 ++-- 4 files changed, 14 insertions(+), 4 deletions(-) diff --git a/htroot/Crawler_p.java b/htroot/Crawler_p.java index 7b5d705ba..4f440a0ac 100644 --- a/htroot/Crawler_p.java +++ b/htroot/Crawler_p.java @@ -377,7 +377,7 @@ public class Crawler_p { try { scraper = sb.loader.loadDocument(sitelistURL, CacheStrategy.IFFRESH, BlacklistType.CRAWLER, agent); // get links and generate filter - for (DigestURL u: scraper.getAnchors()) { + for (DigestURL u: scraper.getHyperlinks().keySet()) { newRootURLs.add(u); } } catch (final IOException e) { diff --git a/source/net/yacy/cora/document/id/MultiProtocolURL.java b/source/net/yacy/cora/document/id/MultiProtocolURL.java index 681c96538..24907b8d3 100644 --- a/source/net/yacy/cora/document/id/MultiProtocolURL.java +++ b/source/net/yacy/cora/document/id/MultiProtocolURL.java @@ -202,7 +202,7 @@ public class MultiProtocolURL implements Serializable, Comparable 7 && url.substring(0,7).equalsIgnoreCase("mailto:")) { p = 6; diff --git a/source/net/yacy/document/Document.java b/source/net/yacy/document/Document.java index d58a2bca5..265cbf45a 100644 --- a/source/net/yacy/document/Document.java +++ b/source/net/yacy/document/Document.java @@ -430,6 +430,11 @@ dc_rights return sentences; } + /** + * All anchor links of the document + * (this includes mailto links) + * @return all links embedded as anchors (clickeable entities) + */ public Collection getAnchors() { // returns all links embedded as anchors (clickeable entities) // this is a url(String)/text(String) map @@ -445,6 +450,11 @@ dc_rights // the next three methods provide a calculated view on the getAnchors/getImages: + /** + * List of links to resources (pages, images, files, media ...) + * (Hyperlinks do not include mailto: links) + * @return a subset of the getAnchor-set: only links to other hyperrefs + */ public Map getHyperlinks() { // this is a subset of the getAnchor-set: only links to other hyperrefs if (!this.resorted) resortLinks(); diff --git a/source/net/yacy/search/schema/CollectionConfiguration.java b/source/net/yacy/search/schema/CollectionConfiguration.java index 047aee7a0..7094a1a51 100644 --- a/source/net/yacy/search/schema/CollectionConfiguration.java +++ b/source/net/yacy/search/schema/CollectionConfiguration.java @@ -965,7 +965,7 @@ public class CollectionConfiguration extends SchemaConfiguration implements Seri Boolean canonical_equal_sku = canonical == null ? null : canonical.toNormalform(true).equals(url); if (webgraph != null && (!containsCanonical || (canonical_equal_sku != null && (canonical_equal_sku.booleanValue())))) { // a document with canonical tag should not get a webgraph relation, because that belongs to the canonical document - List edges = webgraph.getEdges(subgraph, digestURL, responseHeader, collections, crawldepth, processTypes, document.getAnchors(), sourceName); + List edges = webgraph.getEdges(subgraph, digestURL, responseHeader, collections, crawldepth, processTypes, document.getHyperlinks().keySet(), sourceName); // this also enriched the subgraph doc.webgraphDocuments.addAll(edges); } else { @@ -976,7 +976,7 @@ public class CollectionConfiguration extends SchemaConfiguration implements Seri contains(CollectionSchema.outboundlinks_protocol_sxt) || contains(CollectionSchema.outboundlinks_urlstub_sxt) || contains(CollectionSchema.outboundlinks_anchortext_txt)) { - for (final AnchorURL target_url: document.getAnchors()) { + for (final AnchorURL target_url: document.getHyperlinks().keySet()) { enrichSubgraph(subgraph, digestURL, target_url); } } From 4eb7fb0ee5a5d2f42a3f83bd886c59a8a06c123e Mon Sep 17 00:00:00 2001 From: reger Date: Mon, 21 Dec 2015 19:47:40 +0100 Subject: [PATCH 20/32] just remove debug leftover --- htroot/yacysearchitem.html | 1 - 1 file changed, 1 deletion(-) diff --git a/htroot/yacysearchitem.html b/htroot/yacysearchitem.html index da1a4e4fa..ad4013e97 100644 --- a/htroot/yacysearchitem.html +++ b/htroot/yacysearchitem.html @@ -36,7 +36,6 @@ #(showHostBrowser)#:: | #(/showHostBrowser)# #(showVocabulary)#::
#{vocabulary}##[name]#:#[terms]# #{/vocabulary}##(/showVocabulary)# #(showSnapshots)#::Snapshots#(/showSnapshots)# - #[ranking]#

:: From 7c6d6cd69a82805bfa68719e63a5786b44f38786 Mon Sep 17 00:00:00 2001 From: reger Date: Tue, 22 Dec 2015 01:36:23 +0100 Subject: [PATCH 21/32] change some more submit button to bootstrap btn css class --- htroot/Performance_p.html | 6 +++--- htroot/RegexTest.html | 2 +- htroot/Vocabulary_p.html | 6 +++--- 3 files changed, 7 insertions(+), 7 deletions(-) diff --git a/htroot/Performance_p.html b/htroot/Performance_p.html index 68980fa3f..498ae8421 100644 --- a/htroot/Performance_p.html +++ b/htroot/Performance_p.html @@ -28,7 +28,7 @@
MByte  -   +   #(setStartupCommit)#::
Accepted change. This will take effect after restart of YaCy.
restart now
::
#(/setStartupCommit)#
@@ -47,7 +47,7 @@
disable DHT-in below MiB free space
 
-
+
@@ -79,7 +79,7 @@ - + Changes take effect immediately diff --git a/htroot/RegexTest.html b/htroot/RegexTest.html index 55bf350a7..a04bd34dd 100644 --- a/htroot/RegexTest.html +++ b/htroot/RegexTest.html @@ -30,7 +30,7 @@ #(match)#
no match
::
match
::
error in expression: #[error]#
#(/match)#
- +
diff --git a/htroot/Vocabulary_p.html b/htroot/Vocabulary_p.html index a956a7499..491569879 100644 --- a/htroot/Vocabulary_p.html +++ b/htroot/Vocabulary_p.html @@ -94,7 +94,7 @@ To see a list of all APIs, please visit the +
@@ -144,7 +144,7 @@ To see a list of all APIs, please visit the
#{charset}##{/charset}# -
+
@@ -198,7 +198,7 @@ To see a list of all APIs, please visit the
- + #(/edit)# From e84d94f8ca98f92a6aaa91a054e5e7fc0388b4bf Mon Sep 17 00:00:00 2001 From: reger Date: Tue, 22 Dec 2015 17:48:24 +0100 Subject: [PATCH 22/32] fix mime table for ms office / open office documents (causing wrong parser detect in intranet mode) --- defaults/httpd.mime | 10 +++++++--- source/net/yacy/document/parser/ooxmlParser.java | 4 ++-- 2 files changed, 9 insertions(+), 5 deletions(-) diff --git a/defaults/httpd.mime b/defaults/httpd.mime index 9b763ccb5..813cae3cc 100644 --- a/defaults/httpd.mime +++ b/defaults/httpd.mime @@ -23,8 +23,9 @@ csv = text/csv db = application/octet-stream dll = application/octet-stream doc = application/msword -docx = application/msword +docx = application/vnd.openxmlformats-officedocument.wordprocessingml.document dot = application/msword +dotx = application/vnd.openxmlformats-officedocument.wordprocessingml.template dvi = application/x-dvi eps = application/postscript exe = application/octet-stream @@ -82,9 +83,11 @@ phtml = application/x-httpd-php pl = text/plain png = image/png pot = application/mspowerpoint +potx = application/vnd.openxmlformats-officedocument.presentationml.template pps = application/mspowerpoint +ppsx = application/vnd.openxmlformats-officedocument.presentationml.slideshow ppt = application/mspowerpoint -pptx = application/mspowerpoint +pptx = application/vnd.openxmlformats-officedocument.presentationml.presentation ppz = application/mspowerpoint ps = application/postscript py = text/html @@ -128,7 +131,8 @@ wmv = video/x-ms-wmv xhtml = text/xhtml+xml xla = application/msexcel xls = application/msexcel -xlsx = application/msexcel +xlsx = application/vnd.openxmlformats-officedocument.spreadsheetml.sheet +xltx = application/vnd.openxmlformats-officedocument.spreadsheetml.template xpi = application/x-xpinstall xsl = text/xml xml = text/xml diff --git a/source/net/yacy/document/parser/ooxmlParser.java b/source/net/yacy/document/parser/ooxmlParser.java index 596b54bdb..c119f642a 100644 --- a/source/net/yacy/document/parser/ooxmlParser.java +++ b/source/net/yacy/document/parser/ooxmlParser.java @@ -178,10 +178,10 @@ public class ooxmlParser extends AbstractParser implements Parser { docKeywords, singleList(docLongTitle), docAuthor, - "", + null, null, descriptions, - 0.0f, 0.0f, + 0.0d, 0.0d, contentBytes, null, null, From bf098412cf90a027520ab084fa8d899f5c09d38c Mon Sep 17 00:00:00 2001 From: reger Date: Tue, 22 Dec 2015 20:15:08 +0100 Subject: [PATCH 23/32] use input type=file for choosing IndexImportMediawiki_p dump file --- htroot/IndexImportMediawiki_p.html | 9 +++++++-- 1 file changed, 7 insertions(+), 2 deletions(-) diff --git a/htroot/IndexImportMediawiki_p.html b/htroot/IndexImportMediawiki_p.html index 36d796df2..73f278e20 100644 --- a/htroot/IndexImportMediawiki_p.html +++ b/htroot/IndexImportMediawiki_p.html @@ -24,8 +24,13 @@
Dumps must be stored in the local file system in XML format and may be compressed in gz or bz2.
- - +
+ + +
+ +
+

From 0fa63409368c9e44175bbae1a97d41f3ccf4f75a Mon Sep 17 00:00:00 2001 From: reger Date: Wed, 23 Dec 2015 00:04:40 +0100 Subject: [PATCH 24/32] apply more default css styles (class btn) to submit buttons --- htroot/AugmentedBrowsing_p.html | 5 +-- htroot/ContentAnalysis_p.html | 4 +- htroot/DictionaryLoader_p.html | 54 +++++++++++++-------------- htroot/IndexCreateParserErrors_p.html | 4 +- htroot/IndexFederated_p.html | 6 +-- htroot/IndexSchema_p.html | 6 +-- htroot/Load_MediawikiWiki.html | 10 ++--- htroot/Load_PHPBB3.html | 2 +- htroot/PerformanceQueues_p.html | 8 ++-- htroot/ProxyIndexingMonitor_p.html | 2 +- htroot/RankingSolr_p.html | 16 ++++---- htroot/WatchWebStructure_p.html | 2 +- 12 files changed, 59 insertions(+), 60 deletions(-) diff --git a/htroot/AugmentedBrowsing_p.html b/htroot/AugmentedBrowsing_p.html index 32efd617b..cf6a45c7a 100644 --- a/htroot/AugmentedBrowsing_p.html +++ b/htroot/AugmentedBrowsing_p.html @@ -54,10 +54,9 @@ Define URL substitution rules which allow navigating in proxy environment. Possible values: all, domainlist. Default: domainlist.

- + - - +
diff --git a/htroot/ContentAnalysis_p.html b/htroot/ContentAnalysis_p.html index 8296157f7..b69fa680f 100644 --- a/htroot/ContentAnalysis_p.html +++ b/htroot/ContentAnalysis_p.html @@ -28,8 +28,8 @@
- - + +
diff --git a/htroot/DictionaryLoader_p.html b/htroot/DictionaryLoader_p.html index 364c56a65..95446429b 100644 --- a/htroot/DictionaryLoader_p.html +++ b/htroot/DictionaryLoader_p.html @@ -34,11 +34,11 @@
#(geon0Status)#
not loaded
::
loaded
::deactivated#(/geon0Status)#
Action
#(geon0Status)# - :: - - :: - - + :: + + :: + + #(/geon0Status)#
#(geon0ActionLoaded)#::
Result
loaded and activated dictionary file
:: @@ -68,11 +68,11 @@
#(geon1Status)#
not loaded
::
loaded
::deactivated#(/geon1Status)#
Action
#(geon1Status)# - :: - - :: - - + :: + + :: + + #(/geon1Status)#
#(geon1ActionLoaded)#::
Result
loaded and activated dictionary file
:: @@ -102,11 +102,11 @@
#(geon2Status)#
not loaded
::
loaded
::deactivated#(/geon2Status)#
Action
#(geon2Status)# - :: - - :: - - + :: + + :: + + #(/geon2Status)#
#(geon2ActionLoaded)#::
Result
loaded and activated dictionary file
:: @@ -138,11 +138,11 @@
#(geo1Status)#
not loaded
::
loaded
::deactivated#(/geo1Status)#
Action
#(geo1Status)# - :: - - :: - - + :: + + :: + + #(/geo1Status)#
#(geo1ActionLoaded)#::
Result
loaded and activated dictionary file
:: @@ -181,11 +181,11 @@
#(drw0Status)#
not loaded
::
loaded
::deactivated#(/drw0Status)#
Action
#(drw0Status)# - :: - - :: - - + :: + + :: + + #(/drw0Status)#
#(drw0ActionLoaded)#::
Result
loaded and activated dictionary file
:: @@ -219,7 +219,7 @@
#(syn0Status)#
Deactivated
::
Activated
#(/syn0Status)#
Action
-
#(syn0Status)#::#(/syn0Status)#
+
#(syn0Status)#::#(/syn0Status)#

Moby Lexicon - English Thesaurus from http://icon.shef.ac.uk/Moby/

@@ -229,7 +229,7 @@
#(syn1Status)#
Deactivated
::
Activated
#(/syn1Status)#
Action
-
#(syn1Status)#::#(/syn1Status)#
+
#(syn1Status)#::#(/syn1Status)#
diff --git a/htroot/IndexCreateParserErrors_p.html b/htroot/IndexCreateParserErrors_p.html index b34d1cf7d..e334f99dc 100644 --- a/htroot/IndexCreateParserErrors_p.html +++ b/htroot/IndexCreateParserErrors_p.html @@ -19,9 +19,9 @@

Showing latest #[num]# entries.

-   +   #(/only-latest)# - +

There are #[num]# entries in the rejected-queue:

diff --git a/htroot/IndexFederated_p.html b/htroot/IndexFederated_p.html index 336383e20..95dc1e1f7 100644 --- a/htroot/IndexFederated_p.html +++ b/htroot/IndexFederated_p.html @@ -74,7 +74,7 @@
write-enabled (if unchecked, the remote server(s) will only be used as search peers)
-
+
@@ -95,7 +95,7 @@
use webgraph search index (rich information in second Solr core)
-
+
@@ -111,7 +111,7 @@
support peer-to-peer index transmission (DHT RWI index)
-
+
diff --git a/htroot/IndexSchema_p.html b/htroot/IndexSchema_p.html index cc0a2ae7b..b47c920de 100644 --- a/htroot/IndexSchema_p.html +++ b/htroot/IndexSchema_p.html @@ -54,8 +54,8 @@
- - + +


@@ -66,7 +66,7 @@ To physically remove them from the index you need to reindex the documents. Here you can reindex all documents with inactive fields.

- +

You may monitor progress (or stop the job) under IndexReIndexMonitor_p.html

diff --git a/htroot/Load_MediawikiWiki.html b/htroot/Load_MediawikiWiki.html index 50a309958..00b0a8a63 100644 --- a/htroot/Load_MediawikiWiki.html +++ b/htroot/Load_MediawikiWiki.html @@ -30,10 +30,10 @@ - - - - + + + + @@ -51,7 +51,7 @@
 
-
+
diff --git a/htroot/Load_PHPBB3.html b/htroot/Load_PHPBB3.html index 297f61e6f..cf61e5878 100644 --- a/htroot/Load_PHPBB3.html +++ b/htroot/Load_PHPBB3.html @@ -35,7 +35,7 @@
 
-
+
diff --git a/htroot/PerformanceQueues_p.html b/htroot/PerformanceQueues_p.html index 379ca9f2a..d438097fe 100644 --- a/htroot/PerformanceQueues_p.html +++ b/htroot/PerformanceQueues_p.html @@ -60,8 +60,8 @@ #{/table}# - - + + Changes take effect immediately
@@ -121,7 +121,7 @@ - + Changes take effect immediately @@ -145,7 +145,7 @@ #{/pool}# - + Changes take effect immediately diff --git a/htroot/ProxyIndexingMonitor_p.html b/htroot/ProxyIndexingMonitor_p.html index e44062e41..ba6b6d8f4 100644 --- a/htroot/ProxyIndexingMonitor_p.html +++ b/htroot/ProxyIndexingMonitor_p.html @@ -95,7 +95,7 @@   - + diff --git a/htroot/RankingSolr_p.html b/htroot/RankingSolr_p.html index 8ac304321..169a35d54 100644 --- a/htroot/RankingSolr_p.html +++ b/htroot/RankingSolr_p.html @@ -33,8 +33,8 @@
- - + +

#(boosthint)#::You can boost with vocabularies, use the occurrence counters #[vocabulariesvoccount]# and #[vocabulariesvoclogcount]#.#(/boosthint)# @@ -54,8 +54,8 @@
- - + +

#(boosthint)#:: @@ -91,8 +91,8 @@
- - + +
@@ -113,8 +113,8 @@ #{/boosts}#
- - + +
diff --git a/htroot/WatchWebStructure_p.html b/htroot/WatchWebStructure_p.html index 3014a750b..74a4d7924 100644 --- a/htroot/WatchWebStructure_p.html +++ b/htroot/WatchWebStructure_p.html @@ -106,7 +106,7 @@ To see a list of all APIs, please visit the
Dot-end
Color
-
+
From 8a8e53b1a116dcf43218b339bd48eec1f26edce1 Mon Sep 17 00:00:00 2001 From: reger Date: Wed, 23 Dec 2015 23:11:37 +0100 Subject: [PATCH 25/32] apply default css styles (class btn) to blacklist* submit buttons --- htroot/BlacklistCleaner_p.html | 4 ++-- htroot/BlacklistImpExp_p.html | 12 ++++++------ htroot/BlacklistTest_p.html | 2 +- htroot/Blacklist_p.html | 34 +++++++++++----------------------- 4 files changed, 20 insertions(+), 32 deletions(-) diff --git a/htroot/BlacklistCleaner_p.html b/htroot/BlacklistCleaner_p.html index fad4bbd08..112a44dbb 100644 --- a/htroot/BlacklistCleaner_p.html +++ b/htroot/BlacklistCleaner_p.html @@ -21,7 +21,7 @@ Allow regular expressions in host part of blacklist entries.

- + ::

The blacklist-cleaner only works for the following blacklist-engines up to now:

    #{engines}# @@ -58,7 +58,7 @@
    #{/entries}#
     
    - +
    ::#(/disabled)# diff --git a/htroot/BlacklistImpExp_p.html b/htroot/BlacklistImpExp_p.html index 9c0d19357..48ac2558d 100644 --- a/htroot/BlacklistImpExp_p.html +++ b/htroot/BlacklistImpExp_p.html @@ -23,7 +23,7 @@ #{/otherHosts}# - + @@ -33,7 +33,7 @@ URL: - + @@ -45,7 +45,7 @@ - + @@ -57,7 +57,7 @@ - + ::#(/disabled)# @@ -76,7 +76,7 @@ #{/blackListNames}# - + @@ -92,7 +92,7 @@ - + diff --git a/htroot/BlacklistTest_p.html b/htroot/BlacklistTest_p.html index 61f15aba2..d9788c608 100644 --- a/htroot/BlacklistTest_p.html +++ b/htroot/BlacklistTest_p.html @@ -15,7 +15,7 @@
    Test list: - + #(testlist)#::

    diff --git a/htroot/Blacklist_p.html b/htroot/Blacklist_p.html index aab112a26..2f7b6691f 100644 --- a/htroot/Blacklist_p.html +++ b/htroot/Blacklist_p.html @@ -42,7 +42,7 @@ #{/blackLists}# - +
    :: #(/disabled)# @@ -60,7 +60,7 @@ #(/error)#
    - +


    @@ -75,7 +75,7 @@
    - +

    The right '*', after the '/', can be replaced by a regular expression.

      @@ -119,7 +119,7 @@ #{/blackListsMove}#   - + @@ -129,18 +129,18 @@

      Show entries: #{subListOffset}# - + #{/subListOffset}#
        Entries per page: - #{subListSize}# #{/subListSize}#   - +

      @@ -155,7 +155,7 @@ #{/editList}#

      - + #(/edit)# @@ -167,8 +167,8 @@
      - - + +
      @@ -183,23 +183,11 @@ #{/currentActiveFor}# - +
      ::#(/disabled)# - #%env/templates/footer.template%# From 80e2c82249bc5192ed1497716840edda9b97051e Mon Sep 17 00:00:00 2001 From: reger Date: Thu, 24 Dec 2015 02:00:45 +0100 Subject: [PATCH 26/32] fix NPE on empty blog importfile parameter --- htroot/Blog.html | 18 +++++++++--------- htroot/BlogComments.html | 12 ++++++------ source/net/yacy/data/BlogBoard.java | 23 ++++++++++++----------- 3 files changed, 27 insertions(+), 26 deletions(-) diff --git a/htroot/Blog.html b/htroot/Blog.html index 39af1537a..baae0ff90 100644 --- a/htroot/Blog.html +++ b/htroot/Blog.html @@ -77,9 +77,9 @@ - - - + + + :: @@ -121,9 +121,9 @@ - - - + + + :: @@ -138,10 +138,10 @@
      - +
      - +
      :: @@ -157,7 +157,7 @@
      - +
      #(/mode)# diff --git a/htroot/BlogComments.html b/htroot/BlogComments.html index c78933870..42b8d1e4d 100644 --- a/htroot/BlogComments.html +++ b/htroot/BlogComments.html @@ -70,9 +70,9 @@ - - - + + + #(/allow)# @@ -109,9 +109,9 @@ - - - + + + diff --git a/source/net/yacy/data/BlogBoard.java b/source/net/yacy/data/BlogBoard.java index f97f7c794..9b28dc1b9 100644 --- a/source/net/yacy/data/BlogBoard.java +++ b/source/net/yacy/data/BlogBoard.java @@ -159,18 +159,19 @@ public class BlogBoard { } public boolean importXML(final String input) { - final DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance(); - try { - final DocumentBuilder builder = factory.newDocumentBuilder(); - return parseXMLimport(builder.parse(new ByteArrayInputStream(UTF8.getBytes(input)))); - } catch (final ParserConfigurationException ex) { - ConcurrentLog.logException(ex); - } catch (final SAXException ex) { - ConcurrentLog.logException(ex); - } catch (final IOException ex) { - ConcurrentLog.logException(ex); + if (input != null && !input.isEmpty()) { + final DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance(); + try { + final DocumentBuilder builder = factory.newDocumentBuilder(); + return parseXMLimport(builder.parse(new ByteArrayInputStream(UTF8.getBytes(input)))); + } catch (final ParserConfigurationException ex) { + ConcurrentLog.logException(ex); + } catch (final SAXException ex) { + ConcurrentLog.logException(ex); + } catch (final IOException ex) { + ConcurrentLog.logException(ex); + } } - return false; } From 3076c87247de07a4391dfbbe5c47e0606f11a2eb Mon Sep 17 00:00:00 2001 From: reger Date: Thu, 24 Dec 2015 04:37:24 +0100 Subject: [PATCH 27/32] fix typo in Steering.html --- htroot/Steering.html | 2 +- locales/de.lng | 2 +- locales/fr.lng | 2 +- locales/ru.lng | 2 +- 4 files changed, 4 insertions(+), 4 deletions(-) diff --git a/htroot/Steering.html b/htroot/Steering.html index dec27e8a6..34d7f595c 100644 --- a/htroot/Steering.html +++ b/htroot/Steering.html @@ -171,7 +171,7 @@ XDtoU7vQ/wIAAP//AwBb7ktEXQ4nqQAAAABJRU5ErkJggg==" width="128" height="64" alt="K

      Application will terminate after working off all scheduled tasks.

      Please send us feed-back!

      We don't track YaCy users, YaCy does not send 'home-pings', we do not even know how many people use YaCy as their private search engine.
      - Therefore we like to ask you: do you like YaCy? Will you use it again... if not, why? Is is possible that we change a bit to suit your needs?

      + Therefore we like to ask you: do you like YaCy? Will you use it again... if not, why? Is it possible that we change a bit to suit your needs?

      Please send us feed-back about your experience with an
      anonymous message
      or a
      diff --git a/locales/de.lng b/locales/de.lng index ff30a7cf5..915f1f027 100644 --- a/locales/de.lng +++ b/locales/de.lng @@ -3304,7 +3304,7 @@ Just a moment, please!==Einen Moment bitte! Application will terminate after working off all scheduled tasks.==YaCy Proxy wird beendet, nachdem alle ausstehenden Aufgaben abgearbeitet wurden. Please send us feed-back!==Bitte senden Sie uns Feedback! We don't track YaCy users, YaCy does not send 'home-pings', we do not even know how many people use YaCy as their private search engine.==Wir tracken YaCy Benutzer nicht. YaCy sendet keine 'Pings nach Hause'. Wir wissen noch nicht einmal wie viele Menschen YaCy als ihre private Suchmaschine verwenden. -Therefore we like to ask you: do you like YaCy? Will you use it again... if not, why? Is is possible that we change a bit to suit your needs?==Darum wollen wir Sie fragen: Mögen Sie YaCy? Werden sie es wieder verwenden ... wenn nicht ... Warum? Ist es möglich dass wir uns verändern, um uns Ihren Anforderungen anzupassen? +Therefore we like to ask you: do you like YaCy? Will you use it again... if not, why? Is it possible that we change a bit to suit your needs?==Darum wollen wir Sie fragen: Mögen Sie YaCy? Werden sie es wieder verwenden ... wenn nicht ... Warum? Ist es möglich dass wir uns verändern, um uns Ihren Anforderungen anzupassen? Please send us feed-back about your experience with an==Bitte senden Sie uns Ihr Feedback mit einer >anonymous message<==>anonymen Nachricht< or a<==oder einem< diff --git a/locales/fr.lng b/locales/fr.lng index 5fce4f69d..c21cf4019 100644 --- a/locales/fr.lng +++ b/locales/fr.lng @@ -1809,7 +1809,7 @@ See you soon!==À bientôt! Application will terminate after working off all scheduled tasks.==L'application se terminera après avoir achevé toutes les tâches planifiées. Please send us feed-back!==Envoyez-nous vos commentaires! We don't track YaCy users, YaCy does not send 'home-pings', we do not even know how many people use YaCy as their private search engine.==Nous ne traçons pas les utilisateurs de YaCy, YaCy n'envoie pas de "home-pings", nous ne savons même pas combien de gens utilisent YaCy comme moteur de recherche. -Therefore we like to ask you: do you like YaCy? Will you use it again... if not, why? Is is possible that we change a bit to suit your needs?==C'est pourquoi nous aimerions beaucoup que vous nous disiez ce que vous pensez de YaCy. Appréciez-vous YaCy? Allez-vous l'utiliser à nouveau... si non, pourquoi? Nous pouvons peut-être modifier YaCy pour qu'il réponde à vos besoins. +Therefore we like to ask you: do you like YaCy? Will you use it again... if not, why? Is it possible that we change a bit to suit your needs?==C'est pourquoi nous aimerions beaucoup que vous nous disiez ce que vous pensez de YaCy. Appréciez-vous YaCy? Allez-vous l'utiliser à nouveau... si non, pourquoi? Nous pouvons peut-être modifier YaCy pour qu'il réponde à vos besoins. Please send us feed-back about your experience with an==Vous pouvez nous faire parvenir vos commentaires avec un anonymous message==message anonyme or a
      ==ou un
      diff --git a/locales/ru.lng b/locales/ru.lng index a9cbdaeb1..c183e1ddd 100644 --- a/locales/ru.lng +++ b/locales/ru.lng @@ -3481,7 +3481,7 @@ Just a moment, please!==Пожалуйста, подождите! Application will terminate after working off all scheduled tasks.==Приложение завершает свою работу. Please send us feed-back!==Пожалуйста, отправляйте нам отзывы! We don't track YaCy users, YaCy does not send 'home-pings', we do not even know how many people use YaCy as their private search engine.==Мы не следим за пользователями YaCy. Мы даже не знаем как много людей пользуются поиском YaCy для личных целей. -Therefore we like to ask you: do you like YaCy? Will you use it again... if not, why? Is is possible that we change a bit to suit your needs?==Спросите себя: за что вам нравится YaCy? Вы будете использовать его снова... или нет... почему? +Therefore we like to ask you: do you like YaCy? Will you use it again... if not, why? Is it possible that we change a bit to suit your needs?==Спросите себя: за что вам нравится YaCy? Вы будете использовать его снова... или нет... почему? Please send us feed-back about your experience with an==Пожалуйста, отправьте нам отзыв о вашем опыте использования >anonymous message<==>анонимно< or a<==или< From 09d3dd13d6632bb3cc9b5df9f0da1fb9d42d7ca2 Mon Sep 17 00:00:00 2001 From: reger Date: Thu, 24 Dec 2015 19:39:37 +0100 Subject: [PATCH 28/32] limit bookmark tag cloud font-size to 2.0em --- htroot/Bookmarks.java | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/htroot/Bookmarks.java b/htroot/Bookmarks.java index a5a4b3342..905787de4 100644 --- a/htroot/Bookmarks.java +++ b/htroot/Bookmarks.java @@ -76,6 +76,9 @@ public class Bookmarks { final static boolean TAGS = false; final static boolean FOLDERS = true; + final static float TAGCLOUD_FONTSIZE_MIN = 0.75f; // min font-size in em + final static float TAGCLOUD_FONTSIZE_MAX = 2.0f; // max font-size in em + public static serverObjects respond(final RequestHeader header, final serverObjects post, final serverSwitch env) { int max_count = 10; @@ -455,7 +458,7 @@ public class Bookmarks { } } else { // font-size is pseudo-rounded to 2 decimals - prop.put("display_"+id+"_"+count+"_size", Math.round((1.1f+Math.log(tag.size())/4f)*100.0f)/100.0f); + prop.put("display_"+id+"_"+count+"_size", Math.min(TAGCLOUD_FONTSIZE_MAX, Math.round((TAGCLOUD_FONTSIZE_MIN + Math.log(tag.size())/4f)*100.0f)/100.0f)); } count++; } From 7f6ee76eb93b45f11e639031545b3e17b2947211 Mon Sep 17 00:00:00 2001 From: reger Date: Fri, 25 Dec 2015 00:53:16 +0100 Subject: [PATCH 29/32] upd to ImageIO 3.2.1 --- .classpath | 14 +++++++------- build.xml | 14 +++++++------- ...n-image-3.2.jar => common-image-3.2.1.jar} | Bin 84462 -> 84466 bytes ...{common-io-3.2.jar => common-io-3.2.1.jar} | Bin 90798 -> 90800 bytes ...mon-lang-3.2.jar => common-lang-3.2.1.jar} | Bin 121068 -> 121070 bytes ...geio-bmp-3.2.jar => imageio-bmp-3.2.1.jar} | Bin 54771 -> 54773 bytes ...io-core-3.2.jar => imageio-core-3.2.1.jar} | Bin 65230 -> 65232 bytes ...ata-3.2.jar => imageio-metadata-3.2.1.jar} | Bin 73475 -> 73478 bytes ...io-tiff-3.2.jar => imageio-tiff-3.2.1.jar} | Bin 88356 -> 88359 bytes nbproject/project.xml | 2 +- pom.xml | 9 ++------- 11 files changed, 17 insertions(+), 22 deletions(-) rename lib/{common-image-3.2.jar => common-image-3.2.1.jar} (79%) rename lib/{common-io-3.2.jar => common-io-3.2.1.jar} (86%) rename lib/{common-lang-3.2.jar => common-lang-3.2.1.jar} (87%) rename lib/{imageio-bmp-3.2.jar => imageio-bmp-3.2.1.jar} (85%) mode change 100755 => 100644 rename lib/{imageio-core-3.2.jar => imageio-core-3.2.1.jar} (85%) rename lib/{imageio-metadata-3.2.jar => imageio-metadata-3.2.1.jar} (85%) rename lib/{imageio-tiff-3.2.jar => imageio-tiff-3.2.1.jar} (87%) diff --git a/.classpath b/.classpath index 0dd721534..3d14a80c5 100644 --- a/.classpath +++ b/.classpath @@ -93,13 +93,13 @@ - - - - - - - + + + + + + + diff --git a/build.xml b/build.xml index 95cc602ac..43548fd9a 100644 --- a/build.xml +++ b/build.xml @@ -165,9 +165,9 @@ - - - + + + @@ -182,10 +182,10 @@ - - - - + + + + diff --git a/lib/common-image-3.2.jar b/lib/common-image-3.2.1.jar similarity index 79% rename from lib/common-image-3.2.jar rename to lib/common-image-3.2.1.jar index 385c55bd57af6f6377209af8d3ebf0b6ae04f408..63f9e8d8af772fb43a3f2ddeec24d89503061886 100644 GIT binary patch delta 10996 zcmZ8{WmuHq7A-?JLwC1ycXx+$cXvqY(A_nZNOun@-6bdz3aE5{fN2SI z7_7V2*<=`PF~eZDrbatLv}-?J@jG&wpZ5s)5PbhTd35ItfWOU>LGs`-tj#94Qcf)$ zmO$XBICb=3HGG2X8CL$0JpT}*6^&>Bxm(&X%4UTza5Cix@N44fMUTFp)5MY;I`;OC zOGNvKe8u}&Z~*9NtK?ApSkLLajpn8(M9xD$Q0(hsxWf^APV?S3on!L?CVbCI`9m2= ziCz}3Id83s-@$4h7kxY#-u!G(IUIuD9(xoTbgbP78X&eO)Ko!2J`E^O{s;pDqXU3} z`M;BHc8phe4*vIne@52st{mw`093eVGTk1)27QA8Jb&JhX@D;r6v!b+1ECDSfEjGe z51@d|;@`kRBUoq5;68o;SvnT+6jb}2xEdJ>;%MXnP>H1>RDuTq(mkO=DIga)0u*ra z2ckehox}kmRLoh+40aI$;6uL38$i2)@MwwuEk*i^8B8e*z=JfsO#Yj>PJ$WYqMHV# zApiqYXcS^;==B#Y8cF{Jq$XI*f3x#5gC#@(L=d;g*MC!R*0O-#i2`sTtkF- zB%izVIdJ?N{*w?Y#5-DtMj&^`cz+iH>ns);0aG9Xcp)Fp?f;IzI^%=5T^|0WIFX;J zlxxUe>Q4UTJnyBCgbN~_P z!xjyhw0cs=Yy=A22_{a4n~r)yRguA@xR}P%P;LYbC<;tOijz-bV%mG*PdRlG zSU*`^<6mD-g__& z7EUJWOck&tWOhy{7GS1e#wm#>gcrdVE##l-cZtK%^I?F6tb206nXG$efRwCzV!&AV zLSIbCDrDUzx!`dcMtAEpxc2wjnyY&6&_EaB1x0{F_HY^&`qsNGnVFx83gY~rl#(rT z#0!-Bj49CQK%dZkXK1ig(*8IYkw~F;W6jz2^BC2y3|1^e^7~O3p>MRSBvi?pr|6tH zo4<)HUW~1hT9AxM5EZ6u{w68R-lW9PoILl0%kT^yguy5KZ4+Wh_KvroED6NlZ;}M! z>JLuRAYQXd(jZ;KaXW1gz96Lpxe+c)0TPS%gvH9p6v@WPI5F`seaQBNkT?4Kr8tq~ zF{K4LJ%N*epIn})k^?zzLE1%12t zRtee{-2zQ7anN{Y@I<&C{qBbIjh{NHugS!lr?ArbdFw!Wktda(qr?hkdd>WD68Fb6 zQ?m4jdqln$6LR;;i|s3`Ab}l<+!CAD{=2rfKhEd$=nrG@!QxuS-O>|ACQtkI8g{Go zst;T@IG1oq9Gd=9ELwB*qEUnTa* zQmu~im!PCVG$Qq;DCox?CuY>9R}o4+*dat?KZOcjiHz=2Qibc2j&Ru6cf}tIOzKHH zWxR0YGGktxMhYLl%=y5PRS@p&M|Mm)Mitl{>R$;1HUmP7BOE^m?CnNYM7)bUMSSo!`Ysj8Sb zsK(L5pIAz$ej6mdt*!rd?wGQsq_b(JPU&FJ2Q~|qks!|m<7?@Z02BYzk530wRBC>; zR2Bs$ng*%nZ5DQ(X1}(=HXcP`OJR&44e=DVnwh`TpH>0R+$tMh>)~NZekms;NbX3D9nJ~UeLOYFj9P~39B`C$wHX1 z4YnuDB-jCQNRI7*GqdnELR8{>TT&!l)~$YO|5W_ReLKz_4OyN|I2Xj;sKp(=uX)FZ4eFS zi=sj*kS75^=!Dd9%r5gKUUU3*mr{UPS;bD$bkEctB?qhW zv3^r0_sW{KAV|)bwonmOYDGCov`7khy2p;2$CxCBZEDuT4pPh_-?B3qt+x>&n-{N0 zHJTvb$x&;peZy!*JQ64QNIw^Qb9=`W8QaY$h~Xp-;rGk-Zz{WcIl-~}qM;&V1`9`L zor(Q|K8BW=HJ+tGIVF}=C9~VLezgv>Bp1*2Z3iE0L+-s!szp7HD` zI=|HOyi76bcW4qaqrC4^C5dJ{ZgYl5vQqp<9Y^bcd|oDXGY45MqHex@jLoB=Gt5K7 zAf{JKEut<{A+E7+GX?nQi=u1wcuvrd3e)o=68M+hE-5n+&{QU_ngTkHz z{b4|`-_E>p^+F=@fs*{EkiK1PQr5v9I*6QY=)P57x5z#^iG*)bBLS1{Gi)qZ{-@*y zr%yPP^*kR8qrCK;z46WMMepyU1;Vg~75URJ1+J=sbRyP zjJ>5~!b?Vfq#yeXpXomkM`tp^z& z^e;MerhcFaPqg7j@T2gqyM3m?9%x1I6VP*3o)#+*(N_>3x? z9&RWvoHxU@L6PQOn(0%YI#Y6)ctvAYT}Ws>bxt(e8v*RA#f*-|#n+%JqD*I0PydGI zoah6{u_^_hy*cW>j?Ay!u;Jqn@&`F$b1ZmhPDzmuK&10mTQ(M>5S#kRrUBw;%pUx$ z?>8A$WBjbdLR-@G1ngr5hV|EDf6$BW)%y-__LH685NOqVKa?i;a3!Ufs4WsHk#;UB z9^QwLjvJA?@@g~s5bklD1X1WdfYeT52pF19>j)`EPy7-!c7u}!V%Y$}b_xOY0rDLjjL zBiOUTM_opV3h+yqeFB~aC=f4Ty>$a;zNz-KI@zm6}TgF*ODcs{0 z_>?p51|CU$(%O3^a-7U2#sR8*@-$2qIYxN8@;W`dz3-FZIpddT)PFI8TegCof~%?~ zmL~mSi65P|C(X>ZRDaGkxXKbUJ7FnWb-OSm+>uOmw=gA~1~X2GX}vHboR}=bQ*%ZN z0f{Hzfy5(92K{uOMDz|($2l6O*L>~u8`rf$xQ_%fmnL-^!*%{>v#&u@YHl7&=QsWE z{Ga*bVvjX~gWeMZOvhB(FFwBu*yqP|Vw)f%S5E0S^zJ0oM(JKo++x`9RW-OD#V%6{g3y?VA7PJ1FCz)Q9_F(ZNUH5U z<);f04&iXH5}m$YxVip?tM_H2Z`RR0v}#xLMChvMwU{y9u041gtWU+B&COQ1RPSvRIZ~P=Qleqo8h3 z9oPML1DoAUoN}aN078lSm(R=dTTZXy^AK_~{mc8=o4?HKE`aPe>q-Yg@5B3C8-#zl z)|Bp>+}8cx?isqo!R_#|#tp23H~Bd$)q0b46jg52)re2)_bJB(U+ja=7t0dF_Nf() zP^H}tvx37i__2^qKf~C$jal*E0&F&22K-z@LAkkKQxKd7>gE7z>RJD2!7x8Wg#y>oN5J=e)MK# zC@mzAcsZ66@U5QfsQ}&ecF;dkN>(E*1PE6el88B-nx|nztecTYmS|p4Vdxu3J*9g@jvS3+BMnJzzaZpJa83A=cqjoYvgO_&0e+N5|p2{$HQr%0YKPHB#!x1c3Z9gcfR zBTE7?Ef5T=e0x#4_uYz z#_$fnaAI*mm629am~cc0rx#Knjfi=v-8{*o3gX6(j{OntmyQXS{)*05a+pF>V8BL$ zxf!T+K|$0=9EIo;Pv+c#(M2GwS9iH31567BdI-)QQ>lmuQz071j_BP;ezQ}&1|HZ6 zHozg$V4v1C`SeqjA_eWK_1nyoZ+wwU3d=7FB^x1&sJ#s2WzXKQEK^>TMBx;}qN7|&C!*DAa+)1KZJ|53(>gFP;5q{~8( zU!)*5Sb)7gh0f>t}yVBQCeL|8DZVoi~?kQJ?yT%P({WFI3ho-eGN&3#RaW zozTvCm{%m|YP@(^T0FI7*o_79gD-txx@E1`*+`In7s9QZ=E5^NprRDf#^xl^mpBR& zEAS|alPi?ZotI{-<3M_0J}}I2f^>B?hKR@wU4=1=j8x=>EK($)J?rXwbrFsvIm!_($Dz^@-w9Cfy#$a+v02g2WF;F)X0 z8r5A!ci~9*h~9<}UzMFQp=jr!O8Snrh>#^tS|ef4tp*2xEARs#UsFKX)*m>~`GiS? z6W5_XWWrh_F0+cc8Hq?Ji??j7i5*5HOyE9Sh8e`ckuFKB^k+7#an)+dcK08(48}e^bFDzN|4hkAwKCqi z%-^KBGA*9GoZ!f3liyY~aB1{;qsxf;4gTHqSOZBP;-i01&6#ods_)(RuvLP`w#~7i zZ;`9NUZ;fTDW6#Xq{0Guif>HBR8SSfb-mBgz3gS>WE~B5K3ASf!=tr5;zX7l5 zhrh$^({s&g7!R#axKm9Z6D}-oB(FaSF_NtjF2vMwMq-uUItmGt zWX#SHPe;*_Q-uW0yX@^Xt(Gm)e*^Yg_h~+YFq?;hB3)D)GzI z{*<+Y8@6)HL=NDJyB@sA#L)SO^%nTBGP{@zBWiUcM43{2t9kTN#kU`@Hf+KdUncR3 z`x?NTXi3;+@876d5G|tUV|pK>e_x{2Ob(}c3sZ6h!Zj#;Cl`+cL~HYdw2O5IaC@>Y zyJ9Xk)MU`CRW~aO!7gU#HX|Dt>&1$Uw%TUCM>f#ci|rcqwav7%sZ)sPCdH=qmN87# z|4C5vI`7jDrWOITV>aoZ>d80XDUMxDL|SSEM`|hGQdf9YX8Z03>LwfK=u+rO)QZb3 zB-c--fa*{gwGoPHXZ>3JUOUK@Pr09Rx^11C604nOe;d!hYG=e+Lc=l@8kcUyAM6OD2ujQY-j9wbS0lfvl| z&3UACB`Gj47GV(${6-IdTSz6K_jOWjftB1^4sNmHdwY7Z|!mCaycGls6;ZAvQ&o-H|TWJ{(wsGj(6h zzKY*<;4~yD@JtWM2)I!b(qWEm`ZK|X?*e=A!)Vvc$0s?zekhRfc360*SfBfTmQ(F4 zBUOU`@sRKB+3EGZWw*fs%DV;)ECGx@7BjOx{+PD^#a;Gendy%w z5t8Mxm^YIqm0>mJ_^pp49))Xknwn=h`{a^zlJ;KU=*_v^Eju;kR&%pD>wE_N;QQ#b zzA}EVr@~Z>U8EP!GDLH}?wx79LbY5{U2bV!X_)*VeeNLAZO6lSa}1V!XN<$wP^iLM z9oe<@$|rW@5N93BCn{28XhS`DZKl!xt>tV!_P|?9rDRQ7(V3Vv=;utBwm6SR$Mus~ zeo=W9wzz#Ig?(*PAy+Fu2m-SIg~QD?sXfpyAC{Adm{}%;M~Wt6AT0j{A?3s9fImOL zYe|;LF1;|#b|^RtjgJ+}gq2bc!t8;Ohx!HL=z*4pdE0E|U~hZI#1gH}k6T~|S>teF z?;hD1(Bh};wIv*2ZVS=OQn{*)ljTN=wTxG!siEEk+CxU@l7*B&2+lN@UvV}priVwq z+0Z-F>o=8c1-6B`Sg=gkwZ(lKVy8`RTCgEBmbqzi9!IN9?EX+s@7{bk9(@#e!Dg(X z-b7ki&{-Ahy2cWjP1TK-Mh)NaC7blzO^xpSH?hx_`WqAyw4HtuB^}@(#DTE%tR_gZ zY^!Eysz>%i6#MughcB)E#QPK#<%_Y3SBbAq36_lG3PX3yT$#ZK-HY^a-1sA798auPW=TbU2mreJ0s4jMp=} zVwKNhrd4h&AFJf5J~sR6n5e^rWj|bQWbJt!#EoYcYQPu8F-he2Alb`gtwU~}AUg&>0)8OqOM8Q zSkBP8hP!xixG+z-PD|7{5h8!?!pA>PvOO7-)vqh!y&Fezs5TcP0n(Xgig;#3g7QvfMfsF|hsDCZ6R1c?!{Md7b?5)Aa#){G01Zb`XmMVoBaW5uO)Z7Duhzenmd z2C?gdV`P6hraQs>F;4L^N^Nj9dWpu9 z3MXlY1+VEO^mK*Ws`N^bFG+umRZVx3fAgNPoV+%-k>rb7V4-gzA0ne+>Rd@3|Dj~x zhcDN<#BF?@f-R;_R}7p+u5Zs|j72z|RY6hHPPi3FWbz{Djmw`H4rAI@P9rQdn1}4p z()=m)Rw(WoJTwP#0mwX}qZYE=+dMml)7exgVj@)2_CU-tg?B;)BrTQW_F6h2QFfUM zWni^X={Jy9kJykw&!qQDd|F@mq$7fpes3uCMr3yMdJqq*VyAQz0Xg3@}#_3Z~mbXhH&UXy9Z$Z@Ez3x}Jx#=xD7Uqrn1?SIvGTGo5F*!3^^HhPa z0$ZjxBE&$_(I&1z;hDpK?*pm`Zx z{AnaEiJy7kN_j-lT}yiJ)rhQL(XW?Bq=A}EpJbHbU+Xq~rj1MNt&yG8$Z!ZG1D!L| zt6NP`AX6T(zZKks-QNteO?ggm7VFn`=_5 z3btpG^TN0w$;7!wEz>cp`H<4^5;VD;s2myG&Tafgb|USaCc}ir3(pIHEye1O{m7Ib z2=`X)mpuiz=Y;{8N#BP2MqM|g@vccr*KUGHhDy=As4rMAn4*HZzwT(rG?yM%F&523 zO0Wp?E|)R@>aZmR^$elgE}w^KK_pQsy**u$`RFsXgVUC#z}GifzFTIjv>@j$&6v%h zd;HqRQV)_a51U;n9f|AKmsqDu+M(>c$`avxbjI9<@2Sw|S7+mhgeha~k%xYd18M9X zWnvbifWJhd&v-b=A`LZ8E}sw&gVvG`;5*0Q1Zt(8e`0DMHW2MRH>MdntZ#u}&EAO1 zIhq$^T`?;M#%|zWN?oMf)Pr>C*|R0j5`4S4ABWBE_EBQKB56HVaX*%J6TW!^>(qV4 zq57%S>>-0@PnhGi5#!#7*@J#h;bG5}yIrz$IC$3f#(~!f9Ss0c7~9_jdZ(;)1d}=O zBdez;)8>RD*vBT*<|T&B9c^-Y$E>y73C1na3A#}#*kj`7>-}zc+yLzw3&P6#BU!Dz z^N;&Ym=OK32-q8Seei4m?l64Z|3=n0Rajs)BF>IZ;AS zx((D}I3Sq1jiw;sYm~YmmM7i@+3;*k1x?a`WQ-hH#U3^4xn%bdr2<*p3Z6|SnsD6Dlm-_-12p9}$O-Je#K%6s7ip=CX3Cb)P%PAQ(!Gvi zwI@Z7bzNd8s(v`-dxabky)2{qu6uLoT%6&p%M?wuBq{qyhlH#rNIJ0Uvlqe#`4g>d zPmp7sGAFwu0<4zY5>Cpz(3`;gP3$;RZ3_nDA>&u3Un+YqyH^A$Hrnrxmguv5`iUc( zbT~Z>qZmiSc_u2a`5x~KeG=D0rTC1%{M-O)5Z^R%I(;)A9)5;)?fMW^bcb`?ZGsHu zLRQ~PJDFTYaw#M;9xtzGw^_~+-3pvwlgZAl5HN4Fx8)ar@mzj164|uEgG~+kGh^{}w)FW!lO=vtcy&B(TIso6<=26 zHSNzt`zxft9ZvK)6JQEm$?n+TPo*QY;Pf!bX(1u;!RE!<>3XZSV8QR5riU2#rAs59 zh!0Pow{}$AN=+0epW9Sl||300$K8@B+l3fPwG%0REv|_y8tQ zFvSPZg918!fF%^f@B_@D;D8@s2L&$$0B%q)EC4Wt0y;r}5fp?90*s+xRS@tJ3iyNo z22hY91ki~4JQ=) z7x5AU*h9tN!~hylz%Kr;v3T)+;&t(VC8Q+&MZgjO2dEfU^4|oVCI9vFQSzUdLkeI4 z)uc)NTa7CzfHgGo?7#cFKHbs)D`yw2sLAO_u_>v`bGTZ*vUTJ5{|?jt7%7?lXK*dpT@fGvy}POu0i=M7 zKmW6U&lCZ~RL}RA!vFgP68-N;7?{#fIWDk=BH+azDF)a=34lxWr_DcS`aehd`3n8- ZQyQws^S^p{@Qf0G1d)^X`RfVue*olr{BZyP delta 10965 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 T;6L99H2^Itx6tGBhw%RZx}7X@ diff --git a/lib/common-io-3.2.jar b/lib/common-io-3.2.1.jar similarity index 86% rename from lib/common-io-3.2.jar rename to lib/common-io-3.2.1.jar index 950515aedeac6c21b51d1d96a8d746118f045677..5c30bbf89086c2e0d062a1b675624e9909015887 100644 GIT binary patch delta 4214 zcmZWs3s_S}7QRCu3E>rz&;X%?hlCIW0tE!|0W0AZ-Y5v+DHQ~zR6lAJtq4@Xst6nF zl(p-tR!|jdMftijW2Nl1ZdNe*2c&2=XS5lGglOGS;xi1yI z^SuA^lXKz1><7U+;*!J?>E+v(*r)417}LxCIE9E-ve<8~d3|#qK@gFEK<_g_pUK%9 zjEu8?x@eS{pXW9&FNmUE3tSk~^FtuV&uhRFKc|5gey-QChyH0mSDmWE(HPvRCwWvy zt%D6Ug%VPww?z-Xj1No5DNZE|zhqcT)D666m|oB4F|o0pFNdNCU_>%3Nm`&+E`#|I zz>J)*$^w|2Va>q&(=)7P@OmU*!JUzSspd-tHKN$cC#8<38Q9V* z_keCuXc<%Ii`X@?SDuR@(%17kJ<#_N(E~@n6q-}!pG?P5<}V|;LD94piV*IMLpeC2 zWWuf(U{0P5y-GV+93>-+9cXcs8@YSspERd`6pI>@ zpU1!P8jkwc4b^nsY6?Bb#)2{0rJBMt0}OL^7t$&4^^~aPyDik#K}@oD-+e4c)>W*d z2cpVMdQe=&o#%c$5JHOtU_cHX+^&oDRMku~Jb1JAI_*+%6mlsZ=t22vM9i%-#5+!I zZ62iKi)k~%132OY?8$xYy0m_ozeIhYok#Xuc|jYf(3nZUn4G@mK`ZylC1g@}DfXYd zH}DX9fOb~`xhfze_5aPp5WLR<_OLDq=)(0XG(ULg6ut8J@Cdy!CUBDhkL3TvptDt1 zAt9HK?5BzSqbKyKpw#+45@?(P9Le^H0i1pE;N%iIF*m0o=>0&BQydprZFEs!e?1lFszIv9N4y32Y` z)3uE(15bq)TjXsmZ5TS66Y$Zw%DnW16%L)RRWN<8eCWIEjatjkT&9opGOHc$_$Q?L zZSn|YeA~bAPH0K~CqpVp^4&|#6C0FD*RaozKYw%M-QAf1&NfBL;m#!mrrC*8kBy=R z3#u~v^`Gb%-b}uwtht#~Ydf0s#q)=D-rGJs*_g+8{n@RUVyVB}_~$IHaAJ#|-_4@u z8;b06t1hJd{4zb-Pu9&c*_rS5@~Ka1`TioH_2zR&9M4toBS`M$4Vhi7)^nvXy2nk>1rr$ag3t>Ae&?%h(kGce@0#s~UO zyF|~u@{W~XkBR$k@fiEasiO~Xyc-Y%PDt3t}zueD7 zJS!jw0r4KH;?YW=BVf#4ZLl>2cp4!WgJ&-S_%Z}|#i9@T|84;KI^Yt&1uQ~QQuo1p zwO42GW^WH_Mj}w(mkD5XC@{2nm1(BM+(R*ia0oG}g9ArGfk>x?GFmy$bN*EkOD&N< zXc1hH)`w}7+QN{Mvkt5`2IlaBmNiWWyEhgFxY)fO(v0t*LlF6BD_6`a6U514HN_OF zReDx1Rtc;zJKHzcV~HL?^yw4CA}zL)o`!7)m&R*C|7~b%;Tje}m>Cg-lNP(1L$RS@ zIIzK?yM-f%OLZ&Dk-il&VH>)jue|JI0S=wj?!KqT^QzyTX)u4bN?+T4HTxO}l6rJsXRr5)oitd9hK zc={MM{i+O2m&3kr%|0umknt-yGTN(O%8lmY{pEa-`&&rzCQ6;BRunFtus#-;tJ6KL z;oC_X9sOve^I{Q&h~U|1z*h(PaG`9KCVTcfI~fF0+KWz;hnAYiZ+4CY&d2cOoDy9` z4M9{FE$TLZnraZE*>l$zwCHUGwyL>70{q?JSocs!LMV-Bx`_oC8KsbQ${EBE4yZIC z1R&RS-ie|RTUZne=+sKdtic^<&zGUTPWyXZ2kT-%5Egw#O;xU>rrJR7IKao&@Hk}M z6i->jusja%u=Ssmb!Y?1xKM4JXFHcduo3}V3N!#$-CV%KAkNByBexd5KpEL@{;C@v z7vdRxg?6xIr6!afO6uh<49Iso<9)!3`>sO3wtX7F0=7kKygEz)Co3ob_OAl;mwZTn z?2Hlm<~z~PS!*jyDlyYB9@x>L#-r))RAD13BuZ@Tqm1PTXN8h zjfC===aACXz!D?JC`8dlA*jdVt3PNngHx+D=`=`0U`jilwmcDd;iY+{g$8%f0g<6I zr~RFlUD3$!U~8i0ltbMY=H@7kKcJtzmZO)iscnbMAu9=3VBJ30;~kCa!8TM6v2 zn_{X}-R5&2O;HkZ?b`tiu)eXF1BNKzt3eF>G5FeCJ@nuAcyu4~+ZL^{K+6;65MoQ_ zim&Z(ZURJ16U5XmzCR7)T(qb(2XR=17Q68y%t%3X!GDAetx)HP^Xi_A5TlV9L@;;U z_E1R2=nSF@zfK0YPlmTCWZeXX$kgX21h`t^I@j%x`o$3PS%I?XrR94$OiuxUIDszR z4spLA!Xo6lpBAZW3TwjA6hK#0ZYo+yI89ldU~ZDe=k>_S7-RwXI}13#+EmR~&`OyP z8Dp~$x2$k76`0~MP0|qdtK}TVccJfly04*X^m7I~>gbAvTnfrs2ZP&Y5kSc@C!6pE`ca_oQAtO1`Gpd1kBmnwr>sEj0ye zQ~1m`byx0oyqTx6UFY@ew~<{@eZMSrm_5Gx=qjTeMbrKx&(A+=f6Fg#ZG3)1V_D}* zqg}ftSvr+}1^nxS$NqD^&Aq2=9Ox`6y!_&D-|Vd(>yDnycvN_OI4=xB2@YM)x~CuIic=+vwruT5o&rrK3TS?LOL zpB9YPq;2wyFq$k2sL<<>JD+_QAsKl$BX9P7gy%y(H}YoVp+uxbC-Dr_z#R6?l<;UC z0m?JPOoH}@+T>%nM~sa_(KN=)@FQKKS0EH2B1#iU@Rd+x&O9~m;FMX!QUQpTHN$bK zWD@3A+nt<2fly5UVrxJjvAai@(nRm+5GGEbh1 zYa+fFl`NH@%zSSZH!$$E;RY@XR&hGnehFM)*?toIt`f3vTDFkmf+T5~uNGY_*TKz7 zWW}5fzRpD%7cF6m<-c%hanYW5cO=qfE`(p=#A-vPSb3hL$iziEa=Eq-5=y2#X3=z# zU*E=Kq-1n?h8I)2{V5kzc}9{U5gTS@aOuzY7UQ(#NW`cPJs?h)>il=Pfo;JWWCq>Q zXnZvNKw?FgT+*hm9u+e6g?A?V#)8b%qsO#}gM?!`7G$utQZ32Qrzk+l)g8tx&G0EZ_bgIZ4;lt}tlTVRj&b4h?k?R+P6j(pWZi7s*; zSxXZMGOO*Dq68~;lfnxEkc1504M0oDpfUg{_=iFCG602UE=ap3v+924HtViW`iG%P z*-~dm(@%5GZ2o>*oesa+z00xW%=ne-#)prV=BwT*e%ktc)$wrS4v$KI8;_<7KL&0{ zd#f~I!$q`i%?BU{a{a-UB&I?ImV|S7rLY;B{uWY z(^8f_bl=w9z*8s%*Rt|-L)@RIt}qq5y<^ka5fNN{;FQ1d))w318L@(nqRfbO`)<;k zOWe*?95=dU|K0n}x^;qWX`gM`@wD$6-74IUC?WMfKDX6QqxAIjs2k9iu0W*Bj7kqz$=ySw!3t&2ndmLj zpwQN!{Z27u+ zi|7A(<$cP6qISYAA0bD)Y5d8P57!4FZvjlJz{!K6C>Z(pOx-8g1A_aRQh)fr35N+e zE?y%83!EB^YdcrNm`uz`% z2tlswlEPO*fIz~-!@9`IWC{Z(Oysd~(1&?Cu58L&H(34_#=_i*M^S0er=^qp6jiq8 z2)37_ND-^FeqO5ALT!p_)u*Vr8cHs>P>z<7AnwT_h-L$l8k}tQ1e_BJ;9emM(&vR{ zSfW5igwniwB>gf_&IC%S24xxkM<`lAtb17Ni!;F50nb#R83dfC0Pw6Wz17Zv?zc6; z{jqAwZ%2xF7lEn|9Sbzy z9z8A-5Pl*oXN6L4x-i@d-w%h4j_tK!1c0M+0kpvt5y+el^fkrOzzBbopf2m)Engoiffe#O%rPeoU)#e$+gZv@*H;tLg<03J3zQebD$|^6 z>y=>OK!2&U!cQXA^&5!W58==ycw8E_`L-c=9Ld7}PG$YO2K-8N{M3V-~K9R)?sH z2FGIuSOI$*nSrgBBRdk(g5@B|I5Z(~Bj5=ZJe5y)e$2NZUP;%A^q-aspps4SxM@_< z7@NhQ`CRHTV7#NY2>qTFK!2wl562@BZE}n2 zJdxaICG{Pw#ESm2WBRMT!0*tL!9%bYH~_h$2C;TGQOBEBB5OjDvl2*pdq~^sR;pLl z0~Wm1OWN)?ppWemkdTxrBmA~^A`oXlsU#Z2MgwYX3$ok@cWwgETpLsiwCRySeXN4D zNQB+2aQzG77;bKF5dIrZi8bB88vteV(cnKgGNEZsw~h#2ZCd54fam(?q!bUWLLx#I z)L1&W2L48VY&vyknLa+DF2wU<)N686BC_G%)rFHU-<xfa_WLr^b_V zZrPY60s6>#5+ygu=??5B{@y(KNf&nGfEeazB(v9^(}#Pd89tMQtckvXMd9IHpdSvW zkgJBizSE?>B{oS`2V|EFuJ5~YqVQzo%QcimKbLYSdqKrFlOaR)e)<4J$Q_R*!;)ve z?NZ=-1ujTIZW>2Dd+B)1|7&|Ud(@Y(2L2+r)ds3BR^(na?=_3EJwtdX1qIo|6)TXt c==(!vFvP diff --git a/lib/common-lang-3.2.jar b/lib/common-lang-3.2.1.jar similarity index 87% rename from lib/common-lang-3.2.jar rename to lib/common-lang-3.2.1.jar index a0f9503bb7d09d4fae51729ccdb0cba53a021537..76ff63170b3b7c79afeb4a5d9aca03fe03a5c401 100644 GIT binary patch delta 3350 zcmY*b2~bp57VQhzG)oH#fXh4nxU}PQ zM+gwKM1)WKmAwTcpg<$C2rht5sSz>GK-5y4`TxGxIH8LA=bd-ox!YU1uTa0gP+uOf zSXa+bB9TcX2Vzo>$S3QHAIC3KZf~fbXzKCS>!a=>$NEwIFM|wQy=~$=iVY=8rPZC+=F~mXWsd;)tjZ8}@5l-BKO1Beo>X?j3;5 zyD$1rKXY5Y&2X$*R_5~1xUS^&^C>_1Hk|FqXjHAbU>8;TmHV+$Zq%bl>$5+2W~4kT zR35rKbi6C?=F7bu`;0Br!OvfX#hPRlnN67B`mOS5yIWi1aK z@@cxeb@QJ;z1SG{s#@>8|3}lFIQ!o1>Tyw_0gLrzVL=goO%jP@2}mTLv)&hz>M4-J ze|iF1w{gAlJ227}=9Ez|9lv*Al2T(MRaSuk8_&cq=*+|KLLFx|R*+3DAj86%OJp*c zM3l+5QE-oRN=(s47?9;fFp_IFd#8g;V3(*a=RR75>xu-Kx)c4$Ii;1Qp2%?dHm^pY zZTH|Lu4?iUYS$SDlZa_CjNyD0O}1z_!8;t#aDw+N?)u_mIN$<&BM}ho3aPSSu>m=( z0x9>#FWv-~t`9MiAxMavhF(e6K2RLzVGPN?D#SbRLm$RVyj+mBtGCrPBFNq_mx)$?Jbv&_Vh+1?TYGiVnI56~w3pMsa(8wV(<@la(L)Mv{#+ zAXoOjd@Tl{w9iv;ANy|7Kt^o<1=si68`jRjpQzM(je-Q+0z>ZFy9tyLq$p$jVPIIC zGEPG_R7~8BNU8Qi39Ty=8qfbj51!F=eo1I#z~@NehCYVGC@C?n1p_{FBt%d_;fyHA zs#-ART}MMH#>oHI0u1Q^6p}w)2Nt~d7vO|J5^>Lw)pa1}c^h~^Ic%nBJxB>x2V?mc zwlEgOc|AKgKqU`Pfq!Fc{GMrGKN>?4#Q6scAO=NvAu}^-5#kC76bU`vN?i!ubmfnE z0Bsd74CB#6+%T@ByFtk5xEDB3PFUu`8+b!BU5mqFA26dq)%(L8>hk0gxJL67YZ%r5 zmb`K$%p563$Ja)}H&{AeXrP+L)4CCKXg)&OhUh*NW~Y$T%`loDlMJKLPC3C_xT*Gl zDG5%2dQ=liL^I(tcf+^nUc4WOyalXzhdq!-BNFZ)9vz6c;w;kL0%m+y8tBtR1gG}o z%3YB1mWLn;PdvYifIH1v=*;ivOE{8y>DDMrQ;>`{FeVwTLV@<3g)%B6Zb_Wrcbo@Z z8V$3R^QtU3`bRS}eoqcOqN#}|K#(-zPyP%C^~5KXOt}P85iGw1Un4kk3H)_u3RC@; zAVFu-EfSj#E3BQXTW)Dm(iLeX_j5bU-#x#0CPHD~`Kz~M#s%^)ALgda&&{^>aqIVt zcTcwp7@Rc6ygMN;=i>d5eFj_R=Ejc54}00M?w>o(7rDW6l zr)K>870!2_J~rN7Z=YKdz0)kgMemaJR(XHVkI6f`dK<&r?A&8wU)rAvc@kBzE&q_x zH`Hd9f1otPa&>mLt#6OV!l8^moj#I1XOS4@%lh9Ff7dW#_znE(~D$x*T8?^FV=Y)z$!eEX$#e{=U_CC6uYynnT~+Wsf<BSy!gjFrCyI7V6U)2tu9tH<``Ro6P&bO=i687Y2%dVR>2IVm67lSm`xd zFu9gBHNF=7P`SRAg<)4GTmfQJx7V@UJL_OGGJf@th@hb!)*_gBo2@!{n>qc@ZHU3C z&^xRw)puAmrZzBeL<`?Ygjd^G~k0aCe19J z@Mbnu*334v*_nl%tNrOoiP{NAyh8hu%5%$8nNhrH50`9OuR<4w}{*DuYHLm SdshlM(g8uz$O7RWl>86+;5{4w delta 3326 zcmZ8j2~<=^7VQTJ4cP300R@dQHVWEC1zM?oYRFFNjz)=nGB%W#Qu28#_PWbSrx6oveppccOcgp0j@4Nup|Uv#z?eWQ`x4 zx~j?}^i5`h-M`wa_I$Th?po1s|C8pze)H~G1}2;@wEAM|w53tiLp?p+wk9Mwz7sM! zKv()&J-W6yyz-9<7k$y1&9Am5KYQZ${)@yzTfQ5kQCrBnqdH0qGMP*R^xs$YPX}UV zQDNWDjG`rLS8Er5wJF`xE(34VBlOt-!?exr=Gt4MBZ2{uBD<0})i3h$7-D}=Ysv8IxMjQkSgDFm&ni9|2Froat2vf-wx%v;(>nBW6-WZB{9>KAIdLF@JNmBt>2<7Tbln9#8I0SuG z+B~(D@L+bTEn2RQww5DEj2ne9Nyk=D5>*ilAo)c!-RCQNFkKSl&*j39HU9rEIuvis zit5ThV<+MMx(GQI9^Qcxxv)0z8cT9^@=FXEl(HNP*9N6b5+0_dFcvDZL8*;Tu_t-O zU@qv=Rg8+Rj3$gA=(lAu5U_nZtE_e}T3850I|gAf+N=W;$m$YGgJbp)7L!VZ=ilf5 zZ_&9g4;Mn#fkmvE=9#p>wWVN7u9SkKFfr#ei`;wImj(1X8mGVpAQeOOASY#KXpZ%T zdsre;>cl9w6!we#(1SL-LnUcC3U^BcRZer9E9^ZCmi>w1mL3P)aExLM@L{Sa)!dLg5nFrc$ z?b{w3ZR>-#XzO)UDZK5eVTstU0j1FMUtKD_Afx(H3Mj0XbmD=ZbBqYM}U|a#5V}F@E0wEVL3CyWkCoyvV6{mK?94H9Ra6U zWt2D4Wq`qA_I&WNks2n}#=%VFN~GPYU=dr_f(a{y67@TqOuFky_P2n8I3NWaP*3X- zJdD_-(_a1A0v04T6{;{{$_}eU%-IYdVh&PQiS0#j6IJPOl%++F9ucERbdD8kw*j3p z>13oqy-3&vFc)36!!kTq#54jQFcN4#USJsd{(Xg|YW3Tc^KxN2f_=FVX1bkj zJ<5ed6IDA|rGqH9%iZ^u+?_VdX=dlAk)K*6t)JWE1c+2s#B zGcug=w%nZOn(DpjqX#0Q|`TsF9`lGO!PJ=f}cT%^nIhiR`8#?p%~-Gp6!>}ERp zm&=ckJP1mSObBaKdk1@c7#bdQY)-saP)JkI+$W)4>c*Q9HlrIOpVW_uRH^2u3JQG2 z75Vr^#wRGkRX!@;+auN9Bbyow!nn4vzXXptKgRn>h(5H*&^pR9tkF~5*l4Jqt@CO# z{YI9(Fk{B>>=hYx!|lfT+js7(E?qyG-pCg6-4};UbNQTJz{&KlQGOv$5s7=vKQ37CRY^6?1>Gy*qLega0|>i!7`MleASK}Lxi*{`Se z(r_8{pg~9Po}@sMY&Z#v5VW3zj}c51_|~@qM51!H01>z~z5wPR$TWgm1+WSw5rtgm zNFg`>tq_*sR%{VHd8AkkMX&^ckI2DZ5f);Imm*Ii>J)^d&hb<5cLbKj94sq_1t_U1 zrdE=}cTYnUf+QnoJ5483+ESLld<6eAg6l@$SIW0`l|n4)yeWm{2;zQ*d6-Yx&pgB7 zXL!)GGd#m?BM2ztjQv=~{aBa7YV?y>4vW!GXF0^6B%p$u=TuN-sj2cx_z1yLBd9b2 zk1D>ER7F#jl-sL#FTAU%A4!r~O;eRBy;BWy5lpS2I+A2p4UH~=7d1TSyt5n>o#k~6 zI>&WV&T+yo7{U9syp@TyFdO|e)N;l~)KPk+=$qO1W)iJhzMT$0-kixu=-oz-`ok%5>c|QaquOtLpXHbN3mJYt31;+(z&OJAcrY(QY<;(Z&Z|`&V+2=(q z^HnX=R2IoJ;$j#F!=8Rza@5p;Ni8eNFKVLcf zRja4#o0Gvyz9L%h7i4|vv**AEo5z!nOQe_x!oU6*!H@LZ zY)=CU*vfEcLMkX{_@H%|5r|eE9*ovF+?|g?{Tc?Y65y5K3^w&FAT_wX5u(ZDVj!Bw zBA2r-GbwuAf>NG74_@_w8N9h%GO{JN$x{s`KI(aLI7z}kigN^5)OnaHd$YEk~Wjcb7)FuaS$p3m=ySdOKJ`odM21QQ`LlnHZ_kN zJNJy%sA^)-2k0!OsHWhQhDGL_AAe_8>Um^Y9YbF!sj3g7gHfBYzTrnY5Vz5p)^HpB z$-L$Snxbs0r1}(Ox4WSAoAxzmootsemqUC-M~plmrhA#-;Pf1~*3zUw+b6JDlHhjq zGlfyecBNlqk1S}*w^g&#SA4UJD@66B_KKLc{Gy$?QJ&&$hm-SCZHv6@?rh$DjWz23 z0$*G)6ZfWMGN1EYcJ?!_tAnC)iC7{BK5Eik%f+f32y@ zJrn!vsC-nC=Pqh$aVxT@J3L{ZF;n3E7ez!@&3A$Gj~I{7Y*n(HQscj7{WSfWNOB3j z=IEYY9-y}OJa%d4-JwKN%kW8cXOnTpOV{mz<%+u1w(EXTYOemdG}0qPU=|+}uwNLR zxnWgj`nrF`Bt--bihZOp{eQa<>9eupaoniCG%VwD`T6gvlOHa+_saD92aU%^%N+dP z*goxA+e~0%TAR?wJ2Ll!-s5h}ru~WB)yH!>LRzNw-CgdKqe*g$zIgui>*3S8JIY?x z@_r#QzAc?7Z1q!)ote4EKe_GeWxVx+`}bN;v~PG{dLwxgWAB32Jn7oxxzgt9Dqf$^ zS(xFwn=OkZ*c_v#&+Zk$tNnmUUvB}%;c%!i18lky<;~o#WdhbjV9bsRvQw)*s}63N zoVYvh$rebN+Fd^q)lS*n%f?~Xr(1$cU=#2+hZE^%*vSv~Y$@IRcI zIu8r~Ir9l-g<<>PM36-?Z~;?40D)2W3R9S&R6m+PST{XiinYd6c>PrZWDBkodCK^!L;5F%%vA@qG8N$()Hp;>E^(6klyhdo2Nda+G!dJA`Fr^ zkf{^!LCVlVRK(sP0zZ(Yhi_!@^>G?2hF)gFLS(Ql4dX1#(+L*q$?uEmR=$G70zQWM z7?@%OI`VsfJ!pYU2Zjm!gCYc*s}`dU6UJ^GVnZ|O@9w}F5UYwrvQsJoZz$Hu-kxl} zr@7D`)|t8P_e56+OV|`5mgaqUM=d7b2>zFJeu1QNR2jlfMI% delta 2625 zcmZ8i3sh4_8os%K5Rn9;k$^XlxXUV!MP)?-C?N6(B9MSZmSTCRG*${eD6LS_9E#M! zwnt$QwCjU{AcZQ1i&C4dq2Xm9#PCu<5Ty20ZL76{wp!cHotvdiIfpa3-~Y|`KW6@a zW}BFgo0uH=My8c5hOseh!KsWgjvJF&d@EGZ*NPrrxt`SZsd0=L;P}Z}Zl??>V^c~; zpYM&+=dwOb&zWhwe%AWhUEbE%#;5X`XDv;iyswN;I4K;v?LNl8^U|QR*;jtCk(WalP4kV`DIKbKNai`9QfAcl;A7_0hFwZo(m>>*kHnWfWk=i;wmd- zls6+Ic~}%HLjIXUcT$eJzdQBI&tAqBtn*#f13O^&AZ(cqdbQu4vJYC7vO#S8O~ ztV+5#Wr`>eZRC+fyAL9O_D`y@$nE_U}%TzL1huEq6 z;dB1>WkGg45Cf^R@>@Jx(MIQmM!_0 zYBlFNCNig&mu`(Yd4E*t>ls|G8nZcP9bQ#cC!02~T@&6*6NH_4-|d63rf;S%wR=t4 zjbdE~J%`$V^m$lTx1d6}!0sKGLn)G?9~f zX4a*p?@;k@g`5BL#XsmaXkH7sIp`dg`<2|gc-1Wf^Yg;Zw(E}Mw67Pwv2K$yzwPcn zE0;<}X7+z2Uz;BNEYap>aZ7B}4`0N6cV{;Bm&c6bJCCj8#vQi`aGcU^`iJ!2Dd~*; zPG9ViZusce!6~asN1Yk+v-+2 zV5Xq7J*H7p>*n*O(D2Ss!HdGIf{UTKfXGbs^aWqG16Q*sCI0;yy>%_3yxc`9=oLXU>g0!0Pbjz>6iFn?^v|L5~_$2O*Ha zbhhovUh(H$)L2q?5O^{JsCj(*znUIFQwe1f0?$r6)HMN}1pXxjxq$)*Q57kH5Ceyh zJ20AAP?He>e(qd?_PBHrcpgpo9Crd|hiIu12;XJFeaqp56N;&s=EN%xjAvokzWEpy z@c-ck*VBdLwul(q?TjQ}?k4aG9)$csb2lw_8A81a5o=!0A{5z@9s)liK+u$c2b4W@ zz#l;PU1tb;09QQ+&OyEy<{^zUr1p!gFigzBuow&HwTtJ-8?Lw^>D^ZdJV-PL9~QBI z{h%F6;_<=a@|)HewjCxBWT7({Y~JuUT(Gr+n9 zT12|O8D0Z-U{Z6zyg@n!*FggRkJ=0iK!N!>lt9?_0)k~17J=YC`i7~LSI8bHTM3WD z@;bh_h{%#57gVin4~#zEkXQpNW=ZtWAYzV&H`nF=8zLAQaAPPGy>Y@}f{_mVhh5QE z@-Tsas0EL-UKXQ=dK}L~(=cTU@T7(uT>$txO8-2WEstthJETj1Vq_s|7&Izjg{Vmx SW>G0S9U=~lxUyz-l;w9+1;Y9O diff --git a/lib/imageio-core-3.2.jar b/lib/imageio-core-3.2.1.jar similarity index 85% rename from lib/imageio-core-3.2.jar rename to lib/imageio-core-3.2.1.jar index ce9f2c2dd2e2226c2593666487d55148cd44fe36..60842d5ce72990a0fbcca3779a824ac23fb13080 100644 GIT binary patch delta 2134 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 B*K+^> diff --git a/lib/imageio-metadata-3.2.jar b/lib/imageio-metadata-3.2.1.jar similarity index 85% rename from lib/imageio-metadata-3.2.jar rename to lib/imageio-metadata-3.2.1.jar index 302e298a190a88c08e91d15ee97a0fb968ca1ad2..5c788527eaea348a59744349867888d326fe576a 100644 GIT binary patch delta 3712 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 L&cbp5Dt79BQ3kc1 diff --git a/lib/imageio-tiff-3.2.jar b/lib/imageio-tiff-3.2.1.jar similarity index 87% rename from lib/imageio-tiff-3.2.jar rename to lib/imageio-tiff-3.2.1.jar index 722cbc8b55141e7416730c5aca85301177a62c65..8abdd857beb9d17fbd10f78de34cd3f4db6b151c 100644 GIT binary patch delta 5288 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 delta 5296 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 source htroot - lib/J7Zip-modified.jar;lib/apache-mime4j-0.6.jar;lib/bcmail-jdk15-1.46.jar;lib/bcprov-jdk15-1.46.jar;lib/chardet.jar;lib/common-image-3.2.jar;lib/common-io-3.2.jar;lib/common-lang-3.2.jar;lib/commons-codec-1.10.jar;lib/commons-compress-1.10.jar;lib/commons-fileupload-1.3.1.jar;lib/commons-io-2.4.jar;lib/commons-jxpath-1.3.jar;lib/commons-lang-2.6.jar;lib/commons-logging-1.2.jar;lib/fontbox-1.8.10.jar;lib/guava-18.0.jar;lib/htmllexer.jar;lib/httpclient-4.5.1.jar;lib/httpcore-4.4.4.jar;lib/httpmime-4.5.1.jar;lib/icu4j-56_1.jar;lib/imageio-core-3.2.jar;lib/imageio-metadata-3.2.jar;lib/imageio-tiff-3.2.jar;lib/jakarta-oro-2.0.8.jar;lib/jaudiotagger-2.0.4-20111207.115108-15.jar;lib/javax.servlet-api-3.1.0.jar;lib/jcifs-1.3.17.jar;lib/jcl-over-slf4j-1.7.13.jar;lib/jempbox-1.8.10.jar;lib/jetty-client-9.2.14.v20151106.jar;lib/jetty-continuation-9.2.14.v20151106.jar;lib/jetty-deploy-9.2.14.v20151106.jar;lib/jetty-http-9.2.14.v20151106.jar;lib/jetty-io-9.2.14.v20151106.jar;lib/jetty-jmx-9.2.14.v20151106.jar;lib/jetty-proxy-9.2.14.v20151106.jar;lib/jetty-security-9.2.14.v20151106.jar;lib/jetty-server-9.2.14.v20151106.jar;lib/jetty-servlet-9.2.14.v20151106.jar;lib/jetty-servlets-9.2.14.v20151106.jar;lib/jetty-util-9.2.14.v20151106.jar;lib/jetty-webapp-9.2.14.v20151106.jar;lib/jetty-xml-9.2.14.v20151106.jar;lib/jsch-0.1.53.jar;lib/json-simple-1.1.1.jar;lib/jsoup-1.8.3.jar;lib/log4j-over-slf4j-1.7.13.jar;lib/lucene-analyzers-common-5.3.1.jar;lib/lucene-analyzers-phonetic-5.3.1.jar;lib/lucene-backward-codecs-5.3.1.jar;lib/lucene-classification-5.3.1.jar;lib/lucene-codecs-5.3.1.jar;lib/lucene-core-5.3.1.jar;lib/lucene-facet-5.3.1.jar;lib/lucene-grouping-5.3.1.jar;lib/lucene-highlighter-5.3.1.jar;lib/lucene-join-5.3.1.jar;lib/lucene-memory-5.3.1.jar;lib/lucene-misc-5.3.1.jar;lib/lucene-queries-5.3.1.jar;lib/lucene-queryparser-5.3.1.jar;lib/lucene-spatial-5.3.1.jar;lib/lucene-suggest-5.3.1.jar;lib/metadata-extractor-2.8.1.jar;lib/noggit-0.6.jar;lib/org.restlet.jar;lib/pdfbox-1.8.10.jar;lib/poi-3.13-20150929.jar;lib/poi-scratchpad-3.13-20150929.jar;lib/slf4j-api-1.7.13.jar;lib/slf4j-jdk14-1.7.13.jar;lib/solr-core-5.3.1.jar;lib/solr-solrj-5.3.1.jar;lib/spatial4j-0.4.1.jar;lib/stax2-api-3.1.4.jar;lib/webcat-0.1-swf.jar;lib/weupnp-0.1.3.jar;lib/woodstox-core-asl-4.4.1.jar;lib/xercesImpl.jar;lib/xml-apis.jar;lib/xmpcore-5.1.2.jar;lib/zookeeper-3.4.6.jar + lib/J7Zip-modified.jar;lib/apache-mime4j-0.6.jar;lib/bcmail-jdk15-1.46.jar;lib/bcprov-jdk15-1.46.jar;lib/chardet.jar;lib/common-image-3.2.1.jar;lib/common-io-3.2.1.jar;lib/common-lang-3.2.1.jar;lib/commons-codec-1.10.jar;lib/commons-compress-1.10.jar;lib/commons-fileupload-1.3.1.jar;lib/commons-io-2.4.jar;lib/commons-jxpath-1.3.jar;lib/commons-lang-2.6.jar;lib/commons-logging-1.2.jar;lib/fontbox-1.8.10.jar;lib/guava-18.0.jar;lib/htmllexer.jar;lib/httpclient-4.5.1.jar;lib/httpcore-4.4.4.jar;lib/httpmime-4.5.1.jar;lib/icu4j-56_1.jar;lib/imageio-bmp-3.2.1.jar;lib/imageio-core-3.2.1.jar;lib/imageio-metadata-3.2.1.jar;lib/imageio-tiff-3.2.1.jar;lib/jakarta-oro-2.0.8.jar;lib/jaudiotagger-2.0.4-20111207.115108-15.jar;lib/javax.servlet-api-3.1.0.jar;lib/jcifs-1.3.17.jar;lib/jcl-over-slf4j-1.7.13.jar;lib/jempbox-1.8.10.jar;lib/jetty-client-9.2.14.v20151106.jar;lib/jetty-continuation-9.2.14.v20151106.jar;lib/jetty-deploy-9.2.14.v20151106.jar;lib/jetty-http-9.2.14.v20151106.jar;lib/jetty-io-9.2.14.v20151106.jar;lib/jetty-jmx-9.2.14.v20151106.jar;lib/jetty-proxy-9.2.14.v20151106.jar;lib/jetty-security-9.2.14.v20151106.jar;lib/jetty-server-9.2.14.v20151106.jar;lib/jetty-servlet-9.2.14.v20151106.jar;lib/jetty-servlets-9.2.14.v20151106.jar;lib/jetty-util-9.2.14.v20151106.jar;lib/jetty-webapp-9.2.14.v20151106.jar;lib/jetty-xml-9.2.14.v20151106.jar;lib/jsch-0.1.53.jar;lib/json-simple-1.1.1.jar;lib/jsonic-1.2.0.jar;lib/jsoup-1.8.3.jar;lib/langdetect.jar;lib/log4j-over-slf4j-1.7.13.jar;lib/lucene-analyzers-common-5.3.1.jar;lib/lucene-analyzers-phonetic-5.3.1.jar;lib/lucene-backward-codecs-5.3.1.jar;lib/lucene-classification-5.3.1.jar;lib/lucene-codecs-5.3.1.jar;lib/lucene-core-5.3.1.jar;lib/lucene-facet-5.3.1.jar;lib/lucene-grouping-5.3.1.jar;lib/lucene-highlighter-5.3.1.jar;lib/lucene-join-5.3.1.jar;lib/lucene-memory-5.3.1.jar;lib/lucene-misc-5.3.1.jar;lib/lucene-queries-5.3.1.jar;lib/lucene-queryparser-5.3.1.jar;lib/lucene-spatial-5.3.1.jar;lib/lucene-suggest-5.3.1.jar;lib/metadata-extractor-2.8.1.jar;lib/noggit-0.6.jar;lib/org.restlet.jar;lib/pdfbox-1.8.10.jar;lib/poi-3.13-20150929.jar;lib/poi-scratchpad-3.13-20150929.jar;lib/slf4j-api-1.7.13.jar;lib/slf4j-jdk14-1.7.13.jar;lib/solr-core-5.3.1.jar;lib/solr-solrj-5.3.1.jar;lib/spatial4j-0.4.1.jar;lib/stax2-api-3.1.4.jar;lib/webcat-0.1-swf.jar;lib/weupnp-0.1.3.jar;lib/woodstox-core-asl-4.4.1.jar;lib/xercesImpl.jar;lib/xml-apis.jar;lib/xmpcore-5.1.2.jar;lib/zookeeper-3.4.6.jar lib/yacycore.jar 1.7 diff --git a/pom.xml b/pom.xml index 26ac66275..47c6447a7 100644 --- a/pom.xml +++ b/pom.xml @@ -340,11 +340,6 @@ test - - javax.activation - activation - 1.1.1 - org.apache.james apache-mime4j @@ -433,12 +428,12 @@ com.twelvemonkeys.imageio imageio-bmp - 3.2 + 3.2.1 com.twelvemonkeys.imageio imageio-tiff - 3.2 + 3.2.1 org From 50f64ddc3b87c64e6f29dc6f038023f1fb1da7fc Mon Sep 17 00:00:00 2001 From: reger Date: Fri, 25 Dec 2015 01:08:51 +0100 Subject: [PATCH 30/32] apply default css styles (class btn) to submit buttons --- htroot/ConfigUpdate_p.html | 12 ++++++------ htroot/ContentIntegrationPHPBB3_p.html | 2 +- htroot/IndexImportOAIPMHList_p.html | 4 ++-- htroot/IndexImportOAIPMH_p.html | 6 +++--- htroot/Load_RSS_p.html | 16 ++++++++-------- htroot/Messages_p.html | 2 +- htroot/Network.html | 4 ++-- htroot/RankingRWI_p.html | 4 ++-- htroot/ServerScannerList.html | 2 +- htroot/Settings_Crawler.inc | 2 +- htroot/Settings_MessageForwarding.inc | 2 +- htroot/Settings_Proxy.inc | 2 +- htroot/Settings_Seed.inc | 4 ++-- htroot/Settings_Seed_UploadFile.inc | 4 ++-- htroot/Settings_Seed_UploadFtp.inc | 2 +- htroot/Settings_Seed_UploadScp.inc | 2 +- htroot/Settings_ServerAccess.inc | 2 +- htroot/Status.html | 6 +----- htroot/Surftips.html | 4 ++-- htroot/Tables_p.html | 10 +++++----- htroot/Threaddump_p.html | 6 +++--- htroot/User.html | 8 ++++---- htroot/ViewFile.html | 8 ++++---- htroot/compare_yacy.html | 2 +- htroot/sharedBlacklist_p.html | 6 +++--- 25 files changed, 59 insertions(+), 63 deletions(-) diff --git a/htroot/ConfigUpdate_p.html b/htroot/ConfigUpdate_p.html index 2ad4a8b3b..6c12e6318 100644 --- a/htroot/ConfigUpdate_p.html +++ b/htroot/ConfigUpdate_p.html @@ -28,8 +28,8 @@ #{/availreleases}# -    -    +    +   


      Downloaded Releases

      @@ -43,14 +43,14 @@ #{/downloadedreleases}# #(downloadsAvailable)#::#(/downloadsAvailable)# #(deployenabled)#::no automated installation on development environments:: -    -    +    +    #(/deployenabled)#


      Automatic Update

       check for new releases, download if available and restart with downloaded release
      -   
      +   
      #(autoUpdate)#::

      Download of release #[downloadedRelease]# finished. Restart Initiated.
      ::
      No more recent release found.
      :: @@ -99,7 +99,7 @@ only accept signed files
      -
      +
      #(configCommit)# ::
      Accepted Changes.
      #(/configCommit)#
      diff --git a/htroot/ContentIntegrationPHPBB3_p.html b/htroot/ContentIntegrationPHPBB3_p.html index dfe74937c..c22651f80 100644 --- a/htroot/ContentIntegrationPHPBB3_p.html +++ b/htroot/ContentIntegrationPHPBB3_p.html @@ -69,7 +69,7 @@
      Import a database dump,
      -
      +
       
      diff --git a/htroot/IndexImportOAIPMHList_p.html b/htroot/IndexImportOAIPMHList_p.html index 2da1a4cd6..e58cb70b5 100644 --- a/htroot/IndexImportOAIPMHList_p.html +++ b/htroot/IndexImportOAIPMHList_p.html @@ -25,7 +25,7 @@

      - +

      @@ -41,7 +41,7 @@ #{/table}#

      - +

      #(/source)# diff --git a/htroot/IndexImportOAIPMH_p.html b/htroot/IndexImportOAIPMH_p.html index 757645fe6..671d3acdd 100644 --- a/htroot/IndexImportOAIPMH_p.html +++ b/htroot/IndexImportOAIPMH_p.html @@ -17,7 +17,7 @@ Single request import This will submit only a single request as given here to a OAI-PMH server and imports records into the index
      - + #(import-one)#::

      Source:
      #[source]#
      @@ -35,8 +35,8 @@ Import all Records from a server Import all records that follow according to resumption elements into index
      - - #(optiongetlist)#::or #(/optiongetlist)# + + #(optiongetlist)#::or #(/optiongetlist)# #(status)#::

      Import started!

      ::

      Bad input data: #[message]#

      #(/status)#
      diff --git a/htroot/Load_RSS_p.html b/htroot/Load_RSS_p.html index 79249373b..2352ab9aa 100644 --- a/htroot/Load_RSS_p.html +++ b/htroot/Load_RSS_p.html @@ -32,7 +32,7 @@
      URL of the RSS feed
      Preview
      -
      +
      Indexing
      #(showload)#Available after successful loading of rss feed in preview::
      @@ -57,7 +57,7 @@
      collection
      - + #(/showload)#
      #(showerrmsg)#::
      #[msgtxt]#
      #(/showerrmsg)# @@ -95,8 +95,8 @@

      - - + +

      #(/showscheduledfeeds)# @@ -122,9 +122,9 @@

      - - - + + +

      #(/shownewfeeds)# @@ -168,7 +168,7 @@

      - +

      #(/showitems)# diff --git a/htroot/Messages_p.html b/htroot/Messages_p.html index ada0b2bd6..e4a53f9bf 100644 --- a/htroot/Messages_p.html +++ b/htroot/Messages_p.html @@ -17,7 +17,7 @@ - + diff --git a/htroot/Network.html b/htroot/Network.html index 10ddee8c1..3b7ea9201 100644 --- a/htroot/Network.html +++ b/htroot/Network.html @@ -102,7 +102,7 @@ document.getElementById("apilink").setAttribute("href", "Network.xml?" + window. : - + @@ -354,7 +354,7 @@ document.getElementById("apilink").setAttribute("href", "Network.xml?" + window. - +
       
      diff --git a/htroot/RankingRWI_p.html b/htroot/RankingRWI_p.html index b2a631b82..4dd1fe3b4 100644 --- a/htroot/RankingRWI_p.html +++ b/htroot/RankingRWI_p.html @@ -60,8 +60,8 @@
      - - + +
      diff --git a/htroot/ServerScannerList.html b/htroot/ServerScannerList.html index d84acb0f0..e23cc7fc3 100644 --- a/htroot/ServerScannerList.html +++ b/htroot/ServerScannerList.html @@ -49,7 +49,7 @@ #(edit)#::

      - +

      #(/edit)# diff --git a/htroot/Settings_Crawler.inc b/htroot/Settings_Crawler.inc index 112fa9f0a..c451e046b 100644 --- a/htroot/Settings_Crawler.inc +++ b/htroot/Settings_Crawler.inc @@ -44,7 +44,7 @@   - + Changes will take effect immediately. diff --git a/htroot/Settings_MessageForwarding.inc b/htroot/Settings_MessageForwarding.inc index 958f71aec..c0634d39c 100644 --- a/htroot/Settings_MessageForwarding.inc +++ b/htroot/Settings_MessageForwarding.inc @@ -24,7 +24,7 @@ - Changes will take effect immediately. + Changes will take effect immediately. diff --git a/htroot/Settings_Proxy.inc b/htroot/Settings_Proxy.inc index 84f469752..365cfa8ea 100644 --- a/htroot/Settings_Proxy.inc +++ b/htroot/Settings_Proxy.inc @@ -51,7 +51,7 @@ - Changes will take effect immediately. + Changes will take effect immediately. diff --git a/htroot/Settings_Seed.inc b/htroot/Settings_Seed.inc index 1c23fde62..aef5d71ae 100644 --- a/htroot/Settings_Seed.inc +++ b/htroot/Settings_Seed.inc @@ -19,7 +19,7 @@ #{/seedUploadMethods}# - + Here you can specify which upload method should be used. Select 'none' to deactivate uploading. @@ -34,7 +34,7 @@ - + diff --git a/htroot/Settings_Seed_UploadFile.inc b/htroot/Settings_Seed_UploadFile.inc index 6350408b1..5079fdf9a 100644 --- a/htroot/Settings_Seed_UploadFile.inc +++ b/htroot/Settings_Seed_UploadFile.inc @@ -5,11 +5,11 @@ - + - +
      : Here you can specify the path within the filesystem where the seed-list file should be stored.
      diff --git a/htroot/Settings_Seed_UploadFtp.inc b/htroot/Settings_Seed_UploadFtp.inc index 0d01201a7..3261f7cef 100644 --- a/htroot/Settings_Seed_UploadFtp.inc +++ b/htroot/Settings_Seed_UploadFtp.inc @@ -31,7 +31,7 @@ The password - + diff --git a/htroot/Settings_Seed_UploadScp.inc b/htroot/Settings_Seed_UploadScp.inc index c0945f817..fd0cea50f 100644 --- a/htroot/Settings_Seed_UploadScp.inc +++ b/htroot/Settings_Seed_UploadScp.inc @@ -31,7 +31,7 @@ The password - + diff --git a/htroot/Settings_ServerAccess.inc b/htroot/Settings_ServerAccess.inc index a002ba2d5..a9476e8bb 100644 --- a/htroot/Settings_ServerAccess.inc +++ b/htroot/Settings_ServerAccess.inc @@ -55,7 +55,7 @@ for the preconfigured value 'localpeer', the URL is: http://localpeer/. - + diff --git a/htroot/Status.html b/htroot/Status.html index 713d0500f..1bba59a75 100644 --- a/htroot/Status.html +++ b/htroot/Status.html @@ -127,11 +127,7 @@
      Latest public version is v#[latestVersion]#. You can download a more recent version of YaCy. Click here to install this update and restart YaCy:
      - - - diff --git a/htroot/Surftips.html b/htroot/Surftips.html index 1f62a70ae..0d4470bfa 100644 --- a/htroot/Surftips.html +++ b/htroot/Surftips.html @@ -55,11 +55,11 @@

      - - diff --git a/htroot/Tables_p.html b/htroot/Tables_p.html index 9efb3e585..163ebeed2 100644 --- a/htroot/Tables_p.html +++ b/htroot/Tables_p.html @@ -60,7 +60,7 @@ document.write("
      URL:
      - - #(moar)#::#(/moar)# + + #(moar)#::#(/moar)#
      #(moar)#::
      Search in Document:
      - +
      #(/moar)# @@ -124,7 +124,7 @@ function updatepage(str) { - + diff --git a/htroot/compare_yacy.html b/htroot/compare_yacy.html index 4cd62a09b..058280796 100644 --- a/htroot/compare_yacy.html +++ b/htroot/compare_yacy.html @@ -19,7 +19,7 @@
      Websearch Comparison
      -

      +

      Left Search Engine - - + + + From 6d54eb3d36f7693e7cdc4c3ce14890bbdf389315 Mon Sep 17 00:00:00 2001 From: reger Date: Sat, 26 Dec 2015 01:15:07 +0100 Subject: [PATCH 31/32] skip loading document on crawl start for YMark bookmarks by adding a constructor giving the already loaded document as parameter. --- source/net/yacy/data/ymark/YMarkTables.java | 46 +++++++++++++++++++++ source/net/yacy/search/Switchboard.java | 9 ++-- 2 files changed, 51 insertions(+), 4 deletions(-) diff --git a/source/net/yacy/data/ymark/YMarkTables.java b/source/net/yacy/data/ymark/YMarkTables.java index 02a8f85f1..fdc3c83ad 100644 --- a/source/net/yacy/data/ymark/YMarkTables.java +++ b/source/net/yacy/data/ymark/YMarkTables.java @@ -398,6 +398,52 @@ public class YMarkTables { this.worktables.bookmarks.addBookmark(bmk_user, bmk_entry, true, true); } + /** + * Create YMark bookmark from a loaded document + * this is identical to {@link #createBookmark(net.yacy.repository.LoaderDispatcher, net.yacy.cora.document.id.DigestURL, net.yacy.cora.protocol.ClientIdentification.Agent, java.lang.String, boolean, java.lang.String, java.lang.String) } + * without try calling a loader + * + * @param document to create the YMark bookmark for + * @param bmk_user + * @param autotag + * @param tagsString + * @param foldersString + * @throws IOException + * @throws net.yacy.document.Parser.Failure + */ + public void createBookmark(final Document document, final String bmk_user, final boolean autotag, final String tagsString, final String foldersString) throws IOException, Failure { + + if (document != null) { + final YMarkEntry bmk_entry = new YMarkEntry(false); + final YMarkMetadata meta = new YMarkMetadata(document); + + final EnumMap metadata = meta.loadMetadata(); + final String urls = document.dc_identifier(); + bmk_entry.put(YMarkEntry.BOOKMARK.URL.key(), urls); + if (!this.worktables.has(YMarkTables.TABLES.BOOKMARKS.tablename(bmk_user), YMarkUtil.getBookmarkId(urls))) { + bmk_entry.put(YMarkEntry.BOOKMARK.PUBLIC.key(), "false"); + bmk_entry.put(YMarkEntry.BOOKMARK.TITLE.key(), metadata.get(YMarkMetadata.METADATA.TITLE)); + bmk_entry.put(YMarkEntry.BOOKMARK.DESC.key(), metadata.get(YMarkMetadata.METADATA.DESCRIPTION)); + } + final String fs = YMarkUtil.cleanFoldersString(foldersString); + if (fs.isEmpty()) + bmk_entry.put(YMarkEntry.BOOKMARK.FOLDERS.key(), YMarkEntry.BOOKMARK.FOLDERS.deflt()); + else + bmk_entry.put(YMarkEntry.BOOKMARK.FOLDERS.key(), fs); + final StringBuilder strb = new StringBuilder(); + if (autotag) { + final String autotags = YMarkAutoTagger.autoTag(document, 3, this.worktables.bookmarks.getTags(bmk_user)); + strb.append(autotags); + } + if (!tagsString.isEmpty()) { + strb.append(YMarkUtil.TAGS_SEPARATOR); + strb.append(tagsString); + } + bmk_entry.put(YMarkEntry.BOOKMARK.TAGS.key(), YMarkUtil.cleanTagsString(strb.toString())); + this.worktables.bookmarks.addBookmark(bmk_user, bmk_entry, true, true); + } + } + public boolean hasBookmark(final String bmk_user, final String urlhash) { final String bmk_table = TABLES.BOOKMARKS.tablename(bmk_user); try { diff --git a/source/net/yacy/search/Switchboard.java b/source/net/yacy/search/Switchboard.java index a74993809..8d5d6c837 100644 --- a/source/net/yacy/search/Switchboard.java +++ b/source/net/yacy/search/Switchboard.java @@ -3228,7 +3228,6 @@ public final class Switchboard extends serverSwitch { if (reasonString != null) return reasonString; // create a bookmark from crawl start url - //final Set tags=ListManager.string2set(BookmarkHelper.cleanTagsString(post.get("bookmarkFolder","/crawlStart"))); final Set tags=ListManager.string2set(BookmarkHelper.cleanTagsString("/crawlStart")); tags.add("crawlStart"); final Set keywords = scraper.dc_subject(); @@ -3238,8 +3237,10 @@ public final class Switchboard extends serverSwitch { if (kk.length() > 0) tags.add(kk); } } - String tagStr = tags.toString(); - if (tagStr.length() > 2 && tagStr.startsWith("[") && tagStr.endsWith("]")) tagStr = tagStr.substring(1, tagStr.length() - 2); + + // TODO: what to do with the result ? + //String tagStr = tags.toString(); + //if (tagStr.length() > 2 && tagStr.startsWith("[") && tagStr.endsWith("]")) tagStr = tagStr.substring(1, tagStr.length() - 2); // we will create always a bookmark to use this to track crawled hosts final BookmarksDB.Bookmark bookmark = this.bookmarksDB.createorgetBookmark(url.toNormalform(true), "admin"); @@ -3254,7 +3255,7 @@ public final class Switchboard extends serverSwitch { // do the same for ymarks // TODO: could a non admin user add crawls? try { - this.tables.bookmarks.createBookmark(this.loader, url, profile.getAgent(), YMarkTables.USER_ADMIN, true, "crawlStart", "/Crawl Start"); + this.tables.bookmarks.createBookmark(scraper, YMarkTables.USER_ADMIN, true, "crawlStart", "/Crawl Start"); } catch (final IOException e) { ConcurrentLog.logException(e); } catch (final Failure e) { From 9da1712a31103eeeaad2b405946b666d7d403361 Mon Sep 17 00:00:00 2001 From: reger Date: Sat, 26 Dec 2015 17:35:46 +0100 Subject: [PATCH 32/32] increase http header EXPIRES for css and images in DefaultServlet to increase browser cache hits for not changing content --- source/net/yacy/http/servlets/YaCyDefaultServlet.java | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/source/net/yacy/http/servlets/YaCyDefaultServlet.java b/source/net/yacy/http/servlets/YaCyDefaultServlet.java index 1606b6650..6fdbdf645 100644 --- a/source/net/yacy/http/servlets/YaCyDefaultServlet.java +++ b/source/net/yacy/http/servlets/YaCyDefaultServlet.java @@ -794,9 +794,9 @@ public class YaCyDefaultServlet extends HttpServlet { long now = System.currentTimeMillis(); response.setDateHeader(HeaderFramework.LAST_MODIFIED, now); if (target.endsWith(".css")) { - response.setDateHeader(HeaderFramework.EXPIRES, now + 4000); // expires in 4 seconds (which is still too often) + response.setDateHeader(HeaderFramework.EXPIRES, now + 3600000); // expires in 1 hour (which is still often, others use 1 week, month or year) } else if (target.endsWith(".png")) { - response.setDateHeader(HeaderFramework.EXPIRES, now + 1000); // expires in 1 seconds (reduce heavy image creation load) + response.setDateHeader(HeaderFramework.EXPIRES, now + 60000); // expires in 1 minute (reduce heavy image creation load) } else { response.setDateHeader(HeaderFramework.EXPIRES, now); // expires now } @@ -858,8 +858,8 @@ public class YaCyDefaultServlet extends HttpServlet { result.close(); return; } - if (yp.isStatic()) { - response.setDateHeader(HeaderFramework.EXPIRES, now + 600000); // expires in ten minutes + if (yp.isStatic()) { // static image never expires + response.setDateHeader(HeaderFramework.EXPIRES, now + 3600000); // expires in 1 hour } } else if (tmp instanceof Image) { final Image i = (Image) tmp;