de.bsvrz.dav.dav.main
Class RoutingTable

java.lang.Object
  extended by de.bsvrz.dav.dav.main.RoutingTable

public class RoutingTable
extends Object

Die Klasse ist für die Weginformationsverwaltung zuständig. Sie stellt die Tabelle der Weginformationen dar.

Author:
Kappich Systemberatung

Nested Class Summary
(package private)  class RoutingTable.NodeInfo
          Repräsentiert einen Knoten.
(package private)  class RoutingTable.RoutingInfo
          Repräsentiert eine Zelle in der Tabelle
(package private)  class RoutingTable.RoutingInfoMatrix
          Die Tabelle der Weginformationen
 
Field Summary
private  int _columns
          Anzahl der Spalten
private  List<RoutingTable.NodeInfo> _columnToNodeInfo
          zu einem Knoten gehörige Spalte aus der Tabelle
private  DistributionInterface _distribution
          Die über Änderungen zu benachrichtigende Komponente
private  Map<Long,RoutingTable.NodeInfo> _idToNodeInfo
          Id des Knotens
private  long _localNodeId
          ID des lokalen Datenverteilers
private  RoutingTable.RoutingInfoMatrix _routingInfos
          Tabelle der Weginformationen
private  int _rows
          Anzahl der Reihen
private  List<RoutingTable.NodeInfo> _rowToNodeInfo
          zu einem Knoten gehörige Reihe aus der Tabelle
 
Constructor Summary
RoutingTable(DistributionInterface distribution, long localNodeId)
          Erzeugt ein neues Objekt mit den gegebenen Parametern.
 
Method Summary
 void addConnection(RoutingConnectionInterface connection)
          Diese Methode wird von der Wegverwaltung aufgerufen und es wird überprüft, ob ein Eintrag mit dem spezifizierten Repräsentanten der Datenverteilerverbindung vorhanden ist.
(package private)  boolean containsIdToNodeInfo(RoutingConnectionInterface connection)
          Diese Methode wird für automatisierte Tests benötigt und prüft, ob ein RoutingConnectionInterface Objekt in die entsprechenden Datenstruktur eingetragen wurde.
 RoutingConnectionInterface findBestConnection(long destinationNodeId)
          Diese Methode wird von der Wegverwaltung aufgerufen.
 void removeConnection(RoutingConnectionInterface connection)
          Diese Methode wird von der Wegverwaltung aufgerufen und es wird überprüft, ob ein Eintrag mit dem spezifizierten Repräsentanten der Datenverteilerverbindung connection vorhanden ist.
 String toString()
          Diese Methode schreibt alle Ziele, die von dem Ausgangsknoten(Ausgangs-DAV) zu erreichen sind in einen String, und gibt diesen zurück.
 void update(long fromNodeId, RoutingUpdate[] routingUpdates)
          Diese Methode wird von der Wegverwaltung aufgerufen und es wird überprüft, ob ein Eintrag mit der als Parameter spezifizierten fromNodeId vorhanden ist.
private  void updateAll()
          Aktualisiert die komplette Tabelle.
private  void updateColumn(RoutingTable.NodeInfo destinationNode)
          Aktualisiert die Spalte zu einem Zielknoten.
private  void updateRow(RoutingTable.NodeInfo routingNode)
          Aktualisiert die Zeile zu einem Zwischenknoten.
 
Methods inherited from class java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, wait, wait, wait
 

Field Detail

_rowToNodeInfo

private final List<RoutingTable.NodeInfo> _rowToNodeInfo
zu einem Knoten gehörige Reihe aus der Tabelle


_columnToNodeInfo

private final List<RoutingTable.NodeInfo> _columnToNodeInfo
zu einem Knoten gehörige Spalte aus der Tabelle


_idToNodeInfo

private final Map<Long,RoutingTable.NodeInfo> _idToNodeInfo
Id des Knotens


_routingInfos

private final RoutingTable.RoutingInfoMatrix _routingInfos
Tabelle der Weginformationen


_columns

private int _columns
Anzahl der Spalten


_rows

private int _rows
Anzahl der Reihen


_distribution

private final DistributionInterface _distribution
Die über Änderungen zu benachrichtigende Komponente


_localNodeId

private long _localNodeId
ID des lokalen Datenverteilers

Constructor Detail

RoutingTable

public RoutingTable(DistributionInterface distribution,
                    long localNodeId)
Erzeugt ein neues Objekt mit den gegebenen Parametern.

Parameters:
distribution - Die über Änderungen zu benachrichtigende Komponente.
localNodeId - ID des lokalen Datenverteilers
Method Detail

findBestConnection

public RoutingConnectionInterface findBestConnection(long destinationNodeId)
Diese Methode wird von der Wegverwaltung aufgerufen. Gibt es zur angegebenen Ziel-ID (Knoten) einen Eintrag, wird die Verbindunginformation zurückgegeben, über die dieses Ziel am Besten erreicht werden kann.

