de.bsvrz.dav.dav.main
Class SubscriptionsManager

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

public class SubscriptionsManager
extends Object

Diese Komponente ist für die Verwaltung der Anmeldungen zuständig. Für jede Anmeldung wird ein Repräsentant erzeugt, der in einer Tabelle gehalten wird.

Author:
Kappich Systemberatung

Field Summary
private  ConnectionsManager _connectionsManager
          Die verbindungsverwaltung
private  Hashtable _dataIndexTable
          Die Tabelle in der der Index der Datensätze verwaltet werden
private static Debug _debug
           
private  Hashtable _inOutSubscriptionsTable
          Die Tabelle der Anmeldungsanträge, wo drin steht was empfangen wurde und was raus geschickt wurde.
private  SplittedTransmitterTelegramsTable _splittedTelegramsTable
          Der Zwichenspeicher der zerstückelten Telegramme
private  Hashtable _subscriptionsTable
          Die Tabelle, wo die registrierten Applikationen oder Datenverteiler gehalten werden
private  Hashtable _usedDataIndexTable
          Die Tabelle in der der Index der TeilDatensätze verwaltet werden
 
Constructor Summary
SubscriptionsManager()
          Dieser Konstruktor wird für Testzwecke benötigt.
SubscriptionsManager(ConnectionsManager connectionsManager)
          Erzeugt ein neues Objekt mit den gegebenen Parametern.
 
Method Summary
(package private)  InAndOutSubscription addSubscriptionRequest(InAndOutSubscription subscription, long transmitterId)
          Addiert einen Anmeldeantrag in der Tabelle.
(package private)  InAndOutSubscription[] getAffectedOutgoingSubscriptions(long targetId)
          Diese Methode wird von der Verbindungsverwaltung aufgerufen, wenn eine Verbindung zu einem Datenverteiler aufgehoben wurde.
(package private)  InAndOutSubscription getAlternativeSubscriptionRequest(InAndOutSubscription subscription)
          Diese Methode wird von der Verbindungsverwaltung aufgerufen, um zu überprüfen, ob ein positiv quittierter Anmeldungsvermerk für die gleiche Basisanmeldeinformation und den gleichen Anmeldstatus vorliegt, wie in subscription übergeben.
private  long getDataIndex(BaseSubscriptionInfo info, boolean source, long originIndex)
          Gibt die fortlaufende Nummer der Daten zurück
private  ApplicationDataTelegram[] getDeltaSubDataObject(ApplicationDataTelegram[] telegrams, byte[] indicators, byte[] changes)
          Deprecated. 
(package private)  SubscriptionComponent[] getInterrestedReceivingComponent(BaseSubscriptionInfo info)
          Diese Methode wird von der Verbindungsverwaltung und von sich selbst aufgerufen, um festzustellen, welche Verbindungen am Empfang der Datensätze für die spezifizierte Basisanmeldeinformation interessiert sind.
(package private)  SubscriptionComponent[] getInterrestedSendingComponent(BaseSubscriptionInfo info)
          Diese Methode wird von der Verbindungsverwaltung und von sich selbst aufgerufen, um festzustellen, welche Verbindungen sich für das Senden von Datensätzen für die spezifizierte Basisanmeldeinformation angemeldet haben.
(package private)  InAndOutSubscription[] getInvolvedPositiveSubscriptionRequests(InAndOutSubscription subscription)
          Diese Methode wird von der Verbindungsverwaltung aufgerufen, um zu überprüfen, welche Anmeldungsvermerke von subscription abhängen.
(package private)  InAndOutSubscription[] getInvolvedPositiveSubscriptionRequests(long[] ids, AttributeGroupAspectCombination[] combinations)
          Diese Methode wird von der Verbindungsverwaltung aufgerufen, wenn neue Zuliefererinformationen eingetroffen sind.
(package private)  InAndOutSubscription[] getInvolvedSubscriptionRequests(BaseSubscriptionInfo key)
          Diese Methode wird von der Verbindungsverwaltung aufgerufen, um zu überprüfen, welche Anmeldungsvermerke von key abhängen.
(package private)  InAndOutSubscription[] getInvolvedSubscriptionRequests(InAndOutSubscription subscription)
          Diese Methode wird von der Verbindungsverwaltung aufgerufen, um zu überprüfen, welche Anmeldungsvermerke von subscription abhängen.
(package private)  InAndOutSubscription[] getInvolvedSubscriptionRequests(InAndOutSubscription subscription, boolean checkIds)
          Gibt die Anmeldeantrage zurück, die vom übergebenen Anmeldeantrag abhängig sein könnten, zurück.
(package private)  InAndOutSubscription[] getInvolvedSubscriptionRequests(long[] ids, AttributeGroupAspectCombination[] combinations)
          Diese Methode wird von der Verbindungsverwaltung aufgerufen, wenn neue Zuliefererinformationen eingetroffen sind.
(package private)  T_A_SubscriptionComponent getReceivingComponent(BaseSubscriptionInfo info)
          Gibt die Senke für die übergene Anmeldeinformationen zurück.
(package private)  InAndOutSubscription[] getSameSubscriptionPostedTo(BaseSubscriptionInfo key, byte subscriptionState, long sourceTransmitter, long[] ids)
           
(package private)  T_A_SubscriptionComponent getSendingComponent(BaseSubscriptionInfo info)
          Gibt die Quelle der Applikationsverbindung zurück.
