From e5c137e303babeba2afc80589f6677ae8a20ffd0 Mon Sep 17 00:00:00 2001 From: alena Date: Fri, 19 Nov 2010 13:29:48 -0800 Subject: [PATCH] bug 7223: pagesize and page should be specified together in "list" api commands status 7223: resolved fixed --- server/src/com/cloud/api/ApiConstants.java | 2 ++ server/src/com/cloud/api/ApiDispatcher.java | 10 +++++++++- server/src/com/cloud/api/BaseListCmd.java | 4 ++-- 3 files changed, 13 insertions(+), 3 deletions(-) diff --git a/server/src/com/cloud/api/ApiConstants.java b/server/src/com/cloud/api/ApiConstants.java index 619baa5c5ac..908318fba6c 100644 --- a/server/src/com/cloud/api/ApiConstants.java +++ b/server/src/com/cloud/api/ApiConstants.java @@ -161,4 +161,6 @@ public class ApiConstants { public static final String VOLUME_ID = "volumeid"; public static final String ZONE_ID = "zoneid"; public static final String NETWORK_TYPE = "networktype"; + public static final String PAGE = "page"; + public static final String PAGE_SIZE = "pagesize"; } diff --git a/server/src/com/cloud/api/ApiDispatcher.java b/server/src/com/cloud/api/ApiDispatcher.java index 9a6d1cf5e0c..e1c45fe4564 100644 --- a/server/src/com/cloud/api/ApiDispatcher.java +++ b/server/src/com/cloud/api/ApiDispatcher.java @@ -119,8 +119,16 @@ public class ApiDispatcher { } } - public static void setupParameters(BaseCmd cmd, Map params) { + public static void setupParameters(BaseCmd cmd, Map params){ Map unpackedParams = cmd.unpackParams(params); + if (cmd instanceof BaseListCmd) { + if ((unpackedParams.get(ApiConstants.PAGE) == null) && (unpackedParams.get(ApiConstants.PAGE_SIZE) != null)) { + throw new ServerApiException(BaseCmd.PARAM_ERROR, "\"page\" parameter is required when \"pagesize\" is specified"); + } else if ((unpackedParams.get(ApiConstants.PAGE_SIZE) == null) && (unpackedParams.get(ApiConstants.PAGE) != null)) { + throw new ServerApiException(BaseCmd.PARAM_ERROR, "\"pagesize\" parameter is required when \"page\" is specified"); + } + } + Field[] fields = cmd.getClass().getDeclaredFields(); Class superClass = cmd.getClass().getSuperclass(); while (BaseCmd.class.isAssignableFrom(superClass)) { diff --git a/server/src/com/cloud/api/BaseListCmd.java b/server/src/com/cloud/api/BaseListCmd.java index 5a3e96c5d0c..12f066f9c2e 100644 --- a/server/src/com/cloud/api/BaseListCmd.java +++ b/server/src/com/cloud/api/BaseListCmd.java @@ -11,10 +11,10 @@ public abstract class BaseListCmd extends BaseCmd { private String keyword; // FIXME: Need to be able to specify next/prev/first/last, so Integer might not be right - @Parameter(name="page", type=CommandType.INTEGER) + @Parameter(name=ApiConstants.PAGE, type=CommandType.INTEGER) private Integer page; - @Parameter(name="pagesize", type=CommandType.INTEGER) + @Parameter(name=ApiConstants.PAGE_SIZE, type=CommandType.INTEGER) private Integer pageSize; /////////////////////////////////////////////////////