mirror of
				https://github.com/apache/cloudstack.git
				synced 2025-10-26 08:42:29 +01:00 
			
		
		
		
	Restore listNetworks behavior & clean up the code (#9461)
Co-authored-by: Abhishek Kumar <abhishek.mrt22@gmail.com>
This commit is contained in:
		
							parent
							
								
									a93f7154a0
								
							
						
					
					
						commit
						a0932b0f16
					
				| @ -36,7 +36,6 @@ import java.util.List; | |||||||
| import java.util.Map; | import java.util.Map; | ||||||
| import java.util.Set; | import java.util.Set; | ||||||
| import java.util.UUID; | import java.util.UUID; | ||||||
| import java.util.stream.Collectors; |  | ||||||
| 
 | 
 | ||||||
| import javax.inject.Inject; | import javax.inject.Inject; | ||||||
| import javax.naming.ConfigurationException; | import javax.naming.ConfigurationException; | ||||||
| @ -76,6 +75,7 @@ import org.apache.cloudstack.network.NetworkPermissionVO; | |||||||
| import org.apache.cloudstack.network.dao.NetworkPermissionDao; | import org.apache.cloudstack.network.dao.NetworkPermissionDao; | ||||||
| import org.apache.cloudstack.network.element.InternalLoadBalancerElementService; | import org.apache.cloudstack.network.element.InternalLoadBalancerElementService; | ||||||
| import org.apache.commons.collections.CollectionUtils; | import org.apache.commons.collections.CollectionUtils; | ||||||
|  | import org.apache.commons.lang3.BooleanUtils; | ||||||
| import org.apache.commons.lang3.EnumUtils; | import org.apache.commons.lang3.EnumUtils; | ||||||
| import org.apache.commons.lang3.ObjectUtils; | import org.apache.commons.lang3.ObjectUtils; | ||||||
| import org.apache.commons.lang3.StringUtils; | import org.apache.commons.lang3.StringUtils; | ||||||
| @ -2197,6 +2197,9 @@ public class NetworkServiceImpl extends ManagerBase implements NetworkService, C | |||||||
|         Long associatedNetworkId = cmd.getAssociatedNetworkId(); |         Long associatedNetworkId = cmd.getAssociatedNetworkId(); | ||||||
|         String networkFilterStr = cmd.getNetworkFilter(); |         String networkFilterStr = cmd.getNetworkFilter(); | ||||||
| 
 | 
 | ||||||
|  |         boolean applyManualPagination = CollectionUtils.isNotEmpty(supportedServicesStr) || | ||||||
|  |                 Boolean.TRUE.equals(canUseForDeploy); | ||||||
|  | 
 | ||||||
|         String vlanId = null; |         String vlanId = null; | ||||||
|         if (cmd instanceof ListNetworksCmdByAdmin) { |         if (cmd instanceof ListNetworksCmdByAdmin) { | ||||||
|             vlanId = ((ListNetworksCmdByAdmin)cmd).getVlan(); |             vlanId = ((ListNetworksCmdByAdmin)cmd).getVlan(); | ||||||
| @ -2282,7 +2285,13 @@ public class NetworkServiceImpl extends ManagerBase implements NetworkService, C | |||||||
|             isRecursive = true; |             isRecursive = true; | ||||||
|         } |         } | ||||||
| 
 | 
 | ||||||
|         Filter searchFilter = new Filter(NetworkVO.class, "id", false, null, null); |         Long offset = cmd.getStartIndex(); | ||||||
|  |         Long limit = cmd.getPageSizeVal(); | ||||||
|  |         if (applyManualPagination) { | ||||||
|  |             offset = null; | ||||||
|  |             limit = null; | ||||||
|  |         } | ||||||
|  |         Filter searchFilter = new Filter(NetworkVO.class, "id", false, offset, limit); | ||||||
|         SearchBuilder<NetworkVO> sb = _networksDao.createSearchBuilder(); |         SearchBuilder<NetworkVO> sb = _networksDao.createSearchBuilder(); | ||||||
| 
 | 
 | ||||||
|         if (forVpc != null) { |         if (forVpc != null) { | ||||||
| @ -2321,14 +2330,14 @@ public class NetworkServiceImpl extends ManagerBase implements NetworkService, C | |||||||
|         if (permittedAccounts.isEmpty()) { |         if (permittedAccounts.isEmpty()) { | ||||||
|             SearchBuilder<DomainVO> domainSearch = _domainDao.createSearchBuilder(); |             SearchBuilder<DomainVO> domainSearch = _domainDao.createSearchBuilder(); | ||||||
|             domainSearch.and("path", domainSearch.entity().getPath(), SearchCriteria.Op.LIKE); |             domainSearch.and("path", domainSearch.entity().getPath(), SearchCriteria.Op.LIKE); | ||||||
|             sb.join("domainSearch", domainSearch, sb.entity().getDomainId(), domainSearch.entity().getId(), JoinBuilder.JoinType.INNER); |             sb.join("domain", domainSearch, sb.entity().getDomainId(), domainSearch.entity().getId(), JoinBuilder.JoinType.INNER); | ||||||
|         } |         } | ||||||
| 
 | 
 | ||||||
|         SearchBuilder<AccountVO> accountSearch = _accountDao.createSearchBuilder(); |         SearchBuilder<AccountVO> accountSearch = _accountDao.createSearchBuilder(); | ||||||
|         accountSearch.and("typeNEQ", accountSearch.entity().getType(), SearchCriteria.Op.NEQ); |         accountSearch.and("typeNEQ", accountSearch.entity().getType(), SearchCriteria.Op.NEQ); | ||||||
|         accountSearch.and("typeEQ", accountSearch.entity().getType(), SearchCriteria.Op.EQ); |         accountSearch.and("typeEQ", accountSearch.entity().getType(), SearchCriteria.Op.EQ); | ||||||
| 
 | 
 | ||||||
|         sb.join("accountSearch", accountSearch, sb.entity().getAccountId(), accountSearch.entity().getId(), JoinBuilder.JoinType.INNER); |         sb.join("account", accountSearch, sb.entity().getAccountId(), accountSearch.entity().getId(), JoinBuilder.JoinType.INNER); | ||||||
| 
 | 
 | ||||||
|         if (associatedNetworkId != null) { |         if (associatedNetworkId != null) { | ||||||
|             SearchBuilder<NetworkDetailVO> associatedNetworkSearch = _networkDetailsDao.createSearchBuilder(); |             SearchBuilder<NetworkDetailVO> associatedNetworkSearch = _networkDetailsDao.createSearchBuilder(); | ||||||
| @ -2337,112 +2346,137 @@ public class NetworkServiceImpl extends ManagerBase implements NetworkService, C | |||||||
|             sb.join("associatedNetworkSearch", associatedNetworkSearch, sb.entity().getId(), associatedNetworkSearch.entity().getResourceId(), JoinBuilder.JoinType.INNER); |             sb.join("associatedNetworkSearch", associatedNetworkSearch, sb.entity().getId(), associatedNetworkSearch.entity().getResourceId(), JoinBuilder.JoinType.INNER); | ||||||
|         } |         } | ||||||
| 
 | 
 | ||||||
|         List<NetworkVO> networksToReturn = new ArrayList<NetworkVO>(); |         Pair<List<NetworkVO>, Integer> result = new Pair<>(new ArrayList<>(), 0); | ||||||
| 
 |         if (BooleanUtils.isTrue(isSystem)) { | ||||||
|         if (isSystem == null || !isSystem) { |             SearchCriteria<NetworkVO> sc = createNetworkSearchCriteria(sb, keyword, id, isSystem, zoneId, guestIpType, trafficType, | ||||||
|             if (!permittedAccounts.isEmpty()) { |                     physicalNetworkId, networkOfferingId, null, restartRequired, specifyIpRanges, | ||||||
|                 if (Arrays.asList(Network.NetworkFilter.Account, Network.NetworkFilter.AccountDomain, Network.NetworkFilter.All).contains(networkFilter)) { |                     vpcId, tags, display, vlanId, associatedNetworkId); | ||||||
|                     //get account level networks |             addProjectNetworksConditionToSearch(sc, true); | ||||||
|                     networksToReturn.addAll(listAccountSpecificNetworks(buildNetworkSearchCriteria(sb, keyword, id, isSystem, zoneId, guestIpType, trafficType, physicalNetworkId, networkOfferingId, |             result = _networksDao.searchAndCount(sc, searchFilter); | ||||||
|                             aclType, skipProjectNetworks, restartRequired, specifyIpRanges, vpcId, tags, display, vlanId, associatedNetworkId), searchFilter, permittedAccounts)); |  | ||||||
|                 } |  | ||||||
|                 if (domainId != null && Arrays.asList(Network.NetworkFilter.Domain, Network.NetworkFilter.AccountDomain, Network.NetworkFilter.All).contains(networkFilter)) { |  | ||||||
|                     //get domain level networks |  | ||||||
|                     networksToReturn.addAll(listDomainLevelNetworks(buildNetworkSearchCriteria(sb, keyword, id, isSystem, zoneId, guestIpType, trafficType, physicalNetworkId, networkOfferingId, |  | ||||||
|                             aclType, true, restartRequired, specifyIpRanges, vpcId, tags, display, vlanId, associatedNetworkId), searchFilter, domainId, false)); |  | ||||||
|                 } |  | ||||||
|                 if (Arrays.asList(Network.NetworkFilter.Shared, Network.NetworkFilter.All).contains(networkFilter)) { |  | ||||||
|                     // get shared networks |  | ||||||
|                     List<NetworkVO> sharedNetworks = listSharedNetworks(buildNetworkSearchCriteria(sb, keyword, id, isSystem, zoneId, guestIpType, trafficType, physicalNetworkId, networkOfferingId, |  | ||||||
|                             aclType, true, restartRequired, specifyIpRanges, vpcId, tags, display, vlanId, associatedNetworkId), searchFilter, permittedAccounts); |  | ||||||
|                     addNetworksToReturnIfNotExist(networksToReturn, sharedNetworks); |  | ||||||
| 
 |  | ||||||
|                 } |  | ||||||
|         } else { |         } else { | ||||||
|                 if (Arrays.asList(Network.NetworkFilter.Account, Network.NetworkFilter.AccountDomain, Network.NetworkFilter.All).contains(networkFilter)) { |             SearchCriteria<NetworkVO> additionalSC = _networksDao.createSearchCriteria(); | ||||||
|                     //add account specific networks | 
 | ||||||
|                     networksToReturn.addAll(listAccountSpecificNetworksByDomainPath(buildNetworkSearchCriteria(sb, keyword, id, isSystem, zoneId, guestIpType, trafficType, physicalNetworkId, networkOfferingId, |             addAccountSpecificNetworksToSearch(additionalSC, sb, networkFilter, skipProjectNetworks, permittedAccounts, path, isRecursive); | ||||||
|                             aclType, skipProjectNetworks, restartRequired, specifyIpRanges, vpcId, tags, display, vlanId, associatedNetworkId), searchFilter, path, isRecursive)); |             addDomainSpecificNetworksToSearch(additionalSC, sb, networkFilter, permittedAccounts, domainId, path, isRecursive); | ||||||
|                 } |             addSharedNetworksToSearch(additionalSC, sb, networkFilter, permittedAccounts, path, isRecursive); | ||||||
|                 if (Arrays.asList(Network.NetworkFilter.Domain, Network.NetworkFilter.AccountDomain, Network.NetworkFilter.All).contains(networkFilter)) { | 
 | ||||||
|                     //add domain specific networks of domain + parent domains |             if (CollectionUtils.isNotEmpty(additionalSC.getValues())) { | ||||||
|                     networksToReturn.addAll(listDomainSpecificNetworksByDomainPath(buildNetworkSearchCriteria(sb, keyword, id, isSystem, zoneId, guestIpType, trafficType, physicalNetworkId, networkOfferingId, |                 SearchCriteria<NetworkVO> sc = createNetworkSearchCriteria(sb, keyword, id, isSystem, zoneId, guestIpType, | ||||||
|                             aclType, true, restartRequired, specifyIpRanges, vpcId, tags, display, vlanId, associatedNetworkId), searchFilter, path, isRecursive)); |                         trafficType, physicalNetworkId, networkOfferingId, aclType, restartRequired, specifyIpRanges, vpcId, | ||||||
|                     //add networks of subdomains |                         tags, display, vlanId, associatedNetworkId); | ||||||
|                     if (domainId == null) { |                 sc.addAnd("id", SearchCriteria.Op.SC, additionalSC); | ||||||
|                         networksToReturn.addAll(listDomainLevelNetworks(buildNetworkSearchCriteria(sb, keyword, id, isSystem, zoneId, guestIpType, trafficType, physicalNetworkId, networkOfferingId, |                 result = _networksDao.searchAndCount(sc, searchFilter); | ||||||
|                             aclType, true, restartRequired, specifyIpRanges, vpcId, tags, display, vlanId, associatedNetworkId), searchFilter, caller.getDomainId(), true)); |  | ||||||
|             } |             } | ||||||
|         } |         } | ||||||
|                 if (Arrays.asList(Network.NetworkFilter.Shared, Network.NetworkFilter.All).contains(networkFilter)) { |         List<NetworkVO> networksToReturn = result.first(); | ||||||
|                     // get shared networks |  | ||||||
|                     List<NetworkVO> sharedNetworks = listSharedNetworksByDomainPath(buildNetworkSearchCriteria(sb, keyword, id, isSystem, zoneId, guestIpType, trafficType, physicalNetworkId, networkOfferingId, |  | ||||||
|                             aclType, true, restartRequired, specifyIpRanges, vpcId, tags, display, vlanId, associatedNetworkId), searchFilter, path, isRecursive); |  | ||||||
|                     addNetworksToReturnIfNotExist(networksToReturn, sharedNetworks); |  | ||||||
|                 } |  | ||||||
|             } |  | ||||||
|         } else { |  | ||||||
|             networksToReturn = _networksDao.search(buildNetworkSearchCriteria(sb, keyword, id, isSystem, zoneId, guestIpType, trafficType, physicalNetworkId, networkOfferingId, |  | ||||||
|                     null, true, restartRequired, specifyIpRanges, vpcId, tags, display, vlanId, associatedNetworkId), searchFilter); |  | ||||||
|         } |  | ||||||
| 
 | 
 | ||||||
|         if (supportedServicesStr != null && !supportedServicesStr.isEmpty() && !networksToReturn.isEmpty()) { |         if (supportedServicesStr != null && !supportedServicesStr.isEmpty() && !networksToReturn.isEmpty()) { | ||||||
|             List<NetworkVO> supportedNetworks = new ArrayList<NetworkVO>(); |             List<NetworkVO> supportedNetworks = new ArrayList<>(); | ||||||
|             Service[] suppportedServices = new Service[supportedServicesStr.size()]; |             Service[] supportedServices = new Service[supportedServicesStr.size()]; | ||||||
|             int i = 0; |             int i = 0; | ||||||
|             for (String supportedServiceStr : supportedServicesStr) { |             for (String supportedServiceStr : supportedServicesStr) { | ||||||
|                 Service service = Service.getService(supportedServiceStr); |                 Service service = Service.getService(supportedServiceStr); | ||||||
|                 if (service == null) { |                 if (service == null) { | ||||||
|                     throw new InvalidParameterValueException("Invalid service specified " + supportedServiceStr); |                     throw new InvalidParameterValueException("Invalid service specified " + supportedServiceStr); | ||||||
|                 } else { |                 } else { | ||||||
|                     suppportedServices[i] = service; |                     supportedServices[i] = service; | ||||||
|                 } |                 } | ||||||
|                 i++; |                 i++; | ||||||
|             } |             } | ||||||
| 
 |  | ||||||
|             for (NetworkVO network : networksToReturn) { |             for (NetworkVO network : networksToReturn) { | ||||||
|                 if (areServicesSupportedInNetwork(network.getId(), suppportedServices)) { |                 if (areServicesSupportedInNetwork(network.getId(), supportedServices)) { | ||||||
|                     supportedNetworks.add(network); |                     supportedNetworks.add(network); | ||||||
|                 } |                 } | ||||||
|             } |             } | ||||||
| 
 |  | ||||||
|             networksToReturn = supportedNetworks; |             networksToReturn = supportedNetworks; | ||||||
|         } |         } | ||||||
| 
 | 
 | ||||||
|         if (canUseForDeploy != null) { |         if (canUseForDeploy != null) { | ||||||
|             List<NetworkVO> networksForDeploy = new ArrayList<NetworkVO>(); |             List<NetworkVO> networksForDeploy = new ArrayList<>(); | ||||||
|             for (NetworkVO network : networksToReturn) { |             for (NetworkVO network : networksToReturn) { | ||||||
|                 if (_networkModel.canUseForDeploy(network) == canUseForDeploy) { |                 if (_networkModel.canUseForDeploy(network) == canUseForDeploy) { | ||||||
|                     networksForDeploy.add(network); |                     networksForDeploy.add(network); | ||||||
|                 } |                 } | ||||||
|             } |             } | ||||||
| 
 |  | ||||||
|             networksToReturn = networksForDeploy; |             networksToReturn = networksForDeploy; | ||||||
|         } |         } | ||||||
| 
 | 
 | ||||||
|  |         if (applyManualPagination) { | ||||||
|             //Now apply pagination |             //Now apply pagination | ||||||
|             List<? extends Network> wPagination = com.cloud.utils.StringUtils.applyPagination(networksToReturn, cmd.getStartIndex(), cmd.getPageSizeVal()); |             List<? extends Network> wPagination = com.cloud.utils.StringUtils.applyPagination(networksToReturn, cmd.getStartIndex(), cmd.getPageSizeVal()); | ||||||
|             if (wPagination != null) { |             if (wPagination != null) { | ||||||
|             Pair<List<? extends Network>, Integer> listWPagination = new Pair<List<? extends Network>, Integer>(wPagination, networksToReturn.size()); |                 Pair<List<? extends Network>, Integer> listWPagination = new Pair<>(wPagination, networksToReturn.size()); | ||||||
|                 return listWPagination; |                 return listWPagination; | ||||||
|             } |             } | ||||||
| 
 |             return new Pair<>(networksToReturn, networksToReturn.size()); | ||||||
|         return new Pair<List<? extends Network>, Integer>(networksToReturn, networksToReturn.size()); |  | ||||||
|         } |         } | ||||||
| 
 | 
 | ||||||
|     private void addNetworksToReturnIfNotExist(final List<NetworkVO> networksToReturn, final List<NetworkVO> sharedNetworks) { |         return new Pair<>(result.first(), result.second()); | ||||||
|         Set<Long> networkIds = networksToReturn.stream() |  | ||||||
|                 .map(NetworkVO::getId) |  | ||||||
|                 .collect(Collectors.toSet()); |  | ||||||
|         List<NetworkVO> sharedNetworksToReturn = sharedNetworks.stream() |  | ||||||
|                 .filter(network -> ! networkIds.contains(network.getId())) |  | ||||||
|                 .collect(Collectors.toList()); |  | ||||||
|         networksToReturn.addAll(sharedNetworksToReturn); |  | ||||||
|     } |     } | ||||||
| 
 | 
 | ||||||
|     private SearchCriteria<NetworkVO> buildNetworkSearchCriteria(SearchBuilder<NetworkVO> sb, String keyword, Long id, |     private void addAccountSpecificNetworksToSearch(SearchCriteria<NetworkVO> additionalSC, SearchBuilder<NetworkVO> sb, | ||||||
|  |                                                     Network.NetworkFilter networkFilter, boolean skipProjectNetworks, | ||||||
|  |                                                     List<Long> permittedAccounts, String path, boolean isRecursive) { | ||||||
|  |         if (!Arrays.asList(Network.NetworkFilter.Account, Network.NetworkFilter.AccountDomain, Network.NetworkFilter.All).contains(networkFilter)) { | ||||||
|  |             return; | ||||||
|  |         } | ||||||
|  | 
 | ||||||
|  |         SearchCriteria<NetworkVO> accountSC = sb.create(); | ||||||
|  |         accountSC.addAnd("aclType", SearchCriteria.Op.EQ, ACLType.Account.toString()); | ||||||
|  |         if (permittedAccounts.isEmpty()) { | ||||||
|  |             if (path != null) { | ||||||
|  |                 // accountSC's WHERE clause gets OR-included in additionalSC's WHERE clause, which then gets AND-included | ||||||
|  |                 // in the main search criteria's WHERE clause. If we added the path filter as join parameters, it would not | ||||||
|  |                 // be present in the main search criteria. This is a way to add a condition that would normally go to accountSC's | ||||||
|  |                 // join parameters to its WHERE clause. | ||||||
|  |                 accountSC.getJoin("domain").addAnd("path", SearchCriteria.Op.LIKE, isRecursive ? path + "%" : path); | ||||||
|  |                 accountSC.addAnd("id", SearchCriteria.Op.SC, accountSC.getJoin("domain")); | ||||||
|  |             } | ||||||
|  |         } else { | ||||||
|  |             accountSC.addAnd("accountId", SearchCriteria.Op.IN, permittedAccounts.toArray()); | ||||||
|  |         } | ||||||
|  |         addProjectNetworksConditionToSearch(accountSC, skipProjectNetworks); | ||||||
|  |         additionalSC.addOr("id", SearchCriteria.Op.SC, accountSC); | ||||||
|  |     } | ||||||
|  | 
 | ||||||
|  |     private void addDomainSpecificNetworksToSearch(SearchCriteria<NetworkVO> additionalSC, SearchBuilder<NetworkVO> sb, Network.NetworkFilter networkFilter, | ||||||
|  |                                                    List<Long> permittedAccounts, Long domainId, String path, boolean isRecursive) { | ||||||
|  |         if (!Arrays.asList(Network.NetworkFilter.Domain, Network.NetworkFilter.AccountDomain, Network.NetworkFilter.All).contains(networkFilter)) { | ||||||
|  |             return; | ||||||
|  |         } | ||||||
|  | 
 | ||||||
|  |         if (permittedAccounts.isEmpty()) { | ||||||
|  |             // Add domain specific networks of domain + parent domains | ||||||
|  |             addDomainNetworksByDomainPathToSearch(additionalSC, sb, path, isRecursive); | ||||||
|  |             if (domainId == null) { | ||||||
|  |                 // Add networks of subdomains | ||||||
|  |                 Account caller = CallContext.current().getCallingAccount(); | ||||||
|  |                 addDomainLevelNetworksToSearch(additionalSC, sb, caller.getDomainId(), true); | ||||||
|  |             } | ||||||
|  |         } else { | ||||||
|  |             if (domainId != null) { | ||||||
|  |                 // Add domain level networks | ||||||
|  |                 addDomainLevelNetworksToSearch(additionalSC, sb, domainId, false); | ||||||
|  |             } | ||||||
|  |         } | ||||||
|  |     } | ||||||
|  | 
 | ||||||
|  |     private void addSharedNetworksToSearch(SearchCriteria<NetworkVO> additionalSC, SearchBuilder<NetworkVO> sb, Network.NetworkFilter networkFilter, | ||||||
|  |                                            List<Long> permittedAccounts, String path, boolean isRecursive) { | ||||||
|  |         if (!Arrays.asList(Network.NetworkFilter.Shared, Network.NetworkFilter.All).contains(networkFilter)) { | ||||||
|  |             return; | ||||||
|  |         } | ||||||
|  | 
 | ||||||
|  |         if (permittedAccounts.isEmpty()) { | ||||||
|  |             addSharedNetworksByDomainPathToSearch(additionalSC, sb, path, isRecursive); | ||||||
|  |         } else { | ||||||
|  |             addSharedNetworksByAccountsToSearch(additionalSC, sb, permittedAccounts); | ||||||
|  |         } | ||||||
|  |     } | ||||||
|  | 
 | ||||||
|  |     private SearchCriteria<NetworkVO> createNetworkSearchCriteria(SearchBuilder<NetworkVO> sb, String keyword, Long id, | ||||||
|                                                                  Boolean isSystem, Long zoneId, String guestIpType, String trafficType, Long physicalNetworkId, |                                                                  Boolean isSystem, Long zoneId, String guestIpType, String trafficType, Long physicalNetworkId, | ||||||
|             Long networkOfferingId, String aclType, boolean skipProjectNetworks, Boolean restartRequired, |                                                                  Long networkOfferingId, String aclType, Boolean restartRequired, | ||||||
|                                                                  Boolean specifyIpRanges, Long vpcId, Map<String, String> tags, Boolean display, String vlanId, Long associatedNetworkId) { |                                                                  Boolean specifyIpRanges, Long vpcId, Map<String, String> tags, Boolean display, String vlanId, Long associatedNetworkId) { | ||||||
| 
 | 
 | ||||||
|         SearchCriteria<NetworkVO> sc = sb.create(); |         SearchCriteria<NetworkVO> sc = sb.create(); | ||||||
| @ -2485,12 +2519,6 @@ public class NetworkServiceImpl extends ManagerBase implements NetworkService, C | |||||||
|             sc.addAnd("physicalNetworkId", SearchCriteria.Op.EQ, physicalNetworkId); |             sc.addAnd("physicalNetworkId", SearchCriteria.Op.EQ, physicalNetworkId); | ||||||
|         } |         } | ||||||
| 
 | 
 | ||||||
|         if (skipProjectNetworks) { |  | ||||||
|             sc.setJoinParameters("accountSearch", "typeNEQ", Account.Type.PROJECT); |  | ||||||
|         } else { |  | ||||||
|             sc.setJoinParameters("accountSearch", "typeEQ", Account.Type.PROJECT); |  | ||||||
|         } |  | ||||||
| 
 |  | ||||||
|         if (restartRequired != null) { |         if (restartRequired != null) { | ||||||
|             sc.addAnd("restartRequired", SearchCriteria.Op.EQ, restartRequired); |             sc.addAnd("restartRequired", SearchCriteria.Op.EQ, restartRequired); | ||||||
|         } |         } | ||||||
| @ -2531,8 +2559,9 @@ public class NetworkServiceImpl extends ManagerBase implements NetworkService, C | |||||||
|         return sc; |         return sc; | ||||||
|     } |     } | ||||||
| 
 | 
 | ||||||