(package private)  InAndOutSubscription getSubscription(long sourceId, BaseSubscriptionInfo info)
           
(package private)  InAndOutSubscription[] getSubscriptionRequestsToRedirect(long transmitter, long overTransmitterId)
          Diese Methode wird von der Verbindungsverwaltung aufgerufen, wenn neue Weginformationen eingetroffen sind.
(package private)  InAndOutSubscription[] getSubscriptionRequestToUpdate(long targetId, TransmitterDataSubscriptionReceipt receipt)
          Diese Methode wird von der Verbindungsverwaltung aufgerufen, um einen Anmeldungsvermerk zu quittieren.
(package private)  InAndOutSubscription[] getSubscriptionsFromSource(long sourceId)
           
private  boolean isDeltaAllowed(BaseSubscriptionInfo info)
          Delta ist zulässig wenn nicht mehr als ein Sender oder Quelle eines Datums vorhanden ist.
private  boolean isInvalidSubscription(BaseSubscriptionInfo key, byte subscriptionState)
          Überprüft ob mehr als eine Quelle für ein Datum im System vorhanden ist.
(package private)  boolean isSubscriptionRequestAvaillable(BaseSubscriptionInfo key)
          Diese Methode wird von der Verbindungsverwaltung aufgerufen, um zu überprüfen, ob für die übergebene Basisanmeldeinformation ein Anmeldungsvermerk vorliegt.
(package private)  boolean isSubscriptionRequestAvaillable(InAndOutSubscription subscription)
          Diese Methode wird von der Verbindungsverwaltung aufgerufen, um zu überprüfen, ob ein positiv quittierter Anmeldungsvermerk für die gleiche Basisanmeldeinformation und den gleichen Anmeldstatus vorliegt, wie in subscription übergeben.
(package private)  InAndOutSubscription isSuccessfullySubscribed(BaseSubscriptionInfo key, byte subscriptionState)
          Überprüft ob eine ähnliche Anmeldung schon positiv abgeschlossen und vorhanden ist.
(package private)  InAndOutSubscription isSuccessfullySubscribed(BaseSubscriptionInfo key, byte subscriptionState, long transmitterId, long[] ids)
          Überprüft ob eine ähnliche Anmeldung schon positive abgeschlossen und vorhanden ist.
(package private)  boolean isUnsuccessfullySubscribed(BaseSubscriptionInfo key, byte subscriptionState)
          Überprüft ob eine ähnliche Anmeldung gerade bearbeitet wird.
(package private)  boolean isUnsuccessfullySubscribed(BaseSubscriptionInfo key, byte subscriptionState, long transmitterId, long[] ids)
          Überprüft ob eine ähnliche Anmeldung gerade bearbeitet wird.
(package private)  boolean needToSendSubscription(long transmitterId, InAndOutSubscription subscription)
          Überprüft ob eine ähnliche Anmeldung gerade bearbeitet wird
 void printSubscriptions()
          Gibt alle Anmeldungen zu Debug-Zwecken aus
private  void processApplicationDataTelegramAsCentralDistributor(ApplicationDataTelegram applicationDataTelegram, boolean save, T_A_SubscriptionComponent subscriptionComponent, T_A_HighLevelCommunication connection, BaseSubscriptionInfo info)
           
(package private)  InAndOutSubscription removeSubscriptionRequest(InAndOutSubscription subscription)
          Diese Methode wird von der Verbindungsverwaltung aufgerufen, um einen Anmeldungsvermerk aus der Verwaltung zu löschen.
(package private)  InAndOutSubscription removeSubscriptionRequest(long applicationId, BaseSubscriptionInfo key, byte subscriptionState)
          Diese Methode wird von der Verbindungsverwaltung aufgerufen, um einen Anmeldungsvermerk einer Applikation zu löschen.
(package private)  InAndOutSubscription removeSubscriptionRequest(long sourceTransmitterId, BaseSubscriptionInfo key, byte subscriptionState, long[] transmitterIds, long transmitterId)
          Diese Methode wird von der Verbindungsverwaltung aufgerufen, um einen Anmeldungsvermerk eines Datenverteilers zu löschen.
(package private)  InAndOutSubscription[] removeSubscriptionRequests(long sourceId)
          Diese Methode wird von der Verbindungsverwaltung aufgerufen, wenn eine Verbindung nicht mehr vorhanden ist.
private  void saveAndSendToInterestedReceivingComponents(boolean save, TransmitterDataTelegram[] transmitterTelegrams, TransmitterDataTelegram transmitterTelegram, BaseSubscriptionInfo info, ApplicationDataTelegram[] applicationTelegrams, ApplicationDataTelegram applicationTelegram)
          Speichert Telegramme eines Datensatzes im Cache und leitet die Telegramme an Applikationen oder andere Datenverteiler weiter, wenn sie sich dafür interessieren.
 void sendData(T_A_HighLevelCommunication inputApplicationConnection, ApplicationDataTelegram applicationDataTelegram)
          Diese Methode wird von der Protokollsteuerung DaV-DAF aufgerufen, wenn von einer Applikation ein neuer Datensatz empfangen wurde.
 void sendData(T_T_HighLevelCommunication inputTransmitterConnection, TransmitterDataTelegram transmitterDataTelegram)
          Diese Methode wird von der Protokollsteuerung DaV-DaV aufgerufen, wenn von einem Datenverteiler ein neuer Datensatz empfangen wurde.
