diff --git a/server/src/com/cloud/network/security/SecurityGroupManagerImpl.java b/server/src/com/cloud/network/security/SecurityGroupManagerImpl.java index e18fb49e673..c8b7dc7fe62 100755 --- a/server/src/com/cloud/network/security/SecurityGroupManagerImpl.java +++ b/server/src/com/cloud/network/security/SecurityGroupManagerImpl.java @@ -1053,11 +1053,10 @@ public class SecurityGroupManagerImpl implements SecurityGroupManager, SecurityG accountId = caller.getId(); } - List securityRulesList = new ArrayList(); Filter searchFilter = new Filter(SecurityGroupVO.class, "id", true, cmd.getStartIndex(), cmd.getPageSizeVal()); Object keyword = cmd.getKeyword(); - SearchBuilder sb = _securityGroupRulesDao.createSearchBuilder(); + SearchBuilder sb = _securityGroupDao.createSearchBuilder(); sb.and("id", sb.entity().getId(), SearchCriteria.Op.EQ); sb.and("accountId", sb.entity().getAccountId(), SearchCriteria.Op.EQ); sb.and("name", sb.entity().getName(), SearchCriteria.Op.EQ); @@ -1070,7 +1069,7 @@ public class SecurityGroupManagerImpl implements SecurityGroupManager, SecurityG sb.join("domainSearch", domainSearch, sb.entity().getDomainId(), domainSearch.entity().getId(), JoinBuilder.JoinType.INNER); } - SearchCriteria sc = sb.create(); + SearchCriteria sc = sb.create(); if (id != null) { sc.setParameters("id", id); @@ -1097,8 +1096,19 @@ public class SecurityGroupManagerImpl implements SecurityGroupManager, SecurityG sc.addAnd("name", SearchCriteria.Op.SC, ssc); } - securityRulesList = _securityGroupRulesDao.search(sc, searchFilter); + List securityGroups = _securityGroupDao.search(sc, searchFilter); + List securityRulesList = new ArrayList(); + if (securityGroups.size() > 0) { + Long[] groupIds = new Long[securityGroups.size()]; + int i = 0; + for (SecurityGroupVO group : securityGroups) { + groupIds[i] = group.getId(); + i++; + } + securityRulesList = _securityGroupRulesDao.listSecurityRulesByGroupIds(groupIds); + } + return securityRulesList; } diff --git a/server/src/com/cloud/network/security/dao/SecurityGroupRulesDao.java b/server/src/com/cloud/network/security/dao/SecurityGroupRulesDao.java index 08ebf350145..9e204188210 100644 --- a/server/src/com/cloud/network/security/dao/SecurityGroupRulesDao.java +++ b/server/src/com/cloud/network/security/dao/SecurityGroupRulesDao.java @@ -49,5 +49,6 @@ public interface SecurityGroupRulesDao extends GenericDao listSecurityRulesByGroupId(long groupId); + List listSecurityRulesByGroupId(long groupId); + List listSecurityRulesByGroupIds(Long[] groupId); } diff --git a/server/src/com/cloud/network/security/dao/SecurityGroupRulesDaoImpl.java b/server/src/com/cloud/network/security/dao/SecurityGroupRulesDaoImpl.java index ed751ddc0e9..47a325c77c6 100644 --- a/server/src/com/cloud/network/security/dao/SecurityGroupRulesDaoImpl.java +++ b/server/src/com/cloud/network/security/dao/SecurityGroupRulesDaoImpl.java @@ -32,7 +32,8 @@ import com.cloud.utils.db.SearchCriteria; public class SecurityGroupRulesDaoImpl extends GenericDaoBase implements SecurityGroupRulesDao { private SearchBuilder AccountGroupNameSearch; private SearchBuilder AccountSearch; - private SearchBuilder GroupSearch; + private SearchBuilder GroupSearch; + private SearchBuilder GroupSearch2; protected SecurityGroupRulesDaoImpl() { @@ -47,7 +48,11 @@ public class SecurityGroupRulesDaoImpl extends GenericDaoBase sc = GroupSearch.create(); sc.setParameters("groupId", groupId); return listBy(sc, searchFilter); - } -} + } + + @Override + public List listSecurityRulesByGroupIds(Long[] groupId) { + Filter searchFilter = new Filter(SecurityGroupRulesVO.class, "id", true, null, null); + SearchCriteria sc = GroupSearch2.create(); + sc.setParameters("groupId", (Object[])groupId); + return listBy(sc, searchFilter); + } +} \ No newline at end of file