protected void setUpContext()

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