private  void sendDataToT_A_Component(T_A_SubscriptionComponent subscriptionComponent, ApplicationDataTelegram[] allAppTelegrams, ApplicationDataTelegram lastAppTelegram, TransmitterDataTelegram[] transmitterTelegrams, TransmitterDataTelegram[] previousTransmitterTelegrams)
          Leitet ein Telegramm an eine Applikation weiter.
(package private)  void sendDataToT_A_Component(T_A_SubscriptionComponent subscriptionComponent, BaseSubscriptionInfo info)
          Leitet ein Telegramm an eine Applikation weiter.
private  void sendDataToT_T_Component(T_T_SubscriptionComponent subscriptionComponent, TransmitterDataTelegram transmitterDataTelegram)
          Leitet ein Telegramm an einen anderen Datenverteiler weiter.
 void subscribe(SubscriptionComponent subscriptionComponent)
          Anmelden einer Anmeldekomponente
 void unsubscribe(SubscriptionComponent subscriptionComponent)
          Abmelden einer Anmeldekomponente
(package private)  boolean updateExchangeSubscriptionRequest(InAndOutSubscription subscription, long targetId, BaseSubscriptionInfo key, long[] transmitterIds, long mainTransmitterId, byte subscriptionState, byte receip)
          Diese Methode wird von der Verbindungsverwaltung aufgerufen, um einen Anmeldungsvermerk eines Umleitungsantrags zu quittieren.
 
Methods inherited from class java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
 

Field Detail

_debug

private static final Debug _debug

_subscriptionsTable

private final Hashtable _subscriptionsTable
Die Tabelle, wo die registrierten Applikationen oder Datenverteiler gehalten werden


_inOutSubscriptionsTable

private final Hashtable _inOutSubscriptionsTable
Die Tabelle der Anmeldungsanträge, wo drin steht was empfangen wurde und was raus geschickt wurde.


_dataIndexTable

private final Hashtable _dataIndexTable
Die Tabelle in der der Index der Datensätze verwaltet werden


_usedDataIndexTable

private final Hashtable _usedDataIndexTable
Die Tabelle in der der Index der TeilDatensätze verwaltet werden


_connectionsManager

private final ConnectionsManager _connectionsManager
Die verbindungsverwaltung


_splittedTelegramsTable

private final SplittedTransmitterTelegramsTable _splittedTelegramsTable
Der Zwichenspeicher der zerstückelten Telegramme

Constructor Detail

SubscriptionsManager

SubscriptionsManager(ConnectionsManager connectionsManager)
Erzeugt ein neues Objekt mit den gegebenen Parametern.

Parameters:
connectionsManager - Verbindungsverwaltung

SubscriptionsManager

public SubscriptionsManager()
Dieser Konstruktor wird für Testzwecke benötigt.

Method Detail

subscribe

public void subscribe(SubscriptionComponent subscriptionComponent)
Anmelden einer Anmeldekomponente

Parameters:
subscriptionComponent - Die Anmeldekomponente

unsubscribe

public final void unsubscribe(SubscriptionComponent subscriptionComponent)
Abmelden einer Anmeldekomponente

Parameters:
subscriptionComponent - Die Anmeldekomponente

getSendingComponent

final T_A_SubscriptionComponent getSendingComponent(BaseSubscriptionInfo info)
Gibt die Quelle der Applikationsverbindung zurück.

Parameters:
info - Anmeldeinformationen
Returns:
die Quelle der Applikationsverbindung

getReceivingComponent

final T_A_SubscriptionComponent getReceivingComponent(BaseSubscriptionInfo info)
Gibt die Senke für die übergene Anmeldeinformationen zurück.

Parameters:
info - Anmeldeinformationen
Returns:
Senke oder null, falls nicht vorhanden

isSuccessfullySubscribed

final InAndOutSubscription isSuccessfullySubscribed(BaseSubscriptionInfo key,
                                                    byte subscriptionState)
Überprüft ob eine ähnliche Anmeldung schon positiv abgeschlossen und vorhanden ist.

Parameters:
key - Basisanmeldeinformationen
subscriptionState - Status der Anmeldung
Returns:
Eintrag mit den Anmeldungsinformationen

isSuccessfullySubscribed

final InAndOutSubscription isSuccessfullySubscribed(BaseSubscriptionInfo key,
                                                    byte subscriptionState,
                                                    long transmitterId,
                                                    long[] ids)
Überprüft ob eine ähnliche Anmeldung schon positive abgeschlossen und vorhanden ist.

Parameters:
key - Basisanmeldeinformationen
subscriptionState - Status der Anmeldung
transmitterId - Id des DAV
ids - die erreichbaren DAV, ausgehend vom lokalen DAV.
Returns:
Eintrag mit den Anmeldungsinformationen

isUnsuccessfullySubscribed

final boolean isUnsuccessfullySubscribed(BaseSubscriptionInfo key,
                                         byte subscriptionState)
Überprüft ob eine ähnliche Anmeldung gerade bearbeitet wird.

Parameters:
key - Basisanmeldeinformationen
subscriptionState - Status der Anmeldung
Returns:
Eintrag mit den Anmeldungsinformationen

isUnsuccessfullySubscribed

final boolean isUnsuccessfullySubscribed(BaseSubscriptionInfo key,
                                         byte subscriptionState,
                                         long transmitterId,
                                         long[] ids)
Überprüft ob eine ähnliche Anmeldung gerade bearbeitet wird.

