bug 13425: use IN to select security ingress rule

status 13425: resolved fixed
Reviewed-by: frank
This commit is contained in:
Edison Su 2012-02-02 14:28:54 -08:00
parent 1b14a0f0b9
commit cf2b87f655
3 changed files with 33 additions and 9 deletions

View File

@ -1053,11 +1053,10 @@ public class SecurityGroupManagerImpl implements SecurityGroupManager, SecurityG
accountId = caller.getId();
}
List<SecurityGroupRulesVO> securityRulesList = new ArrayList<SecurityGroupRulesVO>();
Filter searchFilter = new Filter(SecurityGroupVO.class, "id", true, cmd.getStartIndex(), cmd.getPageSizeVal());
Object keyword = cmd.getKeyword();
SearchBuilder<SecurityGroupRulesVO> sb = _securityGroupRulesDao.createSearchBuilder();
SearchBuilder<SecurityGroupVO> 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<SecurityGroupRulesVO> sc = sb.create();
SearchCriteria<SecurityGroupVO> 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<SecurityGroupVO> securityGroups = _securityGroupDao.search(sc, searchFilter);
List<SecurityGroupRulesVO> securityRulesList = new ArrayList<SecurityGroupRulesVO>();
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;
}

View File

@ -49,5 +49,6 @@ public interface SecurityGroupRulesDao extends GenericDao<SecurityGroupRulesVO,
* List all security rules belonging to the specific group
* @return the security group with associated ingress rules
*/
List<SecurityGroupRulesVO> listSecurityRulesByGroupId(long groupId);
List<SecurityGroupRulesVO> listSecurityRulesByGroupId(long groupId);
List<SecurityGroupRulesVO> listSecurityRulesByGroupIds(Long[] groupId);
}

View File

@ -32,7 +32,8 @@ import com.cloud.utils.db.SearchCriteria;
public class SecurityGroupRulesDaoImpl extends GenericDaoBase<SecurityGroupRulesVO, Long> implements SecurityGroupRulesDao {
private SearchBuilder<SecurityGroupRulesVO> AccountGroupNameSearch;
private SearchBuilder<SecurityGroupRulesVO> AccountSearch;
private SearchBuilder<SecurityGroupRulesVO> GroupSearch;
private SearchBuilder<SecurityGroupRulesVO> GroupSearch;
private SearchBuilder<SecurityGroupRulesVO> GroupSearch2;
protected SecurityGroupRulesDaoImpl() {
@ -47,7 +48,11 @@ public class SecurityGroupRulesDaoImpl extends GenericDaoBase<SecurityGroupRules
GroupSearch = createSearchBuilder();
GroupSearch.and("groupId", GroupSearch.entity().getId(), SearchCriteria.Op.EQ);
GroupSearch.done();
GroupSearch.done();
GroupSearch2 = createSearchBuilder();
GroupSearch2.and("groupId", GroupSearch2.entity().getId(), SearchCriteria.Op.IN);
GroupSearch2.done();
}
@ -82,5 +87,13 @@ public class SecurityGroupRulesDaoImpl extends GenericDaoBase<SecurityGroupRules
SearchCriteria<SecurityGroupRulesVO> sc = GroupSearch.create();
sc.setParameters("groupId", groupId);
return listBy(sc, searchFilter);
}
}
}
@Override
public List<SecurityGroupRulesVO> listSecurityRulesByGroupIds(Long[] groupId) {
Filter searchFilter = new Filter(SecurityGroupRulesVO.class, "id", true, null, null);
SearchCriteria<SecurityGroupRulesVO> sc = GroupSearch2.create();
sc.setParameters("groupId", (Object[])groupId);
return listBy(sc, searchFilter);
}
}