/*******************************************************************************
* This file is part of OpenNMS(R).
*
* Copyright (C) 2008-2011 The OpenNMS Group, Inc.
* OpenNMS(R) is Copyright (C) 1999-2011 The OpenNMS Group, Inc.
*
* OpenNMS(R) is a registered trademark of The OpenNMS Group, Inc.
*
* OpenNMS(R) is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published
* by the Free Software Foundation, either version 3 of the License,
* or (at your option) any later version.
*
* OpenNMS(R) is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with OpenNMS(R). If not, see:
* http://www.gnu.org/licenses/
*
* For more information contact:
* OpenNMS(R) Licensing <license@opennms.org>
* http://www.opennms.org/
* http://www.opennms.com/
*******************************************************************************/
package org.opennms.netmgt.model.events;
import java.net.InetAddress;
import java.util.Collection;
import java.util.Date;
import java.util.List;
import org.opennms.core.utils.LogUtils;
import org.opennms.netmgt.EventConstants;
import org.opennms.netmgt.model.OnmsIpInterface;
import org.opennms.netmgt.model.OnmsMonitoredService;
import org.opennms.netmgt.model.OnmsNode;
import org.opennms.netmgt.model.OnmsSeverity;
import org.opennms.netmgt.xml.event.AlarmData;
import org.opennms.netmgt.xml.event.Event;
import org.opennms.netmgt.xml.event.Logmsg;
import org.opennms.netmgt.xml.event.Parm;
import org.opennms.netmgt.xml.event.Snmp;
import org.opennms.netmgt.xml.event.Value;
import org.springframework.beans.BeanWrapper;
import org.springframework.beans.BeansException;
import org.springframework.beans.PropertyAccessorFactory;
import org.springframework.util.StringUtils;
/**
* <p>EventBuilder class.</p>
*/
public class EventBuilder {
private Event m_event;
/**
* <p>Constructor for EventBuilder.</p>
*
* @param uei a {@link java.lang.String} object.
* @param source a {@link java.lang.String} object.
*/
public EventBuilder(final String uei, final String source) {
this(uei, source, new Date());
}
/**
* <p>Constructor for EventBuilder.</p>
*
* @param uei a {@link java.lang.String} object.
* @param source a {@link java.lang.String} object.
* @param date a {@link java.util.Date} object.
*/
public EventBuilder(final String uei, final String source, final Date date) {
m_event = new Event();
setUei(uei);
setTime(date);
setCreationTime(date);
setSource(source);
}
/**
* <p>Constructor for EventBuilder.</p>
*
* @param event a {@link org.opennms.netmgt.xml.event.Event} object.
*/
public EventBuilder(final Event event) {
this(event, new Date());
}
/**
* <p>Constructor for EventBuilder.</p>
*
* @param event a {@link org.opennms.netmgt.xml.event.Event} object.
* @param date a {@link java.util.Date} object.
*/
public EventBuilder(final Event event, final Date date) {
m_event = event;
setTime(date);
setCreationTime(date);
}
/**
* <p>getEvent</p>
*
* @return a {@link org.opennms.netmgt.xml.event.Event} object.
*/
public Event getEvent() {
return m_event;
}
public EventBuilder setUei(final String uei) {
m_event.setUei(uei);
return this;
}
/**
* <p>setTime</p>
*
* @param date a {@link java.util.Date} object.
* @return a {@link org.opennms.netmgt.model.events.EventBuilder} object.
*/
public EventBuilder setTime(final Date date) {
m_event.setTime(EventConstants.formatToString(date));
return this;
}
/**
* <p>setCreationTime</p>
*
* @param date a {@link java.util.Date} object.
* @return a {@link org.opennms.netmgt.model.events.EventBuilder} object.
*/
public EventBuilder setCreationTime(final Date date) {
m_event.setCreationTime(EventConstants.formatToString(date));
return this;
}
/**
* <p>setSource</p>
*
* @param source a {@link java.lang.String} object.
* @return a {@link org.opennms.netmgt.model.events.EventBuilder} object.
*/
public EventBuilder setSource(final String source) {
m_event.setSource(source);
return this;
}
/**
* <p>setSeverity</p>
*
* @param severity a {@link java.lang.String} object.
* @return a {@link org.opennms.netmgt.model.events.EventBuilder} object.
*/
public EventBuilder setSeverity(final String severity) {
m_event.setSeverity(OnmsSeverity.get(severity).getLabel());
return this;
}
/**
* <p>setNodeid</p>
*
* @param nodeid a long.
* @return a {@link org.opennms.netmgt.model.events.EventBuilder} object.
*/
public EventBuilder setNodeid(long nodeid) {
m_event.setNodeid(nodeid);
return this;
}
/**
* <p>setHost</p>
*
* @param hostname a {@link java.lang.String} object.
* @return a {@link org.opennms.netmgt.model.events.EventBuilder} object.
*/
public EventBuilder setHost(final String hostname) {
m_event.setHost(hostname);
return this;
}
/**
* <p>setInterface</p>
*
* @param ipAddress a {@link java.lang.String} object.
* @return a {@link org.opennms.netmgt.model.events.EventBuilder} object.
*/
public EventBuilder setInterface(final InetAddress ipAddress) {
m_event.setInterfaceAddress(ipAddress);
return this;
}
/**
* <p>setInterface</p>
*
* @param ipAddress a {@link java.lang.String} object.
* @return a {@link org.opennms.netmgt.model.events.EventBuilder} object.
*/
public EventBuilder setIfIndex(final int ifIndex) {
m_event.setIfIndex(ifIndex);
return this;
}
/**
* <p>setService</p>
*
* @param serviceName a {@link java.lang.String} object.
* @return a {@link org.opennms.netmgt.model.events.EventBuilder} object.
*/
public EventBuilder setService(final String serviceName) {
m_event.setService(serviceName);
return this;
}
/**
* <p>addParam</p>
*
* @param parmName a {@link java.lang.String} object.
* @param val a {@link java.lang.String} object.
* @return a {@link org.opennms.netmgt.model.events.EventBuilder} object.
*/
public EventBuilder addParam(final String parmName, final String val) {
return addParam(parmName, val, null, null);
}
public EventBuilder addParam(final String parmName, final String val, final String type, final String encoding) {
if (parmName != null) {
Value value = new Value();
value.setContent(val);
if (type != null) {
value.setType(type);
}
if (encoding != null) {
value.setEncoding(encoding);
}
Parm parm = new Parm();
parm.setParmName(parmName);
parm.setValue(value);
addParam(parm);
}
return this;
}
public EventBuilder addParam(final Parm parm) {
m_event.addParm(parm);
return this;
}
/**
* <p>addParam</p>
*
* @param parmName a {@link java.lang.String} object.
* @param val a {@link java.lang.String} object.
* @return a {@link org.opennms.netmgt.model.events.EventBuilder} object.
*/
public EventBuilder addParam(final String parmName, final boolean val) {
if (parmName != null) {
final Value value = new Value();
value.setContent(val ? "true" : "false");
final Parm parm = new Parm();
parm.setParmName(parmName);
parm.setValue(value);
this.addParam(parm);
}
return this;
}
/**
* <p>setParam</p>
*
* @param parmName a {@link java.lang.String} object.
* @param val a {@link java.lang.String} object.
* @return a {@link org.opennms.netmgt.model.events.EventBuilder} object.
*/
public EventBuilder setParam(final String parmName, final String val) {
if (m_event.getParmCollection().size() < 1) {
return addParam(parmName, val);
}
for(final Parm parm : m_event.getParmCollection()) {
if (parm.getParmName().equals(val)) {
final Value value = new Value();
value.setContent(val);
parm.setValue(value);
return this;
}
}
return addParam(parmName, val);
}
/**
* <p>addParam</p>
*
* @param parmName a {@link java.lang.String} object.
* @param val a long.
* @return a {@link org.opennms.netmgt.model.events.EventBuilder} object.
*/
public EventBuilder addParam(final String parmName, final double val) {
return addParam(parmName, Double.toString(val));
}
/**
* <p>addParam</p>
*
* @param parmName a {@link java.lang.String} object.
* @param val a long.
* @return a {@link org.opennms.netmgt.model.events.EventBuilder} object.
*/
public EventBuilder addParam(final String parmName, final long val) {
return addParam(parmName, Long.toString(val));
}
/**
* <p>addParam</p>
*
* @param parmName a {@link java.lang.String} object.
* @param val a int.
* @return a {@link org.opennms.netmgt.model.events.EventBuilder} object.
*/
public EventBuilder addParam(final String parmName, final int val) {
return addParam(parmName, Integer.toString(val));
}
/**
* <p>addParam</p>
*
* @param parmName a {@link java.lang.String} object.
* @param ch a char.
* @return a {@link org.opennms.netmgt.model.events.EventBuilder} object.
*/
public EventBuilder addParam(final String parmName, final char ch) {
return addParam(parmName, Character.toString(ch));
}
/**
* <p>addParam</p>
*
* @param parmName a {@link java.lang.String} object.
* @param vals a {@link java.util.Collection} object.
* @return a {@link org.opennms.netmgt.model.events.EventBuilder} object.
*/
public EventBuilder addParam(final String parmName, final Collection<String> vals) {
final String val = StringUtils.collectionToCommaDelimitedString(vals);
return addParam(parmName, val);
}
/**
* <p>setAlarmData</p>
*
* @param alarmData a {@link org.opennms.netmgt.xml.event.AlarmData} object.
* @return a {@link org.opennms.netmgt.model.events.EventBuilder} object.
*/
public EventBuilder setAlarmData(final AlarmData alarmData) {
if (alarmData != null) {
m_event.setAlarmData(alarmData);
}
return this;
}
/**
* <p>setNode</p>
*
* @param node a {@link org.opennms.netmgt.model.OnmsNode} object.
* @return a {@link org.opennms.netmgt.model.events.EventBuilder} object.
*/
public EventBuilder setNode(final OnmsNode node) {
if (node != null) {
m_event.setNodeid(node.getId().longValue());
}
return this;
}
/**
* <p>setIpInterface</p>
*
* @param iface a {@link org.opennms.netmgt.model.OnmsIpInterface} object.
* @return a {@link org.opennms.netmgt.model.events.EventBuilder} object.
*/
public EventBuilder setIpInterface(final OnmsIpInterface iface) {
if (iface != null) {
if (iface.getNode() != null) {
m_event.setNodeid(iface.getNode().getId().longValue());
}
m_event.setInterfaceAddress(iface.getIpAddress());
}
return this;
}
/**
* <p>setMonitoredService</p>
*
* @param monitoredService a {@link org.opennms.netmgt.model.OnmsMonitoredService} object.
* @return a {@link org.opennms.netmgt.model.events.EventBuilder} object.
*/
public EventBuilder setMonitoredService(final OnmsMonitoredService monitoredService) {
if (monitoredService != null) {
m_event.setNodeid(monitoredService.getNodeId().longValue());
m_event.setInterfaceAddress(monitoredService.getIpAddress());
m_event.setService(monitoredService.getServiceName());
}
return this;
}
/**
* <p>setSnmpVersion</p>
*
* @param version a {@link java.lang.String} object.
* @return a {@link org.opennms.netmgt.model.events.EventBuilder} object.
*/
public EventBuilder setSnmpVersion(final String version) {
ensureSnmp();
m_event.getSnmp().setVersion(version);
return this;
}
private void ensureSnmp() {
if (m_event.getSnmp() == null) {
m_event.setSnmp(new Snmp());
}
}
public EventBuilder setCommunity(final String community) {
ensureSnmp();
m_event.getSnmp().setCommunity(community);
return this;
}
/**
* <p>setEnterpriseId</p>
*
* @param enterprise a {@link java.lang.String} object.
* @return a {@link org.opennms.netmgt.model.events.EventBuilder} object.
*/
public EventBuilder setEnterpriseId(final String enterprise) {
ensureSnmp();
m_event.getSnmp().setId(enterprise);
return this;
}
/**
* <p>setGeneric</p>
*
* @param generic a int.
* @return a {@link org.opennms.netmgt.model.events.EventBuilder} object.
*/
public EventBuilder setGeneric(final int generic) {
ensureSnmp();
m_event.getSnmp().setGeneric(generic);
return this;
}
/**
* <p>setSpecific</p>
*
* @param specific a int.
* @return a {@link org.opennms.netmgt.model.events.EventBuilder} object.
*/
public EventBuilder setSpecific(final int specific) {
ensureSnmp();
m_event.getSnmp().setSpecific(specific);
return this;
}
/**
* <p>setSnmpHost</p>
*
* @param snmpHost a {@link java.lang.String} object.
* @return a {@link org.opennms.netmgt.model.events.EventBuilder} object.
*/
public EventBuilder setSnmpHost(final String snmpHost) {
m_event.setSnmphost(snmpHost);
return this;
}
public EventBuilder setSnmpTimeStamp(final long timeStamp) {
ensureSnmp();
m_event.getSnmp().setTimeStamp(timeStamp);
return this;
}
/**
* <p>setField</p>
*
* @param name a {@link java.lang.String} object.
* @param val a {@link java.lang.String} object.
*/
public void setField(final String name, final String val) {
if (name.equals("eventparms")) {
String[] parts = val.split(";");
for (String part : parts) {
String[] pair = part.split("=");
addParam(pair[0], pair[1].replaceFirst("[(]\\w+,\\w+[)]", ""));
}
} else {
final BeanWrapper w = PropertyAccessorFactory.forBeanPropertyAccess(m_event);
try {
w.setPropertyValue(name, val);
} catch (final BeansException e) {
LogUtils.warnf(this, e, "Could not set field on event: %s", name);
}
}
}
private void ensureLogmsg() {
if (m_event.getLogmsg() == null) {
m_event.setLogmsg(new Logmsg());
}
}
/**
* <p>setLogDest</p>
*
* @param dest a {@link java.lang.String} object.
* @return a {@link org.opennms.netmgt.model.events.EventBuilder} object.
*/
public EventBuilder setLogDest(final String dest) {
ensureLogmsg();
m_event.getLogmsg().setDest(dest);
return this;
}
/**
* <p>setLogMessage</p>
*
* @param content a {@link java.lang.String} object.
* @return a {@link org.opennms.netmgt.model.events.EventBuilder} object.
*/
public EventBuilder setLogMessage(final String content) {
ensureLogmsg();
m_event.getLogmsg().setContent(content);
return this;
}
/**
* <p>setDescription</p>
*
* @param descr a {@link java.lang.String} object.
* @return a {@link org.opennms.netmgt.model.events.EventBuilder} object.
*/
public EventBuilder setDescription(final String descr) {
m_event.setDescr(descr);
return this;
}
/**
* <p>setParms</p>
*
* @param parms a list of parameters.
* @return the event builder
*/
public EventBuilder setParms(final List<Parm> parms) {
m_event.setParmCollection(parms);
return this;
}
public EventBuilder setUuid(final String uuid) {
m_event.setUuid(uuid);
return this;
}
public EventBuilder setDistPoller(final String distPoller) {
m_event.setDistPoller(distPoller);
return this;
}
public EventBuilder setMasterStation(final String masterStation) {
m_event.setMasterStation(masterStation);
return this;
}
}