Parameters:
key - Basisanmeldeinformationen
subscriptionState - Status der Anmeldung
transmitterId - Id des DAV
ids - die erreichbaren DAV, ausgehend vom lokalen DAV
Returns:
true: ähnliche Anmeldung gefunden false: keine Aähnliche Anmeldung gefunden

needToSendSubscription

final boolean needToSendSubscription(long transmitterId,
                                     InAndOutSubscription subscription)
Überprüft ob eine ähnliche Anmeldung gerade bearbeitet wird

Parameters:
transmitterId - Id des DAV
subscription - ein Vermerk in der Verwaltungstabelle für Anmeldungsinformationen
Returns:
true: ähnliche Anmeldung gefunden false: keine Aähnliche Anmeldung gefunden

addSubscriptionRequest

final InAndOutSubscription addSubscriptionRequest(InAndOutSubscription subscription,
                                                  long transmitterId)
Addiert einen Anmeldeantrag in der Tabelle.

Parameters:
subscription - ein Vermerk in der Verwaltungstabelle für Anmeldungsinformationen
transmitterId - Id des DAV
Returns:

getSameSubscriptionPostedTo

final InAndOutSubscription[] getSameSubscriptionPostedTo(BaseSubscriptionInfo key,
                                                         byte subscriptionState,
                                                         long sourceTransmitter,
                                                         long[] ids)
Parameters:
key - Basisanmeldeinformationen
subscriptionState - Status der Anmeldung
sourceTransmitter - Ausgangs - DAV
ids - die erreichbaren DAV, ausgehend vom lokalen DAV.
Returns:
Eintrag mit der Anmeldungsinformationen

getSubscriptionRequestToUpdate

final InAndOutSubscription[] getSubscriptionRequestToUpdate(long targetId,
                                                            TransmitterDataSubscriptionReceipt receipt)
Diese Methode wird von der Verbindungsverwaltung aufgerufen, um einen Anmeldungsvermerk zu quittieren. Anhand der Basisanmeldeinformation in receipt wird die Menge der Anmeldungsvermerke bestimmt, die für diese Basisanmeldeinformation bei dieser Komponente registriert sind. Danach wird in dieser Liste der Vermerk gesucht, der den gleichen Anmeldestatus und die gleichen zu berücksichtigenden Datenverteiler hat. Die Folgeanmeldung aus diesem Anmeldungsvermerk bei dem Datenverteiler mit der in targetId angegebenen Datenverteiler-ID wird mit dem Quittierzustand aus receipt versehen, und der Anmeldungsvermerk wird von der Methode zurückgegeben. Wenn kein Vermerk existiert, wird Null zurückgegeben.

Parameters:
targetId - Ziel - DAV
receipt - Quittung der Anmeldung
Returns:
Eintrag mit der Anmeldungsinformationen

updateExchangeSubscriptionRequest

final boolean updateExchangeSubscriptionRequest(InAndOutSubscription subscription,
                                                long targetId,
                                                BaseSubscriptionInfo key,
                                                long[] transmitterIds,
                                                long mainTransmitterId,
                                                byte subscriptionState,
                                                byte receip)
Diese Methode wird von der Verbindungsverwaltung aufgerufen, um einen Anmeldungsvermerk eines Umleitungsantrags zu quittieren. Anhand der Informationen in receip wird überprüft, ob der vorhandene Vermerk die gleiche Basisanmeldeinformation, den gleichen Anmeldestatus und die gleichen zu berücksichtigenden Datenverteiler hat. Ist dies der Fall, so wird die Folgeanmeldung aus diesem Anmeldungsvermerk bei dem Datenverteiler mit der in targetId angegebenen Datenverteiler-ID mit dem Quittierzustand aus receip versehen, und true wird von der Methode zurückgegeben. Wenn kein Vermerk existiert, wird false zurückgegeben.

Parameters:
subscription - Eintrag mit der Anmeldungsinformationen
targetId - Ziel - DAV
key - Basisanmeldeinformationen
transmitterIds - die erreichbaren DAV, ausgehend vom lokalen DAV
mainTransmitterId - Haupt - DAV
subscriptionState - Status der Anmeldung
receip - Quittunngszustand
Returns:
true: Es existiert ein Vermerk in der Verbindungsverwaltung, false: Es existiert kein entsprechender Vermerk.

removeSubscriptionRequest

final InAndOutSubscription removeSubscriptionRequest(long applicationId,
                                                     BaseSubscriptionInfo key,
                                                     byte subscriptionState)
Diese Methode wird von der Verbindungsverwaltung aufgerufen, um einen Anmeldungsvermerk einer Applikation zu löschen. Zunächst wird die Liste der Anmeldungsvermerke der angegebenen Basisanmeldeinformation bestimmt. Dann werden alle Vermerke aus der Liste entfernt, die von der Applikation applicationId stammen und den gleichen Anmeldestatus wie subscriptionState haben.

Parameters:
applicationId - Applikation
key - Basisanmeldeinformation
subscriptionState - Anmeldestatus
Returns:
aktualisierter Eintrag der Anmeldungsinformationen

removeSubscriptionRequest

final InAndOutSubscription removeSubscriptionRequest(long sourceTransmitterId,
                                                     BaseSubscriptionInfo key,
                                                     byte subscriptionState,
                                                     long[] transmitterIds,
                                                     long transmitterId)
