class CompositeDashboardObject implements DashboardObject {

    private ObjectDefinition definition;

    private List<MeasurementProvider> providers = new CopyOnWriteArrayList<>();

    public void addProvider(MeasurementProvider provider) {<FILL_FUNCTION_BODY>}

    @Override
    public ObjectDefinition getDefinition() {
        return definition;
    }

    @Override
    public Flux<Measurement> getMeasurements() {
        return Flux.fromIterable(providers)
            .flatMap(MeasurementProvider::getMeasurements);
    }

    @Override
    public Mono<Measurement> getMeasurement(String id) {
        return Flux.fromIterable(providers)
            .flatMap(provider -> provider.getMeasurement(id))
            .collectList()
            .filter(CollectionUtils::isNotEmpty)
            .map(CompositeMeasurement::new);
    }
}

        if (definition == null) {
            definition = provider.getObjectDefinition();
        }
        providers.add(provider);
    
<no_super_class>