|     private List<NetworkVO> listDomainLevelNetworks(SearchCriteria<NetworkVO> sc, Filter searchFilter, long domainId, boolean parentDomainsOnly) { |     private void addDomainLevelNetworksToSearch(SearchCriteria<NetworkVO> additionalSC, SearchBuilder<NetworkVO> sb, | ||||||
|         List<Long> networkIds = new ArrayList<Long>(); |                                                 long domainId, boolean parentDomainsOnly) { | ||||||
|  |         List<Long> networkIds = new ArrayList<>(); | ||||||
|         Set<Long> allowedDomains = _domainMgr.getDomainParentIds(domainId); |         Set<Long> allowedDomains = _domainMgr.getDomainParentIds(domainId); | ||||||
|         List<NetworkDomainVO> maps = _networkDomainDao.listDomainNetworkMapByDomain(allowedDomains.toArray()); |         List<NetworkDomainVO> maps = _networkDomainDao.listDomainNetworkMapByDomain(allowedDomains.toArray()); | ||||||
| 
 | 
 | ||||||
| @ -2547,48 +2576,17 @@ public class NetworkServiceImpl extends ManagerBase implements NetworkService, C | |||||||
|         } |         } | ||||||
| 
 | 
 | ||||||
|         if (!networkIds.isEmpty()) { |         if (!networkIds.isEmpty()) { | ||||||
|             SearchCriteria<NetworkVO> domainSC = _networksDao.createSearchCriteria(); |             SearchCriteria<NetworkVO> domainSC = sb.create(); | ||||||
|             domainSC.addAnd("id", SearchCriteria.Op.IN, networkIds.toArray()); |             domainSC.addAnd("id", SearchCriteria.Op.IN, networkIds.toArray()); | ||||||
|             domainSC.addAnd("aclType", SearchCriteria.Op.EQ, ACLType.Domain.toString()); |             domainSC.addAnd("aclType", SearchCriteria.Op.EQ, ACLType.Domain.toString()); | ||||||
| 
 |             addProjectNetworksConditionToSearch(domainSC, true); | ||||||
|             sc.addAnd("id", SearchCriteria.Op.SC, domainSC); |             additionalSC.addOr("id", SearchCriteria.Op.SC, domainSC); | ||||||
|             return _networksDao.search(sc, searchFilter); |  | ||||||
|         } else { |  | ||||||
|             return new ArrayList<NetworkVO>(); |  | ||||||
|         } |         } | ||||||
|     } |     } | ||||||
| 
 | 
 | ||||||
