From e9a10c53dc290c72e9f60a5d89611cce608bdd99 Mon Sep 17 00:00:00 2001 From: alena Date: Tue, 22 Mar 2011 10:15:42 -0700 Subject: [PATCH] bug 8831: added 2 new parameters to create/listNetworks api: "isdedicatedtodomain" and "dedicateddomainid" --- .../cloud/api/response/NetworkResponse.java | 22 +++++++ api/src/com/cloud/network/NetworkService.java | 2 + server/src/com/cloud/api/ApiDBUtils.java | 4 ++ .../src/com/cloud/api/ApiResponseHelper.java | 9 +++ .../DefaultComponentLibrary.java | 2 + .../cloud/network/NetworkDomainDaoImpl.java | 13 ---- .../com/cloud/network/NetworkManagerImpl.java | 19 +++++- .../src/com/cloud/network/dao/NetworkDao.java | 3 - .../com/cloud/network/dao/NetworkDaoImpl.java | 25 -------- .../cloud/network/dao/NetworkDomainDao.java | 29 +++++++++ .../network/dao/NetworkDomainDaoImpl.java | 61 +++++++++++++++++++ 11 files changed, 145 insertions(+), 44 deletions(-) delete mode 100644 server/src/com/cloud/network/NetworkDomainDaoImpl.java create mode 100644 server/src/com/cloud/network/dao/NetworkDomainDao.java create mode 100644 server/src/com/cloud/network/dao/NetworkDomainDaoImpl.java diff --git a/api/src/com/cloud/api/response/NetworkResponse.java b/api/src/com/cloud/api/response/NetworkResponse.java index a18fdabedd9..a716ded1afb 100644 --- a/api/src/com/cloud/api/response/NetworkResponse.java +++ b/api/src/com/cloud/api/response/NetworkResponse.java @@ -97,6 +97,12 @@ public class NetworkResponse extends BaseResponse{ @SerializedName(ApiConstants.SECURITY_GROUP_EANBLED) @Param(description="true if security group is enabled, false otherwise") private Boolean isSecurityGroupEnabled; + + @SerializedName("isdedicatedtodomain") @Param(description="true if network is dedicated to specific domain") + private Boolean isDedicatedToDomain; + + @SerializedName("dedicateddomainid") @Param(description="the id of domain network dedicated to") + private Long dedicatedDomainId; public Long getId() { return id; @@ -337,5 +343,21 @@ public class NetworkResponse extends BaseResponse{ public void setIsSecurityGroupEnabled(Boolean sgEnabled) { this.isSecurityGroupEnabled = sgEnabled; } + + public Boolean getIsDedicatedToDomain() { + return isDedicatedToDomain; + } + + public void setIsDedicatedToDomain(Boolean isDedicatedToDomain) { + this.isDedicatedToDomain = isDedicatedToDomain; + } + + public Long getDedicatedDomainId() { + return dedicatedDomainId; + } + + public void setDedicatedDomainId(Long dedicatedDomainId) { + this.dedicatedDomainId = dedicatedDomainId; + } } diff --git a/api/src/com/cloud/network/NetworkService.java b/api/src/com/cloud/network/NetworkService.java index c0c13096029..e378b83c0cf 100644 --- a/api/src/com/cloud/network/NetworkService.java +++ b/api/src/com/cloud/network/NetworkService.java @@ -72,4 +72,6 @@ public interface NetworkService { Map> getNetworkCapabilities(long networkId); boolean isNetworkAvailableInDomain(long networkId, long domainId); + + Long getDedicatedNetworkDomain(long networkId); } diff --git a/server/src/com/cloud/api/ApiDBUtils.java b/server/src/com/cloud/api/ApiDBUtils.java index 1ed46166280..a1f18dddc12 100755 --- a/server/src/com/cloud/api/ApiDBUtils.java +++ b/server/src/com/cloud/api/ApiDBUtils.java @@ -543,4 +543,8 @@ public class ApiDBUtils { } } + public static Long getDedicatedNetworkDomain(long networkId) { + return _networkMgr.getDedicatedNetworkDomain(networkId); + } + } diff --git a/server/src/com/cloud/api/ApiResponseHelper.java b/server/src/com/cloud/api/ApiResponseHelper.java index 149b4ed03a3..125cd1d7fa3 100755 --- a/server/src/com/cloud/api/ApiResponseHelper.java +++ b/server/src/com/cloud/api/ApiResponseHelper.java @@ -2350,6 +2350,15 @@ public class ApiResponseHelper implements ResponseGenerator { response.setDomainId(domain.getId()); response.setDomain(domain.getName()); } + + Long dedicatedDomainId = ApiDBUtils.getDedicatedNetworkDomain(network.getId()); + if (dedicatedDomainId != null) { + response.setIsDedicatedToDomain(true); + response.setDedicatedDomainId(dedicatedDomainId); + } else { + response.setIsDedicatedToDomain(false); + } + response.setObjectName("network"); return response; } diff --git a/server/src/com/cloud/configuration/DefaultComponentLibrary.java b/server/src/com/cloud/configuration/DefaultComponentLibrary.java index 3cf9c481ca5..b36bd1688dc 100644 --- a/server/src/com/cloud/configuration/DefaultComponentLibrary.java +++ b/server/src/com/cloud/configuration/DefaultComponentLibrary.java @@ -73,6 +73,7 @@ import com.cloud.network.dao.IPAddressDaoImpl; import com.cloud.network.dao.LoadBalancerDaoImpl; import com.cloud.network.dao.LoadBalancerVMMapDaoImpl; import com.cloud.network.dao.NetworkDaoImpl; +import com.cloud.network.dao.NetworkDomainDaoImpl; import com.cloud.network.dao.NetworkRuleConfigDaoImpl; import com.cloud.network.dao.RemoteAccessVpnDaoImpl; import com.cloud.network.dao.VpnUserDaoImpl; @@ -258,6 +259,7 @@ public class DefaultComponentLibrary extends ComponentLibraryBase implements Com addDao("OvsTunnelAccountDao", OvsTunnelAccountDaoImpl.class); addDao("StoragePoolWorkDao", StoragePoolWorkDaoImpl.class); addDao("HostTagsDao", HostTagsDaoImpl.class); + addDao("NetworkDomainDao", NetworkDomainDaoImpl.class); } @Override diff --git a/server/src/com/cloud/network/NetworkDomainDaoImpl.java b/server/src/com/cloud/network/NetworkDomainDaoImpl.java deleted file mode 100644 index 65e9253220f..00000000000 --- a/server/src/com/cloud/network/NetworkDomainDaoImpl.java +++ /dev/null @@ -1,13 +0,0 @@ -/** - * - */ -package com.cloud.network; - -import com.cloud.utils.db.GenericDao; -import com.cloud.utils.db.GenericDaoBase; - -public class NetworkDomainDaoImpl extends GenericDaoBase implements GenericDao { - public NetworkDomainDaoImpl() { - super(); - } -} diff --git a/server/src/com/cloud/network/NetworkManagerImpl.java b/server/src/com/cloud/network/NetworkManagerImpl.java index c1ecbe30a01..1c08457d199 100755 --- a/server/src/com/cloud/network/NetworkManagerImpl.java +++ b/server/src/com/cloud/network/NetworkManagerImpl.java @@ -89,6 +89,7 @@ import com.cloud.network.Networks.TrafficType; import com.cloud.network.addr.PublicIp; import com.cloud.network.dao.IPAddressDao; import com.cloud.network.dao.NetworkDao; +import com.cloud.network.dao.NetworkDomainDao; import com.cloud.network.element.NetworkElement; import com.cloud.network.guru.NetworkGuru; import com.cloud.network.lb.LoadBalancingRulesManager; @@ -198,6 +199,8 @@ public class NetworkManagerImpl implements NetworkManager, NetworkService, Manag Adapters _networkGurus; @Inject(adapter = NetworkElement.class) Adapters _networkElements; + @Inject + NetworkDomainDao _networkDomainDao; private HashMap _systemNetworks = new HashMap(5); @@ -2682,12 +2685,12 @@ public class NetworkManagerImpl implements NetworkManager, NetworkService, Manag } - List networks = _networksDao.listSharedDomainNetworksByNetworkId(networkId); - if (networks.isEmpty()) { + List networkDomainMap = _networkDomainDao.listDomainNetworkMapByNetworkId(networkId); + if (networkDomainMap.isEmpty()) { s_logger.trace("Network id=" + networkId + " is shared, but not domain specific"); return true; } else { - networkDomainId = networks.get(0).getDomainId(); + networkDomainId = networkDomainMap.get(0).getDomainId(); } if (domainId == networkDomainId.longValue()) { @@ -2704,4 +2707,14 @@ public class NetworkManagerImpl implements NetworkManager, NetworkService, Manag return result; } + + @Override + public Long getDedicatedNetworkDomain(long networkId) { + List networkMaps = _networkDomainDao.listDomainNetworkMapByNetworkId(networkId); + if (!networkMaps.isEmpty()) { + return networkMaps.get(0).getDomainId(); + } else { + return null; + } + } } diff --git a/server/src/com/cloud/network/dao/NetworkDao.java b/server/src/com/cloud/network/dao/NetworkDao.java index 4e6f4bac27a..3d23a3fac01 100644 --- a/server/src/com/cloud/network/dao/NetworkDao.java +++ b/server/src/com/cloud/network/dao/NetworkDao.java @@ -61,8 +61,5 @@ public interface NetworkDao extends GenericDao { List listByZoneSecurityGroup(Long zoneId); void addDomainToNetwork(long networkId, long domainId); - List listSharedDomainNetworksByDomain(long domainId); - List listSharedDomainNetworksByNetworkId(long networkId); - List listNetworksBy(boolean isShared); } diff --git a/server/src/com/cloud/network/dao/NetworkDaoImpl.java b/server/src/com/cloud/network/dao/NetworkDaoImpl.java index 498ada55263..b1165056999 100644 --- a/server/src/com/cloud/network/dao/NetworkDaoImpl.java +++ b/server/src/com/cloud/network/dao/NetworkDaoImpl.java @@ -26,7 +26,6 @@ import javax.persistence.TableGenerator; import com.cloud.network.Network.GuestIpType; import com.cloud.network.NetworkAccountDaoImpl; import com.cloud.network.NetworkAccountVO; -import com.cloud.network.NetworkDomainDaoImpl; import com.cloud.network.NetworkDomainVO; import com.cloud.network.NetworkVO; import com.cloud.network.Networks.BroadcastDomainType; @@ -52,7 +51,6 @@ public class NetworkDaoImpl extends GenericDaoBase implements N final SearchBuilder AccountNetworkSearch; final SearchBuilder ZoneBroadcastUriSearch; final SearchBuilder ZoneSecurityGroupSearch; - final SearchBuilder DomainSearch; NetworkAccountDaoImpl _accountsDao = ComponentLocator.inject(NetworkAccountDaoImpl.class); NetworkDomainDaoImpl _domainsDao = ComponentLocator.inject(NetworkDomainDaoImpl.class); @@ -113,13 +111,6 @@ public class NetworkDaoImpl extends GenericDaoBase implements N _tgMacAddress = _tgs.get("macAddress"); - DomainSearch = createSearchBuilder(); - SearchBuilder domainJoin = _domainsDao.createSearchBuilder(); - domainJoin.and("domainId", domainJoin.entity().getDomainId(), Op.EQ); - domainJoin.and("networkId", domainJoin.entity().getNetworkId(), Op.EQ); - DomainSearch.join("domains", domainJoin, DomainSearch.entity().getId(), domainJoin.entity().getNetworkId(), JoinBuilder.JoinType.INNER); - DomainSearch.done(); - } @Override @@ -295,22 +286,6 @@ public class NetworkDaoImpl extends GenericDaoBase implements N _domainsDao.persist(domain); } - @Override - public List listSharedDomainNetworksByDomain(long domainId) { - SearchCriteria sc = DomainSearch.create(); - sc.setJoinParameters("domains", "domainId", domainId); - - return listBy(sc); - } - - @Override - public List listSharedDomainNetworksByNetworkId(long networkId) { - SearchCriteria sc = DomainSearch.create(); - sc.setJoinParameters("domains", "networkId", networkId); - - return listBy(sc); - } - @Override public List listNetworksBy(boolean isShared) { SearchCriteria sc = AllFieldsSearch.create(); diff --git a/server/src/com/cloud/network/dao/NetworkDomainDao.java b/server/src/com/cloud/network/dao/NetworkDomainDao.java new file mode 100644 index 00000000000..c44fa508b8e --- /dev/null +++ b/server/src/com/cloud/network/dao/NetworkDomainDao.java @@ -0,0 +1,29 @@ +/** + * Copyright (C) 2010 Cloud.com, 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.network.dao; + +import java.util.List; + +import com.cloud.network.NetworkDomainVO; +import com.cloud.utils.db.GenericDao; + +public interface NetworkDomainDao extends GenericDao{ + List listDomainNetworkMapByDomain(long domainId); + List listDomainNetworkMapByNetworkId(long networkId); +} diff --git a/server/src/com/cloud/network/dao/NetworkDomainDaoImpl.java b/server/src/com/cloud/network/dao/NetworkDomainDaoImpl.java new file mode 100644 index 00000000000..49d165a4e4f --- /dev/null +++ b/server/src/com/cloud/network/dao/NetworkDomainDaoImpl.java @@ -0,0 +1,61 @@ +/** + * Copyright (C) 2010 Cloud.com, 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.network.dao; + +import java.util.List; + +import javax.ejb.Local; + +import com.cloud.network.NetworkDomainVO; +import com.cloud.utils.db.DB; +import com.cloud.utils.db.GenericDaoBase; +import com.cloud.utils.db.SearchBuilder; +import com.cloud.utils.db.SearchCriteria; +import com.cloud.utils.db.SearchCriteria.Op; + +@Local(value=NetworkDomainDao.class) @DB(txn=false) +public class NetworkDomainDaoImpl extends GenericDaoBase implements NetworkDomainDao { + final SearchBuilder AllFieldsSearch; + + + protected NetworkDomainDaoImpl() { + super(); + + AllFieldsSearch = createSearchBuilder(); + AllFieldsSearch.and("domainId", AllFieldsSearch.entity().getDomainId(), Op.EQ); + AllFieldsSearch.and("networkId", AllFieldsSearch.entity().getNetworkId(), Op.EQ); + AllFieldsSearch.done(); + + } + + @Override + public List listDomainNetworkMapByDomain(long domainId) { + SearchCriteria sc = AllFieldsSearch.create(); + sc.setParameters("domainId", domainId); + + return listBy(sc); + } + + @Override + public List listDomainNetworkMapByNetworkId(long networkId) { + SearchCriteria sc = AllFieldsSearch.create(); + sc.setParameters("networkId", networkId); + + return listBy(sc); + } +}