diff --git a/api/src/com/cloud/api/ResponseGenerator.java b/api/src/com/cloud/api/ResponseGenerator.java
index b72eb06bf11..0e6733ff3e9 100755
--- a/api/src/com/cloud/api/ResponseGenerator.java
+++ b/api/src/com/cloud/api/ResponseGenerator.java
@@ -85,7 +85,6 @@ import com.cloud.host.Host;
import com.cloud.hypervisor.HypervisorCapabilities;
import com.cloud.network.IpAddress;
import com.cloud.network.Network;
-import com.cloud.network.Network.Provider;
import com.cloud.network.Network.Service;
import com.cloud.network.PhysicalNetwork;
import com.cloud.network.PhysicalNetworkServiceProvider;
@@ -254,8 +253,6 @@ public interface ResponseGenerator {
ServiceResponse createNetworkServiceResponse(Service service);
- ProviderResponse createNetworkServiceProviderResponse(Provider serviceProvider);
-
ProviderResponse createNetworkServiceProviderResponse(PhysicalNetworkServiceProvider result);
TrafficTypeResponse createTrafficTypeResponse(PhysicalNetworkTrafficType result);
diff --git a/api/src/com/cloud/api/commands/ListSupportedNetworkServiceProvidersCmd.java b/api/src/com/cloud/api/commands/ListSupportedNetworkServiceProvidersCmd.java
deleted file mode 100644
index fd64e217237..00000000000
--- a/api/src/com/cloud/api/commands/ListSupportedNetworkServiceProvidersCmd.java
+++ /dev/null
@@ -1,88 +0,0 @@
-/**
- * Copyright (C) 2011 Citrix Systems, Inc. All rights reserved.
- *
- * This software is licensed under the GNU General Public License v3 or later.
- *
- * It is free software: you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation, either version 3 of the License, or any later version.
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program. If not, see .
- *
- */
-
-package com.cloud.api.commands;
-
-import java.util.ArrayList;
-import java.util.List;
-
-import org.apache.log4j.Logger;
-
-import com.cloud.api.ApiConstants;
-import com.cloud.api.BaseListCmd;
-import com.cloud.api.Implementation;
-import com.cloud.api.Parameter;
-import com.cloud.api.response.ListResponse;
-import com.cloud.api.response.ProviderResponse;
-import com.cloud.network.Network;
-import com.cloud.user.Account;
-
-
-@Implementation(description="Lists all network serviceproviders supported by CloudStack or for the given service.", responseObject=ProviderResponse.class)
-public class ListSupportedNetworkServiceProvidersCmd extends BaseListCmd {
- public static final Logger s_logger = Logger.getLogger(ListSupportedNetworkServiceProvidersCmd.class.getName());
- private static final String _name = "listsupportednetworkserviceprovidersresponse";
-
- /////////////////////////////////////////////////////
- //////////////// API parameters /////////////////////
- /////////////////////////////////////////////////////
-
- @Parameter(name=ApiConstants.SERVICE_NAME, type=CommandType.STRING, description="network service name")
- private String serviceName;
-
- /////////////////////////////////////////////////////
- /////////////////// Accessors ///////////////////////
- /////////////////////////////////////////////////////
-
-
- public void setServiceName(String serviceName) {
- this.serviceName = serviceName;
- }
-
- public String getServiceName() {
- return serviceName;
- }
-
- /////////////////////////////////////////////////////
- /////////////// API Implementation///////////////////
- /////////////////////////////////////////////////////
- @Override
- public String getCommandName() {
- return _name;
- }
-
- @Override
- public long getEntityOwnerId() {
- return Account.ACCOUNT_ID_SYSTEM;
- }
-
- @Override
- public void execute(){
- List extends Network.Provider> serviceProviders = _networkService.listSupportedNetworkServiceProviders(getServiceName());
- ListResponse response = new ListResponse();
- List serviceProvidersResponses = new ArrayList();
- for (Network.Provider serviceProvider : serviceProviders) {
- ProviderResponse serviceProviderResponse = _responseGenerator.createNetworkServiceProviderResponse(serviceProvider);
- serviceProvidersResponses.add(serviceProviderResponse);
- }
-
- response.setResponses(serviceProvidersResponses);
- response.setResponseName(getCommandName());
- this.setResponseObject(response);
- }
-}
diff --git a/api/src/com/cloud/api/commands/ListSupportedNetworkServicesCmd.java b/api/src/com/cloud/api/commands/ListSupportedNetworkServicesCmd.java
index 13a869fb82d..8aa6dad8e11 100644
--- a/api/src/com/cloud/api/commands/ListSupportedNetworkServicesCmd.java
+++ b/api/src/com/cloud/api/commands/ListSupportedNetworkServicesCmd.java
@@ -29,6 +29,7 @@ import com.cloud.api.Implementation;
import com.cloud.api.Parameter;
import com.cloud.api.response.ListResponse;
import com.cloud.api.response.ServiceResponse;
+import com.cloud.exception.InvalidParameterValueException;
import com.cloud.network.Network;
import com.cloud.user.Account;
@@ -40,6 +41,9 @@ public class ListSupportedNetworkServicesCmd extends BaseListCmd {
@Parameter(name=ApiConstants.PROVIDER, type=CommandType.STRING, description="network service provider name")
private String providerName;
+
+ @Parameter(name=ApiConstants.SERVICE, type=CommandType.STRING, description="network service name to list providers and capabilities of")
+ private String serviceName;
/////////////////////////////////////////////////////
//////////////// API parameters /////////////////////
@@ -58,6 +62,11 @@ public class ListSupportedNetworkServicesCmd extends BaseListCmd {
return providerName;
}
+
+ public String getServiceName() {
+ return serviceName;
+ }
+
/////////////////////////////////////////////////////
/////////////// API Implementation///////////////////
/////////////////////////////////////////////////////
@@ -73,7 +82,22 @@ public class ListSupportedNetworkServicesCmd extends BaseListCmd {
@Override
public void execute(){
- List extends Network.Service> services = _networkService.listNetworkServices(getProviderName());
+ List extends Network.Service> services;
+ if(getServiceName() != null){
+ Network.Service service = null;
+ if(serviceName != null){
+ service = Network.Service.getService(serviceName);
+ if(service == null){
+ throw new InvalidParameterValueException("Invalid Network Service=" + serviceName);
+ }
+ }
+ List serviceList = new ArrayList();
+ serviceList.add(service);
+ services = serviceList;
+ }else{
+ services = _networkService.listNetworkServices(getProviderName());
+ }
+
ListResponse response = new ListResponse();
List servicesResponses = new ArrayList();
for (Network.Service service : services) {
diff --git a/client/tomcatconf/commands.properties.in b/client/tomcatconf/commands.properties.in
index ecf58492611..ba8b099e52c 100755
--- a/client/tomcatconf/commands.properties.in
+++ b/client/tomcatconf/commands.properties.in
@@ -297,7 +297,6 @@ updatePhysicalNetwork=com.cloud.api.commands.UpdatePhysicalNetworkCmd;1
#### Physical Network Service Provider commands
listSupportedNetworkServices=com.cloud.api.commands.ListSupportedNetworkServicesCmd;1
-listSupportedNetworkServiceProviders=com.cloud.api.commands.ListSupportedNetworkServiceProvidersCmd;1
addNetworkServiceProvider=com.cloud.api.commands.AddNetworkServiceProviderCmd;1
deleteNetworkServiceProvider=com.cloud.api.commands.DeleteNetworkServiceProviderCmd;1
listNetworkServiceProviders=com.cloud.api.commands.ListNetworkServiceProvidersCmd;1
diff --git a/server/src/com/cloud/api/ApiDBUtils.java b/server/src/com/cloud/api/ApiDBUtils.java
index 6015f5ac8a6..bc4bffde878 100755
--- a/server/src/com/cloud/api/ApiDBUtils.java
+++ b/server/src/com/cloud/api/ApiDBUtils.java
@@ -688,6 +688,10 @@ public class ApiDBUtils {
public static List getElementServices(Provider provider) {
return _networkMgr.getElementServices(provider);
}
+
+ public static List extends Provider> getProvidersForService(Service service) {
+ return _networkMgr.listSupportedNetworkServiceProviders(service.getName());
+ }
public static boolean canElementEnableIndividualServices(Provider serviceProvider) {
return _networkMgr.canElementEnableIndividualServices(serviceProvider);
diff --git a/server/src/com/cloud/api/ApiResponseHelper.java b/server/src/com/cloud/api/ApiResponseHelper.java
index fa5722b9085..decaca7f407 100755
--- a/server/src/com/cloud/api/ApiResponseHelper.java
+++ b/server/src/com/cloud/api/ApiResponseHelper.java
@@ -2832,28 +2832,26 @@ public class ApiResponseHelper implements ResponseGenerator {
capabilityResponses.add(capabilityResponse);
}
response.setCapabilities(capabilityResponses);
-
+
+ //set list of providers providing this service
+ List extends Network.Provider> serviceProviders = ApiDBUtils.getProvidersForService(service);
+ List serviceProvidersResponses = new ArrayList();
+ for (Network.Provider serviceProvider : serviceProviders) {
+ ProviderResponse serviceProviderResponse = createServiceProviderResponse(serviceProvider);
+ serviceProvidersResponses.add(serviceProviderResponse);
+ }
+ response.setProviders(serviceProvidersResponses);
+
response.setObjectName("networkservice");
return response;
}
- @Override
- public ProviderResponse createNetworkServiceProviderResponse(Provider serviceProvider) {
+ private ProviderResponse createServiceProviderResponse(Provider serviceProvider) {
ProviderResponse response = new ProviderResponse();
response.setName(serviceProvider.getName());
-
- //set details from network element
- List supportedServices = ApiDBUtils.getElementServices(serviceProvider);
- List services = new ArrayList();
- for (Service service: supportedServices){
- services.add(service.getName());
- }
- response.setServices(services);
boolean canEnableIndividualServices = ApiDBUtils.canElementEnableIndividualServices(serviceProvider);
response.setCanEnableIndividualServices(canEnableIndividualServices);
-
- response.setObjectName("networkserviceprovider");
return response;
}