package pl.net.bluesoft.rnd.pt.ext.bpmnotifications; import java.util.Properties; import java.util.logging.Level; import java.util.logging.Logger; import org.aperteworkflow.ui.view.ViewRegistry; import org.osgi.framework.BundleActivator; import org.osgi.framework.BundleContext; import org.osgi.framework.ServiceReference; import pl.net.bluesoft.rnd.processtool.bpm.BpmEvent; import pl.net.bluesoft.rnd.processtool.bpm.BpmEvent.Type; import pl.net.bluesoft.rnd.processtool.plugins.ProcessToolRegistry; import pl.net.bluesoft.rnd.pt.ext.bpmnotifications.event.MailEvent; import pl.net.bluesoft.rnd.pt.ext.bpmnotifications.event.MailEventListener; import pl.net.bluesoft.rnd.pt.ext.bpmnotifications.portlet.BpmAdminPortletRender; import pl.net.bluesoft.rnd.pt.ext.bpmnotifications.service.BpmNotificationService; import pl.net.bluesoft.util.eventbus.EventListener; /** * @author tlipski@bluesoft.net.pl */ public class Activator implements BundleActivator, EventListener<BpmEvent> { private Logger logger = Logger.getLogger(Activator.class.getName()); private BpmNotificationEngine engine; MailEventListener mailEventListener; private SchedulersActivator schedulerActivator; @Override public void start(BundleContext context) throws Exception { ProcessToolRegistry registry = getRegistry(context); schedulerActivator = new SchedulersActivator(registry); /* Init the bpm notification engine */ engine = new BpmNotificationEngine(registry); registry.registerService(BpmNotificationService.class, engine, new Properties()); registry.getEventBusManager().subscribe(BpmEvent.class, this); mailEventListener = new MailEventListener(engine); registry.getEventBusManager().subscribe(MailEvent.class, mailEventListener); /* Register scheduler for notifications sending */ schedulerActivator.scheduleNotificationsSend(engine); getViewRegistry(registry).registerGenericPortletViewRenderer("admin", BpmAdminPortletRender.INSTANCE); getViewRegistry(registry).registerGenericPortletViewRenderer("user", BpmAdminPortletRender.INSTANCE); } @Override public void stop(BundleContext context) throws Exception { ProcessToolRegistry registry = getRegistry(context); registry.removeRegisteredService(BpmNotificationService.class); registry.getEventBusManager().unsubscribe(BpmEvent.class, this); registry.getEventBusManager().unsubscribe(MailEvent.class, mailEventListener); mailEventListener = null; getViewRegistry(registry).unregisterGenericPortletViewRenderer("admin", BpmAdminPortletRender.INSTANCE); getViewRegistry(registry).unregisterGenericPortletViewRenderer("user", BpmAdminPortletRender.INSTANCE); } private ProcessToolRegistry getRegistry(BundleContext context) { ServiceReference ref = context.getServiceReference(ProcessToolRegistry.class.getName()); return (ProcessToolRegistry) context.getService(ref); } public void onEvent(BpmEvent e) { if(Type.NEW_PROCESS == e.getEventType() || Type.END_PROCESS == e.getEventType()) logger.log(Level.INFO, "Received event " + e.getEventType() + " for process " + e.getProcessInstance().getId()); else if(Type.ASSIGN_TASK == e.getEventType() || Type.SIGNAL_PROCESS == e.getEventType()) logger.log(Level.INFO, "Received event " + e.getEventType() + " for task " + e.getProcessInstance().getExternalKey() + "/" + e.getTask().getTaskName()); if (Type.ASSIGN_TASK == e.getEventType() || Type.NEW_PROCESS == e.getEventType() || Type.SIGNAL_PROCESS == e.getEventType() || Type.END_PROCESS == e.getEventType()) { boolean processStarted = BpmEvent.Type.NEW_PROCESS == e.getEventType(); boolean processEnded = BpmEvent.Type.END_PROCESS == e.getEventType(); boolean enteringStep = Type.ASSIGN_TASK == e.getEventType() || Type.NEW_PROCESS == e.getEventType(); engine.onProcessStateChange(e.getTask(), e.getProcessInstance(), e.getUserData(), processStarted, processEnded, enteringStep); } } private ViewRegistry getViewRegistry(ProcessToolRegistry registry) { return registry.getRegisteredService(ViewRegistry.class); } }