public Links getLinks()

in webindex/modules/core/src/main/java/webindex/core/IndexClient.java [192:250]


  public Links getLinks(String rawUrl, String linkType, String next, int pageNum) {

    Links links = new Links(rawUrl, linkType, pageNum);

    URL url;
    try {
      url = URL.from(rawUrl);
    } catch (Exception e) {
      log.error("Failed to parse URL: " + rawUrl);
      return links;
    }

    try {
      Scanner scanner = conn.createScanner(accumuloIndexTable, Authorizations.EMPTY);
      String row = "p:" + url.toUri();
      if (linkType.equals("in")) {
        Page page = getPage(rawUrl);
        String cf = Constants.INLINKS;
        links.setTotal(page.getNumInbound());
        Pager pager = Pager.build(scanner, Range.exact(row, cf), PAGE_SIZE, entry -> {
          String uri = entry.getKey().getColumnQualifier().toString();
          if (entry.isNext()) {
            links.setNext(uri);
          } else {
            String anchorText = entry.getValue().toString();
            links.addLink(Link.of(uri, anchorText));
          }
        });
        if (next.isEmpty()) {
          pager.read(pageNum);
        } else {
          pager.read(new Key(row, cf, next));
        }
      } else {
        scanner.setRange(Range.exact(row, Constants.PAGE, Constants.CUR));
        Iterator<Map.Entry<Key, Value>> iter = scanner.iterator();
        if (iter.hasNext()) {
          Page curPage = gson.fromJson(iter.next().getValue().toString(), Page.class);
          links.setTotal(curPage.getNumOutbound());
          int skip = 0;
          int add = 0;
          for (Link l : curPage.getOutboundLinks()) {
            if (skip < (pageNum * PAGE_SIZE)) {
              skip++;
            } else if (add < PAGE_SIZE) {
              links.addLink(l);
              add++;
            } else {
              links.setNext(l.getUri());
              break;
            }
          }
        }
      }
    } catch (TableNotFoundException e) {
      log.error("Table {} not found", accumuloIndexTable);
    }
    return links;
  }