public OQLResult getOQLResult()

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