/* * Copyright (C) 2006-2016 DLR, Germany * * All rights reserved * * http://www.rcenvironment.de/ */ package de.rcenvironment.core.communication.nodeproperties.spi; import java.util.Collection; import java.util.Map; import de.rcenvironment.core.communication.common.InstanceNodeSessionId; import de.rcenvironment.core.communication.nodeproperties.NodeProperty; /** * A listener for changes to the known set of distributed node properties. * * @author Robert Mischke */ public interface NodePropertiesChangeListener { /** * Reports that there has been a change to connected/reachable set of {@link NodeProperty}s. This also includes changes where no * properties were changed, but nodes became reachable or unreachable ("connected"/"disconnected") by network topology changes. * * Note that for performance reasons, the complete set of known node properties is not sent along with every change event. The rationale * is that most listeners will only track a very specific set of properties anyway, so the complete set is rarely needed, and if it is * needed, it is trivial to reconstruct. * * @param addedProperties all new {@link NodeProperty}s, either because they were newly added/published by a node, or because the node * declaring them became reachable * @param updatedProperties all new {@link NodeProperty}s that already existed, but had their value changed to a non-null value; * {@link NodeProperty}s that have changed their value to "null" are treated as "removed" (see next parameter) * @param removedProperties all removed {@link NodeProperty}s, either because they were removed/unpublished by their node (by updating * them with a "null" value), or because the node declaring them became unreachable */ void onReachableNodePropertiesChanged(Collection<? extends NodeProperty> addedProperties, Collection<? extends NodeProperty> updatedProperties, Collection<? extends NodeProperty> removedProperties); /** * Convenience callback for listeners that need to keep track of all reachable nodes' full properties. Each update sends one or more new * property maps; each map itself is immutable, so it is safe to store it in listeners without cloning. When a node becomes unreachable, * its map may either be replaced by an empty map, or null. (TODO specify if needed) * * @param updatedPropertyMaps the map of property maps that have changed */ void onNodePropertyMapsOfNodesChanged(Map<InstanceNodeSessionId, Map<String, String>> updatedPropertyMaps); /** * Reports that one or more nodes that previously declared {@link NodeProperty}s have become unreachable/disconnected. * * @param disconnectedProperties the last known {@link NodeProperty}s of the now-disconnected node(s) */ // TODO reactivate once there is a use case // void onNodePropertiesDisconnected(Collection<? extends NodeProperty> disconnectedProperties); /** * Reports that a one or more nodes that previously declared {@link NodeProperty}s and had become unreachable/disconnected are now * available again. * * Note that there is no guarantee that these properties are still up-to-date; listen for * {@link #onNodePropertiesAddedOrModified(Collection)} callbacks to detect related changes. * * @param reconnectedProperties the last known {@link NodeProperty}s of the reconnected node(s) */ // TODO reactivate once there is a use case // void onNodePropertiesReconnected(Collection<? extends NodeProperty> reconnectedProperties); }