private static void accumulateSupporter( final Switchboard sb, final HashMap<String, Entry> Supporter, final ScoreMap<String> ranking, final Row rowdef, final HashMap<String, Integer> negativeHashes, final HashMap<String, Integer> positiveHashes, final int dbtype) { final int maxCount = Math.min(1000, sb.peers.newsPool.size(dbtype)); yacyNewsDB.Record record; final Iterator<yacyNewsDB.Record> recordIterator = sb.peers.newsPool.recordIterator(dbtype, true); int j = 0; String url = "", urlhash; Row.Entry entry; int score = 0; Integer vote; yacySeed seed; while ((recordIterator.hasNext()) && (j++ < maxCount)) { record = recordIterator.next(); if (record == null) continue; entry = null; if ((record.category().equals(yacyNewsPool.CATEGORY_PROFILE_UPDATE)) && ((seed = sb.peers.getConnected(record.originator())) != null)) { url = record.attribute("homepage", ""); if (url.length() < 12) continue; entry = rowdef.newEntry( new byte[][] { url.getBytes(), url.getBytes(), UTF8.getBytes(("Home Page of " + seed.getName())), record.id().getBytes() }); score = 1 + timeFactor(record.created()); } if ((record.category().equals(yacyNewsPool.CATEGORY_PROFILE_BROADCAST)) && ((seed = sb.peers.getConnected(record.originator())) != null)) { url = record.attribute("homepage", ""); if (url.length() < 12) continue; entry = rowdef.newEntry( new byte[][] { url.getBytes(), url.getBytes(), UTF8.getBytes(("Home Page of " + seed.getName())), record.id().getBytes() }); score = 1 + timeFactor(record.created()); } // add/subtract votes and write record if (entry != null) { try { urlhash = UTF8.String((new DigestURI(url)).hash()); } catch (final MalformedURLException e) { urlhash = null; } if (urlhash == null) try { urlhash = UTF8.String((new DigestURI("http://" + url)).hash()); } catch (final MalformedURLException e) { urlhash = null; } if (urlhash == null) { System.out.println( "Supporter: bad url '" + url + "' from news record " + record.toString()); continue; } if ((vote = negativeHashes.get(urlhash)) != null) { score = Math.max(0, score - vote.intValue()); // do not go below zero } if ((vote = positiveHashes.get(urlhash)) != null) { score += 2 * vote.intValue(); } // consider double-entries if (Supporter.containsKey(urlhash)) { ranking.inc(urlhash, score); } else { ranking.set(urlhash, score); Supporter.put(urlhash, entry); } } } }