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;
}