Diese Methode wird von der Verbindungsverwaltung aufgerufen, um einen Anmeldungsvermerk eines Datenverteilers zu löschen. Zunächst wird die Liste der Anmeldungsvermerke mit der angegebenen Basisanmeldeinformation bestimmt. Dann werden alle Vermerke aus der Liste entfernt, die vom Datenverteiler transmitterId stammen, den gleichen Anmeldestatus wie subscriptionState haben und sich auch auf einen der in transmitterIds angegebenen Datenverteiler beziehen.

Parameters:
sourceTransmitterId - Ausgangs - DAV
key - Basisanmeldeinformation
subscriptionState - Anmeldestatus
transmitterIds - die erreichbaren DAV, ausgehend vom lokalen DAV
transmitterId - Id des DAV
Returns:
aktualisierter Eintrag der Anmeldungsinformationen

removeSubscriptionRequest

final InAndOutSubscription removeSubscriptionRequest(InAndOutSubscription subscription)
Diese Methode wird von der Verbindungsverwaltung aufgerufen, um einen Anmeldungsvermerk aus der Verwaltung zu löschen. Zunächst wird die Liste der Anmeldungsvermerke mit der angegebenen Basisanmeldeinformation bestimmt. Dann werden alle Vermerke subscription aus der Liste entfernt. Dieser Wert wird von der Methode auch zurückgegeben. Existiert der Vermerk nicht, so wird Null zurückgegeben.

Parameters:
subscription - Eintrag mit der Anmeldungsinformation
Returns:
aktualisierter Eintrag der Anmeldungsinformationen

removeSubscriptionRequests

final InAndOutSubscription[] removeSubscriptionRequests(long sourceId)
Diese Methode wird von der Verbindungsverwaltung aufgerufen, wenn eine Verbindung nicht mehr vorhanden ist. Alle Anmeldungsvermerke mit der sourceId als Anmeldeinstanz werden aus der Verwaltung entfernt. Dieser Wert wird von der Methode auch zurückgegeben.

Parameters:
sourceId - Ausgangs - DAV
Returns:
aktualisierter Eintrag der Anmeldungsinformationen

isSubscriptionRequestAvaillable

final boolean isSubscriptionRequestAvaillable(BaseSubscriptionInfo key)
Diese Methode wird von der Verbindungsverwaltung aufgerufen, um zu überprüfen, ob für die übergebene Basisanmeldeinformation ein Anmeldungsvermerk vorliegt. Wenn mindestens ein Anmeldungsvermerk existiert, dann wird true zurückgegeben, sonst false.

Parameters:
key - Basisanmeldeinformationen
Returns:
true: es existiert mind. ein Anmeldungsvermerk, false: es existiert keine Anmeldungsvermerk.

isSubscriptionRequestAvaillable

final boolean isSubscriptionRequestAvaillable(InAndOutSubscription subscription)
Diese Methode wird von der Verbindungsverwaltung aufgerufen, um zu überprüfen, ob ein positiv quittierter Anmeldungsvermerk für die gleiche Basisanmeldeinformation und den gleichen Anmeldstatus vorliegt, wie in subscription übergeben. Ist dies der Fall, so wird true zurückgegeben, sonst false.

Parameters:
subscription - Eintrag mit der Anmeldungsinformation
Returns:
true: es existiert ein Anmeldungsvermerk, false: es existiert keine Anmeldungsvermerk.

getAlternativeSubscriptionRequest

final InAndOutSubscription getAlternativeSubscriptionRequest(InAndOutSubscription subscription)
Diese Methode wird von der Verbindungsverwaltung aufgerufen, um zu überprüfen, ob ein positiv quittierter Anmeldungsvermerk für die gleiche Basisanmeldeinformation und den gleichen Anmeldstatus vorliegt, wie in subscription übergeben. Außerdem darf sie keine Folgeanmeldungen besitzen. Ist dies der Fall, so wird der Vermerk zurückgegeben, sonst wird Null zurückgegeben.

Parameters:
subscription - Anmeldung
Returns:
falls vorhanden, wird die Anmmeldung zurück gegeben, sonst NULL

getInvolvedPositiveSubscriptionRequests

final InAndOutSubscription[] getInvolvedPositiveSubscriptionRequests(InAndOutSubscription subscription)
Diese Methode wird von der Verbindungsverwaltung aufgerufen, um zu überprüfen, welche Anmeldungsvermerke von subscription abhängen. Dazu wird zunächst die Liste der Anmeldungsvermerke bestimmt, die die gleiche Basisanmeldeinformation wie subscription haben. Für die positiv quittierten aus dieser Liste wird bestimmt, welche zusätzlich den gleichen Anmeldestatus und eine leere Folgeanmeldungsliste besitzen. Alle Vermerke, die diese Bedingungen erfüllen, werden in einem Feld zurückgegeben. Wenn kein solcher Vermerk existiert, wird Null zurückgegeben.

Parameters:
subscription - Anmeldung
Returns:
Feld der vom Übergabeparameter abhängigen Anmeldungen.

getInvolvedSubscriptionRequests

final InAndOutSubscription[] getInvolvedSubscriptionRequests(InAndOutSubscription subscription)
Diese Methode wird von der Verbindungsverwaltung aufgerufen, um zu überprüfen, welche Anmeldungsvermerke von subscription abhängen. Dazu wird zunächst die Liste der Anmeldungsvermerke bestimmt, die die gleiche Basisanmeldeinformation wie subscription haben. Für die positiv quittierten aus dieser Liste wird bestimmt, welche zusätzlich den gleichen Anmeldestatus und eine leere Folgeanmeldungsliste besitzen. Alle Vermerke, die diese Bedingungen erfüllen, werden in einem Feld zurückgegeben. Wenn kein solcher Vermerk existiert, wird Null zurückgegeben.
Ein Anmeldeantrag A ist abhängig von B wenn:
-Basisanmeldeinformation von A ist gleich von B
-Anmeldungsart von A ist gleich von B (Sender oder empfänger)

