Restore listNetworks behavior & clean up the code (#9461)
Co-authored-by: Abhishek Kumar <abhishek.mrt22@gmail.com>
diff --git a/server/src/main/java/com/cloud/network/NetworkServiceImpl.java b/server/src/main/java/com/cloud/network/NetworkServiceImpl.java
index c58463a..0fa5a0d 100644
--- a/server/src/main/java/com/cloud/network/NetworkServiceImpl.java
+++ b/server/src/main/java/com/cloud/network/NetworkServiceImpl.java
@@ -36,7 +36,6 @@
import java.util.Map;
import java.util.Set;
import java.util.UUID;
-import java.util.stream.Collectors;
import javax.inject.Inject;
import javax.naming.ConfigurationException;
@@ -76,6 +75,7 @@
import org.apache.cloudstack.network.dao.NetworkPermissionDao;
import org.apache.cloudstack.network.element.InternalLoadBalancerElementService;
import org.apache.commons.collections.CollectionUtils;
+import org.apache.commons.lang3.BooleanUtils;
import org.apache.commons.lang3.EnumUtils;
import org.apache.commons.lang3.ObjectUtils;
import org.apache.commons.lang3.StringUtils;
@@ -2197,6 +2197,9 @@
Long associatedNetworkId = cmd.getAssociatedNetworkId();
String networkFilterStr = cmd.getNetworkFilter();
+ boolean applyManualPagination = CollectionUtils.isNotEmpty(supportedServicesStr) ||
+ Boolean.TRUE.equals(canUseForDeploy);
+
String vlanId = null;
if (cmd instanceof ListNetworksCmdByAdmin) {
vlanId = ((ListNetworksCmdByAdmin)cmd).getVlan();
@@ -2282,7 +2285,13 @@
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();
if (forVpc != null) {
@@ -2321,14 +2330,14 @@
if (permittedAccounts.isEmpty()) {
SearchBuilder<DomainVO> domainSearch = _domainDao.createSearchBuilder();
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();
accountSearch.and("typeNEQ", accountSearch.entity().getType(), SearchCriteria.Op.NEQ);
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) {
SearchBuilder<NetworkDetailVO> associatedNetworkSearch = _networkDetailsDao.createSearchBuilder();
@@ -2337,113 +2346,138 @@
sb.join("associatedNetworkSearch", associatedNetworkSearch, sb.entity().getId(), associatedNetworkSearch.entity().getResourceId(), JoinBuilder.JoinType.INNER);
}
- List<NetworkVO> networksToReturn = new ArrayList<NetworkVO>();
-
- if (isSystem == null || !isSystem) {
- if (!permittedAccounts.isEmpty()) {
- 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
- 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);
- }
- }
+ Pair<List<NetworkVO>, Integer> result = new Pair<>(new ArrayList<>(), 0);
+ if (BooleanUtils.isTrue(isSystem)) {
+ SearchCriteria<NetworkVO> sc = createNetworkSearchCriteria(sb, keyword, id, isSystem, zoneId, guestIpType, trafficType,
+ physicalNetworkId, networkOfferingId, null, restartRequired, specifyIpRanges,
+ vpcId, tags, display, vlanId, associatedNetworkId);
+ addProjectNetworksConditionToSearch(sc, true);
+ result = _networksDao.searchAndCount(sc, searchFilter);
} else {
- networksToReturn = _networksDao.search(buildNetworkSearchCriteria(sb, keyword, id, isSystem, zoneId, guestIpType, trafficType, physicalNetworkId, networkOfferingId,
- null, true, restartRequired, specifyIpRanges, vpcId, tags, display, vlanId, associatedNetworkId), searchFilter);
+ SearchCriteria<NetworkVO> additionalSC = _networksDao.createSearchCriteria();
+
+ 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()) {
- List<NetworkVO> supportedNetworks = new ArrayList<NetworkVO>();
- Service[] suppportedServices = new Service[supportedServicesStr.size()];
+ List<NetworkVO> supportedNetworks = new ArrayList<>();
+ Service[] supportedServices = new Service[supportedServicesStr.size()];
int i = 0;
for (String supportedServiceStr : supportedServicesStr) {
Service service = Service.getService(supportedServiceStr);
if (service == null) {
throw new InvalidParameterValueException("Invalid service specified " + supportedServiceStr);
} else {
- suppportedServices[i] = service;
+ supportedServices[i] = service;
}
i++;
}
-
for (NetworkVO network : networksToReturn) {
- if (areServicesSupportedInNetwork(network.getId(), suppportedServices)) {
+ if (areServicesSupportedInNetwork(network.getId(), supportedServices)) {
supportedNetworks.add(network);
}
}
-
networksToReturn = supportedNetworks;
}
if (canUseForDeploy != null) {
- List<NetworkVO> networksForDeploy = new ArrayList<NetworkVO>();
+ List<NetworkVO> networksForDeploy = new ArrayList<>();
for (NetworkVO network : networksToReturn) {
if (_networkModel.canUseForDeploy(network) == canUseForDeploy) {
networksForDeploy.add(network);
}
}
-
networksToReturn = networksForDeploy;
}
- //Now apply pagination
- List<? extends Network> wPagination = com.cloud.utils.StringUtils.applyPagination(networksToReturn, cmd.getStartIndex(), cmd.getPageSizeVal());
- if (wPagination != null) {
- Pair<List<? extends Network>, Integer> listWPagination = new Pair<List<? extends Network>, Integer>(wPagination, networksToReturn.size());
- return listWPagination;
+ if (applyManualPagination) {
+ //Now apply pagination
+ List<? extends Network> wPagination = com.cloud.utils.StringUtils.applyPagination(networksToReturn, cmd.getStartIndex(), cmd.getPageSizeVal());
+ if (wPagination != null) {
+ 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) {
- 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 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 SearchCriteria<NetworkVO> buildNetworkSearchCriteria(SearchBuilder<NetworkVO> sb, String keyword, Long id,
- Boolean isSystem, Long zoneId, String guestIpType, String trafficType, Long physicalNetworkId,
- Long networkOfferingId, String aclType, boolean skipProjectNetworks, Boolean restartRequired,
- Boolean specifyIpRanges, Long vpcId, Map<String, String> tags, Boolean display, String vlanId, Long associatedNetworkId) {
+ 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,
+ 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();
@@ -2485,12 +2519,6 @@
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) {
sc.addAnd("restartRequired", SearchCriteria.Op.EQ, restartRequired);
}
@@ -2531,8 +2559,9 @@
return sc;
}
- private List<NetworkVO> listDomainLevelNetworks(SearchCriteria<NetworkVO> sc, Filter searchFilter, long domainId, boolean parentDomainsOnly) {
- List<Long> networkIds = new ArrayList<Long>();
+ private void addDomainLevelNetworksToSearch(SearchCriteria<NetworkVO> additionalSC, SearchBuilder<NetworkVO> sb,
+ long domainId, boolean parentDomainsOnly) {
+ List<Long> networkIds = new ArrayList<>();
Set<Long> allowedDomains = _domainMgr.getDomainParentIds(domainId);
List<NetworkDomainVO> maps = _networkDomainDao.listDomainNetworkMapByDomain(allowedDomains.toArray());
@@ -2547,48 +2576,17 @@
}
if (!networkIds.isEmpty()) {
- SearchCriteria<NetworkVO> domainSC = _networksDao.createSearchCriteria();
+ SearchCriteria<NetworkVO> domainSC = sb.create();
domainSC.addAnd("id", SearchCriteria.Op.IN, networkIds.toArray());
domainSC.addAnd("aclType", SearchCriteria.Op.EQ, ACLType.Domain.toString());
-
- sc.addAnd("id", SearchCriteria.Op.SC, domainSC);
- return _networksDao.search(sc, searchFilter);
- } else {
- return new ArrayList<NetworkVO>();
+ addProjectNetworksConditionToSearch(domainSC, true);
+ additionalSC.addOr("id", SearchCriteria.Op.SC, domainSC);
}
}
- private List<NetworkVO> listAccountSpecificNetworks(SearchCriteria<NetworkVO> sc, Filter searchFilter, List<Long> permittedAccounts) {
- SearchCriteria<NetworkVO> accountSC = _networksDao.createSearchCriteria();
- if (!permittedAccounts.isEmpty()) {
- 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>();
+ private void addDomainNetworksByDomainPathToSearch(SearchCriteria<NetworkVO> additionalSC, SearchBuilder<NetworkVO> sb,
+ String path, boolean isRecursive) {
+ Set<Long> allowedDomains = new HashSet<>();
if (path != null) {
if (isRecursive) {
allowedDomains = _domainMgr.getDomainChildrenIds(path);
@@ -2598,39 +2596,40 @@
}
}
- List<Long> networkIds = new ArrayList<Long>();
+ List<Long> networkIds = new ArrayList<>();
List<NetworkDomainVO> maps = _networkDomainDao.listDomainNetworkMapByDomain(allowedDomains.toArray());
-
for (NetworkDomainVO map : maps) {
networkIds.add(map.getNetworkId());
}
if (!networkIds.isEmpty()) {
- SearchCriteria<NetworkVO> domainSC = _networksDao.createSearchCriteria();
+ SearchCriteria<NetworkVO> domainSC = sb.create();
domainSC.addAnd("id", SearchCriteria.Op.IN, networkIds.toArray());
domainSC.addAnd("aclType", SearchCriteria.Op.EQ, ACLType.Domain.toString());
-
- sc.addAnd("id", SearchCriteria.Op.SC, domainSC);
- return _networksDao.search(sc, searchFilter);
- } else {
- return new ArrayList<NetworkVO>();
+ addProjectNetworksConditionToSearch(domainSC, true);
+ additionalSC.addOr("id", SearchCriteria.Op.SC, domainSC);
}
}
- 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);
if (!sharedNetworkIds.isEmpty()) {
- SearchCriteria<NetworkVO> ssc = _networksDao.createSearchCriteria();
+ SearchCriteria<NetworkVO> ssc = sb.create();
ssc.addAnd("id", SearchCriteria.Op.IN, sharedNetworkIds.toArray());
- sc.addAnd("id", SearchCriteria.Op.SC, ssc);
- return _networksDao.search(sc, searchFilter);
+ addProjectNetworksConditionToSearch(ssc, true);
+ additionalSC.addOr("id", SearchCriteria.Op.SC, ssc);
}
- return new ArrayList<NetworkVO>();
}
- private List<NetworkVO> listSharedNetworksByDomainPath(SearchCriteria<NetworkVO> sc, Filter searchFilter, String path, boolean isRecursive) {
- Set<Long> allowedDomains = new HashSet<Long>();
+ private void addSharedNetworksByDomainPathToSearch(SearchCriteria<NetworkVO> additionalSC, SearchBuilder<NetworkVO> sb, String path, boolean isRecursive) {
+ Set<Long> allowedDomains = new HashSet<>();
if (path != null) {
if (isRecursive) {
allowedDomains = _domainMgr.getDomainChildrenIds(path);
@@ -2639,7 +2638,7 @@
allowedDomains.add(domain.getId());
}
}
- List<Long> allowedDomainsList = new ArrayList<Long>(allowedDomains);
+ List<Long> allowedDomainsList = new ArrayList<>(allowedDomains);
if (!allowedDomainsList.isEmpty()) {
GenericSearchBuilder<AccountVO, Long> accountIdSearch = _accountDao.createSearchBuilder(Long.class);
@@ -2652,13 +2651,12 @@
List<Long> sharedNetworkIds = _networkPermissionDao.listPermittedNetworkIdsByAccounts(allowedAccountsList);
if (!sharedNetworkIds.isEmpty()) {
- SearchCriteria<NetworkVO> ssc = _networksDao.createSearchCriteria();
+ SearchCriteria<NetworkVO> ssc = sb.create();
ssc.addAnd("id", SearchCriteria.Op.IN, sharedNetworkIds.toArray());
- sc.addAnd("id", SearchCriteria.Op.SC, ssc);
- return _networksDao.search(sc, searchFilter);
+ addProjectNetworksConditionToSearch(ssc, true);
+ additionalSC.addOr("id", SearchCriteria.Op.SC, ssc);
}
}
- return new ArrayList<NetworkVO>();
}
@Override