public void activate(boolean active) { m_component.handleEvent(this, active ? EventType.ADDED : EventType.REMOVED, new Event(active)); }
public void injectField(Field f, Object target) { try { f.setAccessible(true); f.set(target, event.getEvent()); } catch (Throwable e) { logger.log(Logger.LOG_ERROR, "Could not set field " + f + " in class " + target.getClass().getName(), e); } }
private void cleanup() { m_dependencyEvents.values().forEach(eventList -> { eventList.forEach(event -> event.close()); eventList.clear(); }); }
@SuppressWarnings({ "rawtypes", "unchecked" }) @Override public void injectMapField(Field f, Object target) { f.setAccessible(true); try { Map<Object, Dictionary<?, ?>> map = (Map) f.get(target); if (add || update) { map.put(event.getEvent(), event.getProperties()); } else { map.remove(event.getEvent()); } } catch (Throwable e) { logger.log(Logger.LOG_ERROR, "Could not set field " + f + " in class " + target.getClass().getName(), e); } } });
/** * Copy all dependency service instances to the given map (key = dependency service, value = dependency service properties. */ @Override public void copyToMap(Map<Object, Dictionary<?, ?>> map) { Set<Event> events = m_component.getDependencyEvents(this); if (events.size() > 0) { for (Event e : events) { map.put(e.getEvent(), e.getProperties()); } } else { Object defaultService = getDefaultService(false); if (defaultService != null) { map.put(defaultService, EMPTY_PROPERTIES); } } }
/** * Get the highest ranked available dependency service, or null. */ @Override public Event getService() { Event event = m_component.getDependencyEvent(this); if (event == null) { Object defaultService = getDefaultService(true); if (defaultService != null) { event = new Event(defaultService); } } return event; }
@SuppressWarnings("unchecked") public void injectIterableField(Field f, Object target) { if (update) { return; } f.setAccessible(true); try { Collection<Object> coll = (Collection<Object>) f.get(target); if (add) { coll.add(event.getEvent()); } else { coll.remove(event.getEvent()); } } catch (Throwable e) { logger.log(Logger.LOG_ERROR, "Could not set field " + f + " in class " + target.getClass().getName(), e); } }
private void handleSwapped(DependencyContext dc, Event oldEvent, Event newEvent) { try { if (! m_isStarted) { return; } Set<Event> dependencyEvents = m_dependencyEvents.get(dc); dependencyEvents.remove(oldEvent); dependencyEvents.add(newEvent); // Depending on the state, we possible have to invoke the callbacks and update the component instance. switch (m_state) { case WAITING_FOR_REQUIRED: // No need to swap, we don't have yet injected anything break; case INSTANTIATED_AND_WAITING_FOR_REQUIRED: // Only swap *non* instance-bound dependencies if (!dc.isInstanceBound()) { invokeSwapCallback(dc, oldEvent, newEvent); } break; case TRACKING_OPTIONAL: invokeSwapCallback(dc, oldEvent, newEvent); break; default: } } finally { oldEvent.close(); } }
/** * Triggers component activation when the future has completed. * @param result * @param error */ private void completed(F result, Throwable error) { if (error != null) { super.getComponentContext().getLogger().log(LogService.LOG_ERROR, "completable future failed", error); } else { // Will trigger component activation (if other dependencies are satisfied), and our invokeCallback method will then be called. m_component.handleEvent(this, EventType.ADDED, new Event(result)); } }
public void injectField(Field f, Object target) { try { f.setAccessible(true); f.set(target, dc.getService().getEvent()); } catch (Throwable e) { logger.log(Logger.LOG_ERROR, "Could not set field " + f + " in class " + target.getClass().getName(), e); } }
/** * Copy all dependency service instances to the given collection. */ @Override public void copyToCollection(Collection<Object> services) { Set<Event> events = m_component.getDependencyEvents(this); if (events.size() > 0) { for (Event e : events) { services.add(e.getEvent()); } } else { Object defaultService = getDefaultService(false); if (defaultService != null) { services.add(defaultService); } } }
@SuppressWarnings("unchecked") @Override public Dictionary<String, Object> getProperties() { Event event = getService(); if (event != null) { Bundle bundle = (Bundle) event.getEvent(); if (m_propagateCallbackInstance != null && m_propagateCallbackMethod != null) { try { CallbackTypeDef callbackInfo = new CallbackTypeDef(Bundle.class, bundle); return (Dictionary<String, Object>) InvocationUtil.invokeCallbackMethod(m_propagateCallbackInstance, m_propagateCallbackMethod, callbackInfo.m_sigs, callbackInfo.m_args); } catch (InvocationTargetException e) { m_component.getLogger().warn("Exception while invoking callback method", e.getCause()); } catch (Throwable e) { m_component.getLogger().warn("Exception while trying to invoke callback method", e); } throw new IllegalStateException("Could not invoke callback"); } else { return ServiceUtil.toR6Dictionary(bundle.getHeaders()); } } else { throw new IllegalStateException("cannot find bundle"); } }