void filterServiceEventReceivers( final ServiceEvent evt, final Collection /*<ServiceListenerEntry>*/ receivers) { ArrayList srl = fwCtx.services.get(EventHook.class.getName()); if (srl != null) { HashSet ctxs = new HashSet(); for (Iterator ir = receivers.iterator(); ir.hasNext(); ) { ctxs.add(((ServiceListenerEntry) ir.next()).getBundleContext()); } int start_size = ctxs.size(); RemoveOnlyCollection filtered = new RemoveOnlyCollection(ctxs); for (Iterator i = srl.iterator(); i.hasNext(); ) { ServiceReferenceImpl sr = ((ServiceRegistrationImpl) i.next()).reference; EventHook eh = (EventHook) sr.getService(fwCtx.systemBundle); if (eh != null) { try { eh.event(evt, filtered); } catch (Exception e) { fwCtx.debug.printStackTrace( "Failed to call event hook #" + sr.getProperty(Constants.SERVICE_ID), e); } } } // NYI, refactor this for speed!? if (start_size != ctxs.size()) { for (Iterator ir = receivers.iterator(); ir.hasNext(); ) { if (!ctxs.contains(((ServiceListenerEntry) ir.next()).getBundleContext())) { ir.remove(); } } } } }
void filterServiceReferences( BundleContextImpl bc, String service, String filter, boolean allServices, Collection /*<ServiceReference>*/ refs) { ArrayList srl = fwCtx.services.get(FindHook.class.getName()); if (srl != null) { RemoveOnlyCollection filtered = new RemoveOnlyCollection(refs); for (Iterator i = srl.iterator(); i.hasNext(); ) { ServiceReferenceImpl sr = ((ServiceRegistrationImpl) i.next()).reference; FindHook fh = (FindHook) sr.getService(fwCtx.systemBundle); if (fh != null) { try { fh.find(bc, service, filter, allServices, filtered); } catch (Exception e) { fwCtx.listeners.frameworkError( bc, new BundleException( "Failed to call find hook #" + sr.getProperty(Constants.SERVICE_ID), e)); } } } } }
public long[] getBundleEvents() { synchronized (bundleEvents) { long[] r = new long[bundleEvents.size() * 2]; int i = 0; for (Iterator it = bundleEvents.iterator(); it.hasNext(); ) { BundleEvent ev = (BundleEvent) it.next(); r[i * 2] = ev.getBundle().getBundleId(); r[i * 2 + 1] = ev.getType(); i++; } bundleEvents.clear(); return r; } }
public long[] getServiceEvents() { synchronized (serviceEvents) { long[] r = new long[serviceEvents.size() * 2]; int i = 0; for (Iterator it = serviceEvents.iterator(); it.hasNext(); ) { ServiceEvent ev = (ServiceEvent) it.next(); r[i * 2] = ((Long) ev.getServiceReference().getProperty(Constants.SERVICE_ID)).longValue(); r[i * 2 + 1] = ev.getType(); i++; } serviceEvents.clear(); return r; } }
public long[] getFrameworkEvents() { synchronized (frameworkEvents) { try { long[] r = new long[frameworkEvents.size() * 2]; if (bDebug) { System.out.println("server: getFrameworkEvents size=" + r.length / 2); } int i = 0; for (Iterator it = frameworkEvents.iterator(); it.hasNext(); ) { FrameworkEvent ev = (FrameworkEvent) it.next(); Bundle b = ev.getBundle(); long bid = -1; if (b == null) { if (bDebug) { System.out.println("fw event: " + ev + " - no bundle"); } } else { bid = b.getBundleId(); } r[i * 2] = bid; r[i * 2 + 1] = ev.getType(); i++; } frameworkEvents.clear(); if (bDebug) { System.out.println("server: getFrameworkEvents -> " + r); } return r; } catch (Exception e) { if (bDebug) { e.printStackTrace(); } } } return null; }