|     private List<NetworkVO> listAccountSpecificNetworks(SearchCriteria<NetworkVO> sc, Filter searchFilter, List<Long> permittedAccounts) { |     private void addDomainNetworksByDomainPathToSearch(SearchCriteria<NetworkVO> additionalSC, SearchBuilder<NetworkVO> sb, | ||||||
|         SearchCriteria<NetworkVO> accountSC = _networksDao.createSearchCriteria(); |                                                        String path, boolean isRecursive) { | ||||||
|         if (!permittedAccounts.isEmpty()) { |         Set<Long> allowedDomains = new HashSet<>(); | ||||||
|             accountSC.addAnd("accountId", SearchCriteria.Op.IN, permittedAccounts.toArray()); |  | ||||||
|         } |  | ||||||
| 
 |  | ||||||
|         accountSC.addAnd("aclType", SearchCriteria.Op.EQ, ACLType.Account.toString()); |  | ||||||
| 
 |  | ||||||
|         sc.addAnd("id", SearchCriteria.Op.SC, accountSC); |  | ||||||
|         return _networksDao.search(sc, searchFilter); |  | ||||||
|     } |  | ||||||
| 
 |  | ||||||
|     private List<NetworkVO> listAccountSpecificNetworksByDomainPath(SearchCriteria<NetworkVO> sc, Filter searchFilter, String path, boolean isRecursive) { |  | ||||||
|         SearchCriteria<NetworkVO> accountSC = _networksDao.createSearchCriteria(); |  | ||||||
|         accountSC.addAnd("aclType", SearchCriteria.Op.EQ, ACLType.Account.toString()); |  | ||||||
| 
 |  | ||||||
|         if (path != null) { |  | ||||||
|             if (isRecursive) { |  | ||||||
|                 sc.setJoinParameters("domainSearch", "path", path + "%"); |  | ||||||
|             } else { |  | ||||||
|                 sc.setJoinParameters("domainSearch", "path", path); |  | ||||||
|             } |  | ||||||
|         } |  | ||||||
| 
 |  | ||||||
|         sc.addAnd("id", SearchCriteria.Op.SC, accountSC); |  | ||||||
|         return _networksDao.search(sc, searchFilter); |  | ||||||
|     } |  | ||||||
| 
 |  | ||||||
|     private List<NetworkVO> listDomainSpecificNetworksByDomainPath(SearchCriteria<NetworkVO> sc, Filter searchFilter, String path, boolean isRecursive) { |  | ||||||
| 
 |  | ||||||
|         Set<Long> allowedDomains = new HashSet<Long>(); |  | ||||||
|         if (path != null) { |         if (path != null) { | ||||||
|             if (isRecursive) { |             if (isRecursive) { | ||||||
|                 allowedDomains = _domainMgr.getDomainChildrenIds(path); |                 allowedDomains = _domainMgr.getDomainChildrenIds(path); | ||||||
| @ -2598,39 +2596,40 @@ public class NetworkServiceImpl extends ManagerBase implements NetworkService, C | |||||||
|             } |             } | ||||||
|         } |         } | ||||||
| 
 | 
 | ||||||
|         List<Long> networkIds = new ArrayList<Long>(); |         List<Long> networkIds = new ArrayList<>(); | ||||||
| 
 | 
 | ||||||
|         List<NetworkDomainVO> maps = _networkDomainDao.listDomainNetworkMapByDomain(allowedDomains.toArray()); |         List<NetworkDomainVO> maps = _networkDomainDao.listDomainNetworkMapByDomain(allowedDomains.toArray()); | ||||||
| 
 |  | ||||||
|         for (NetworkDomainVO map : maps) { |         for (NetworkDomainVO map : maps) { | ||||||
|             networkIds.add(map.getNetworkId()); |             networkIds.add(map.getNetworkId()); | ||||||
|         } |         } | ||||||
| 
 | 
 | ||||||
|         if (!networkIds.isEmpty()) { |         if (!networkIds.isEmpty()) { | ||||||
|             SearchCriteria<NetworkVO> domainSC = _networksDao.createSearchCriteria(); |             SearchCriteria<NetworkVO> domainSC = sb.create(); | ||||||
|             domainSC.addAnd("id", SearchCriteria.Op.IN, networkIds.toArray()); |             domainSC.addAnd("id", SearchCriteria.Op.IN, networkIds.toArray()); | ||||||
|             domainSC.addAnd("aclType", SearchCriteria.Op.EQ, ACLType.Domain.toString()); |             domainSC.addAnd("aclType", SearchCriteria.Op.EQ, ACLType.Domain.toString()); | ||||||
| 
 |             addProjectNetworksConditionToSearch(domainSC, true); | ||||||
|             sc.addAnd("id", SearchCriteria.Op.SC, domainSC); |             additionalSC.addOr("id", SearchCriteria.Op.SC, domainSC); | ||||||
|             return _networksDao.search(sc, searchFilter); |  | ||||||
|         } else { |  | ||||||
|             return new ArrayList<NetworkVO>(); |  | ||||||
|         } |         } | ||||||
|     } |     } | ||||||
| 
 | 
 | ||||||
