@Override protected void addProducerMember(Entity producer) { addProducerHardcoded(producer); }
public <T> Map<Entity,T> getValues(Sensor<T> sensor) { Map<Entity, T> valuesCopy = copyValues(sensor); return coerceValues(valuesCopy, sensor.getType()); }
@Override protected <T> void doReconfigureConfig(ConfigKey<T> key, T val) { if (RECONFIGURABLE_KEYS.contains(key)) { return; } else { super.doReconfigureConfig(key, val); } }
@Override protected void addProducerHardcoded(Entity producer) { for (Sensor<?> sourceSensor: getSourceSensors()) { subscriptions().subscribe(producer, sourceSensor, this); } onProducerAdded(producer); }
@Override protected void onProducerRemoved(Entity producer) { synchronized (values) { for (Sensor<?> sensor: getSourceSensors()) { Map<Entity,Object> vs = values.get(sensor.getName()); if (vs!=null) vs.remove(producer); } } onUpdated(); }
@Override protected void setEntityBeforeSubscribingProducerChildrenEvents() { BrooklynLogging.log(LOG, BrooklynLogging.levelDebugOrTraceIfReadOnly(producer), "{} subscribing to children of {}", this, producer); for (Sensor<?> sourceSensor: getSourceSensors()) { subscriptions().subscribeToChildren(producer, sourceSensor, this); } }
@Override protected void onChanged() { super.onChanged(); onUpdated(); }
@Override protected void setEntityLoadingConfig() { super.setEntityLoadingConfig(); Preconditions.checkNotNull(getSourceSensors(), "sourceSensors must be set"); }
@Override protected void addProducerChild(Entity producer) { // no `subscribe` call needed here, due to previous subscribeToChildren call onProducerAdded(producer); }
@Override public AsyncApplicationImpl getEntity() { return (AsyncApplicationImpl) super.getEntity(); }
protected String getKeyForMapSensor() { return Preconditions.checkNotNull(super.getUniqueTag()); }
@Override public void onEvent(SensorEvent<Object> event) { Entity e = event.getSource(); if (entityFilter.apply(e)) { synchronized (values) { Map<Entity,Object> vs = values.get(event.getSensor().getName()); if (vs==null) { LOG.debug(this+" received event when no entry for sensor ("+event+"); likely just added or removed, and will initialize subsequently if needed"); } else { vs.put(e, event.getValue()); } } onUpdated(); } }
@Override protected void onChanged() { super.onChanged(); if (entity != null && isRunning()) onUpdated(); }
@Override protected void onProducerAdded(Entity producer) { BrooklynLogging.log(LOG, BrooklynLogging.levelDebugOrTraceIfReadOnly(producer), "{} listening to {}", this, producer); synchronized (values) { for (Sensor<?> sensor: getSourceSensors()) { Map<Entity,Object> vs = values.get(sensor.getName()); if (vs==null) { vs = new LinkedHashMap<Entity,Object>(); values.put(sensor.getName(), vs); } Object vo = vs.get(producer); if (vo==null) { Object initialVal; if (sensor instanceof AttributeSensor) { initialVal = producer.getAttribute((AttributeSensor<?>)sensor); } else { initialVal = null; } vs.put(producer, initialVal != null ? initialVal : defaultMemberValue); // NB: see notes on possible race, in Aggregator#onProducerAdded } } } }
@Override protected <T> void doReconfigureConfig(ConfigKey<T> key, T val) { if (RECONFIGURABLE_KEYS.contains(key)) { return; } else { super.doReconfigureConfig(key, val); } }