/** * Called whenever the values for the set of producers changes (e.g. on an event, or on a member added/removed). */ protected void onUpdated() { try { emit(targetSensor, compute()); } catch (Throwable t) { LOG.warn("Error calculating and setting aggregate for enricher "+this, t); throw Exceptions.propagate(t); } }
@SuppressWarnings({ "unchecked" }) protected void setEntityLoadingConfig() { this.producer = getConfig(PRODUCER); this.fromHardcodedProducers= getConfig(FROM_HARDCODED_PRODUCERS); this.defaultMemberValue = (T) getConfig(DEFAULT_MEMBER_VALUE); this.fromMembers = Maybe.fromNullable(getConfig(FROM_MEMBERS)).or(fromMembers); this.fromChildren = Maybe.fromNullable(getConfig(FROM_CHILDREN)).or(fromChildren); this.entityFilter = (Predicate<? super Entity>) (getConfig(ENTITY_FILTER) == null ? Predicates.alwaysTrue() : getConfig(ENTITY_FILTER)); this.valueFilter = (Predicate<? super T>) (getConfig(VALUE_FILTER) == null ? getDefaultValueFilter() : getConfig(VALUE_FILTER)); setEntityLoadingTargetConfig(); }
@SuppressWarnings({ "unchecked" }) protected void setEntityLoadingTargetConfig() { this.targetSensor = (Sensor<U>) getRequiredConfig(TARGET_SENSOR); }
@Override public void setEntity(EntityLocal entity) { super.setEntity(entity); setEntityLoadingConfig(); for (Entity producer : Iterables.filter(fromHardcodedProducers, entityFilter)) { producers.add(producer); addProducerHardcoded(producer); if (isAggregatingMembers()) { producers.add(0, "members"); setEntityBeforeSubscribingProducerMemberEvents(entity); setEntitySubscribeProducerMemberEvents(); setEntityAfterSubscribingProducerMemberEvents(); if (isAggregatingChildren()) { producers.add(0, "children"); setEntityBeforeSubscribingProducerChildrenEvents(); setEntitySubscribingProducerChildrenEvents(); setEntityAfterSubscribingProducerChildrenEvents(); highlightTriggers(getSourceSensors(), producers); onUpdated();
@Override public void onEvent(SensorEvent<Entity> event) { if (entityFilter.apply(event.getValue())) { addProducerMember(event.getValue()); onUpdated(); } } });
@Override public void onEvent(SensorEvent<Entity> event) { if (entityFilter.apply(event.getValue())) { addProducerChild(event.getValue()); onUpdated(); } } });
protected void setEntityBeforeSubscribingProducerMemberEvents(EntityLocal entity) { checkState(producer instanceof Group, "Producer must be a group when fromMembers true: producer=%s; entity=%s; " + "hardcodedProducers=%s", getConfig(PRODUCER), entity, fromHardcodedProducers); }
protected void setEntityAfterSubscribingProducerMemberEvents() { if (producer instanceof Group) { for (Entity member : Iterables.filter(((Group)producer).getMembers(), entityFilter)) { addProducerMember(member); } } }
protected void setEntityAfterSubscribingProducerChildrenEvents() { for (Entity child : Iterables.filter(producer.getChildren(), entityFilter)) { addProducerChild(child); } }
protected Predicate<?> getDefaultValueFilter() { if (getConfig(EXCLUDE_BLANK)) return StringPredicates.isNonBlank(); else return Predicates.alwaysTrue(); }