in hollow-explorer-ui/src/main/java/com/netflix/hollow/explorer/ui/pages/BrowseSelectedTypePage.java [56:126]
protected void setUpContext(HttpServletRequest req, HollowUISession session, VelocityContext ctx) {
HollowTypeReadState typeState = getTypeState(req);
int page = req.getParameter("page") == null ? 0 : Integer.parseInt(req.getParameter("page"));
int pageSize = req.getParameter("pageSize") == null ? 20 : Integer.parseInt(req.getParameter("pageSize"));
int startRec = page * pageSize;
String displayFormat = "json".equals(req.getParameter("display")) ? "json" : "text";
BitSet selectedOrdinals = typeState.getPopulatedOrdinals();
if("true".equals(req.getParameter("clearQuery")))
session.clearAttribute(SESSION_ATTR_QUERY_RESULT);
if(session.getAttribute(SESSION_ATTR_QUERY_RESULT) != null) {
QueryResult queryResult =
(QueryResult) session.getAttribute(SESSION_ATTR_QUERY_RESULT);
queryResult.recalculateIfNotCurrent(ui.getStateEngine());
selectedOrdinals = queryResult.getQueryMatches().get(typeState.getSchema().getName());
if(selectedOrdinals == null)
selectedOrdinals = new BitSet();
ctx.put("filteredByQuery", queryResult.getQueryDisplayString());
}
int currentOrdinal = selectedOrdinals.nextSetBit(0);
for(int i=0;i<startRec;i++) {
currentOrdinal = selectedOrdinals.nextSetBit(currentOrdinal+1);
}
PrimaryKey primaryKey = getPrimaryKey(typeState.getSchema());
int fieldPathIndexes[][] = getFieldPathIndexes(ui.getStateEngine(), primaryKey);
List<TypeKey> keys = new ArrayList<>(pageSize);
for(int i = 0; i < pageSize && currentOrdinal != ORDINAL_NONE; i ++) {
keys.add(getKey(startRec + i, typeState, currentOrdinal, fieldPathIndexes));
currentOrdinal = selectedOrdinals.nextSetBit(currentOrdinal + 1);
}
String key = req.getParameter("key") == null ? "" : req.getParameter("key");
Object parsedKey[] = null;
try {
parsedKey = parseKey(ui.getStateEngine(), primaryKey, key);
} catch(Exception e) {
key = "";
}
HollowTypeReadState readTypeState = getTypeState(req);
int ordinal = req.getParameter("ordinal") == null ? ORDINAL_NONE : Integer.parseInt(req.getParameter("ordinal"));
ordinal = getOrdinalToDisplay(ui.getStateEngine(), key, parsedKey, ordinal, selectedOrdinals, fieldPathIndexes, readTypeState);
if (ordinal != ORDINAL_NONE && "".equals(key)
&& fieldPathIndexes != null) {
// set key for the case where it was unset previously
key = getKey(ORDINAL_NONE, typeState, ordinal, fieldPathIndexes).getKey();
}
int numRecords = selectedOrdinals.cardinality();
ctx.put("keys", keys);
ctx.put("page", page);
ctx.put("pageSize", pageSize);
ctx.put("numPages", ((numRecords - 1) / pageSize) + 1);
ctx.put("numRecords", numRecords);
ctx.put("type", typeState.getSchema().getName());
ctx.put("key", key);
ctx.put("ordinal", ordinal);
ctx.put("display", displayFormat);
}