/*
* Copyright (C) 2006-2016 DLR, Germany
*
* All rights reserved
*
* http://www.rcenvironment.de/
*/
package de.rcenvironment.core.communication.common;
import java.util.Collection;
import java.util.Map;
import java.util.Set;
import de.rcenvironment.core.communication.model.NetworkRoutingInformation;
/**
* A model representing a disconnected snapshot of the current network graph. Changes to the actual, live network state will not affect this
* model.
*
* @author Robert Mischke
*/
public interface NetworkGraph {
/**
* @return the id of the local node
*/
InstanceNodeSessionId getLocalNodeId();
/**
* @return the number of nodes/vertices in this graph
*/
int getNodeCount();
/**
* @return all {@link InstanceNodeSessionId}s of the nodes (the vertices) of the network graph
*/
Set<InstanceNodeSessionId> getNodeIds();
/**
* @return the number of links/edges in this graph
*/
int getLinkCount();
/**
* @return all links (the edges) of the network graph, in no particular order
*/
Collection<? extends NetworkGraphLink> getLinks();
/**
* @param sourceNodeId the source node's id
* @param targetNodeId the target node's id
* @return true if there is a direct link from "source" to "target"
*/
boolean containsLinkBetween(InstanceNodeSessionId sourceNodeId, InstanceNodeSessionId targetNodeId);
/**
* Creates a {@link NetworkGraphWithProperties} from this {@link NetworkGraph} by providing the node properties to attach.
*
* TODO add (im)mutability information
*
* @param nodeProperties the node properies to attach
* @return the new graph
*/
NetworkGraphWithProperties attachNodeProperties(Map<InstanceNodeSessionId, Map<String, String>> nodeProperties);
/**
* @return the (optional) routing information object, if available
*/
NetworkRoutingInformation getRoutingInformation();
/**
* @return a compact string representation of this graph; intended for debug output, or equality checks in tests
*/
String getCompactRepresentation();
}