private void invokeCallbacks(Component component, Object callbackInstance, String callback, String defaultCallback) { boolean logIfNotFound = (callback != null); callback = callback != null ? callback : defaultCallback; ComponentContext ctx = (ComponentContext) component; Object[] instances = callbackInstance != null ? new Object[] { callbackInstance } : ctx.getInstances(); ctx.invokeCallbackMethod(instances, callback, new Class[][] {{ Component.class }, {}}, new Object[][] {{ component }, {}}, logIfNotFound); }
public void invoke(String method, Event e, Object[] instances) { // specific for this type of dependency m_component.invokeCallbackMethod(instances, method, new Class[][] { {} }, new Object[][] { {} }); }
/** * Injects the completed future result in a method by reflection. * We try to find a method which has in its signature a parameter that is compatible with the future result * (including any interfaces the result may implements). * * @param result the result of the completable future. */ private void injectByReflection(Object result) { List<Class<?>> types = new ArrayList<>(); Class<?> currentClazz = result.getClass(); while (currentClazz != null && currentClazz != Object.class) { types.add(currentClazz); Stream.of(currentClazz.getInterfaces()).forEach(types::add); currentClazz = currentClazz.getSuperclass(); } Class<?>[][] classes = new Class<?>[types.size() + 1][1]; Object[][] results = new Object[types.size() + 1][1]; for (int i = 0; i < types.size(); i ++) { classes[i] = new Class<?>[] { types.get(i) }; results[i] = new Object[] { result }; } classes[types.size()] = new Class<?>[0]; results[types.size()] = new Object[0]; m_component.invokeCallbackMethod(getInstances(), m_add, classes, results); } }
private void invoke(String method, Event e) { BundleEventImpl be = (BundleEventImpl) e; m_component.invokeCallbackMethod(getInstances(), method, new Class[][] {{Bundle.class}, {Object.class}, {Component.class, Bundle.class}, {}}, new Object[][] {{be.getBundle()}, {be.getBundle()}, {m_component, be.getBundle()}, {}}); }
private void invoke(String method, Event e) { ResourceEventImpl re = (ResourceEventImpl) e; URL serviceInstance = re.getResource(); Dictionary<?,?> resourceProperties = re.getProperties(); m_component.invokeCallbackMethod(getInstances(), method, new Class[][] { { Component.class, URL.class, Dictionary.class }, { Component.class, URL.class }, { Component.class }, { URL.class, Dictionary.class }, { URL.class }, { Object.class }, {}}, new Object[][] { { m_component, serviceInstance, resourceProperties }, { m_component, serviceInstance }, { m_component }, { serviceInstance, resourceProperties }, { serviceInstance }, { serviceInstance }, {}} ); }