Updated Branches: refs/heads/master 4eaa68181 -> 96eeceba8
CLOUDSTACK-5390: obey page/pageSize parameters in listNetworks call Project: http://git-wip-us.apache.org/repos/asf/cloudstack/repo Commit: http://git-wip-us.apache.org/repos/asf/cloudstack/commit/96eeceba Tree: http://git-wip-us.apache.org/repos/asf/cloudstack/tree/96eeceba Diff: http://git-wip-us.apache.org/repos/asf/cloudstack/diff/96eeceba Branch: refs/heads/master Commit: 96eeceba8b3667f49fa44c62e993cbaea86968dc Parents: 4eaa681 Author: Alena Prokharchyk <[email protected]> Authored: Fri Dec 6 16:16:39 2013 -0800 Committer: Alena Prokharchyk <[email protected]> Committed: Fri Dec 6 16:48:04 2013 -0800 ---------------------------------------------------------------------- .../com/cloud/network/NetworkServiceImpl.java | 30 +++++++++++++++++++- 1 file changed, 29 insertions(+), 1 deletion(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/cloudstack/blob/96eeceba/server/src/com/cloud/network/NetworkServiceImpl.java ---------------------------------------------------------------------- diff --git a/server/src/com/cloud/network/NetworkServiceImpl.java b/server/src/com/cloud/network/NetworkServiceImpl.java index fffb553..6855587 100755 --- a/server/src/com/cloud/network/NetworkServiceImpl.java +++ b/server/src/com/cloud/network/NetworkServiceImpl.java @@ -1471,7 +1471,7 @@ public class NetworkServiceImpl extends ManagerBase implements NetworkService { isRecursive = true; } - Filter searchFilter = new Filter(NetworkVO.class, "id", false, cmd.getStartIndex(), cmd.getPageSizeVal()); + Filter searchFilter = new Filter(NetworkVO.class, "id", false, null, null); SearchBuilder<NetworkVO> sb = _networksDao.createSearchBuilder(); if (forVpc != null) { @@ -1590,9 +1590,37 @@ public class NetworkServiceImpl extends ManagerBase implements NetworkService { networksToReturn = networksForDeploy; } + //Now apply pagination + //Most likely pageSize will never exceed int value, and we need integer to partition the listToReturn + boolean notNull = cmd.getStartIndex() != null && cmd.getPageSizeVal() != null; + if (notNull && cmd.getStartIndex() <= Integer.MAX_VALUE && cmd.getStartIndex() >= Integer.MIN_VALUE && + cmd.getPageSizeVal() <= Integer.MAX_VALUE && cmd.getPageSizeVal() >= Integer.MIN_VALUE) { + int startIndex = cmd.getStartIndex().intValue() == 0 ? 0 : cmd.getStartIndex().intValue() - 1; + List<NetworkVO> wPagination = new ArrayList<NetworkVO>(); + List<List<NetworkVO>> partitions = partitionNetworks(networksToReturn, cmd.getPageSizeVal().intValue()); + if (startIndex< partitions.size()) { + wPagination = partitions.get(startIndex); + } + return wPagination; + } + return networksToReturn; } + private static List<List<NetworkVO>> partitionNetworks(List<NetworkVO> originalList, + int chunkSize) { + List<List<NetworkVO>> listOfChunks = new ArrayList<List<NetworkVO>>(); + for (int i = 0; i < originalList.size() / chunkSize; i++) { + listOfChunks.add(originalList.subList(i * chunkSize, i * chunkSize + + chunkSize)); + } + if (originalList.size() % chunkSize != 0) { + listOfChunks.add(originalList.subList(originalList.size() + - originalList.size() % chunkSize, originalList.size())); + } + return listOfChunks; + } + private SearchCriteria<NetworkVO> buildNetworkSearchCriteria(SearchBuilder<NetworkVO> sb, String keyword, Long id, Boolean isSystem, Long zoneId, String guestIpType, String trafficType, Long physicalNetworkId, String aclType, boolean skipProjectNetworks, Boolean restartRequired, Boolean specifyIpRanges, Long vpcId, Map<String, String> tags) {
