Wiki source code of JSON Generation for the External Link States LiveTable
Last modified by superadmin on 2025/05/22 17:44
Hide last authors
| author | version | line-number | content |
|---|---|---|---|
| |
1.1 | 1 | {{velocity}} |
| 2 | #if("$!{request.xpage}" == 'plain') | ||
| 3 | $response.setContentType('application/json') | ||
| 4 | #end | ||
| 5 | ##============================== | ||
| 6 | ## Offset = item # at which to start displaying data | ||
| 7 | ##============================== | ||
| 8 | #set($offset = $numbertool.toNumber($request.get('offset')).intValue()) | ||
| 9 | ## offset starts from 0 in velocity and 1 in javascript | ||
| 10 | #set($offset = $offset - 1) | ||
| 11 | #if (!$offset || $offset < 0) | ||
| 12 | #set($offset = 0) | ||
| 13 | #end | ||
| 14 | ##================== | ||
| 15 | ## Limit = # of items to display | ||
| 16 | ##================== | ||
| 17 | #set($limit = $numbertool.toNumber($request.get('limit')).intValue()) | ||
| 18 | #if (!$limit) | ||
| 19 | #set ($limit = 15) | ||
| 20 | #end | ||
| 21 | ##==================================== | ||
| 22 | ## Step1: Transform Map into list, one list item per link/page | ||
| 23 | ##==================================== | ||
| 24 | #set ($states = $services.linkchecker.getLinkStates()) | ||
| 25 | #set ($stateList = []) | ||
| 26 | #foreach ($link in $states.keySet()) | ||
| 27 | #set ($pages = $states.get($link)) | ||
| 28 | #foreach ($page in $pages.keySet()) | ||
| 29 | #set ($tmpMap = {}) | ||
| 30 | #set ($dummy = $tmpMap.put("link", $link)) | ||
| 31 | #set ($dummy = $tmpMap.put("page", $page)) | ||
| 32 | #set ($dummy = $tmpMap.put("code", $pages.get($page).getResponseCode())) | ||
| 33 | #set ($dummy = $tmpMap.put("date", $datetool.format($pages.get($page).getLastCheckedTime()))) | ||
| 34 | #set ($dummy = $stateList.add($tmpMap)) | ||
| 35 | #end | ||
| 36 | #end | ||
| 37 | ##============ | ||
| 38 | ## Step2: Filter the list | ||
| 39 | ##============ | ||
| 40 | #set ($filteredList = []) | ||
| 41 | #set ($linkFilter = "$!{request.get('link')}") | ||
| 42 | #set ($pageFilter = "$!{request.get('page')}") | ||
| 43 | #set ($codeFilter = "$!{request.get('code')}") | ||
| 44 | #set ($dateFilter = "$!{request.get('date')}") | ||
| 45 | #foreach ($entry in $stateList) | ||
| 46 | #set ($codeString = "$entry.get('code')") | ||
| 47 | #if ($codeFilter.startsWith("!") && $codeFilter.length() > 1) | ||
| 48 | #set ($codeMatch = !$codeString.contains($codeFilter.substring(1))) | ||
| 49 | #else | ||
| 50 | #set ($codeMatch = $codeString.contains($codeFilter)) | ||
| 51 | #end | ||
| 52 | #if ($entry.get("link").contains($linkFilter) && $entry.get("page").contains($pageFilter) && $codeMatch && $entry.get("date").contains($dateFilter)) | ||
| 53 | #set ($dummy = $filteredList.add($entry)) | ||
| 54 | #end | ||
| 55 | #end | ||
| 56 | ##=================== | ||
| 57 | ## Step3: Handle offset and limit | ||
| 58 | ##=================== | ||
| 59 | #set ($added = 0) | ||
| 60 | #set ($resultList = []) | ||
| 61 | #if ($offset < $filteredList.size()) | ||
| 62 | #set ($toIndex = $mathtool.min($mathtool.add($offset, $limit), $filteredList.size())) | ||
| 63 | #set ($resultList = $filteredList.subList($offset, $toIndex)) | ||
| 64 | #end | ||
| 65 | ## ========== | ||
| 66 | ## JSON Generation | ||
| 67 | ## ========== | ||
| 68 | #set ($json = { | ||
| 69 | 'totalrows': $filteredList.size(), | ||
| 70 | 'matchingtags': {}, | ||
| 71 | 'tags': [], | ||
| 72 | 'returnedrows': $resultList.size(), | ||
| 73 | 'offset': $mathtool.add($offset, 1), | ||
| 74 | 'reqNo': $numbertool.toNumber($request.reqNo).intValue(), | ||
| 75 | 'rows': [] | ||
| 76 | }) | ||
| 77 | #foreach ($entry in $resultList) | ||
| 78 | #set ($discard = $json.rows.add({ | ||
| 79 | 'doc_viewable': true, | ||
| 80 | 'link': $entry.get('link'), | ||
| 81 | 'link_url': $entry.get('link'), | ||
| 82 | 'page': $entry.get('page'), | ||
| 83 | 'page_url': $xwiki.getURL($entry.get('page')), | ||
| 84 | 'code': $entry.get("code"), | ||
| 85 | 'date': $entry.get("date") | ||
| 86 | })) | ||
| 87 | #end | ||
| 88 | $jsontool.serialize($json) | ||
| 89 | {{/velocity}} |