Пример #1
0
  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);
        }
      }
    }
  }