protected SnapshotComparisonPageResponse compareSnapshots(SnapshotComparisonPageRequest request) {

    SnapshotComparisonPageResponse response = new SnapshotComparisonPageResponse();

    // Do query (bit of a cheat really!)
    long start = System.currentTimeMillis();
    SnapshotDiffs diffs =
        compareSnapshots(
            request.getPackageName(),
            request.getFirstSnapshotName(),
            request.getSecondSnapshotName());
    log.debug("Search time: " + (System.currentTimeMillis() - start));

    // Populate response
    response.setLeftSnapshotName(diffs.leftName);
    response.setRightSnapshotName(diffs.rightName);

    List<SnapshotComparisonPageRow> rowList =
        new SnapshotComparisonPageRowBuilder()
            .withPageRequest(request)
            .withIdentity(identity)
            .withContent(diffs)
            .build();

    response.setPageRowList(rowList);
    response.setStartRowIndex(request.getStartRowIndex());
    response.setTotalRowSize(diffs.diffs.length);
    response.setTotalRowSizeExact(true);
    response.setLastPage((request.getStartRowIndex() + rowList.size() == diffs.diffs.length));

    long methodDuration = System.currentTimeMillis() - start;
    log.debug(
        "Compared Snapshots ('"
            + request.getFirstSnapshotName()
            + "') and ('"
            + request.getSecondSnapshotName()
            + "') in package ('"
            + request.getPackageName()
            + "') in "
            + methodDuration
            + " ms.");

    return response;
  }