|     private List<NetworkVO> listSharedNetworks(SearchCriteria<NetworkVO> sc, Filter searchFilter, List<Long> permittedAccounts) { |     private void addProjectNetworksConditionToSearch(SearchCriteria<NetworkVO> sc, boolean skipProjectNetworks) { | ||||||
|  |         sc.getJoin("account").addAnd("type", skipProjectNetworks ? Op.NEQ : Op.EQ, Account.Type.PROJECT); | ||||||
|  |         sc.addAnd("id", Op.SC, sc.getJoin("account")); | ||||||
|  |     } | ||||||
|  | 
 | ||||||
|  |     private void addSharedNetworksByAccountsToSearch(SearchCriteria<NetworkVO> additionalSC, SearchBuilder<NetworkVO> sb, | ||||||
|  |                                                      List<Long> permittedAccounts) { | ||||||
|         List<Long> sharedNetworkIds = _networkPermissionDao.listPermittedNetworkIdsByAccounts(permittedAccounts); |         List<Long> sharedNetworkIds = _networkPermissionDao.listPermittedNetworkIdsByAccounts(permittedAccounts); | ||||||
|         if (!sharedNetworkIds.isEmpty()) { |         if (!sharedNetworkIds.isEmpty()) { | ||||||
|             SearchCriteria<NetworkVO> ssc = _networksDao.createSearchCriteria(); |             SearchCriteria<NetworkVO> ssc = sb.create(); | ||||||
|             ssc.addAnd("id", SearchCriteria.Op.IN, sharedNetworkIds.toArray()); |             ssc.addAnd("id", SearchCriteria.Op.IN, sharedNetworkIds.toArray()); | ||||||
|             sc.addAnd("id", SearchCriteria.Op.SC, ssc); |             addProjectNetworksConditionToSearch(ssc, true); | ||||||
|             return _networksDao.search(sc, searchFilter); |             additionalSC.addOr("id", SearchCriteria.Op.SC, ssc); | ||||||
|         } |         } | ||||||
|         return new ArrayList<NetworkVO>(); |  | ||||||
|     } |     } | ||||||
| 
 | 
 | ||||||
