diff --git a/opennms-config/src/main/java/org/opennms/netmgt/config/NotificationManager.java b/opennms-config/src/main/java/org/opennms/netmgt/config/NotificationManager.java index b02f2f7..cd82c6e 100644 --- a/opennms-config/src/main/java/org/opennms/netmgt/config/NotificationManager.java +++ b/opennms-config/src/main/java/org/opennms/netmgt/config/NotificationManager.java @@ -71,6 +71,7 @@ import org.opennms.netmgt.eventd.datablock.EventUtil; import org.opennms.netmgt.filter.FilterDaoFactory; import org.opennms.netmgt.filter.FilterParseException; import org.opennms.netmgt.xml.event.Event; +import org.opennms.netmgt.xml.event.Parm; import org.opennms.netmgt.xml.event.Tticket; import org.springframework.util.Assert; @@ -552,9 +553,14 @@ public abstract class NotificationManager { d.watch(connection); int eventID = 0; boolean wasAcked = false; - StringBuffer sql = new StringBuffer("SELECT eventid FROM notifications WHERE eventuei=? "); +// StringBuffer sql = new StringBuffer("SELECT n.eventid FROM notifications n, alarms e WHERE n.eventid = e.lasteventid AND n.eventuei=? "); + StringBuffer sql = new StringBuffer("SELECT n.eventid FROM notifications n, events e WHERE n.eventid = e.eventid AND n.eventuei=? "); for (int i = 0; i < matchList.length; i++) { - sql.append("AND ").append(matchList[i]).append("=? "); + if (matchList[i].startsWith("parm[")) { + sql.append("AND e.eventparms LIKE ? "); + } else { + sql.append("AND n.").append(matchList[i]).append("=? "); + } } sql.append("ORDER BY eventid desc limit 1"); PreparedStatement statement = connection.prepareStatement(sql.toString()); @@ -573,6 +579,40 @@ public abstract class NotificationManager { if (matchList[i].equals("serviceid")) { statement.setInt(i + 2, getServiceId(event.getService())); } + + if (matchList[i].startsWith("parm[")) { + String match = matchList[i]; + String key = null; + String param = null; + String value = null; + try { + key = match.substring(match.indexOf("[") + 1, match.indexOf("]")); + } catch (Exception e) {} + if (key != null) { + int numkey = 0; + if (key.startsWith("#")) { + try { + numkey = Integer.parseInt(key.substring(1)); + } catch (Exception e) {} + } + int idx = 0; + for (Parm p : event.getParmCollection()) { + if (numkey > 0) { + if (numkey == idx) { + param = p.getParmName(); + value = p.getValue().getContent(); + } + } else { + if (p.getParmName().equalsIgnoreCase(key)) { + param = p.getParmName(); + value = p.getValue().getContent(); + } + } + idx++; + } + } + statement.setString(i + 2, '%' + param + '=' + value + '%'); + } } ResultSet results = statement.executeQuery();