docs: public SimpleOrderedMap<Object> create(ComponentKwic kwic, Boolean encode) {
      SimpleOrderedMap<Object> mtasKwicResponse = new SimpleOrderedMap<>();
      mtasKwicResponse.add("key", kwic.key);
      ArrayList<NamedList<Object>> mtasKwicItemResponses = new ArrayList<>();
      if (kwic.output.equals(ComponentKwic.KWIC_OUTPUT_HIT)) {
        for (int docId : kwic.hits.keySet()) {
          NamedList<Object> mtasKwicItemResponse = new SimpleOrderedMap<>();
          List<KwicHit> list = kwic.hits.get(docId);
          List<NamedList<Object>> mtasKwicItemResponseItems = new ArrayList<>();
          for (KwicHit h : list) {
            NamedList<Object> mtasKwicItemResponseItem = new SimpleOrderedMap<>();
            SortedMap<Integer, List<List<String>>> hitData = new TreeMap<>();
            SortedMap<Integer, List<List<String>>> leftData = null;
            SortedMap<Integer, List<List<String>>> rightData = null;
            if (kwic.left > 0) {
              leftData = new TreeMap<>();
            }
            if (kwic.right > 0) {
              rightData = new TreeMap<>();
            }
            for (int position = Math.max(0,
                h.startPosition - kwic.left); position <= (h.endPosition
                    + kwic.right); position++) {
              if (h.hits.containsKey(position)) {
                List<List<String>> hitDataItem = new ArrayList<>();
                for (String term : h.hits.get(position)) {
                  List<String> hitDataSubItem = new ArrayList<>();
                  hitDataSubItem.add(CodecUtil.termPrefix(term));
                  hitDataSubItem.add(CodecUtil.termValue(term));
                  hitDataItem.add(hitDataSubItem);
                }
                if (position < h.startPosition) {
                  if (leftData != null) {
                    leftData.put(position, hitDataItem);
                  }
                } else if (position > h.endPosition) {
                  if (rightData != null) {
                    rightData.put(position, hitDataItem);
                  }
                } else {
                  hitData.put(position, hitDataItem);
                }
              }
            }
            if (kwic.left > 0) {
              mtasKwicItemResponseItem.add("left", leftData);
            }
            mtasKwicItemResponseItem.add("hit", hitData);
            if (kwic.right > 0) {
              mtasKwicItemResponseItem.add("right", rightData);
            }
            mtasKwicItemResponseItems.add(mtasKwicItemResponseItem);
          }
          mtasKwicItemResponse.add("documentKey", kwic.uniqueKey.get(docId));
          mtasKwicItemResponse.add("documentTotal", kwic.subTotal.get(docId));
          mtasKwicItemResponse.add("documentMinPosition",
              kwic.minPosition.get(docId));
          mtasKwicItemResponse.add("documentMaxPosition",
              kwic.maxPosition.get(docId));
          mtasKwicItemResponse.add("list", mtasKwicItemResponseItems);
          mtasKwicItemResponses.add(mtasKwicItemResponse);
        }
      } else if (kwic.output.equals(ComponentKwic.KWIC_OUTPUT_TOKEN)) {
        for (int docId : kwic.tokens.keySet()) {
          NamedList<Object> mtasKwicItemResponse = new SimpleOrderedMap<>();
          List<KwicToken> list = kwic.tokens.get(docId);
          List<NamedList<Object>> mtasKwicItemResponseItems = new ArrayList<>();
          for (KwicToken k : list) {
            NamedList<Object> mtasKwicItemResponseItem = new SimpleOrderedMap<>();
            mtasKwicItemResponseItem.add("startPosition", k.startPosition);
            mtasKwicItemResponseItem.add("endPosition", k.endPosition);
            ArrayList<NamedList<Object>> mtasKwicItemResponseItemTokens = new ArrayList<>();
            for (MtasToken token : k.tokens) {
              NamedList<Object> mtasKwicItemResponseItemToken = new SimpleOrderedMap<>();
              if (token.getId() != null) {
                mtasKwicItemResponseItemToken.add("mtasId", token.getId());
              }
              mtasKwicItemResponseItemToken.add("prefix", token.getPrefix());
              mtasKwicItemResponseItemToken.add("value", token.getPostfix());
              if (token.getPositionStart() != null) {
                mtasKwicItemResponseItemToken.add("positionStart",
                    token.getPositionStart());
                mtasKwicItemResponseItemToken.add("positionEnd",
                    token.getPositionEnd());
              }
              if (token.getPositions() != null) {
                mtasKwicItemResponseItemToken.add("positions",
                    Arrays.toString(token.getPositions()));
              }
              if (token.getParentId() != null) {
                mtasKwicItemResponseItemToken.add("parentMtasId",
                    token.getParentId());
              }
              if (token.getPayload() != null) {
                mtasKwicItemResponseItemToken.add("payload", token.getPayload());
              }
              if (token.getOffsetStart() != null) {
                mtasKwicItemResponseItemToken.add("offsetStart",
                    token.getOffsetStart());
                mtasKwicItemResponseItemToken.add("offsetEnd",
                    token.getOffsetEnd());
              }
              if (token.getRealOffsetStart() != null) {
                mtasKwicItemResponseItemToken.add("realOffsetStart",
                    token.getRealOffsetStart());
                mtasKwicItemResponseItemToken.add("realOffsetEnd",
                    token.getRealOffsetEnd());
              }
              mtasKwicItemResponseItemTokens.add(mtasKwicItemResponseItemToken);
            }
            mtasKwicItemResponseItem.add("tokens",
                mtasKwicItemResponseItemTokens);
            mtasKwicItemResponseItems.add(mtasKwicItemResponseItem);
          }
          mtasKwicItemResponse.add("documentKey", kwic.uniqueKey.get(docId));
          mtasKwicItemResponse.add("documentTotal", kwic.subTotal.get(docId));
          mtasKwicItemResponse.add("documentMinPosition",
              kwic.minPosition.get(docId));
          mtasKwicItemResponse.add("documentMaxPosition",
              kwic.maxPosition.get(docId));
          mtasKwicItemResponse.add("list", mtasKwicItemResponseItems);
          mtasKwicItemResponses.add(mtasKwicItemResponse);
        }
      }
      mtasKwicResponse.add("list", mtasKwicItemResponses);
      return mtasKwicResponse;
    }