Github user ahgittin commented on a diff in the pull request: https://github.com/apache/brooklyn-server/pull/818#discussion_r138815798 --- Diff: core/src/main/java/org/apache/brooklyn/core/objs/AbstractEntityAdjunct.java --- @@ -568,6 +570,98 @@ public void setUniqueTag(String uniqueTag) { return highlightsToReturn; } + /** Records a named highlight against this object, for persistence and API access. + * See common highlights including {@link #HIGHLIGHT_NAME_LAST_ACTION} and + * {@link #HIGHLIGHT_NAME_LAST_CONFIRMATION}. + * Also see convenience methods eg {@link #highlightOngoing(String, String)} and {@link #highlight(String, String, Task)} + * and {@link HighlightTuple}. + */ + protected void setHighlight(String name, HighlightTuple tuple) { + highlights.put(name, tuple); + } + + /** As {@link #setHighlight(String, HighlightTuple)}, convenience for recording an item which is intended to be ongoing. */ + protected void highlightOngoing(String name, String description) { + highlights.put(name, new HighlightTuple(description, 0, null)); + } + /** As {@link #setHighlight(String, HighlightTuple)}, convenience for recording an item with the current time. */ + protected void highlightNow(String name, String description) { + highlights.put(name, new HighlightTuple(description, System.currentTimeMillis(), null)); + } + /** As {@link #setHighlight(String, HighlightTuple)}, convenience for recording an item with the current time and given task. */ + protected void highlight(String name, String description, @Nullable Task<?> t) { + highlights.put(name, new HighlightTuple(description, System.currentTimeMillis(), t!=null ? t.getId() : null)); + } + + /** As {@link #setHighlight(String, HighlightTuple)} for {@link #HIGHLIGHT_NAME_TRIGGERS} (as ongoing). */ + protected void highlightTriggers(String description) { + highlightOngoing(HIGHLIGHT_NAME_TRIGGERS, description); + } + protected <T> void highlightTriggers(Sensor<?> s, Object source) { + highlightTriggers(Collections.singleton(s), Collections.singleton(source)); + } + protected <T> void highlightTriggers(Iterable<? extends Sensor<? extends T>> s, Object source) { + highlightTriggers(s, (Iterable<?>) (source instanceof Iterable ? (Iterable<?>)source : Collections.singleton(source))); + } + protected <U> void highlightTriggers(Sensor<?> s, Iterable<U> sources) { + highlightTriggers(Collections.singleton(s), sources); + } + protected <T,U> void highlightTriggers(Iterable<? extends Sensor<? extends T>> sensors, Iterable<U> sources) { + StringBuilder msg = new StringBuilder("Listening for "); + boolean firstWord = true; + if (sensors!=null) for (Object s: sensors) { --- End diff -- clearly bad style, no argument! i added the guard when debugging, forgot to format it nicely...
---