Parameters:
destinationNodeId - ID des Zielknotens
Returns:
Routing-Repräsentant der Datenverteilerverbindung, oder null, falls es keine Verbindung zum Zielknoten gibt.

addConnection

public void addConnection(RoutingConnectionInterface connection)
Diese Methode wird von der Wegverwaltung aufgerufen und es wird überprüft, ob ein Eintrag mit dem spezifizierten Repräsentanten der Datenverteilerverbindung vorhanden ist. Ist dies nicht der Fall, so wird ein neuer Eintrag erzeugt und in die Tabelle aufgenommen. Wenn der Eintrag vorhanden ist und dessen Repräsentant der Datenverteilerverbindung nicht vorhanden ist, wird dieser Eintrag durch den als übergebenen Repräsentanten aktualisiert. Hat sich durch diese Änderung der beste Weg zu einem Datenverteiler geändert, so wird das DistributionInterface darüber benachrichtigt. Haben sich die Gewichte der einzelnen Wege über einen bestimmten Datenverteiler geändert, so werden die Änderungen in ein TransmitterBestWayUpdate-Telegramm verpackt und über die Datenverteiler gesendet.

Parameters:
connection - Repräsentant der Datenverteilerverbindung

containsIdToNodeInfo

boolean containsIdToNodeInfo(RoutingConnectionInterface connection)
Diese Methode wird für automatisierte Tests benötigt und prüft, ob ein RoutingConnectionInterface Objekt in die entsprechenden Datenstruktur eingetragen wurde.

Parameters:
connection - Verbindung, die in der Datenstruktur _idToNodeInfo eingetragen sein muss.
Returns:
true, wenn das Objekte connection in der oben genannten Datenstruktur eingetragen ist.

removeConnection

public void removeConnection(RoutingConnectionInterface connection)
Diese Methode wird von der Wegverwaltung aufgerufen und es wird überprüft, ob ein Eintrag mit dem spezifizierten Repräsentanten der Datenverteilerverbindung connection vorhanden ist. Ist dies der Fall, so wird dessen Repräsentant der Datenverteilerverbindung gelöscht. Alle Weginformationen über die nicht mehr vorhandene Verbindung werden zurückgesetzt. Hat sich durch diese Änderung der beste Weg zu einem Datenverteiler geändert, so wird DistributionInterface darüber benachrichtigt. Haben sich die Gewichte der einzelnen Wege über einen bestimmten Datenverteiler geändert, so werden die Änderungen in ein TransmitterBestWayUpdate-Telegramm verpackt und über die Protokollsteuerung DaV-DaV zu diesem Datenverteiler gesendet.

Parameters:
connection - Repräsentant der Datenverteilerverbindung

update

public void update(long fromNodeId,
                   RoutingUpdate[] routingUpdates)
Diese Methode wird von der Wegverwaltung aufgerufen und es wird überprüft, ob ein Eintrag mit der als Parameter spezifizierten fromNodeId vorhanden ist. Wenn der Eintrag vorhanden ist, werden die Gewichte der Wege zwischen dem aktuellen Datenverteiler und den Datenverteilern, die in RoutingUpdate spezifiziert sind, aktualisiert. Dabei muß der Datenverteiler mit der ID fromNodeId auf diesem Weg liegen. Die Aktualisierung erfolgt durch das Addieren des Gewichts der Verbindung zwischen aktuellem Datenverteiler und fromNodeId und die jeweiligen RoutingUpdate-Gewichte. Hat sich durch diese Änderung der beste Weg zu einem Datenverteiler geändert, so wird DistributionInterface darüber benachrichtigt. Haben sich die Gewichte der einzelnen Wege zu einem bestimmten Datenverteiler geändert, so werden die Änderungen in ein TransmitterBestWayUpdate-Telegramm verpackt und über die Protokollsteuerung DaV-DaV zu den Nachbardatenverteilern gesendet.

Parameters:
fromNodeId - ID eines Eintrags in routingTable
routingUpdates - Gewichte der Wege zwischen dem aktuellen Datenverteiler und den Datenverteilern

toString

public final String toString()
Diese Methode schreibt alle Ziele, die von dem Ausgangsknoten(Ausgangs-DAV) zu erreichen sind in einen String, und gibt diesen zurück.

Overrides:
toString in class Object
Returns:
Matrix der erreichbaren Ziele in einem String

updateAll

private void updateAll()
Aktualisiert die komplette Tabelle.


updateColumn

private void updateColumn(RoutingTable.NodeInfo destinationNode)
Aktualisiert die Spalte zu einem Zielknoten.

Parameters:
destinationNode - Zielknoten

updateRow

private void updateRow(RoutingTable.NodeInfo routingNode)
Aktualisiert die Zeile zu einem Zwischenknoten.

Parameters:
routingNode - Zwischenknoten