|     private List<NetworkVO> listSharedNetworksByDomainPath(SearchCriteria<NetworkVO> sc, Filter searchFilter, String path, boolean isRecursive) { |     private void addSharedNetworksByDomainPathToSearch(SearchCriteria<NetworkVO> additionalSC, SearchBuilder<NetworkVO> sb, String path, boolean isRecursive) { | ||||||
|         Set<Long> allowedDomains = new HashSet<Long>(); |         Set<Long> allowedDomains = new HashSet<>(); | ||||||
|         if (path != null) { |         if (path != null) { | ||||||
|             if (isRecursive) { |             if (isRecursive) { | ||||||
|                 allowedDomains = _domainMgr.getDomainChildrenIds(path); |                 allowedDomains = _domainMgr.getDomainChildrenIds(path); | ||||||
| @ -2639,7 +2638,7 @@ public class NetworkServiceImpl extends ManagerBase implements NetworkService, C | |||||||
|                 allowedDomains.add(domain.getId()); |                 allowedDomains.add(domain.getId()); | ||||||
|             } |             } | ||||||
|         } |         } | ||||||
|         List<Long> allowedDomainsList = new ArrayList<Long>(allowedDomains); |         List<Long> allowedDomainsList = new ArrayList<>(allowedDomains); | ||||||
| 
 | 
 | ||||||
|         if (!allowedDomainsList.isEmpty()) { |         if (!allowedDomainsList.isEmpty()) { | ||||||
|             GenericSearchBuilder<AccountVO, Long> accountIdSearch = _accountDao.createSearchBuilder(Long.class); |             GenericSearchBuilder<AccountVO, Long> accountIdSearch = _accountDao.createSearchBuilder(Long.class); | ||||||
| @ -2652,13 +2651,12 @@ public class NetworkServiceImpl extends ManagerBase implements NetworkService, C | |||||||
| 
 | 
 | ||||||
|             List<Long> sharedNetworkIds = _networkPermissionDao.listPermittedNetworkIdsByAccounts(allowedAccountsList); |             List<Long> sharedNetworkIds = _networkPermissionDao.listPermittedNetworkIdsByAccounts(allowedAccountsList); | ||||||
|             if (!sharedNetworkIds.isEmpty()) { |             if (!sharedNetworkIds.isEmpty()) { | ||||||
|                 SearchCriteria<NetworkVO> ssc = _networksDao.createSearchCriteria(); |                 SearchCriteria<NetworkVO> ssc = sb.create(); | ||||||
|                 ssc.addAnd("id", SearchCriteria.Op.IN, sharedNetworkIds.toArray()); |                 ssc.addAnd("id", SearchCriteria.Op.IN, sharedNetworkIds.toArray()); | ||||||
|                 sc.addAnd("id", SearchCriteria.Op.SC, ssc); |                 addProjectNetworksConditionToSearch(ssc, true); | ||||||
|                 return _networksDao.search(sc, searchFilter); |                 additionalSC.addOr("id", SearchCriteria.Op.SC, ssc); | ||||||
|             } |             } | ||||||
|         } |         } | ||||||
|         return new ArrayList<NetworkVO>(); |  | ||||||
|     } |     } | ||||||
| 
 | 
 | ||||||
|     @Override |     @Override | ||||||
|  | |||||||
		Loading…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user