Updated Branches: refs/heads/rbac a6d03cd82 -> 312ff76f6
Separate listZones cmd to use two different views, also renamed previous listZonesByCmd to listZonesCmd. Project: http://git-wip-us.apache.org/repos/asf/cloudstack/repo Commit: http://git-wip-us.apache.org/repos/asf/cloudstack/commit/312ff76f Tree: http://git-wip-us.apache.org/repos/asf/cloudstack/tree/312ff76f Diff: http://git-wip-us.apache.org/repos/asf/cloudstack/diff/312ff76f Branch: refs/heads/rbac Commit: 312ff76f698653434d0043328a9caea0ef0b6a8f Parents: a6d03cd Author: Min Chen <min.c...@citrix.com> Authored: Thu Dec 12 17:40:30 2013 -0800 Committer: Min Chen <min.c...@citrix.com> Committed: Thu Dec 12 17:40:30 2013 -0800 ---------------------------------------------------------------------- .../cloudstack/api/ResponseGenerator.java | 2 +- .../api/command/admin/zone/CreateZoneCmd.java | 9 +- .../command/admin/zone/ListZonesCmdByAdmin.java | 26 ++++ .../api/command/admin/zone/UpdateZoneCmd.java | 9 +- .../api/command/user/zone/ListZonesByCmd.java | 132 ------------------ .../api/command/user/zone/ListZonesCmd.java | 134 +++++++++++++++++++ .../apache/cloudstack/query/QueryService.java | 4 +- server/src/com/cloud/api/ApiDBUtils.java | 4 +- server/src/com/cloud/api/ApiResponseHelper.java | 4 +- server/src/com/cloud/api/ApiServer.java | 4 +- .../com/cloud/api/query/QueryManagerImpl.java | 15 ++- .../com/cloud/api/query/ViewResponseHelper.java | 4 +- .../cloud/api/query/dao/DataCenterJoinDao.java | 3 +- .../api/query/dao/DataCenterJoinDaoImpl.java | 14 +- .../com/cloud/server/ManagementServerImpl.java | 4 +- 15 files changed, 204 insertions(+), 164 deletions(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/cloudstack/blob/312ff76f/api/src/org/apache/cloudstack/api/ResponseGenerator.java ---------------------------------------------------------------------- diff --git a/api/src/org/apache/cloudstack/api/ResponseGenerator.java b/api/src/org/apache/cloudstack/api/ResponseGenerator.java index bd42f2b..efc1726 100644 --- a/api/src/org/apache/cloudstack/api/ResponseGenerator.java +++ b/api/src/org/apache/cloudstack/api/ResponseGenerator.java @@ -253,7 +253,7 @@ public interface ResponseGenerator { PodResponse createPodResponse(Pod pod, Boolean showCapacities); - ZoneResponse createZoneResponse(DataCenter dataCenter, Boolean showCapacities); + ZoneResponse createZoneResponse(ResponseView view, DataCenter dataCenter, Boolean showCapacities); VolumeResponse createVolumeResponse(ResponseView view, Volume volume); http://git-wip-us.apache.org/repos/asf/cloudstack/blob/312ff76f/api/src/org/apache/cloudstack/api/command/admin/zone/CreateZoneCmd.java ---------------------------------------------------------------------- diff --git a/api/src/org/apache/cloudstack/api/command/admin/zone/CreateZoneCmd.java b/api/src/org/apache/cloudstack/api/command/admin/zone/CreateZoneCmd.java index 5799da1..3532422 100644 --- a/api/src/org/apache/cloudstack/api/command/admin/zone/CreateZoneCmd.java +++ b/api/src/org/apache/cloudstack/api/command/admin/zone/CreateZoneCmd.java @@ -16,18 +16,19 @@ // under the License. package org.apache.cloudstack.api.command.admin.zone; +import org.apache.log4j.Logger; + import org.apache.cloudstack.api.APICommand; import org.apache.cloudstack.api.ApiConstants; import org.apache.cloudstack.api.ApiErrorCode; import org.apache.cloudstack.api.BaseCmd; import org.apache.cloudstack.api.Parameter; +import org.apache.cloudstack.api.ResponseObject.ResponseView; import org.apache.cloudstack.api.ServerApiException; import org.apache.cloudstack.api.response.DomainResponse; import org.apache.cloudstack.api.response.ZoneResponse; import org.apache.cloudstack.context.CallContext; -import org.apache.log4j.Logger; - import com.cloud.dc.DataCenter; import com.cloud.user.Account; @@ -167,9 +168,9 @@ public class CreateZoneCmd extends BaseCmd { CallContext.current().setEventDetails("Zone Name: "+getZoneName()); DataCenter result = _configService.createZone(this); if (result != null){ - ZoneResponse response = _responseGenerator.createZoneResponse(result,false); + ZoneResponse response = _responseGenerator.createZoneResponse(ResponseView.Full, result, false); response.setResponseName(getCommandName()); - this.setResponseObject(response); + setResponseObject(response); } else { throw new ServerApiException(ApiErrorCode.INTERNAL_ERROR, "Failed to create a zone"); } http://git-wip-us.apache.org/repos/asf/cloudstack/blob/312ff76f/api/src/org/apache/cloudstack/api/command/admin/zone/ListZonesCmdByAdmin.java ---------------------------------------------------------------------- diff --git a/api/src/org/apache/cloudstack/api/command/admin/zone/ListZonesCmdByAdmin.java b/api/src/org/apache/cloudstack/api/command/admin/zone/ListZonesCmdByAdmin.java new file mode 100644 index 0000000..772a4dc --- /dev/null +++ b/api/src/org/apache/cloudstack/api/command/admin/zone/ListZonesCmdByAdmin.java @@ -0,0 +1,26 @@ +// Licensed to the Apache Software Foundation (ASF) under one +// or more contributor license agreements. See the NOTICE file +// distributed with this work for additional information +// regarding copyright ownership. The ASF licenses this file +// to you under the Apache License, Version 2.0 (the +// "License"); you may not use this file except in compliance +// with the License. You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, +// software distributed under the License is distributed on an +// "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY +// KIND, either express or implied. See the License for the +// specific language governing permissions and limitations +// under the License. +package org.apache.cloudstack.api.command.admin.zone; + +import org.apache.cloudstack.api.APICommand; +import org.apache.cloudstack.api.ResponseObject.ResponseView; +import org.apache.cloudstack.api.command.user.zone.ListZonesCmd; +import org.apache.cloudstack.api.response.ZoneResponse; + +@APICommand(name = "listZones", description = "Lists zones", responseObject = ZoneResponse.class, responseView = ResponseView.Full) +public class ListZonesCmdByAdmin extends ListZonesCmd { +} http://git-wip-us.apache.org/repos/asf/cloudstack/blob/312ff76f/api/src/org/apache/cloudstack/api/command/admin/zone/UpdateZoneCmd.java ---------------------------------------------------------------------- diff --git a/api/src/org/apache/cloudstack/api/command/admin/zone/UpdateZoneCmd.java b/api/src/org/apache/cloudstack/api/command/admin/zone/UpdateZoneCmd.java index c888995..c7c95d2 100644 --- a/api/src/org/apache/cloudstack/api/command/admin/zone/UpdateZoneCmd.java +++ b/api/src/org/apache/cloudstack/api/command/admin/zone/UpdateZoneCmd.java @@ -19,17 +19,18 @@ package org.apache.cloudstack.api.command.admin.zone; import java.util.List; import java.util.Map; +import org.apache.log4j.Logger; + import org.apache.cloudstack.api.APICommand; import org.apache.cloudstack.api.ApiConstants; import org.apache.cloudstack.api.ApiErrorCode; import org.apache.cloudstack.api.BaseCmd; import org.apache.cloudstack.api.Parameter; +import org.apache.cloudstack.api.ResponseObject.ResponseView; import org.apache.cloudstack.api.ServerApiException; import org.apache.cloudstack.api.response.ZoneResponse; import org.apache.cloudstack.context.CallContext; -import org.apache.log4j.Logger; - import com.cloud.dc.DataCenter; import com.cloud.user.Account; @@ -179,9 +180,9 @@ public class UpdateZoneCmd extends BaseCmd { CallContext.current().setEventDetails("Zone Id: "+getId()); DataCenter result = _configService.editZone(this); if (result != null) { - ZoneResponse response = _responseGenerator.createZoneResponse(result, false); + ZoneResponse response = _responseGenerator.createZoneResponse(ResponseView.Full, result, false); response.setResponseName(getCommandName()); - this.setResponseObject(response); + setResponseObject(response); } else { throw new ServerApiException(ApiErrorCode.INTERNAL_ERROR, "Failed to update zone; internal error."); } http://git-wip-us.apache.org/repos/asf/cloudstack/blob/312ff76f/api/src/org/apache/cloudstack/api/command/user/zone/ListZonesByCmd.java ---------------------------------------------------------------------- diff --git a/api/src/org/apache/cloudstack/api/command/user/zone/ListZonesByCmd.java b/api/src/org/apache/cloudstack/api/command/user/zone/ListZonesByCmd.java deleted file mode 100644 index 2a98cfb..0000000 --- a/api/src/org/apache/cloudstack/api/command/user/zone/ListZonesByCmd.java +++ /dev/null @@ -1,132 +0,0 @@ -// Licensed to the Apache Software Foundation (ASF) under one -// or more contributor license agreements. See the NOTICE file -// distributed with this work for additional information -// regarding copyright ownership. The ASF licenses this file -// to you under the Apache License, Version 2.0 (the -// "License"); you may not use this file except in compliance -// with the License. You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, -// software distributed under the License is distributed on an -// "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY -// KIND, either express or implied. See the License for the -// specific language governing permissions and limitations -// under the License. -package org.apache.cloudstack.api.command.user.zone; - -import java.util.Collection; -import java.util.HashMap; -import java.util.Iterator; -import java.util.Map; - -import org.apache.cloudstack.api.APICommand; -import org.apache.cloudstack.api.ApiConstants; -import org.apache.cloudstack.api.BaseListCmd; -import org.apache.cloudstack.api.Parameter; -import org.apache.cloudstack.api.response.DomainResponse; -import org.apache.cloudstack.api.response.ListResponse; -import org.apache.cloudstack.api.response.ZoneResponse; -import org.apache.log4j.Logger; - -import com.cloud.exception.InvalidParameterValueException; - -@APICommand(name = "listZones", description="Lists zones", responseObject=ZoneResponse.class) -public class ListZonesByCmd extends BaseListCmd { - public static final Logger s_logger = Logger.getLogger(ListZonesByCmd.class.getName()); - - private static final String s_name = "listzonesresponse"; - - ///////////////////////////////////////////////////// - //////////////// API parameters ///////////////////// - ///////////////////////////////////////////////////// - @Parameter(name=ApiConstants.ID, type=CommandType.UUID, entityType=ZoneResponse.class, - description= "the ID of the zone") - private Long id; - - @Parameter(name=ApiConstants.AVAILABLE, type=CommandType.BOOLEAN, - description="true if you want to retrieve all available Zones. False if you only want to return the Zones" + - " from which you have at least one VM. Default is false.") - private Boolean available; - - @Parameter(name=ApiConstants.DOMAIN_ID, type=CommandType.UUID, entityType=DomainResponse.class, - description="the ID of the domain associated with the zone") - private Long domainId; - - @Parameter(name=ApiConstants.NAME, type=CommandType.STRING, description="the name of the zone") - private String name; - - @Parameter(name=ApiConstants.NETWORK_TYPE, type=CommandType.STRING, description="the network type of the zone that the virtual machine belongs to") - private String networkType; - - @Parameter(name=ApiConstants.SHOW_CAPACITIES, type=CommandType.BOOLEAN, description="flag to display the capacity of the zones") - private Boolean showCapacities; - - @Parameter(name = ApiConstants.TAGS, type = CommandType.MAP, description = "List zones by resource tags (key/value pairs)", since="4.3") - private Map tags; - - ///////////////////////////////////////////////////// - /////////////////// Accessors /////////////////////// - ///////////////////////////////////////////////////// - - public Long getId() { - return id; - } - - public Boolean isAvailable() { - return available; - } - - public Long getDomainId(){ - return domainId; - } - - public String getName(){ - return name; - } - - public String getNetworkType() { - return networkType; - } - - public Boolean getShowCapacities() { - return showCapacities; - } - - public Map<String, String> getTags() { - Map<String, String> tagsMap = null; - if (tags != null && !tags.isEmpty()) { - tagsMap = new HashMap<String, String>(); - Collection<?> servicesCollection = tags.values(); - Iterator<?> iter = servicesCollection.iterator(); - while (iter.hasNext()) { - HashMap<String, String> services = (HashMap<String, String>) iter.next(); - String key = services.get("key"); - String value = services.get("value"); - if (value == null) { - throw new InvalidParameterValueException("No value is passed in for key " + key); - } - tagsMap.put(key, value); - } - } - return tagsMap; - } - - ///////////////////////////////////////////////////// - /////////////// API Implementation/////////////////// - ///////////////////////////////////////////////////// - - @Override - public String getCommandName() { - return s_name; - } - - @Override - public void execute(){ - - ListResponse<ZoneResponse> response = _queryService.listDataCenters(this); - response.setResponseName(getCommandName()); - this.setResponseObject(response); - } -} http://git-wip-us.apache.org/repos/asf/cloudstack/blob/312ff76f/api/src/org/apache/cloudstack/api/command/user/zone/ListZonesCmd.java ---------------------------------------------------------------------- diff --git a/api/src/org/apache/cloudstack/api/command/user/zone/ListZonesCmd.java b/api/src/org/apache/cloudstack/api/command/user/zone/ListZonesCmd.java new file mode 100644 index 0000000..27f8b35 --- /dev/null +++ b/api/src/org/apache/cloudstack/api/command/user/zone/ListZonesCmd.java @@ -0,0 +1,134 @@ +// Licensed to the Apache Software Foundation (ASF) under one +// or more contributor license agreements. See the NOTICE file +// distributed with this work for additional information +// regarding copyright ownership. The ASF licenses this file +// to you under the Apache License, Version 2.0 (the +// "License"); you may not use this file except in compliance +// with the License. You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, +// software distributed under the License is distributed on an +// "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY +// KIND, either express or implied. See the License for the +// specific language governing permissions and limitations +// under the License. +package org.apache.cloudstack.api.command.user.zone; + +import java.util.Collection; +import java.util.HashMap; +import java.util.Iterator; +import java.util.Map; + +import org.apache.log4j.Logger; + +import org.apache.cloudstack.api.APICommand; +import org.apache.cloudstack.api.ApiConstants; +import org.apache.cloudstack.api.BaseListCmd; +import org.apache.cloudstack.api.Parameter; +import org.apache.cloudstack.api.ResponseObject.ResponseView; +import org.apache.cloudstack.api.response.DomainResponse; +import org.apache.cloudstack.api.response.ListResponse; +import org.apache.cloudstack.api.response.ZoneResponse; + +import com.cloud.exception.InvalidParameterValueException; + +@APICommand(name = "listZones", description = "Lists zones", responseObject = ZoneResponse.class, responseView = ResponseView.Restricted) +public class ListZonesCmd extends BaseListCmd { + public static final Logger s_logger = Logger.getLogger(ListZonesCmd.class.getName()); + + private static final String s_name = "listzonesresponse"; + + ///////////////////////////////////////////////////// + //////////////// API parameters ///////////////////// + ///////////////////////////////////////////////////// + @Parameter(name=ApiConstants.ID, type=CommandType.UUID, entityType=ZoneResponse.class, + description= "the ID of the zone") + private Long id; + + @Parameter(name=ApiConstants.AVAILABLE, type=CommandType.BOOLEAN, + description="true if you want to retrieve all available Zones. False if you only want to return the Zones" + + " from which you have at least one VM. Default is false.") + private Boolean available; + + @Parameter(name=ApiConstants.DOMAIN_ID, type=CommandType.UUID, entityType=DomainResponse.class, + description="the ID of the domain associated with the zone") + private Long domainId; + + @Parameter(name=ApiConstants.NAME, type=CommandType.STRING, description="the name of the zone") + private String name; + + @Parameter(name=ApiConstants.NETWORK_TYPE, type=CommandType.STRING, description="the network type of the zone that the virtual machine belongs to") + private String networkType; + + @Parameter(name=ApiConstants.SHOW_CAPACITIES, type=CommandType.BOOLEAN, description="flag to display the capacity of the zones") + private Boolean showCapacities; + + @Parameter(name = ApiConstants.TAGS, type = CommandType.MAP, description = "List zones by resource tags (key/value pairs)", since="4.3") + private Map tags; + + ///////////////////////////////////////////////////// + /////////////////// Accessors /////////////////////// + ///////////////////////////////////////////////////// + + public Long getId() { + return id; + } + + public Boolean isAvailable() { + return available; + } + + public Long getDomainId(){ + return domainId; + } + + public String getName(){ + return name; + } + + public String getNetworkType() { + return networkType; + } + + public Boolean getShowCapacities() { + return showCapacities; + } + + public Map<String, String> getTags() { + Map<String, String> tagsMap = null; + if (tags != null && !tags.isEmpty()) { + tagsMap = new HashMap<String, String>(); + Collection<?> servicesCollection = tags.values(); + Iterator<?> iter = servicesCollection.iterator(); + while (iter.hasNext()) { + HashMap<String, String> services = (HashMap<String, String>) iter.next(); + String key = services.get("key"); + String value = services.get("value"); + if (value == null) { + throw new InvalidParameterValueException("No value is passed in for key " + key); + } + tagsMap.put(key, value); + } + } + return tagsMap; + } + + ///////////////////////////////////////////////////// + /////////////// API Implementation/////////////////// + ///////////////////////////////////////////////////// + + @Override + public String getCommandName() { + return s_name; + } + + @Override + public void execute(){ + + ListResponse<ZoneResponse> response = _queryService.listDataCenters(this); + response.setResponseName(getCommandName()); + setResponseObject(response); + } +} http://git-wip-us.apache.org/repos/asf/cloudstack/blob/312ff76f/api/src/org/apache/cloudstack/query/QueryService.java ---------------------------------------------------------------------- diff --git a/api/src/org/apache/cloudstack/query/QueryService.java b/api/src/org/apache/cloudstack/query/QueryService.java index 00df62e..9c9274f 100644 --- a/api/src/org/apache/cloudstack/query/QueryService.java +++ b/api/src/org/apache/cloudstack/query/QueryService.java @@ -42,7 +42,7 @@ import org.apache.cloudstack.api.command.user.vm.ListVMsCmd; import org.apache.cloudstack.api.command.user.vmgroup.ListVMGroupsCmd; import org.apache.cloudstack.api.command.user.volume.ListResourceDetailsCmd; import org.apache.cloudstack.api.command.user.volume.ListVolumesCmd; -import org.apache.cloudstack.api.command.user.zone.ListZonesByCmd; +import org.apache.cloudstack.api.command.user.zone.ListZonesCmd; import org.apache.cloudstack.api.response.AccountResponse; import org.apache.cloudstack.api.response.AclGroupResponse; import org.apache.cloudstack.api.response.AclPolicyResponse; @@ -114,7 +114,7 @@ public interface QueryService { public ListResponse<ServiceOfferingResponse> searchForServiceOfferings(ListServiceOfferingsCmd cmd); - public ListResponse<ZoneResponse> listDataCenters(ListZonesByCmd cmd); + public ListResponse<ZoneResponse> listDataCenters(ListZonesCmd cmd); public ListResponse<TemplateResponse> listTemplates(ListTemplatesCmd cmd); http://git-wip-us.apache.org/repos/asf/cloudstack/blob/312ff76f/server/src/com/cloud/api/ApiDBUtils.java ---------------------------------------------------------------------- diff --git a/server/src/com/cloud/api/ApiDBUtils.java b/server/src/com/cloud/api/ApiDBUtils.java index 129f0ff..e54884b 100755 --- a/server/src/com/cloud/api/ApiDBUtils.java +++ b/server/src/com/cloud/api/ApiDBUtils.java @@ -1643,8 +1643,8 @@ public class ApiDBUtils { return _serviceOfferingJoinDao.newServiceOfferingView(offering); } - public static ZoneResponse newDataCenterResponse(DataCenterJoinVO dc, Boolean showCapacities) { - return _dcJoinDao.newDataCenterResponse(dc, showCapacities); + public static ZoneResponse newDataCenterResponse(ResponseView view, DataCenterJoinVO dc, Boolean showCapacities) { + return _dcJoinDao.newDataCenterResponse(view, dc, showCapacities); } public static DataCenterJoinVO newDataCenterView(DataCenter dc){ http://git-wip-us.apache.org/repos/asf/cloudstack/blob/312ff76f/server/src/com/cloud/api/ApiResponseHelper.java ---------------------------------------------------------------------- diff --git a/server/src/com/cloud/api/ApiResponseHelper.java b/server/src/com/cloud/api/ApiResponseHelper.java index 556f3e5..1470d43 100755 --- a/server/src/com/cloud/api/ApiResponseHelper.java +++ b/server/src/com/cloud/api/ApiResponseHelper.java @@ -859,9 +859,9 @@ public class ApiResponseHelper implements ResponseGenerator { } @Override - public ZoneResponse createZoneResponse(DataCenter dataCenter, Boolean showCapacities) { + public ZoneResponse createZoneResponse(ResponseView view, DataCenter dataCenter, Boolean showCapacities) { DataCenterJoinVO vOffering = ApiDBUtils.newDataCenterView(dataCenter); - return ApiDBUtils.newDataCenterResponse(vOffering, showCapacities); + return ApiDBUtils.newDataCenterResponse(view, vOffering, showCapacities); } public static List<CapacityResponse> getDataCenterCapacityResponse(Long zoneId) { http://git-wip-us.apache.org/repos/asf/cloudstack/blob/312ff76f/server/src/com/cloud/api/ApiServer.java ---------------------------------------------------------------------- diff --git a/server/src/com/cloud/api/ApiServer.java b/server/src/com/cloud/api/ApiServer.java index 672ad12..d28a51c 100755 --- a/server/src/com/cloud/api/ApiServer.java +++ b/server/src/com/cloud/api/ApiServer.java @@ -114,7 +114,7 @@ import org.apache.cloudstack.api.command.user.tag.ListTagsCmd; import org.apache.cloudstack.api.command.user.vm.ListVMsCmd; import org.apache.cloudstack.api.command.user.vmgroup.ListVMGroupsCmd; import org.apache.cloudstack.api.command.user.volume.ListVolumesCmd; -import org.apache.cloudstack.api.command.user.zone.ListZonesByCmd; +import org.apache.cloudstack.api.command.user.zone.ListZonesCmd; import org.apache.cloudstack.api.response.AsyncJobResponse; import org.apache.cloudstack.api.response.CreateCmdResponse; import org.apache.cloudstack.api.response.ExceptionResponse; @@ -684,7 +684,7 @@ public class ApiServer extends ManagerBase implements HttpRequestHandler, ApiSer && !(cmdObj instanceof ListStoragePoolsCmd) && !(cmdObj instanceof ListDiskOfferingsCmd) && !(cmdObj instanceof ListServiceOfferingsCmd) - && !(cmdObj instanceof ListZonesByCmd) + && !(cmdObj instanceof ListZonesCmd) ) { buildAsyncListResponse((BaseListCmd) cmdObj, caller); } http://git-wip-us.apache.org/repos/asf/cloudstack/blob/312ff76f/server/src/com/cloud/api/query/QueryManagerImpl.java ---------------------------------------------------------------------- diff --git a/server/src/com/cloud/api/query/QueryManagerImpl.java b/server/src/com/cloud/api/query/QueryManagerImpl.java index a304d22..64b606c 100644 --- a/server/src/com/cloud/api/query/QueryManagerImpl.java +++ b/server/src/com/cloud/api/query/QueryManagerImpl.java @@ -54,6 +54,7 @@ import org.apache.cloudstack.api.command.admin.template.ListTemplatesCmdByAdmin; import org.apache.cloudstack.api.command.admin.user.ListUsersCmd; import org.apache.cloudstack.api.command.admin.vm.ListVMsCmdByAdmin; import org.apache.cloudstack.api.command.admin.volume.ListVolumesCmdByAdmin; +import org.apache.cloudstack.api.command.admin.zone.ListZonesCmdByAdmin; import org.apache.cloudstack.api.command.user.account.ListAccountsCmd; import org.apache.cloudstack.api.command.user.account.ListProjectAccountsCmd; import org.apache.cloudstack.api.command.user.event.ListEventsCmd; @@ -70,7 +71,7 @@ import org.apache.cloudstack.api.command.user.vm.ListVMsCmd; import org.apache.cloudstack.api.command.user.vmgroup.ListVMGroupsCmd; import org.apache.cloudstack.api.command.user.volume.ListResourceDetailsCmd; import org.apache.cloudstack.api.command.user.volume.ListVolumesCmd; -import org.apache.cloudstack.api.command.user.zone.ListZonesByCmd; +import org.apache.cloudstack.api.command.user.zone.ListZonesCmd; import org.apache.cloudstack.api.response.AccountResponse; import org.apache.cloudstack.api.response.AclGroupResponse; import org.apache.cloudstack.api.response.AclPolicyResponse; @@ -2510,16 +2511,22 @@ public class QueryManagerImpl extends ManagerBase implements QueryService { } @Override - public ListResponse<ZoneResponse> listDataCenters(ListZonesByCmd cmd) { + public ListResponse<ZoneResponse> listDataCenters(ListZonesCmd cmd) { Pair<List<DataCenterJoinVO>, Integer> result = listDataCentersInternal(cmd); ListResponse<ZoneResponse> response = new ListResponse<ZoneResponse>(); - List<ZoneResponse> dcResponses = ViewResponseHelper.createDataCenterResponse(cmd.getShowCapacities(), result + + ResponseView respView = ResponseView.Restricted; + if (cmd instanceof ListZonesCmdByAdmin) { + respView = ResponseView.Full; + } + + List<ZoneResponse> dcResponses = ViewResponseHelper.createDataCenterResponse(respView, cmd.getShowCapacities(), result .first().toArray(new DataCenterJoinVO[result.first().size()])); response.setResponses(dcResponses, result.second()); return response; } - private Pair<List<DataCenterJoinVO>, Integer> listDataCentersInternal(ListZonesByCmd cmd) { + private Pair<List<DataCenterJoinVO>, Integer> listDataCentersInternal(ListZonesCmd cmd) { Account account = CallContext.current().getCallingAccount(); Long domainId = cmd.getDomainId(); Long id = cmd.getId(); http://git-wip-us.apache.org/repos/asf/cloudstack/blob/312ff76f/server/src/com/cloud/api/query/ViewResponseHelper.java ---------------------------------------------------------------------- diff --git a/server/src/com/cloud/api/query/ViewResponseHelper.java b/server/src/com/cloud/api/query/ViewResponseHelper.java index 7e438f2..ae46328 100644 --- a/server/src/com/cloud/api/query/ViewResponseHelper.java +++ b/server/src/com/cloud/api/query/ViewResponseHelper.java @@ -370,10 +370,10 @@ public class ViewResponseHelper { return respList; } - public static List<ZoneResponse> createDataCenterResponse(Boolean showCapacities, DataCenterJoinVO... dcs) { + public static List<ZoneResponse> createDataCenterResponse(ResponseView view, Boolean showCapacities, DataCenterJoinVO... dcs) { List<ZoneResponse> respList = new ArrayList<ZoneResponse>(); for (DataCenterJoinVO vt : dcs){ - respList.add(ApiDBUtils.newDataCenterResponse(vt, showCapacities)); + respList.add(ApiDBUtils.newDataCenterResponse(view, vt, showCapacities)); } return respList; } http://git-wip-us.apache.org/repos/asf/cloudstack/blob/312ff76f/server/src/com/cloud/api/query/dao/DataCenterJoinDao.java ---------------------------------------------------------------------- diff --git a/server/src/com/cloud/api/query/dao/DataCenterJoinDao.java b/server/src/com/cloud/api/query/dao/DataCenterJoinDao.java index 340f86f..1c3ff1b 100644 --- a/server/src/com/cloud/api/query/dao/DataCenterJoinDao.java +++ b/server/src/com/cloud/api/query/dao/DataCenterJoinDao.java @@ -16,6 +16,7 @@ // under the License. package com.cloud.api.query.dao; +import org.apache.cloudstack.api.ResponseObject.ResponseView; import org.apache.cloudstack.api.response.ZoneResponse; import com.cloud.api.query.vo.DataCenterJoinVO; @@ -24,7 +25,7 @@ import com.cloud.utils.db.GenericDao; public interface DataCenterJoinDao extends GenericDao<DataCenterJoinVO, Long> { - ZoneResponse newDataCenterResponse(DataCenterJoinVO dof, Boolean showCapacities); + ZoneResponse newDataCenterResponse(ResponseView view, DataCenterJoinVO dof, Boolean showCapacities); DataCenterJoinVO newDataCenterView(DataCenter dof); } http://git-wip-us.apache.org/repos/asf/cloudstack/blob/312ff76f/server/src/com/cloud/api/query/dao/DataCenterJoinDaoImpl.java ---------------------------------------------------------------------- diff --git a/server/src/com/cloud/api/query/dao/DataCenterJoinDaoImpl.java b/server/src/com/cloud/api/query/dao/DataCenterJoinDaoImpl.java index b28ace0..4bfad78 100644 --- a/server/src/com/cloud/api/query/dao/DataCenterJoinDaoImpl.java +++ b/server/src/com/cloud/api/query/dao/DataCenterJoinDaoImpl.java @@ -21,11 +21,13 @@ import java.util.List; import javax.ejb.Local; import javax.inject.Inject; +import org.apache.log4j.Logger; +import org.springframework.stereotype.Component; + +import org.apache.cloudstack.api.ResponseObject.ResponseView; import org.apache.cloudstack.api.response.ResourceTagResponse; import org.apache.cloudstack.api.response.ZoneResponse; import org.apache.cloudstack.context.CallContext; -import org.apache.log4j.Logger; -import org.springframework.stereotype.Component; import com.cloud.api.ApiDBUtils; import com.cloud.api.ApiResponseHelper; @@ -55,13 +57,13 @@ public class DataCenterJoinDaoImpl extends GenericDaoBase<DataCenterJoinVO, Long dofIdSearch.and("id", dofIdSearch.entity().getId(), SearchCriteria.Op.EQ); dofIdSearch.done(); - this._count = "select count(distinct id) from data_center_view WHERE "; + _count = "select count(distinct id) from data_center_view WHERE "; } @Override - public ZoneResponse newDataCenterResponse(DataCenterJoinVO dataCenter, Boolean showCapacities) { + public ZoneResponse newDataCenterResponse(ResponseView view, DataCenterJoinVO dataCenter, Boolean showCapacities) { Account account = CallContext.current().getCallingAccount(); ZoneResponse zoneResponse = new ZoneResponse(); @@ -74,7 +76,7 @@ public class DataCenterJoinDaoImpl extends GenericDaoBase<DataCenterJoinVO, Long zoneResponse.setDescription(dataCenter.getDescription()); } - if ((account == null) || (_accountMgr.isRootAdmin(account.getId()))) { + if (view == ResponseView.Full) { zoneResponse.setDns1(dataCenter.getDns1()); zoneResponse.setDns2(dataCenter.getDns2()); zoneResponse.setIp6Dns1(dataCenter.getIp6Dns1()); @@ -104,7 +106,7 @@ public class DataCenterJoinDaoImpl extends GenericDaoBase<DataCenterJoinVO, Long // update tag information List<ResourceTagJoinVO> resourceTags = ApiDBUtils.listResourceTagViewByResourceUUID(dataCenter.getUuid(), ResourceObjectType.Zone); - for (ResourceTagJoinVO resourceTag : resourceTags) { + for (ResourceTagJoinVO resourceTag : resourceTags) { ResourceTagResponse tagResponse = ApiDBUtils.newResourceTagResponse(resourceTag, false); zoneResponse.addTag(tagResponse); } http://git-wip-us.apache.org/repos/asf/cloudstack/blob/312ff76f/server/src/com/cloud/server/ManagementServerImpl.java ---------------------------------------------------------------------- diff --git a/server/src/com/cloud/server/ManagementServerImpl.java b/server/src/com/cloud/server/ManagementServerImpl.java index 12de4bd..d2caf67 100755 --- a/server/src/com/cloud/server/ManagementServerImpl.java +++ b/server/src/com/cloud/server/ManagementServerImpl.java @@ -438,7 +438,7 @@ import org.apache.cloudstack.api.command.user.vpn.ListVpnUsersCmd; import org.apache.cloudstack.api.command.user.vpn.RemoveVpnUserCmd; import org.apache.cloudstack.api.command.user.vpn.ResetVpnConnectionCmd; import org.apache.cloudstack.api.command.user.vpn.UpdateVpnCustomerGatewayCmd; -import org.apache.cloudstack.api.command.user.zone.ListZonesByCmd; +import org.apache.cloudstack.api.command.user.zone.ListZonesCmd; import org.apache.cloudstack.config.Configuration; import org.apache.cloudstack.context.CallContext; import org.apache.cloudstack.engine.orchestration.service.VolumeOrchestrationService; @@ -2823,7 +2823,7 @@ public class ManagementServerImpl extends ManagerBase implements ManagementServe cmdList.add(RemoveVpnUserCmd.class); cmdList.add(ResetVpnConnectionCmd.class); cmdList.add(UpdateVpnCustomerGatewayCmd.class); - cmdList.add(ListZonesByCmd.class); + cmdList.add(ListZonesCmd.class); cmdList.add(ListVMSnapshotCmd.class); cmdList.add(CreateVMSnapshotCmd.class); cmdList.add(RevertToVMSnapshotCmd.class);