Parameters:
subscription - Anmeldung
Returns:
vom Übergabeparameter abhängige Anmeldungsvermerke

getInvolvedSubscriptionRequests

final InAndOutSubscription[] getInvolvedSubscriptionRequests(InAndOutSubscription subscription,
                                                             boolean checkIds)
Gibt die Anmeldeantrage zurück, die vom übergebenen Anmeldeantrag abhängig sein könnten, zurück.
Ein Anmeldeantrag A ist abhängig von B wenn:
-Basisanmeldeinformation von A ist gleich von B
-Anmeldungsart von A ist gleich von B (Sender oder empfänger)
-Zu berucksichtigenden Datenverteiler von A sind gleich von B


getInvolvedSubscriptionRequests

final InAndOutSubscription[] getInvolvedSubscriptionRequests(BaseSubscriptionInfo key)
Diese Methode wird von der Verbindungsverwaltung aufgerufen, um zu überprüfen, welche Anmeldungsvermerke von key abhängen. Dazu wird die Liste der Anmeldungsvermerke bestimmt, die die gleiche Basisanmeldeinformation wie key haben und in einem Feld zurückgegeben. Wenn kein solcher Vermerk existiert, wird Null zurückgegeben.

Parameters:
key - Basisanmeldeinformationen
Returns:
Anmeldeantrage, die vom gegebenen Anmeldeinformationen abhängig sein könnten

getInvolvedSubscriptionRequests

final InAndOutSubscription[] getInvolvedSubscriptionRequests(long[] ids,
                                                             AttributeGroupAspectCombination[] combinations)
Diese Methode wird von der Verbindungsverwaltung aufgerufen, wenn neue Zuliefererinformationen eingetroffen sind. Es werden alle nicht positiv quittierten Anmeldungsvermerke darauf überprüft, ob die neuen Objekt-IDs oder Attributgruppen-Aspekt-Kombinationen sie betreffen. Dazu werden die Basisanmeldeinformation der Vermerke mit den ids bzw. combinations verglichen. Ein Feld mit den betroffenen Vermerken wird gebildet und zurückgegeben. Wenn kein solcher Vermerk existiert, wird Null zurückgegeben.

Parameters:
ids - Die Objekt-Ids
combinations - Die Attributgruppen-Aspekt-Kombinationen
Returns:
Feld mit den betroffenen Kombinationen

getInvolvedPositiveSubscriptionRequests

final InAndOutSubscription[] getInvolvedPositiveSubscriptionRequests(long[] ids,
                                                                     AttributeGroupAspectCombination[] combinations)
Diese Methode wird von der Verbindungsverwaltung aufgerufen, wenn neue Zuliefererinformationen eingetroffen sind. Es werden alle nicht positiv quittierten Anmeldungsvermerke darauf überprüft, ob die neuen Objekt-IDs oder Attributgruppen-Aspekt-Kombinationen sie betreffen. Dazu werden die Basisanmeldeinformation der Vermerke mit den ids bzw. combinations verglichen. Ein Feld mit den betroffenen Vermerken wird gebildet und zurückgegeben. Wenn kein solcher Vermerk existiert, wird Null zurückgegeben.

Parameters:
ids - Die Objekt-Ids
combinations - Die Attributgruppen-Aspekt-Kombinationen

getSubscriptionRequestsToRedirect

final InAndOutSubscription[] getSubscriptionRequestsToRedirect(long transmitter,
                                                               long overTransmitterId)
Diese Methode wird von der Verbindungsverwaltung aufgerufen, wenn neue Weginformationen eingetroffen sind. Es werden alle Anmeldungsvermerke gesucht, die den Datenverteiler transmitterId in ihrer Liste der zu berücksichtigenden Datenverteiler haben. Weiterhin müssen die Anmeldungsvermerke eine Folgeanmeldung beim Datenverteiler overTransmitterId haben. Diese gefundenen Anmeldungsvermerke werden umgeleitet, da der Datenverteiler transmitterId über einen neuen Weg erreichbar ist. Diese Anmeldungsvermerke werden als Feld zurückgegeben. Wenn kein solcher Eintrag existiert, wird Null zurückgegeben.

Parameters:
transmitter - DAV
overTransmitterId -
Returns:
alle Anmeldungen, die positiv quittiert sind oder auf eine quittung warten

getAffectedOutgoingSubscriptions

final InAndOutSubscription[] getAffectedOutgoingSubscriptions(long targetId)
Diese Methode wird von der Verbindungsverwaltung aufgerufen, wenn eine Verbindung zu einem Datenverteiler aufgehoben wurde. Es werden alle Anmeldungsvermerke gesucht, die eine Folgeanmeldung bei diesem Datenverteiler targetId besitzen. Ein Feld der betroffenen Anmeldungsvermerke wird erstellt und zurückgegeben. Wenn kein solcher Vermerk existiert, wird Null zurückgegeben.

Parameters:
targetId - DAV mit Folgeanmeldungen
Returns:
Feld der betroffenen Anmeldungsvermerke wird zurückgegeben. Wenn kein solcher Vermerk existiert, wird Null zurückgegeben.

