@Override
public Pair<List<? extends Alert>, Integer> searchForAlerts(final ListAlertsCmd cmd) {
final Filter searchFilter = new Filter(AlertVO.class, "lastSent", false, cmd.getStartIndex(), cmd.getPageSizeVal());
final SearchCriteria<AlertVO> sc = _alertDao.createSearchCriteria();
final Object id = cmd.getId();
final Object type = cmd.getType();
final Object keyword = cmd.getKeyword();
final Object name = cmd.getName();
final Long zoneId = _accountMgr.checkAccessAndSpecifyAuthority(CallContext.current().getCallingAccount(), null);
if (id != null) {
sc.addAnd("id", SearchCriteria.Op.EQ, id);
}
if (zoneId != null) {
sc.addAnd("data_center_id", SearchCriteria.Op.EQ, zoneId);
}
if (keyword != null) {
final SearchCriteria<AlertVO> ssc = _alertDao.createSearchCriteria();
ssc.addOr("subject", SearchCriteria.Op.LIKE, "%" + keyword + "%");
sc.addAnd("subject", SearchCriteria.Op.SC, ssc);
}
if (type != null) {
sc.addAnd("type", SearchCriteria.Op.EQ, type);
}
if (name != null) {
sc.addAnd("name", SearchCriteria.Op.EQ, name);
}
sc.addAnd("archived", SearchCriteria.Op.EQ, false);
final Pair<List<AlertVO>, Integer> result = _alertDao.searchAndCount(sc, searchFilter);
return new Pair<List<? extends Alert>, Integer>(result.first(), result.second());
}