private void endpointUpdate()

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);
        }
    }