in jax-rs.whiteboard/src/main/java/org/apache/aries/jax/rs/whiteboard/internal/Whiteboard.java [463:512]
private OSGi<ApplicationReferenceWithContext> waitForApplicationContext(
OSGi<CachingServiceReference<Application>> application,
Consumer<CachingServiceReference<Application>> onWaitingForContext,
Consumer<CachingServiceReference<Application>> onResolvedContext) {
return application.flatMap(serviceReference -> {
Object propertyObject = serviceReference.getProperty(
HTTP_WHITEBOARD_CONTEXT_SELECT);
if (propertyObject == null) {
propertyObject = _configurationMap.get(
HTTP_WHITEBOARD_CONTEXT_SELECT);
if (propertyObject == null) {
return just(
new ApplicationReferenceWithContext(
null, serviceReference));
}
}
String contextSelect = propertyObject.toString();
try {
FrameworkUtil.createFilter(contextSelect);
}
catch (InvalidSyntaxException e) {
return effects(
() -> _runtime.addInvalidApplication(serviceReference),
() -> _runtime.removeInvalidApplication(serviceReference)
).then(
nothing()
);
}
return
effects(
() -> onWaitingForContext.accept(serviceReference),
() -> onResolvedContext.accept(serviceReference)
).then(
highest(
serviceReferences(ServletContextHelper.class, contextSelect)
).flatMap(
sr -> just(
new ApplicationReferenceWithContext(sr, serviceReference))
).effects(
__ -> onResolvedContext.accept(serviceReference),
__ -> onWaitingForContext.accept(serviceReference)
));
});
}