package org.opennms.netmgt.ncs.persistence;
import java.util.LinkedHashSet;
import java.util.Set;
import org.opennms.netmgt.EventConstants;
import org.opennms.netmgt.model.events.EventBuilder;
import org.opennms.netmgt.model.events.EventProxy;
import org.opennms.netmgt.model.events.EventProxyException;
import org.opennms.netmgt.xml.event.Event;
public final class ComponentEventQueue {
private final Set<ComponentIdentifier> m_added = new LinkedHashSet<ComponentIdentifier>();
private final Set<ComponentIdentifier> m_deleted = new LinkedHashSet<ComponentIdentifier>();
private final Set<ComponentIdentifier> m_updated = new LinkedHashSet<ComponentIdentifier>();
public void componentAdded(final ComponentIdentifier identifier) {
m_added.add(identifier);
m_deleted.remove(identifier);
m_updated.remove(identifier);
}
public void componentDeleted(final ComponentIdentifier identifier) {
m_added.remove(identifier);
m_deleted.add(identifier);
m_updated.remove(identifier);
}
public void componentUpdated(final ComponentIdentifier identifier) {
m_added.remove(identifier);
m_deleted.remove(identifier);
m_updated.add(identifier);
}
public void sendAll(final EventProxy eventProxy) throws EventProxyException {
for (final ComponentIdentifier id : m_deleted) {
final String uei = EventConstants.COMPONENT_DELETED_UEI;
eventProxy.send(getEvent(uei, id));
}
for (final ComponentIdentifier id : m_added) {
final String uei = EventConstants.COMPONENT_ADDED_UEI;
eventProxy.send(getEvent(uei, id));
}
for (final ComponentIdentifier id : m_updated) {
final String uei = EventConstants.COMPONENT_UPDATED_UEI;
eventProxy.send(getEvent(uei, id));
}
}
private Event getEvent(final String uei, final ComponentIdentifier id) {
final EventBuilder builder = new EventBuilder(uei, "NCSComponentService");
builder.addParam("componentId", id.getId());
builder.addParam("componentType", id.getType());
builder.addParam("componentName", id.getName());
builder.addParam("componentForeignSource", id.getForeignSource());
builder.addParam("componentForeignId", id.getForeignId());
builder.addParam("dependencyRequirements", id.getDependencyRequirements().toString());
final Event event = builder.getEvent();
return event;
}
}