@Override public void handle(Context ctx, Model model, Payload payload) { ListViewModel listViewModel = new ListViewModel(); AbtestStatus status = AbtestStatus.getByName(payload.getStatus(), null); List<AbtestItem> filterItems = new ArrayList<AbtestItem>(); List<AbtestItem> totalItems = new ArrayList<AbtestItem>(); int createdCount = 0, readyCount = 0, runningCount = 0, terminatedCount = 0, suspendedCount = 0; try { List<AbtestRun> runs = m_abtestRunDao.findAll(AbtestRunEntity.READSET_FULL); if (runs != null) { for (AbtestRun run : runs) { Abtest abtest = m_abtestDao.findByPK(run.getCaseId(), AbtestEntity.READSET_FULL); AbtestItem item = new AbtestItem(abtest, run); totalItems.add(item); if (status != null && item.getStatus() == status) { filterItems.add(item); } switch (item.getStatus()) { case CREATED: createdCount++; break; case READY: readyCount++; break; case RUNNING: runningCount++; break; case TERMINATED: terminatedCount++; break; case SUSPENDED: suspendedCount++; break; } } } } catch (Throwable e) { Cat.logError(e); } listViewModel.setCreatedCount(createdCount); listViewModel.setReadyCount(readyCount); listViewModel.setRunningCount(runningCount); listViewModel.setTerminatedCount(terminatedCount); listViewModel.setSuspendedCount(suspendedCount); if (status != null) { totalItems = null; totalItems = filterItems; } int totalSize = totalItems.size(); int totalPages = totalSize % m_pageSize == 0 ? (totalSize / m_pageSize) : (totalSize / m_pageSize + 1); // safe guarder for pageNum if (payload.getPageNum() >= totalPages) { if (totalPages == 0) { payload.setPageNum(1); } else { payload.setPageNum(totalPages); } } else if (payload.getPageNum() <= 0) { payload.setPageNum(1); } int fromIndex = (payload.getPageNum() - 1) * m_pageSize; int toIndex = (fromIndex + m_pageSize) <= totalSize ? (fromIndex + m_pageSize) : totalSize; listViewModel.setTotalPages(totalPages); listViewModel.setItems(totalItems.subList(fromIndex, toIndex)); model.setListViewModel(listViewModel); }