private void endpointUpdate()

in discovery/mdns/src/main/java/org/apache/aries/rsa/discovery/mdns/PublishingEndpointListener.java [97:132]


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