in analysis/heap-dump/impl/src/main/java/org/eclipse/jifa/hda/impl/HeapDumpAnalyzerImpl.java [1300:1354]
public OQLResult getOQLResult(String oql, String sortBy, boolean ascendingOrder, int page, int pageSize) {
IResult result = getOQLResult(context, oql);
return $(() -> {
if (result instanceof IResultTree) {
return new OQLResult.TreeResult(
PageViewBuilder.build(
((IResultTree) result).getElements(),
new PagingRequest(page, pageSize),
e -> $(() -> context.snapshot.getObject(((IResultTree) result).getContext(e).getObjectId())),
o -> $(() -> {
JavaObject jo = new JavaObject();
jo.setObjectId(o.getObjectId());
jo.setLabel(o.getDisplayName());
jo.setSuffix(Helper.suffix(o.getGCRootInfo()));
jo.setShallowSize(o.getUsedHeapSize());
jo.setRetainedSize(o.getRetainedHeapSize());
jo.setGCRoot(context.snapshot.isGCRoot(o.getObjectId()));
jo.setObjectType(typeOf(o));
jo.setHasOutbound(true);
return jo;
}), IObjectSortHelper.sortBy(sortBy, ascendingOrder)));
} else if (result instanceof IResultTable) {
IResultTable table = (IResultTable) result;
Column[] columns = table.getColumns();
List<String> cs = Arrays.stream(columns).map(Column::getLabel).collect(Collectors.toList());
PageView<OQLResult.TableResult.Entry> pv =
PageViewBuilder.build(new PageViewBuilder.Callback<Object>() {
@Override
public int totalSize() {
return table.getRowCount();
}
@Override
public Object get(int index) {
return table.getRow(index);
}
}, new PagingRequest(page, pageSize), o -> {
List<Object> l = new ArrayList<>();
for (int i = 0; i < columns.length; i++) {
Object columnValue = table.getColumnValue(o, i);
l.add(columnValue != null ? columnValue.toString() : null);
}
IContextObject co = table.getContext(o);
return new OQLResult.TableResult.Entry(co != null ? co.getObjectId() : Helper.ILLEGAL_OBJECT_ID,
l);
});
return new OQLResult.TableResult(cs, pv);
} else if (result instanceof TextResult) {
return new OQLResult.TextResult(((TextResult) result).getText());
} else {
throw new AnalysisException("Unsupported OQL result type");
}
});
}