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) {

Reply via email to