getSubscriptionsFromSource

final InAndOutSubscription[] getSubscriptionsFromSource(long sourceId)

getSubscription

final InAndOutSubscription getSubscription(long sourceId,
                                           BaseSubscriptionInfo info)

sendData

public void sendData(T_A_HighLevelCommunication inputApplicationConnection,
                     ApplicationDataTelegram applicationDataTelegram)
Diese Methode wird von der Protokollsteuerung DaV-DAF aufgerufen, wenn von einer Applikation ein neuer Datensatz empfangen wurde. Zuerst wird überprüft ob dieser Datenverteiler der Zentraldatenverteiler der Datensätze, d. h., ob die Quelle oder Senke der Datensätze bei diesen Datenverteiler angemeldet ist. Ist dies nicht der Fall, so wird überprüft, ob ein positiv quittierter Anmeldungsvermerk für einen Sender vorhanden ist. In diesem Fall wird der Datensatz mit der ID des Senders versehen und dem zum Datenverteiler weitergeleitet, bei dem eine positiv quittierte Folgeanmeldung vorliegt. Erst der Zentraldatenverteiler sorgt für einen gültigen, eindeutigen Datensatzindex. Bis zu diesem Zeitpunkt muss der Sender eindeutig benannt werden. Dies ist gerade dann notwendig, wenn mehrere Sender ihre Datensätze über einen Datenverteiler im System verteilen und die Telegramme zerstückelt sind. Wenn dieser Datenverteiler der Zentraldatenverteiler für diese Datensätze ist, wird überprüft ob der Datensatz zerstückelt ist. In diesem Fall wird der Datensatzindex dieses Datensatzes bestimmt und an die Applikationen und Datenverteiler weitergeleitet, die positiv quittierte Anmeldungen initiiert haben. Wenn der Datensatz kein nachgelieferter Datensatz ist, wird er in der Datenbestand aufgenommen. Für den Fall das der Datensatz zerstückelt ist gibt es zwei Möglichkeiten: Der Datensatzindex wird so gebildet, dass die oberen 32 Bits die Zeit und die unteren 30 Bits den um eins erhöhten Index der Basisanmeldeinformation enthalten. Die Zeit wird entweder aus dem Datensatzindex des im Datenbestand vorhandenen Datensatzes gewonnen oder ist die Zeit des Startens dieses Datenverteilers. Für jede Basisanmeldeinformation wird ein Index in einer Tabelle eingerichtet, der bei jedem neuen Datensatz um eins erhöht wird und in der Tabelle wieder abgespeichert wird. Wenn ein Telegramm an eine Applikation weitergeleitet wird, muss überprüft werden, ob sich die Applikation evtl. nur für Delta-Daten oder für einen Teil der Attribute (oder beides) angemeldet hat. Wenn keine Einschränkung vorliegt, wird das Telegramm an die Applikation weitergeleitet. Bei Einschränkungen hingegen wird zunächst gewartet, bis der Datensatz komplett verfügbar ist (Zerstückelung). Je nachdem, welche Einschränkungen vorliegen, wird der Datensatz wie folgt an die Applikation weitergeleitet: Das Senden eines Datensatzes wird natürlich nur dann erfolgen, wenn der Empfänger be- rechtigt ist, die Daten zu empfangen. Andernfalls wird ein spezieller Datensatz generiert, welcher den Empfänger darüber informiert, dass er keine Berechtigung hat.

Parameters:
inputApplicationConnection - Verbindung
applicationDataTelegram - Applikations-Daten-Telegramm

processApplicationDataTelegramAsCentralDistributor

private void processApplicationDataTelegramAsCentralDistributor(ApplicationDataTelegram applicationDataTelegram,
                                                                boolean save,
                                                                T_A_SubscriptionComponent subscriptionComponent,
                                                                T_A_HighLevelCommunication connection,
                                                                BaseSubscriptionInfo info)

saveAndSendToInterestedReceivingComponents

private void saveAndSendToInterestedReceivingComponents(boolean save,
                                                        TransmitterDataTelegram[] transmitterTelegrams,
                                                        TransmitterDataTelegram transmitterTelegram,
                                                        BaseSubscriptionInfo info,
                                                        ApplicationDataTelegram[] applicationTelegrams,
                                                        ApplicationDataTelegram applicationTelegram)
Speichert Telegramme eines Datensatzes im Cache und leitet die Telegramme an Applikationen oder andere Datenverteiler weiter, wenn sie sich dafür interessieren.

Parameters:
save - true falls der Datensatz gespeichert werden soll.
transmitterTelegrams - Alle Datenverteilertelegramme eines in mehrere Teiltelegramme zerlegten Datensatzes wenn alle Telegramme vorliegen, sonst null.
info - Datenidentifikation des Telegramms
applicationTelegrams - Alle Applikationstelegramme eines in mehrere Teiltelegramme zerlegten Datensatzes wenn alle Telegramme vorliegen, sonst null.
applicationTelegram - Telegramm für Applikationen
transmitterTelegram - Telegramm für andere Datenverteiler

sendData

public final void sendData(T_T_HighLevelCommunication inputTransmitterConnection,
                           TransmitterDataTelegram transmitterDataTelegram)
