package org.camunda.bpm.extension.osgi.eventing.impl;
import java.io.Serializable;
import java.util.Dictionary;
import java.util.Hashtable;
import org.camunda.bpm.engine.delegate.DelegateExecution;
import org.camunda.bpm.engine.delegate.DelegateTask;
import org.camunda.bpm.engine.delegate.ExecutionListener;
import org.camunda.bpm.engine.delegate.TaskListener;
import org.camunda.bpm.extension.osgi.eventing.api.Topics;
import org.osgi.service.event.Event;
import org.osgi.service.event.EventAdmin;
/**
* @author Ronny Bräunlich
*/
public class OSGiEventDistributor implements TaskListener, ExecutionListener, Serializable {
private static final long serialVersionUID = -3778622638807349820L;
private EventAdmin eventAdmin;
public OSGiEventDistributor(EventAdmin eventAdmin) {
this.eventAdmin = eventAdmin;
}
@Override
public void notify(DelegateExecution execution){
Event event = createEvent(execution);
eventAdmin.postEvent(event);
}
@Override
public void notify(DelegateTask delegateTask) {
Event event = createEvent(delegateTask);
eventAdmin.postEvent(event);
}
private Event createEvent(DelegateTask delegateTask) {
Dictionary<String, String> properties = new Hashtable<String, String>();
BusinessProcessEventPropertiesFiller.fillDictionary(properties, delegateTask);
return new Event(Topics.TASK_EVENT_TOPIC, properties);
}
private Event createEvent(DelegateExecution execution) {
Dictionary<String, String> properties = new Hashtable<String, String>();
BusinessProcessEventPropertiesFiller.fillDictionary(properties, execution);
return new Event(Topics.EXECUTION_EVENT_TOPIC, properties);
}
}