weizhouapache commented on a change in pull request #5769:
URL: https://github.com/apache/cloudstack/pull/5769#discussion_r771236809



##########
File path: server/src/main/java/com/cloud/network/NetworkServiceImpl.java
##########
@@ -1853,25 +1873,55 @@ public Network doInTransaction(TransactionStatus 
status) throws InsufficientCapa
 
         if (isSystem == null || !isSystem) {
             if (!permittedAccounts.isEmpty()) {
-                //get account level networks
-                
networksToReturn.addAll(listAccountSpecificNetworks(buildNetworkSearchCriteria(sb,
 keyword, id, isSystem, zoneId, guestIpType, trafficType, physicalNetworkId, 
networkOfferingId,
-                        aclType, skipProjectNetworks, restartRequired, 
specifyIpRanges, vpcId, tags, display, vlanId, associatedNetworkId), 
searchFilter, permittedAccounts));
-                //get domain level networks
-                if (domainId != null) {
+                if (Arrays.asList(Network.NetworkFilter.Account, 
Network.NetworkFilter.AccountDomain, 
Network.NetworkFilter.All).contains(networkFilter)) {
+                    //get account level networks
+                    
networksToReturn.addAll(listAccountSpecificNetworks(buildNetworkSearchCriteria(sb,
 keyword, id, isSystem, zoneId, guestIpType, trafficType, physicalNetworkId, 
networkOfferingId,
+                            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
+                    Set<Long> networkIds = networksToReturn.stream()
+                            .map(NetworkVO::getId)
+                            .collect(Collectors.toSet());
+                    List<NetworkVO> sharedNetworks = 
listSharedNetworks(buildNetworkSearchCriteria(sb, keyword, id, isSystem, 
zoneId, guestIpType, trafficType, physicalNetworkId, networkOfferingId,
+                            aclType, skipProjectNetworks, restartRequired, 
specifyIpRanges, vpcId, tags, display, vlanId, associatedNetworkId), 
searchFilter, permittedAccounts);
+                    List<NetworkVO> sharedNetworksToReturn = 
sharedNetworks.stream()
+                            .filter(network -> ! 
networkIds.contains(network.getId()))
+                            .collect(Collectors.toList());
+                    networksToReturn.addAll(sharedNetworksToReturn);
+                }
             } else {
-                //add account specific networks
-                
networksToReturn.addAll(listAccountSpecificNetworksByDomainPath(buildNetworkSearchCriteria(sb,
 keyword, id, isSystem, zoneId, guestIpType, trafficType, physicalNetworkId, 
networkOfferingId,
-                        aclType, skipProjectNetworks, restartRequired, 
specifyIpRanges, vpcId, tags, display, vlanId, associatedNetworkId), 
searchFilter, path, isRecursive));
-                //add domain specific networks of domain + parent domains
-                
networksToReturn.addAll(listDomainSpecificNetworksByDomainPath(buildNetworkSearchCriteria(sb,
 keyword, id, isSystem, zoneId, guestIpType, trafficType, physicalNetworkId, 
networkOfferingId,
-                        aclType, skipProjectNetworks, restartRequired, 
specifyIpRanges, vpcId, tags, display, vlanId, associatedNetworkId), 
searchFilter, path, isRecursive));
-                //add networks of subdomains
-                if (domainId == null) {
-                    
networksToReturn.addAll(listDomainLevelNetworks(buildNetworkSearchCriteria(sb, 
keyword, id, isSystem, zoneId, guestIpType, trafficType, physicalNetworkId, 
networkOfferingId,
-                            aclType, true, restartRequired, specifyIpRanges, 
vpcId, tags, display, vlanId, associatedNetworkId), searchFilter, 
caller.getDomainId(), true));
+                if (Arrays.asList(Network.NetworkFilter.Account, 
Network.NetworkFilter.AccountDomain, 
Network.NetworkFilter.All).contains(networkFilter)) {
+                    //add account specific networks
+                    
networksToReturn.addAll(listAccountSpecificNetworksByDomainPath(buildNetworkSearchCriteria(sb,
 keyword, id, isSystem, zoneId, guestIpType, trafficType, physicalNetworkId, 
networkOfferingId,
+                            aclType, skipProjectNetworks, restartRequired, 
specifyIpRanges, vpcId, tags, display, vlanId, associatedNetworkId), 
searchFilter, path, isRecursive));
+                }
+                if (Arrays.asList(Network.NetworkFilter.Domain, 
Network.NetworkFilter.AccountDomain, 
Network.NetworkFilter.All).contains(networkFilter)) {
+                    //add domain specific networks of domain + parent domains
+                    
networksToReturn.addAll(listDomainSpecificNetworksByDomainPath(buildNetworkSearchCriteria(sb,
 keyword, id, isSystem, zoneId, guestIpType, trafficType, physicalNetworkId, 
networkOfferingId,
+                            aclType, skipProjectNetworks, restartRequired, 
specifyIpRanges, vpcId, tags, display, vlanId, associatedNetworkId), 
searchFilter, path, isRecursive));
+                    //add networks of subdomains
+                    if (domainId == null) {
+                        
networksToReturn.addAll(listDomainLevelNetworks(buildNetworkSearchCriteria(sb, 
keyword, id, isSystem, zoneId, guestIpType, trafficType, physicalNetworkId, 
networkOfferingId,
+                                aclType, true, restartRequired, 
specifyIpRanges, vpcId, tags, display, vlanId, associatedNetworkId), 
searchFilter, caller.getDomainId(), true));
+                    }
+                }
+                if (Arrays.asList(Network.NetworkFilter.Shared, 
Network.NetworkFilter.All).contains(networkFilter)) {
+                    // get shared networks
+                    Set<Long> networkIds = networksToReturn.stream()
+                            .map(NetworkVO::getId)
+                            .collect(Collectors.toSet());
+                    List<NetworkVO> sharedNetworks = 
listSharedNetworksByDomainPath(buildNetworkSearchCriteria(sb, keyword, id, 
isSystem, zoneId, guestIpType, trafficType, physicalNetworkId, 
networkOfferingId,
+                            aclType, skipProjectNetworks, restartRequired, 
specifyIpRanges, vpcId, tags, display, vlanId, associatedNetworkId), 
searchFilter, path, isRecursive);
+                    List<NetworkVO> sharedNetworksToReturn = 
sharedNetworks.stream()
+                            .filter(network -> ! 
networkIds.contains(network.getId()))
+                            .collect(Collectors.toList());
+                    networksToReturn.addAll(sharedNetworksToReturn);

Review comment:
       @DaanHoogland done. thanks for review




-- 
This is an automated message from the Apache Git Service.
To respond to the message, please log on to GitHub and use the
URL above to go to the specific comment.

To unsubscribe, e-mail: [email protected]

For queries about this service, please contact Infrastructure at:
[email protected]


Reply via email to