Diese Methode wird von der Protokollsteuerung DaV-DaV aufgerufen, wenn von einem Datenverteiler ein neuer Datensatz empfangen wurde. Der Datensatzindex wird so gebildet, dass die oberen 32 Bits die Zeit und die unteren 30 Bits den um eins erhöhten Index der Basisanmeldeinformation enthalten. Die Zeit wird entweder aus dem Datensatzindex des im Datenbestand vorhandenen Datensatzes gewonnen oder ist die Zeit des Startens dieses Datenverteilers. Für jede Basisanmeldeinformation wird ein Index in einer Tabelle eingerichtet, der bei jedem neuen Datensatz um eins erhöht wird und in der Tabelle wieder abgespeichert wird. Wenn ein Telegramm an eine Applikation weitergeleitet wird, muss überprüft werden, ob sich die Applikation evtl. nur für Delta-Daten oder für einen Teil der Attribute (oder beides) angemeldet hat. Wenn keine Einschränkung vorliegt, wird das Telegramm an die Applikation weitergeleitet. Bei Einschränkungen hingegen wird zunächst gewartet, bis der Datensatz komplett verfügbar ist (Zerstückelung). Je nachdem, welche Einschränkungen vorliegen, wird der Datensatz wie folgt an die Applikation weitergeleitet: Das Senden eines Datensatzes wird natürlich nur dann erfolgen, wenn der Empfänger berechtigt ist, die Daten zu empfangen. Andernfalls wird ein spezieller Datensatz generiert, welcher den Empfänger darüber informiert, dass er keine Berechtigung hat.

Parameters:
inputTransmitterConnection - Verbindung
transmitterDataTelegram - Transmitter-Daten-Telegramm

sendDataToT_T_Component

private void sendDataToT_T_Component(T_T_SubscriptionComponent subscriptionComponent,
                                     TransmitterDataTelegram transmitterDataTelegram)
Leitet ein Telegramm an einen anderen Datenverteiler weiter.

Parameters:
subscriptionComponent -
transmitterDataTelegram -

sendDataToT_A_Component

private void sendDataToT_A_Component(T_A_SubscriptionComponent subscriptionComponent,
                                     ApplicationDataTelegram[] allAppTelegrams,
                                     ApplicationDataTelegram lastAppTelegram,
                                     TransmitterDataTelegram[] transmitterTelegrams,
                                     TransmitterDataTelegram[] previousTransmitterTelegrams)
Leitet ein Telegramm an eine Applikation weiter.

Parameters:
subscriptionComponent -
allAppTelegrams -
lastAppTelegram -
transmitterTelegrams -
previousTransmitterTelegrams -

sendDataToT_A_Component

final void sendDataToT_A_Component(T_A_SubscriptionComponent subscriptionComponent,
                                   BaseSubscriptionInfo info)
Leitet ein Telegramm an eine Applikation weiter.

Parameters:
subscriptionComponent -
info -

getDeltaSubDataObject

@Deprecated
private ApplicationDataTelegram[] getDeltaSubDataObject(ApplicationDataTelegram[] telegrams,
                                                                   byte[] indicators,
                                                                   byte[] changes)
Deprecated. 

Erzeugt ein Teildatensatz mit den spezifizierten und geänderten Attributen.

Parameters:
telegrams -
indicators -
changes -
Returns:

getDataIndex

private long getDataIndex(BaseSubscriptionInfo info,
                          boolean source,
                          long originIndex)
Gibt die fortlaufende Nummer der Daten zurück

Parameters:
info -
source -
originIndex -
Returns:

getInterrestedReceivingComponent

final SubscriptionComponent[] getInterrestedReceivingComponent(BaseSubscriptionInfo info)
Diese Methode wird von der Verbindungsverwaltung und von sich selbst aufgerufen, um festzustellen, welche Verbindungen am Empfang der Datensätze für die spezifizierte Basisanmeldeinformation interessiert sind. Alle Anmeldekomponenten der Verbindungen werden darauf untersucht, ob eine Senken- oder Empfangsanmeldung für das spezifizierte Datum existiert. Ist keine Senke und kein Empfänger angemeldet, so wird Null zurückgegeben.

Parameters:
info - Basisanmeldeinformationen
Returns:
Feld der interessierten Empfänger(Empfänger oder Senke)

getInterrestedSendingComponent

final SubscriptionComponent[] getInterrestedSendingComponent(BaseSubscriptionInfo info)
Diese Methode wird von der Verbindungsverwaltung und von sich selbst aufgerufen, um festzustellen, welche Verbindungen sich für das Senden von Datensätzen für die spezifizierte Basisanmeldeinformation angemeldet haben. Alle Anmeldekomponenten der Verbindungen werden darauf untersucht, ob eine Qell- oder Sendeanmeldung für das spezifizierten Datum existiert. Ist keine Quelle und kein Sender angemeldet, so wird Null zurückgegeben.

Parameters:
info - Basisanmeldeinformationen
Returns:
Feld der Sender(Sender oder Quelle) eines bestimmten Datums

isDeltaAllowed

private boolean isDeltaAllowed(BaseSubscriptionInfo info)
Delta ist zulässig wenn nicht mehr als ein Sender oder Quelle eines Datums vorhanden ist.

Parameters:
info -
Returns:

isInvalidSubscription

private boolean isInvalidSubscription(BaseSubscriptionInfo key,
                                      byte subscriptionState)
Überprüft ob mehr als eine Quelle für ein Datum im System vorhanden ist.

Parameters:
key -
subscriptionState -
Returns:

printSubscriptions

public void printSubscriptions()
Gibt alle Anmeldungen zu Debug-Zwecken aus