@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()); }