Skip to main content
summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
Diffstat (limited to 'bundles/org.eclipse.equinox.wireadmin/src/org/eclipse/equinox/internal/wireadmin/EventDispatcher.java')
-rw-r--r--bundles/org.eclipse.equinox.wireadmin/src/org/eclipse/equinox/internal/wireadmin/EventDispatcher.java260
1 files changed, 0 insertions, 260 deletions
diff --git a/bundles/org.eclipse.equinox.wireadmin/src/org/eclipse/equinox/internal/wireadmin/EventDispatcher.java b/bundles/org.eclipse.equinox.wireadmin/src/org/eclipse/equinox/internal/wireadmin/EventDispatcher.java
deleted file mode 100644
index 027325f4a..000000000
--- a/bundles/org.eclipse.equinox.wireadmin/src/org/eclipse/equinox/internal/wireadmin/EventDispatcher.java
+++ /dev/null
@@ -1,260 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 1997-2007 by ProSyst Software GmbH
- * http://www.prosyst.com
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
- *
- * Contributors:
- * ProSyst Software GmbH - initial API and implementation
- *******************************************************************************/
-package org.eclipse.equinox.internal.wireadmin;
-
-import java.util.*;
-import org.osgi.framework.*;
-import org.osgi.service.wireadmin.*;
-
-/**
- * This class is responsible for dispatching notifications to WireAdminListeners
- * and Consumers and Producers.
- *
- * @author Stoyan Boshev
- * @author Pavlin Dobrev
- *
- * @version 1.0
- */
-public class EventDispatcher implements Runnable {
-
- private BundleContext bc;
-
- private WireAdminImpl wa;
-
- private Hashtable refToList;
-
- private Vector events;
-
- private Object synch = new Object();
- private Object listenersLock = new Object();
-
- private boolean running = true;
-
- private Thread dispatcher;
-
- public EventDispatcher(BundleContext bc, WireAdminImpl wa) {
- this.bc = bc;
- this.wa = wa;
- this.refToList = new Hashtable(5);
- this.events = new Vector(5, 5);
-
- ServiceReference[] sRefs = null;
-
- try {
- sRefs = bc.getServiceReferences(WireAdminListener.class.getName(), null);
- } catch (InvalidSyntaxException ise) {
- /* filter is null */
- }
-
- if (sRefs != null) {
- WireAdminListener listener;
-
- for (int i = 0; i < sRefs.length; i++) {
- listener = (WireAdminListener) bc.getService(sRefs[i]);
-
- if (listener != null) {
- refToList.put(sRefs[i], listener);
- }
- }
- }
- dispatcher = new Thread(this, "[WireAdmin] - Event Dispatcher");
- dispatcher.start();
- }
-
- void addEvent(WireAdminEvent evt) {
- if (dispatcher == null) {
- // synchronous
- notifyListeners(new EventData(evt, refToList));
- } else {
- // synchronized (listenersLock) { //because it does not change the
- // Hashtable;
- events.addElement(new EventData(evt, refToList));
- // }
- synchronized (synch) {
- synch.notify();
- }
- }
- }
-
- void addNotificationEvent(NotificationEvent ne) {
- if (dispatcher == null) {
- // synchronous
- notifyConsumerProducer(ne);
- } else {
- events.addElement(ne);
- synchronized (synch) {
- synch.notify();
- }
- }
- }
-
- private String printWires(Wire[] wires) {
- if (wires != null) {
- StringBuffer buff = new StringBuffer(100);
- buff.append("\n");
- for (int i = 0; i < wires.length; i++) {
- buff.append(wires[i]).append("\n");
- }
- return buff.toString();
- }
- return "null";
- }
-
- private void notifyConsumerProducer(NotificationEvent ne) {
- if (Activator.LOG_DEBUG) {
- Activator.log.debug("Notification event " + ((ne.producer != null) ? "; Producer " + ne.producer : "; Consumer " + ne.consumer) + "; source: " + ne.source + "; wires " + printWires(ne.wires), null);
-
- Activator.log.debug(0, 10001, ((dispatcher != null) ? "asynchronous" : "synchronous"), null, false);
- }
- if (ne.producer != null) {
- try {
- ne.producer.consumersConnected(ne.wires);
- } catch (Throwable t) {
- wa.notifyListeners(ne.source, WireAdminEvent.PRODUCER_EXCEPTION, t);
- }
- } else if (ne.consumer != null) {
- try {
- ne.consumer.producersConnected(ne.wires);
- } catch (Throwable t) {
- wa.notifyListeners(ne.source, WireAdminEvent.CONSUMER_EXCEPTION, t);
- }
- }
- }
-
- private void notifyListeners(EventData event) {
- WireAdminEvent evt = (WireAdminEvent) event.event;
- Hashtable refToList = event.listeners;
- if (Activator.LOG_DEBUG) {
- Activator.log.debug(0, 10002, getEvent(evt.getType()) + evt.getWire(), evt.getThrowable(), false);
- Activator.log.debug(0, 10001, ((dispatcher != null) ? "asynchronous" : "synchronous"), null, false);
- }
-
- for (Enumeration en = refToList.keys(); running && en.hasMoreElements();) {
- ServiceReference current = (ServiceReference) en.nextElement();
- Integer accepts = (Integer) current.getProperty(WireConstants.WIREADMIN_EVENTS);
- if ((accepts != null) && ((accepts.intValue() & evt.getType()) == evt.getType())) {
- try {
- ((WireAdminListener) refToList.get(current)).wireAdminEvent(evt);
- } catch (Throwable t) {
- if (Activator.LOG_DEBUG) {
- Activator.log.debug(0, 10003, ((WireAdminListener) refToList.get(current)).toString(), t, false);
- }
- }
- }
- }
- }
-
- /**
- * @param ref
- */
- public void removeListener(ServiceReference ref) {
- if (refToList.containsKey(ref)) {
- synchronized (listenersLock) {
- refToList = (Hashtable) refToList.clone();
- if (refToList.remove(ref) != null) {
- bc.ungetService(ref);
- }
- }
- }
- }
-
- /**
- * @param ref
- * @param object
- */
- public void addListener(ServiceReference ref, Object object) {
- synchronized (listenersLock) {
- refToList = (Hashtable) refToList.clone();
- refToList.put(ref, object);
- }
- }
-
- public void run() {
- while (running) {
- synchronized (synch) {
- while (running && events.size() == 0) {
- try {
- synch.wait();
- } catch (InterruptedException ie) {
- }
- }
- }
-
- EventData evt = null;
- NotificationEvent ne = null;
- while (running && events.size() > 0) {
- Object event = events.elementAt(0);
- events.removeElementAt(0);
- if (event instanceof EventData) {
- evt = (EventData) event;
- notifyListeners(evt);
- } else {
- ne = (NotificationEvent) event;
- notifyConsumerProducer(ne);
- }
- }
- }
- }
-
- void terminate() {
- running = false;
-
- if (dispatcher != null) {
- synchronized (synch) {
- synch.notify();
- }
- }
-
- synchronized (listenersLock) {
- for (Enumeration en = refToList.keys(); en.hasMoreElements();) {
- bc.ungetService((ServiceReference) en.nextElement());
- }
- refToList.clear();
- refToList = null;
- }
- events.removeAllElements();
- events = null;
- }
-
- private String getEvent(int type) {
- switch (type) {
- case WireAdminEvent.WIRE_CREATED :
- return "WIRE_CREATED";
- case WireAdminEvent.WIRE_CONNECTED :
- return "WIRE_CONNECTED";
- case WireAdminEvent.WIRE_UPDATED :
- return "WIRE_UPDATED";
- case WireAdminEvent.WIRE_TRACE :
- return "WIRE_TRACE";
- case WireAdminEvent.WIRE_DISCONNECTED :
- return "WIRE_DISCONNECTED";
- case WireAdminEvent.WIRE_DELETED :
- return "WIRE_DELETED";
- case WireAdminEvent.PRODUCER_EXCEPTION :
- return "PRODUCER_EXCEPTION";
- case WireAdminEvent.CONSUMER_EXCEPTION :
- return "CONSUMER_EXCEPTION";
- default :
- return null;
- }
- }
-
- class EventData {
- Object event;
- Hashtable listeners;
-
- public EventData(Object event, Hashtable listenersData) {
- this.event = event;
- listeners = listenersData;
- }
- }
-}

Back to the top