/*
* Copyright (C) 2006-2016 DLR, Germany
*
* All rights reserved
*
* http://www.rcenvironment.de/
*/
package de.rcenvironment.core.communication.routing.internal;
import java.io.Serializable;
import java.util.List;
import de.rcenvironment.core.communication.common.InstanceNodeSessionId;
/**
* This class represents an entry in the routing table (see {@link RoutingTable}).
*
* @author Phillip Kroll
*/
public class NetworkRoute implements Serializable {
private static final long serialVersionUID = 1477187382233968105L;
private final InstanceNodeSessionId source;
private final InstanceNodeSessionId destination;
private final List<TopologyLink> path;
private final List<InstanceNodeSessionId> nodes;
private final long computationalEffort;
public NetworkRoute(InstanceNodeSessionId source, InstanceNodeSessionId destination, List<TopologyLink> path,
List<InstanceNodeSessionId> nodes, long computationalEffort) {
this.source = source;
this.destination = destination;
this.path = path;
this.nodes = nodes;
this.computationalEffort = computationalEffort;
}
/**
* @return The network link to use in order to reach the next node on the route.
*/
public TopologyLink getFirstLink() {
if (path.size() <= 0) {
return null;
} else {
return path.get(0);
}
}
/**
* @return The node that is the first to be passed along the route.
*/
public InstanceNodeSessionId getNextNode() {
return nodes.get(0);
}
/**
* @return Whether there is a path at all.
*/
public boolean validate() {
return (path.size() > 0 && nodes.size() > 0 && !source.equals(destination));
}
/**
* @return Returns the route length.
*/
public int getLength() {
return path.size();
}
/**
* @return Returns the source.
*/
public InstanceNodeSessionId getSource() {
return source;
}
/**
* @return Returns the destination.
*/
public InstanceNodeSessionId getDestination() {
return destination;
}
/**
* @return Returns the path.
*/
public List<TopologyLink> getPath() {
return path;
}
/**
* @return Returns the nodes.
*/
public List<InstanceNodeSessionId> getNodes() {
return nodes;
}
/**
* TODO krol_ph: Comment!
* @return Returns the computationalEffort.
*/
public long getComputationalEffort() {
return computationalEffort;
}
}