/*
* Copyright (C) 2006-2016 DLR, Germany
*
* All rights reserved
*
* http://www.rcenvironment.de/
*/
package de.rcenvironment.core.communication.nodeproperties;
import java.util.Collection;
import java.util.Map;
import de.rcenvironment.core.communication.common.InstanceNodeSessionId;
import de.rcenvironment.core.communication.messaging.NetworkRequestHandlerMap;
import de.rcenvironment.core.communication.nodeproperties.spi.RawNodePropertiesChangeListener;
/**
* A service for managing distributed node properties. Each node holds a key-value map that can be filled by other local services. This data
* is then synchronized to all reachable nodes, where other services can access it.
*
* @author Robert Mischke
*/
public interface NodePropertiesService {
/**
* Adds or updates a single local key-value property. Calling this method may trigger distribution of this datum to remote nodes; when
* adding more than one entries, using {@link #addOrUpdateLocalNodeProperties(Map)} is more efficient.
*
* @param key the key
* @param value the value
*/
void addOrUpdateLocalNodeProperty(String key, String value);
/**
* Adds and/or updates a set of local key-value properties. Calling this method may trigger distribution of these entries to remote
* nodes.
*
* @param data the map of entries to add and/or update
*/
void addOrUpdateLocalNodeProperties(Map<String, String> data);
/**
* Returns the full property map for a single node. Modifications to the map do not cause any side effects.
*
* @param nodeId the id of the target node
* @return the property map
*/
Map<String, String> getNodeProperties(InstanceNodeSessionId nodeId);
/**
* Returns the full property map for all node that occurred in property updates.
*
* @return the map of property maps as returned by {@link #getNodeProperties(InstanceNodeSessionId)}
*/
Map<InstanceNodeSessionId, Map<String, String>> getAllNodeProperties();
/**
* Returns the full property map for the given set of nodes.
*
* @param nodeIds the ids of the relevant nodes
* @return the map of property maps as returned by {@link #getNodeProperties(InstanceNodeSessionId)}
*/
Map<InstanceNodeSessionId, Map<String, String>> getAllNodeProperties(Collection<InstanceNodeSessionId> nodeIds);
/**
* Adds a listener for local or remote node property changes.
*
* @param listener the new listener
*/
// TODO add filtering options if necessary
void addRawNodePropertiesChangeListener(RawNodePropertiesChangeListener listener);
/**
* Removes a listener for local or remote node property changes.
*
* @param listener the listener to remove
*/
void removeRawNodePropertiesChangeListener(RawNodePropertiesChangeListener listener);
/**
* @return the {@link NetworkRequestHandler}s this service needs to register
*/
NetworkRequestHandlerMap getNetworkRequestHandlers();
}