in discovery/mdns/src/main/java/org/apache/aries/rsa/discovery/mdns/PublishingEndpointListener.java [96:131]
private void endpointUpdate(Long bundleId, EndpointDescription ed, int type) {
String edFwUuid = ed.getFrameworkUUID();
if(edFwUuid == null || !edFwUuid.equals(uuid)) {
LOG.warn("This listener has been called with an endpoint {} for a remote framework {}", ed.getId(), edFwUuid);
return;
}
String id = ed.getId();
switch(type) {
case EndpointEvent.ADDED:
case EndpointEvent.MODIFIED:
localEndpoints.compute(id, (k,v) -> {
return v == null ? new SponsoredEndpoint(ed, singleton(bundleId)) :
new SponsoredEndpoint(ed, concat(v.sponsors.stream(), Stream.of(bundleId)).collect(toSet()));
});
String data = toEndpointData(ed);
listeners.forEach(s -> s.update(data));
break;
case EndpointEvent.MODIFIED_ENDMATCH:
case EndpointEvent.REMOVED:
boolean act = localEndpoints.compute(id, (k,v) -> {
if(v == null) {
return null;
} else {
Set<Long> updated = v.sponsors.stream().filter(l -> !bundleId.equals(l)).collect(toSet());
return updated.isEmpty() ? null : new SponsoredEndpoint(v.ed, updated);
}
}) == null;
if(act) {
listeners.forEach(s -> s.revoke(id));
}
break;
default:
LOG.error("Unknown event type {} for endpoint {}", type, ed);
}
}