From 2ffcbb88154f4dd498926bbe901959f989f591ff Mon Sep 17 00:00:00 2001 From: alena Date: Tue, 7 Dec 2010 16:36:34 -0800 Subject: [PATCH] Added isSystem parameter for listNetworks command, default value is false. If it's set to true, only system networks with trafficType=Public and and zone=Advanced are gonna be returned --- api/src/com/cloud/api/ApiConstants.java | 1 + .../cloud/api/commands/ListNetworksCmd.java | 7 +++++ .../cloud/api/response/NetworkResponse.java | 12 ++++++++ .../com/cloud/offering/NetworkOffering.java | 2 ++ .../src/com/cloud/api/ApiResponseHelper.java | 1 + .../com/cloud/network/NetworkManagerImpl.java | 28 ++++++++++++++++--- .../cloud/offerings/NetworkOfferingVO.java | 1 + 7 files changed, 48 insertions(+), 4 deletions(-) diff --git a/api/src/com/cloud/api/ApiConstants.java b/api/src/com/cloud/api/ApiConstants.java index 0d6b2f039bd..a894a020d6c 100755 --- a/api/src/com/cloud/api/ApiConstants.java +++ b/api/src/com/cloud/api/ApiConstants.java @@ -173,5 +173,6 @@ public class ApiConstants { public static final String NETWORK_ID = "networkid"; public static final String SPECIFY_VLAN = "specifyvlan"; public static final String IS_DEFAULT = "isdefault"; + public static final String IS_SYSTEM = "issystem"; } diff --git a/api/src/com/cloud/api/commands/ListNetworksCmd.java b/api/src/com/cloud/api/commands/ListNetworksCmd.java index e12a5930597..39eb25f3db7 100644 --- a/api/src/com/cloud/api/commands/ListNetworksCmd.java +++ b/api/src/com/cloud/api/commands/ListNetworksCmd.java @@ -54,6 +54,9 @@ public class ListNetworksCmd extends BaseListCmd { @Parameter(name=ApiConstants.TYPE, type=CommandType.STRING, description="the type of the network") private String type; + + @Parameter(name=ApiConstants.IS_SYSTEM, type=CommandType.BOOLEAN, description="true if network is system, false otherwise") + private Boolean isSystem; ///////////////////////////////////////////////////// /////////////////// Accessors /////////////////////// @@ -79,6 +82,10 @@ public class ListNetworksCmd extends BaseListCmd { return type; } + public Boolean getIsSystem() { + return isSystem; + } + ///////////////////////////////////////////////////// /////////////// API Implementation/////////////////// ///////////////////////////////////////////////////// diff --git a/api/src/com/cloud/api/response/NetworkResponse.java b/api/src/com/cloud/api/response/NetworkResponse.java index 4aeee3b81c3..c62c0610603 100644 --- a/api/src/com/cloud/api/response/NetworkResponse.java +++ b/api/src/com/cloud/api/response/NetworkResponse.java @@ -57,6 +57,10 @@ public class NetworkResponse extends BaseResponse{ @SerializedName("isshared") private Boolean isShared; + //TODO - add description + @SerializedName("issystem") + private Boolean isSystem; + //TODO - add description @SerializedName("state") private String state; @@ -276,4 +280,12 @@ public class NetworkResponse extends BaseResponse{ public void setVlan(String vlan) { this.vlan = vlan; } + + public Boolean getIsSystem() { + return isSystem; + } + + public void setIsSystem(Boolean isSystem) { + this.isSystem = isSystem; + } } diff --git a/api/src/com/cloud/offering/NetworkOffering.java b/api/src/com/cloud/offering/NetworkOffering.java index 2865ab5cef5..f1ff1e1a68e 100644 --- a/api/src/com/cloud/offering/NetworkOffering.java +++ b/api/src/com/cloud/offering/NetworkOffering.java @@ -75,4 +75,6 @@ public interface NetworkOffering { String getTags(); boolean isDefault(); + + boolean isSystemOnly(); } diff --git a/server/src/com/cloud/api/ApiResponseHelper.java b/server/src/com/cloud/api/ApiResponseHelper.java index 29a54f505a0..6b08b61054c 100644 --- a/server/src/com/cloud/api/ApiResponseHelper.java +++ b/server/src/com/cloud/api/ApiResponseHelper.java @@ -2387,6 +2387,7 @@ public class ApiResponseHelper implements ResponseGenerator { response.setNetworkOfferingId(networkOffering.getId()); response.setNetworkOfferingName(networkOffering.getName()); response.setNetworkOfferingDisplayText(networkOffering.getDisplayText()); + response.setIsSystem(networkOffering.isSystemOnly()); } response.setIsShared(network.isShared()); diff --git a/server/src/com/cloud/network/NetworkManagerImpl.java b/server/src/com/cloud/network/NetworkManagerImpl.java index 1443f9ae1ab..c50965bce56 100755 --- a/server/src/com/cloud/network/NetworkManagerImpl.java +++ b/server/src/com/cloud/network/NetworkManagerImpl.java @@ -60,7 +60,9 @@ import com.cloud.configuration.ResourceCount.ResourceType; import com.cloud.configuration.dao.ConfigurationDao; import com.cloud.configuration.dao.ResourceLimitDao; import com.cloud.dc.DataCenter; +import com.cloud.dc.DataCenterVO; import com.cloud.dc.Vlan; +import com.cloud.dc.DataCenter.NetworkType; import com.cloud.dc.Vlan.VlanType; import com.cloud.dc.VlanVO; import com.cloud.dc.dao.AccountVlanMapDao; @@ -1775,8 +1777,13 @@ public class NetworkManagerImpl implements NetworkManager, NetworkService, Manag Long domainId = cmd.getDomainId(); String accountName = cmd.getAccountName(); String type = cmd.getType(); + Boolean isSystem = cmd.getIsSystem(); Long accountId = null; + if (isSystem == null) { + isSystem = false; + } + if (isAdmin(account.getType())) { if (domainId != null) { if ((account != null) && !_domainDao.isChildDomain(account.getDomainId(), domainId)) { @@ -1801,13 +1808,26 @@ public class NetworkManagerImpl implements NetworkManager, NetworkService, Manag SearchBuilder sb = _networkConfigDao.createSearchBuilder(); //Don't display networks created of system network offerings - SearchBuilder networkOfferingSearch = _networkOfferingDao.createSearchBuilder(); + SearchBuilder networkOfferingSearch = _networkOfferingDao.createSearchBuilder(); networkOfferingSearch.and("systemOnly", networkOfferingSearch.entity().isSystemOnly(), SearchCriteria.Op.EQ); - sb.join("networkOfferingSearch", networkOfferingSearch, sb.entity().getNetworkOfferingId(), networkOfferingSearch.entity().getId(), JoinBuilder.JoinType.INNER); - + if (isSystem) { + networkOfferingSearch.and("trafficType", networkOfferingSearch.entity().getTrafficType(), SearchCriteria.Op.EQ); + } + sb.join("networkOfferingSearch", networkOfferingSearch, sb.entity().getNetworkOfferingId(), networkOfferingSearch.entity().getId(), JoinBuilder.JoinType.INNER); + SearchBuilder zoneSearch = _dcDao.createSearchBuilder(); + zoneSearch.and("networkType", zoneSearch.entity().getNetworkType(), SearchCriteria.Op.EQ); + sb.join("zoneSearch", zoneSearch, sb.entity().getDataCenterId(), zoneSearch.entity().getId(), JoinBuilder.JoinType.INNER); + SearchCriteria sc = sb.create(); - sc.setJoinParameters("networkOfferingSearch", "systemOnly", false); + + if (!isSystem) { + sc.setJoinParameters("networkOfferingSearch", "systemOnly", false); + } else { + sc.setJoinParameters("networkOfferingSearch", "systemOnly", true); + sc.setJoinParameters("networkOfferingSearch", "trafficType", TrafficType.Public); + sc.setJoinParameters("zoneSearch", "networkType", NetworkType.Advanced.toString()); + } if (keyword != null) { SearchCriteria ssc = _networkConfigDao.createSearchCriteria(); diff --git a/server/src/com/cloud/offerings/NetworkOfferingVO.java b/server/src/com/cloud/offerings/NetworkOfferingVO.java index 11b35cbe854..bba7a122988 100644 --- a/server/src/com/cloud/offerings/NetworkOfferingVO.java +++ b/server/src/com/cloud/offerings/NetworkOfferingVO.java @@ -129,6 +129,7 @@ public class NetworkOfferingVO implements NetworkOffering { return created; } + @Override public boolean isSystemOnly() { return systemOnly; }