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,113 +2346,138 @@ 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 {
|
|
||||||
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, true, 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
|
|
||||||
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 {
|
} else {
|
||||||
networksToReturn = _networksDao.search(buildNetworkSearchCriteria(sb, keyword, id, isSystem, zoneId, guestIpType, trafficType, physicalNetworkId, networkOfferingId,
|
SearchCriteria<NetworkVO> additionalSC = _networksDao.createSearchCriteria();
|
||||||
null, true, restartRequired, specifyIpRanges, vpcId, tags, display, vlanId, associatedNetworkId), searchFilter);
|
|
||||||
|
addAccountSpecificNetworksToSearch(additionalSC, sb, networkFilter, skipProjectNetworks, permittedAccounts, path, isRecursive);
|
||||||
|
addDomainSpecificNetworksToSearch(additionalSC, sb, networkFilter, permittedAccounts, domainId, path, isRecursive);
|
||||||
|
addSharedNetworksToSearch(additionalSC, sb, networkFilter, permittedAccounts, path, isRecursive);
|
||||||
|
|
||||||
|
if (CollectionUtils.isNotEmpty(additionalSC.getValues())) {
|
||||||
|
SearchCriteria<NetworkVO> sc = createNetworkSearchCriteria(sb, keyword, id, isSystem, zoneId, guestIpType,
|
||||||
|
trafficType, physicalNetworkId, networkOfferingId, aclType, restartRequired, specifyIpRanges, vpcId,
|
||||||
|
tags, display, vlanId, associatedNetworkId);
|
||||||
|
sc.addAnd("id", SearchCriteria.Op.SC, additionalSC);
|
||||||
|
result = _networksDao.searchAndCount(sc, searchFilter);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
List<NetworkVO> networksToReturn = result.first();
|
||||||
|
|
||||||
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;
|
||||||
}
|
}
|
||||||
|
|
||||||
//Now apply pagination
|
if (applyManualPagination) {
|
||||||
List<? extends Network> wPagination = com.cloud.utils.StringUtils.applyPagination(networksToReturn, cmd.getStartIndex(), cmd.getPageSizeVal());
|
//Now apply pagination
|
||||||
if (wPagination != null) {
|
List<? extends Network> wPagination = com.cloud.utils.StringUtils.applyPagination(networksToReturn, cmd.getStartIndex(), cmd.getPageSizeVal());
|
||||||
Pair<List<? extends Network>, Integer> listWPagination = new Pair<List<? extends Network>, Integer>(wPagination, networksToReturn.size());
|
if (wPagination != null) {
|
||||||
return listWPagination;
|
Pair<List<? extends Network>, Integer> listWPagination = new Pair<>(wPagination, networksToReturn.size());
|
||||||
|
return listWPagination;
|
||||||
|
}
|
||||||
|
return new Pair<>(networksToReturn, networksToReturn.size());
|
||||||
}
|
}
|
||||||
|
|
||||||
return new Pair<List<? extends Network>, Integer>(networksToReturn, networksToReturn.size());
|
return new Pair<>(result.first(), result.second());
|
||||||
}
|
}
|
||||||
|
|
||||||
private void addNetworksToReturnIfNotExist(final List<NetworkVO> networksToReturn, final List<NetworkVO> sharedNetworks) {
|
private void addAccountSpecificNetworksToSearch(SearchCriteria<NetworkVO> additionalSC, SearchBuilder<NetworkVO> sb,
|
||||||
Set<Long> networkIds = networksToReturn.stream()
|
Network.NetworkFilter networkFilter, boolean skipProjectNetworks,
|
||||||
.map(NetworkVO::getId)
|
List<Long> permittedAccounts, String path, boolean isRecursive) {
|
||||||
.collect(Collectors.toSet());
|
if (!Arrays.asList(Network.NetworkFilter.Account, Network.NetworkFilter.AccountDomain, Network.NetworkFilter.All).contains(networkFilter)) {
|
||||||
List<NetworkVO> sharedNetworksToReturn = sharedNetworks.stream()
|
return;
|
||||||
.filter(network -> ! networkIds.contains(network.getId()))
|
}
|
||||||
.collect(Collectors.toList());
|
|
||||||
networksToReturn.addAll(sharedNetworksToReturn);
|
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 SearchCriteria<NetworkVO> buildNetworkSearchCriteria(SearchBuilder<NetworkVO> sb, String keyword, Long id,
|
private void addDomainSpecificNetworksToSearch(SearchCriteria<NetworkVO> additionalSC, SearchBuilder<NetworkVO> sb, Network.NetworkFilter networkFilter,
|
||||||
Boolean isSystem, Long zoneId, String guestIpType, String trafficType, Long physicalNetworkId,
|
List<Long> permittedAccounts, Long domainId, String path, boolean isRecursive) {
|
||||||
Long networkOfferingId, String aclType, boolean skipProjectNetworks, Boolean restartRequired,
|
if (!Arrays.asList(Network.NetworkFilter.Domain, Network.NetworkFilter.AccountDomain, Network.NetworkFilter.All).contains(networkFilter)) {
|
||||||
Boolean specifyIpRanges, Long vpcId, Map<String, String> tags, Boolean display, String vlanId, Long associatedNetworkId) {
|
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,
|
||||||
|
Long networkOfferingId, String aclType, Boolean restartRequired,
|
||||||
|
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