diff --git a/api/src/com/cloud/api/ApiConstants.java b/api/src/com/cloud/api/ApiConstants.java index e79b37d866d..1a82bcf9f25 100755 --- a/api/src/com/cloud/api/ApiConstants.java +++ b/api/src/com/cloud/api/ApiConstants.java @@ -297,5 +297,6 @@ public class ApiConstants { public static final String CAN_ENABLE_INDIVIDUAL_SERVICE = "canenableindividualservice"; public static final String SUPPORTED_SERVICES = "supportedservices"; public static final String SOURCE_NAT_ENABLED = "sourcenatenabled"; + public static final String NSP_ID= "nspid"; } diff --git a/api/src/com/cloud/api/ResponseGenerator.java b/api/src/com/cloud/api/ResponseGenerator.java index a321b3982e7..c23e2748792 100755 --- a/api/src/com/cloud/api/ResponseGenerator.java +++ b/api/src/com/cloud/api/ResponseGenerator.java @@ -65,6 +65,7 @@ import com.cloud.api.response.TemplateResponse; import com.cloud.api.response.TrafficTypeResponse; import com.cloud.api.response.UserResponse; import com.cloud.api.response.UserVmResponse; +import com.cloud.api.response.VirtualRouterProviderResponse; import com.cloud.api.response.VlanIpRangeResponse; import com.cloud.api.response.VolumeResponse; import com.cloud.api.response.VpnUsersResponse; @@ -89,6 +90,7 @@ import com.cloud.network.PhysicalNetwork; import com.cloud.network.PhysicalNetworkServiceProvider; import com.cloud.network.PhysicalNetworkTrafficType; import com.cloud.network.RemoteAccessVpn; +import com.cloud.network.VirtualRouterProvider; import com.cloud.network.VpnUser; import com.cloud.network.router.VirtualRouter; import com.cloud.network.rules.FirewallRule; @@ -251,5 +253,7 @@ public interface ResponseGenerator { ProviderResponse createNetworkServiceProviderResponse(PhysicalNetworkServiceProvider result); TrafficTypeResponse createTrafficTypeResponse(PhysicalNetworkTrafficType result); + + VirtualRouterProviderResponse createVirtualRouterProviderResponse(VirtualRouterProvider result); } diff --git a/api/src/com/cloud/api/commands/ConfigureVirtualRouterElementCmd.java b/api/src/com/cloud/api/commands/ConfigureVirtualRouterElementCmd.java index 930af8f3f68..ba4cdb576c5 100644 --- a/api/src/com/cloud/api/commands/ConfigureVirtualRouterElementCmd.java +++ b/api/src/com/cloud/api/commands/ConfigureVirtualRouterElementCmd.java @@ -27,7 +27,8 @@ import com.cloud.api.Implementation; import com.cloud.api.Parameter; import com.cloud.api.PlugService; import com.cloud.api.ServerApiException; -import com.cloud.api.response.SuccessResponse; +import com.cloud.api.response.VirtualRouterProviderResponse; +import com.cloud.network.VirtualRouterProvider; import com.cloud.network.element.VirtualRouterElementService; import com.cloud.async.AsyncJob; import com.cloud.event.EventTypes; @@ -37,7 +38,7 @@ import com.cloud.exception.ResourceUnavailableException; import com.cloud.user.Account; import com.cloud.user.UserContext; -@Implementation(responseObject=SuccessResponse.class, description="Configures a virtual router element.") +@Implementation(responseObject=VirtualRouterProviderResponse.class, description="Configures a virtual router element.") public class ConfigureVirtualRouterElementCmd extends BaseAsyncCmd { public static final Logger s_logger = Logger.getLogger(ConfigureVirtualRouterElementCmd.class.getName()); private static final String s_name = "configurevirtualrouterelementresponse"; @@ -49,8 +50,8 @@ public class ConfigureVirtualRouterElementCmd extends BaseAsyncCmd { //////////////// API parameters ///////////////////// ///////////////////////////////////////////////////// - @Parameter(name=ApiConstants.ID, type=CommandType.LONG, required=true, description="the network service provider ID of the virtual router element") - private Long nspId; + @Parameter(name=ApiConstants.ID, type=CommandType.LONG, required=true, description="the ID of the virtual router provider") + private Long id; @Parameter(name=ApiConstants.ENABLED, type=CommandType.BOOLEAN, required=true, description="Enabled/Disabled the service provider") private Boolean enabled; @@ -59,12 +60,12 @@ public class ConfigureVirtualRouterElementCmd extends BaseAsyncCmd { /////////////////// Accessors /////////////////////// ///////////////////////////////////////////////////// - public void setNspId(Long nspId) { - this.nspId = nspId; + public void setId(Long id) { + this.id = id; } - public Long getNspId() { - return nspId; + public Long getId() { + return id; } public void setEnabled(Boolean enabled) { @@ -100,7 +101,7 @@ public class ConfigureVirtualRouterElementCmd extends BaseAsyncCmd { @Override public String getEventDescription() { - return "configuring virtual router element: " + _service.getIdByNspId(nspId); + return "configuring virtual router provider: " + id; } public AsyncJob.Type getInstanceType() { @@ -108,20 +109,19 @@ public class ConfigureVirtualRouterElementCmd extends BaseAsyncCmd { } public Long getInstanceId() { - return _service.getIdByNspId(getNspId()); + return id; } @Override public void execute() throws ConcurrentOperationException, ResourceUnavailableException, InsufficientCapacityException{ - UserContext.current().setEventDetails("Virtual router element: " + _service.getIdByNspId(nspId)); - Boolean result = _service.configure(this); - if (result){ - SuccessResponse response = new SuccessResponse(); - response.setResponseName(getCommandName()); - response.setSuccess(result); - this.setResponseObject(response); + UserContext.current().setEventDetails("Virtual router element: " + id); + VirtualRouterProvider result = _service.configure(this); + if (result != null){ + VirtualRouterProviderResponse routerResponse = _responseGenerator.createVirtualRouterProviderResponse(result); + routerResponse.setResponseName(getCommandName()); + this.setResponseObject(routerResponse); } else { - throw new ServerApiException(BaseCmd.INTERNAL_ERROR, "Failed to configure the virtual router element"); + throw new ServerApiException(BaseCmd.INTERNAL_ERROR, "Failed to configure the virtual router provider"); } } } diff --git a/api/src/com/cloud/api/commands/CreateVirtualRouterElementCmd.java b/api/src/com/cloud/api/commands/CreateVirtualRouterElementCmd.java index 6f9ac1e6f2f..fc331603d33 100644 --- a/api/src/com/cloud/api/commands/CreateVirtualRouterElementCmd.java +++ b/api/src/com/cloud/api/commands/CreateVirtualRouterElementCmd.java @@ -27,7 +27,7 @@ import com.cloud.api.Implementation; import com.cloud.api.Parameter; import com.cloud.api.PlugService; import com.cloud.api.ServerApiException; -import com.cloud.api.response.SuccessResponse; +import com.cloud.api.response.VirtualRouterProviderResponse; import com.cloud.network.VirtualRouterProvider; import com.cloud.network.element.VirtualRouterElementService; import com.cloud.event.EventTypes; @@ -35,7 +35,7 @@ import com.cloud.exception.ResourceAllocationException; import com.cloud.user.Account; import com.cloud.user.UserContext; -@Implementation(responseObject=SuccessResponse.class, description="Create a virtual router element.") +@Implementation(responseObject=VirtualRouterProviderResponse.class, description="Create a virtual router element.") public class CreateVirtualRouterElementCmd extends BaseAsyncCreateCmd { public static final Logger s_logger = Logger.getLogger(CreateVirtualRouterElementCmd.class.getName()); private static final String s_name = "createvirtualrouterelementresponse"; @@ -81,9 +81,8 @@ public class CreateVirtualRouterElementCmd extends BaseAsyncCreateCmd { UserContext.current().setEventDetails("Virtual router element Id: "+getEntityId()); VirtualRouterProvider result = _service.getCreatedElement(getEntityId()); if (result != null) { - SuccessResponse response = new SuccessResponse(); + VirtualRouterProviderResponse response = _responseGenerator.createVirtualRouterProviderResponse(result); response.setResponseName(getCommandName()); - response.setSuccess(true); this.setResponseObject(response); }else { throw new ServerApiException(BaseCmd.INTERNAL_ERROR, "Failed to add Virtual Router entity to physical network"); diff --git a/api/src/com/cloud/api/commands/ListVirtualRouterElementsCmd.java b/api/src/com/cloud/api/commands/ListVirtualRouterElementsCmd.java new file mode 100644 index 00000000000..403432fd818 --- /dev/null +++ b/api/src/com/cloud/api/commands/ListVirtualRouterElementsCmd.java @@ -0,0 +1,79 @@ +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.PlugService; +import com.cloud.api.ServerApiException; +import com.cloud.api.response.ListResponse; +import com.cloud.api.response.VirtualRouterProviderResponse; +import com.cloud.exception.ConcurrentOperationException; +import com.cloud.exception.InsufficientCapacityException; +import com.cloud.exception.ResourceAllocationException; +import com.cloud.exception.ResourceUnavailableException; +import com.cloud.network.VirtualRouterProvider; +import com.cloud.network.element.VirtualRouterElementService; + +@Implementation(description="Lists all available virtual router elements.", responseObject=VirtualRouterProviderResponse.class) +public class ListVirtualRouterElementsCmd extends BaseListCmd { + public static final Logger s_logger = Logger.getLogger(ListNetworkOfferingsCmd.class.getName()); + private static final String _name = "listvirtualrouterelementsresponse"; + + @PlugService + private VirtualRouterElementService _service; + + ///////////////////////////////////////////////////// + //////////////// API parameters ///////////////////// + ///////////////////////////////////////////////////// + @Parameter(name=ApiConstants.ID, type=CommandType.LONG, description="list virtual router elements by id") + private Long id; + + @Parameter(name=ApiConstants.ENABLED, type=CommandType.BOOLEAN, description="list network offerings by enabled state") + private Boolean enabled; + + ///////////////////////////////////////////////////// + /////////////////// Accessors /////////////////////// + ///////////////////////////////////////////////////// + + public void setId(Long id) { + this.id = id; + } + + public Long getId() { + return id; + } + + public void setEnabled(Boolean enabled) { + this.enabled = enabled; + } + + public Boolean getEnabled() { + return enabled; + } + + @Override + public String getCommandName() { + return _name; + } + + @Override + public void execute() throws ResourceUnavailableException, InsufficientCapacityException, ServerApiException, ConcurrentOperationException, ResourceAllocationException { + List providers = _service.searchForVirtualRouterElement(this); + ListResponse response = new ListResponse(); + List providerResponses = new ArrayList(); + for (VirtualRouterProvider provider : providers) { + VirtualRouterProviderResponse providerResponse = _responseGenerator.createVirtualRouterProviderResponse(provider); + providerResponses.add(providerResponse); + } + response.setResponses(providerResponses); + response.setResponseName(getCommandName()); + this.setResponseObject(response); + + } +} diff --git a/api/src/com/cloud/api/response/VirtualRouterProviderResponse.java b/api/src/com/cloud/api/response/VirtualRouterProviderResponse.java new file mode 100644 index 00000000000..50d10b4bbb6 --- /dev/null +++ b/api/src/com/cloud/api/response/VirtualRouterProviderResponse.java @@ -0,0 +1,81 @@ +package com.cloud.api.response; + +import com.cloud.api.ApiConstants; +import com.cloud.serializer.Param; +import com.google.gson.annotations.SerializedName; + +public class VirtualRouterProviderResponse extends BaseResponse implements ControlledEntityResponse { + @SerializedName(ApiConstants.ID) @Param(description="the id of the router") + private Long id; + + @SerializedName(ApiConstants.NSP_ID) @Param(description="the physical network service provider id of the provider") + private Long nspId; + + @SerializedName(ApiConstants.ENABLED) @Param(description="Enabled/Disabled the service provider") + private Boolean enabled; + + @SerializedName(ApiConstants.ACCOUNT) @Param(description="the account associated with the provider") + private String accountName; + + @SerializedName(ApiConstants.PROJECT_ID) @Param(description="the project id of the ipaddress") + private Long projectId; + + @SerializedName(ApiConstants.PROJECT) @Param(description="the project name of the address") + private String projectName; + + @SerializedName(ApiConstants.DOMAIN_ID) @Param(description="the domain ID associated with the provider") + private Long domainId; + + @SerializedName(ApiConstants.DOMAIN) @Param(description="the domain associated with the provider") + private String domainName; + + @Override + public void setAccountName(String accountName) { + this.accountName = accountName; + } + + public void setId(Long id) { + this.id = id; + } + + public Long getId() { + return id; + } + + @Override + public void setDomainId(Long domainId) { + this.domainId = domainId; + } + + @Override + public void setDomainName(String domainName) { + this.domainName = domainName; + } + + @Override + public void setProjectId(Long projectId) { + this.projectId = projectId; + } + + @Override + public void setProjectName(String projectName) { + this.projectName = projectName; + } + + public void setNspId(Long nspId) { + this.nspId = nspId; + } + + public Long getNspId() { + return nspId; + } + + public void setEnabled(Boolean enabled) { + this.enabled = enabled; + } + + public Boolean getEnabled() { + return enabled; + } + +} diff --git a/api/src/com/cloud/network/element/VirtualRouterElementService.java b/api/src/com/cloud/network/element/VirtualRouterElementService.java index 9100d7493a8..aa72ebf1cfc 100644 --- a/api/src/com/cloud/network/element/VirtualRouterElementService.java +++ b/api/src/com/cloud/network/element/VirtualRouterElementService.java @@ -1,12 +1,15 @@ package com.cloud.network.element; +import java.util.List; + import com.cloud.api.commands.ConfigureVirtualRouterElementCmd; +import com.cloud.api.commands.ListVirtualRouterElementsCmd; import com.cloud.network.VirtualRouterProvider; import com.cloud.utils.component.PluggableService; public interface VirtualRouterElementService extends PluggableService{ - boolean configure(ConfigureVirtualRouterElementCmd cmd); + VirtualRouterProvider configure(ConfigureVirtualRouterElementCmd cmd); VirtualRouterProvider addElement(Long nspId); - Long getIdByNspId(Long nspId); VirtualRouterProvider getCreatedElement(long id); + List searchForVirtualRouterElement(ListVirtualRouterElementsCmd cmd); } diff --git a/client/tomcatconf/virtualrouter_commands.properties.in b/client/tomcatconf/virtualrouter_commands.properties.in index 6e46872ab2e..069dd451a63 100644 --- a/client/tomcatconf/virtualrouter_commands.properties.in +++ b/client/tomcatconf/virtualrouter_commands.properties.in @@ -4,3 +4,4 @@ #### router commands createVirtualRouterElement=com.cloud.api.commands.CreateVirtualRouterElementCmd;7 configureVirtualRouterElement=com.cloud.api.commands.ConfigureVirtualRouterElementCmd;7 +listVirtualRouterElements=com.cloud.api.commands.ListVirtualRouterElementsCmd;7 diff --git a/server/src/com/cloud/api/ApiResponseHelper.java b/server/src/com/cloud/api/ApiResponseHelper.java index 3075b946183..ce5ceb81f2c 100755 --- a/server/src/com/cloud/api/ApiResponseHelper.java +++ b/server/src/com/cloud/api/ApiResponseHelper.java @@ -85,6 +85,7 @@ import com.cloud.api.response.TemplateResponse; import com.cloud.api.response.TrafficTypeResponse; import com.cloud.api.response.UserResponse; import com.cloud.api.response.UserVmResponse; +import com.cloud.api.response.VirtualRouterProviderResponse; import com.cloud.api.response.VlanIpRangeResponse; import com.cloud.api.response.VolumeResponse; import com.cloud.api.response.VpnUsersResponse; @@ -126,6 +127,7 @@ import com.cloud.network.PhysicalNetwork; import com.cloud.network.PhysicalNetworkServiceProvider; import com.cloud.network.PhysicalNetworkTrafficType; import com.cloud.network.RemoteAccessVpn; +import com.cloud.network.VirtualRouterProvider; import com.cloud.network.VpnUser; import com.cloud.network.router.VirtualRouter; import com.cloud.network.rules.FirewallRule; @@ -2632,4 +2634,13 @@ public class ApiResponseHelper implements ResponseGenerator { response.setObjectName("traffictype"); return response; } + + @Override + public VirtualRouterProviderResponse createVirtualRouterProviderResponse(VirtualRouterProvider result) { + VirtualRouterProviderResponse response = new VirtualRouterProviderResponse(); + response.setId(result.getId()); + response.setNspId(result.getNspId()); + response.setEnabled(result.isEnabled()); + return response; + } } diff --git a/server/src/com/cloud/network/dao/VirtualRouterProviderDao.java b/server/src/com/cloud/network/dao/VirtualRouterProviderDao.java index d2c43de8c6f..2a49a9d7ef1 100644 --- a/server/src/com/cloud/network/dao/VirtualRouterProviderDao.java +++ b/server/src/com/cloud/network/dao/VirtualRouterProviderDao.java @@ -17,10 +17,16 @@ */ package com.cloud.network.dao; +import java.util.List; + +import com.cloud.network.VirtualRouterProvider; import com.cloud.network.element.VirtualRouterProviderVO; import com.cloud.network.VirtualRouterProvider.VirtualRouterProviderType; import com.cloud.utils.db.GenericDao; public interface VirtualRouterProviderDao extends GenericDao { public VirtualRouterProviderVO findByNspIdAndType(long nspId, VirtualRouterProviderType type); + public List listByEnabledAndType(boolean enabled, VirtualRouterProviderType type); + public VirtualRouterProviderVO findByIdAndEnabledAndType(long id, boolean enabled, VirtualRouterProviderType type); + public List listByType(VirtualRouterProviderType type); } diff --git a/server/src/com/cloud/network/dao/VirtualRouterProviderDaoImpl.java b/server/src/com/cloud/network/dao/VirtualRouterProviderDaoImpl.java index 0a75d46dbad..8a27383b062 100644 --- a/server/src/com/cloud/network/dao/VirtualRouterProviderDaoImpl.java +++ b/server/src/com/cloud/network/dao/VirtualRouterProviderDaoImpl.java @@ -17,6 +17,8 @@ */ package com.cloud.network.dao; +import java.util.List; + import javax.ejb.Local; import com.cloud.network.element.VirtualRouterProviderVO; @@ -33,9 +35,11 @@ public class VirtualRouterProviderDaoImpl extends GenericDaoBase listByEnabledAndType(boolean enabled, VirtualRouterProviderType type) { + SearchCriteria sc = AllFieldsSearch.create(); + sc.setParameters("enabled", enabled); + sc.setParameters("type", type); + return listBy(sc); + } + + @Override + public VirtualRouterProviderVO findByIdAndEnabledAndType(long id, boolean enabled, VirtualRouterProviderType type) { + SearchCriteria sc = AllFieldsSearch.create(); + sc.setParameters("id", id); + sc.setParameters("enabled", enabled); + sc.setParameters("type", type); + return findOneBy(sc); + } + + @Override + public List listByType(VirtualRouterProviderType type) { + SearchCriteria sc = AllFieldsSearch.create(); + sc.setParameters("type", type); + return listBy(sc); + } } diff --git a/server/src/com/cloud/network/element/VirtualRouterElement.java b/server/src/com/cloud/network/element/VirtualRouterElement.java index 55400201298..2e86136242f 100644 --- a/server/src/com/cloud/network/element/VirtualRouterElement.java +++ b/server/src/com/cloud/network/element/VirtualRouterElement.java @@ -17,6 +17,7 @@ */ package com.cloud.network.element; +import java.util.ArrayList; import java.util.HashMap; import java.util.List; import java.util.Map; @@ -26,6 +27,7 @@ import javax.ejb.Local; import org.apache.log4j.Logger; import com.cloud.api.commands.ConfigureVirtualRouterElementCmd; +import com.cloud.api.commands.ListVirtualRouterElementsCmd; import com.cloud.configuration.ConfigurationManager; import com.cloud.configuration.dao.ConfigurationDao; import com.cloud.dc.DataCenter; @@ -381,17 +383,17 @@ public class VirtualRouterElement extends AdapterBase implements VirtualRouterEl } @Override - public boolean configure(ConfigureVirtualRouterElementCmd cmd) { - VirtualRouterProviderVO element = _vrProviderDao.findByNspIdAndType(cmd.getNspId(), VirtualRouterProviderType.VirtualRouter); + public VirtualRouterProvider configure(ConfigureVirtualRouterElementCmd cmd) { + VirtualRouterProviderVO element = _vrProviderDao.findById(cmd.getId()); if (element == null) { - s_logger.trace("Can't find element with network service provider id " + cmd.getNspId()); - return false; + s_logger.trace("Can't find element with network service provider id " + cmd.getId()); + return null; } element.setEnabled(cmd.getEnabled()); _vrProviderDao.persist(element); - return true; + return element; } @Override @@ -456,7 +458,6 @@ public class VirtualRouterElement extends AdapterBase implements VirtualRouterEl return true; } - @Override public Long getIdByNspId(Long nspId) { VirtualRouterProviderVO vr = _vrProviderDao.findByNspIdAndType(nspId, VirtualRouterProviderType.VirtualRouter); return vr.getId(); @@ -568,4 +569,21 @@ public class VirtualRouterElement extends AdapterBase implements VirtualRouterEl } return false; } + + @Override + public List searchForVirtualRouterElement(ListVirtualRouterElementsCmd cmd) { + if (cmd.getEnabled() == null && cmd.getId() == null) { + return _vrProviderDao.listByType(VirtualRouterProviderType.VirtualRouter); + } + if (cmd.getId() == null) { + return _vrProviderDao.listByEnabledAndType(cmd.getEnabled(), VirtualRouterProviderType.VirtualRouter); + } + //Search by Id + List list = new ArrayList(); + VirtualRouterProviderVO provider = _vrProviderDao.findById(cmd.getId()); + if (provider != null) { + list.add(provider); + } + return list; + } }