Package de.bsvrz.dav.dav.subscriptions
Class SubscriptionInfo
- java.lang.Object
-
- de.bsvrz.dav.dav.subscriptions.SubscriptionInfo
-
- All Implemented Interfaces:
java.io.Closeable,java.lang.AutoCloseable
public class SubscriptionInfo extends java.lang.Object implements java.io.CloseableDiese Klasse kapselt eine Anmeldungsinformation zu einer Objekt/Attributgruppe/Aspekt/Simulationsvariante-Kombination. Enthalten sind die eigentlichen Anmeldungen von Applikationen und Datenverteilern auf diese BaseSubscriptionInfo. Diese Klasse kümmert sich darum, die Anmeldungen zu verwalten und je nach Verfügbarkeit von Sendern, Empfängern, Quellen und Senken und je nach vorhandenen Rechten den einzelnen Verbindungen per Sendesteuerung oder leeren Datensätzen den Zustand der Anmeldung zu übermitteln. Zusätzlich übernimmt diese Klasse das Verteilen von Datensätzen an interessierte und gültige Empfangsanmeldungen.
-
-
Constructor Summary
Constructors Constructor Description SubscriptionInfo(SubscriptionsManager subscriptionsManager, de.bsvrz.dav.daf.communication.lowLevel.telegrams.BaseSubscriptionInfo baseSubscriptionInfo)Erstellt eine neue SubscriptionInfo
-
Method Summary
Modifier and Type Method Description voidaddReceivingSubscription(ReceivingSubscription receivingSubscription)Fügt eine empfangende Anmeldung hinzuvoidaddSendingSubscription(SendingSubscription sendingSubscription)Fügt eine sendende Anmeldung hinzuvoidclose()Markiert das SubscriptionInfo als geschlossen, nachdem Änderungen an den Anmeldungen durchgeführt wurden.voiddistributeTelegram(de.bsvrz.dav.daf.communication.lowLevel.telegrams.ApplicationDataTelegram applicationDataTelegram, boolean toCentralDistributor, CommunicationInterface communication, long applicationId)Verschickt ein einzelnes Datentelegramm an alle interessierten und korrekt angemeldeten EmpfängervoiddistributeTelegrams(java.util.List<de.bsvrz.dav.daf.communication.lowLevel.telegrams.ApplicationDataTelegram> applicationDataTelegrams, boolean toCentralDistributor, CommunicationInterface communication, long applicationId)Verschickt eine Liste von zusammengehörigen Datentelegrammen an alle interessierten und korrekt angemeldeten Empfängerde.bsvrz.dav.daf.communication.lowLevel.telegrams.BaseSubscriptionInfogetBaseSubscriptionInfo()Gibt das BaseSubscriptionInfo zurücklonggetCurrentDataIndex(long runningNumber)Gibt den zuletzt berechneten Datenindex zurücklonggetNextDataIndex(long runningNumber)Berechnet den nächsten Datenindex und gibt diesen zurückRemoteDrainSubscriptiongetOrCreateRemoteDrainSubscription(TransmitterCommunicationInterface connection)Erstellt eine Remote-Senken-Anmeldung über eine angegebene Verbindung bzw. gibt diese zurück wenn sie schon bestehtRemoteSourceSubscriptiongetOrCreateRemoteSourceSubscription(TransmitterCommunicationInterface connection)Erstellt eine Remote-Quellen-Anmeldung über eine angegebene Verbindung bzw. gibt diese zurück wenn sie schon bestehtjava.util.Collection<ReceivingSubscription>getReceivingSubscriptions()Gibt alle Empfangs-Anmeldungen zurückjava.util.List<ReceivingSubscription>getReceivingSubscriptions(CommunicationInterface communicationInterface)Gibt alle Empfangs-Anmeldungen zu einer Verbindung zurückjava.util.Collection<SendingSubscription>getSendingSubscriptions()Gibt alle sendenden Anmeldungen zurückjava.util.List<SendingSubscription>getSendingSubscriptions(CommunicationInterface communicationInterface)Gibt alle Sende-Anmeldungen zu einer Verbindung zurückjava.util.List<ReceivingSubscription>getValidReceiverSubscriptions()Gibt alle gültigen empfangenden Anmeldungen zurückjava.util.List<SendingSubscription>getValidSenderSubscriptions()Gibt alle gültigen sendenden Anmeldungen zurückvoidhandleUserRightsChanged(long userId)Aktualisert die Rechte von Anmeldungen und macht diese dadurch gültig/ungültigbooleanhasDrain()Gibttruezurück, wenn eine Senke verbunden ist (entweder lokal oder über eine Transmitterverbindung)booleanhasSource()Gibttruezurück, wenn eine Quelle verbunden ist (entweder lokal oder über eine Transmitterverbindung)booleanisCentralDistributor()Gibttruezurück, wenn dieser Datenverteiler Zentraldatenverteiler für diese Anmeldung istbooleanisEmpty()Gibttruezurück, wenn es keine Anmeldungen gibtbooleanisValidSender(CommunicationInterface communication)Prüft, ob die angegebene Kommunikationsklasse senden darf (also als gültiger Sender angemeldet ist)voidopen()Markiert das SubscriptionInfo als offen, sodass Änderungen an den Anmeldungen durchgeführt werden dürfen.voidremoveReceivingSubscription(ReceivingSubscription receivingSubscription)Entfernt eine empfangende Anmeldungjava.util.List<ReceivingSubscription>removeReceivingSubscriptions(CommunicationInterface communication)Entfernt alle empfangende Anmedungen, die über die angegebene Verbindung angemeldet sindvoidremoveSendingSubscription(SendingSubscription sendingSubscription)Entfernt eine sendende Anmeldungjava.util.List<SendingSubscription>removeSendingSubscriptions(CommunicationInterface communication)Entfernt alle sendende Anmedungen, die über die angegebene Verbindung angemeldet sindbyte[]serializeToBytes()Serialisiert die Anmelde-Informationen in Bytes um sie über den Datenverteiler zu Testzwecken abrufen zu können.voidsetMultiRemoteLockActive(boolean multiRemoteLockActive)Setzt, ob Anmeldung ungültig gemacht werden sollen, weil mehrere remote-Zzentraldatenverteiler positive Rückmeldungen verschickt habenvoidsetRemoteDrainSubscriptionStatus(TransmitterCommunicationInterface communication, ConnectionState state, long mainTransmitterId)Verarbeitet eine Anmeldungsquittung von einem anderen Datenverteiler, aktualisert den Status der entsprechenden ausgehenden AnmeldungvoidsetRemoteSourceSubscriptionStatus(TransmitterCommunicationInterface communication, ConnectionState state, long mainTransmitterId)Verarbeitet eine Anmeldungsquittung von einem anderen Datenverteiler, aktualisert den Status der entsprechenden ausgehenden Anmeldungjava.lang.StringtoString()voidupdateBestWay(long transmitterId, TransmitterCommunicationInterface oldConnection, TransmitterCommunicationInterface newConnection)Wird von bestWaymanager aufgerufen, wenn es eine neue beste lokale Verbindung zu einem Zentraldatenverteiler gibtvoidupdateOrCreateRemoteReceiverSubscription(TransmitterCommunicationInterface communication, java.util.Collection<java.lang.Long> ids)Erstellt eine eingehende Anmeldung von einem anderen Datenverteiler als interessierter Empfänger (dieser Datenverteiler ist dann typischerweise potentiell Quell-Datenverteiler bzw. agiert als Proxy zum eigentlichen Zentraldatenverteiler).voidupdateOrCreateRemoteSenderSubscription(TransmitterCommunicationInterface communication, java.util.Collection<java.lang.Long> ids)Erstellt eine eingehende Anmeldung von einem anderen Datenverteiler als interessierter Sender (dieser Datenverteiler ist dann typischerweise potentiell eine Senke bzw. agiert als Proxy zum eigentlichen Zentraldatenverteiler).voidupdatePendingSubscriptionDataIndex(CommunicationInterface communication, long dataIndex)voidupdateRemoteConnections()Wird aufgerufen, wenn im ListsManager ein Update stattfand und so eventuell neue oder bessere Wege für die Remote-Anmeldungen existieren
-
-
-
Constructor Detail
-
SubscriptionInfo
public SubscriptionInfo(SubscriptionsManager subscriptionsManager, de.bsvrz.dav.daf.communication.lowLevel.telegrams.BaseSubscriptionInfo baseSubscriptionInfo)
Erstellt eine neue SubscriptionInfo- Parameters:
subscriptionsManager- AnmeldungsverwaltungbaseSubscriptionInfo- Datenidentifikation
-
-
Method Detail
-
addSendingSubscription
public void addSendingSubscription(SendingSubscription sendingSubscription)
Fügt eine sendende Anmeldung hinzu- Parameters:
sendingSubscription- neue sendende Anmeldung
-
addReceivingSubscription
public void addReceivingSubscription(ReceivingSubscription receivingSubscription)
Fügt eine empfangende Anmeldung hinzu- Parameters:
receivingSubscription- neue empfangende Anmeldung
-
removeReceivingSubscription
public void removeReceivingSubscription(ReceivingSubscription receivingSubscription)
Entfernt eine empfangende Anmeldung- Parameters:
receivingSubscription- empfangende Anmeldung
-
removeSendingSubscription
public void removeSendingSubscription(SendingSubscription sendingSubscription)
Entfernt eine sendende Anmeldung- Parameters:
sendingSubscription- sendende Anmeldung
-
removeSendingSubscriptions
public java.util.List<SendingSubscription> removeSendingSubscriptions(CommunicationInterface communication)
Entfernt alle sendende Anmedungen, die über die angegebene Verbindung angemeldet sind- Parameters:
communication- Verbindung- Returns:
- Liste mit entfernten Sendern und Quellen
-
removeReceivingSubscriptions
public java.util.List<ReceivingSubscription> removeReceivingSubscriptions(CommunicationInterface communication)
Entfernt alle empfangende Anmedungen, die über die angegebene Verbindung angemeldet sind- Parameters:
communication- Verbindung- Returns:
- Liste mit entfernten Empfängern und Senken
-
getValidSenderSubscriptions
public java.util.List<SendingSubscription> getValidSenderSubscriptions()
Gibt alle gültigen sendenden Anmeldungen zurück- Returns:
- alle gültigen sendenden Anmeldungen (Quellen und Sender)
-
getValidReceiverSubscriptions
public java.util.List<ReceivingSubscription> getValidReceiverSubscriptions()
Gibt alle gültigen empfangenden Anmeldungen zurück- Returns:
- alle gültigen empfangenden Anmeldungen (Senken und Empfänger)
-
isEmpty
public boolean isEmpty()
Gibttruezurück, wenn es keine Anmeldungen gibt- Returns:
true, wenn es keine Anmeldungen gibt, sonstfalse
-
isCentralDistributor
public boolean isCentralDistributor()
Gibttruezurück, wenn dieser Datenverteiler Zentraldatenverteiler für diese Anmeldung ist- Returns:
true, wenn dieser Datenverteiler Zentraldatenverteiler für diese Anmeldung ist, sonstfalse
-
getNextDataIndex
public long getNextDataIndex(long runningNumber)
Berechnet den nächsten Datenindex und gibt diesen zurück- Parameters:
runningNumber- Laufende Nummer, wird vom SubscriptionsManager bereitgestellt, da diese Objekte gelöscht werden sobas keine Anmeldungen mehr vorhanden sind- Returns:
- nächsten Datenindex, "0" falls dieser Datenverteiler nicht der Zentraldatenverteiler ist.
-
getCurrentDataIndex
public long getCurrentDataIndex(long runningNumber)
Gibt den zuletzt berechneten Datenindex zurück- Parameters:
runningNumber- Laufende Nummer, wird vom SubscriptionsManager bereitgestellt, da diese Objekte gelöscht werden sobas keine Anmeldungen mehr vorhanden sind- Returns:
- zuletzt berechneten Datenindex, "0" falls dieser Datenverteiler nicht der Zentraldatenverteiler ist.
-
distributeTelegram
public void distributeTelegram(de.bsvrz.dav.daf.communication.lowLevel.telegrams.ApplicationDataTelegram applicationDataTelegram, boolean toCentralDistributor, CommunicationInterface communication, long applicationId)Verschickt ein einzelnes Datentelegramm an alle interessierten und korrekt angemeldeten Empfänger- Parameters:
applicationDataTelegram- DatentelegrammtoCentralDistributor- wenn das Telegramm noch nicht beim Zentraldatenverteiler behandelt wurde, also der Datenindex noch nicht vernünftig gesetzt wurdecommunication- Verbindung über die der Emfang erfolgt ist (zur Rechteprüfung), bei null findet keine Prüfung stattapplicationId- Applikation, die das Telegramm ursprünglich gesendet hat oder -1 falls unbekannt
-
distributeTelegrams
public void distributeTelegrams(java.util.List<de.bsvrz.dav.daf.communication.lowLevel.telegrams.ApplicationDataTelegram> applicationDataTelegrams, boolean toCentralDistributor, CommunicationInterface communication, long applicationId)Verschickt eine Liste von zusammengehörigen Datentelegrammen an alle interessierten und korrekt angemeldeten Empfänger- Parameters:
applicationDataTelegrams- DatentelegrammetoCentralDistributor- wenn das Telegramm noch nicht beim Zentraldatenverteiler behandelt wurde, also der Datenindex noch nicht vernünftig gesetzt wurdecommunication- Verbindung über die der Emfang erfolgt ist (zur Rechteprüfung), bei null findet keine Prüfung stattapplicationId- Applikation, die die Telegramme ursprünglich gesendet hat oder -1 falls unbekannt
-
updatePendingSubscriptionDataIndex
public void updatePendingSubscriptionDataIndex(CommunicationInterface communication, long dataIndex)
-
handleUserRightsChanged
public void handleUserRightsChanged(long userId)
Aktualisert die Rechte von Anmeldungen und macht diese dadurch gültig/ungültig- Parameters:
userId- geänderter Benutzer, dessen Anmeldungen zu aktualisieren sind
-
setRemoteSourceSubscriptionStatus
public void setRemoteSourceSubscriptionStatus(TransmitterCommunicationInterface communication, ConnectionState state, long mainTransmitterId)
Verarbeitet eine Anmeldungsquittung von einem anderen Datenverteiler, aktualisert den Status der entsprechenden ausgehenden Anmeldung- Parameters:
communication- Kommunikationstate- neuer StatusmainTransmitterId- Id des Zentraldatenverteilers
-
setRemoteDrainSubscriptionStatus
public void setRemoteDrainSubscriptionStatus(TransmitterCommunicationInterface communication, ConnectionState state, long mainTransmitterId)
Verarbeitet eine Anmeldungsquittung von einem anderen Datenverteiler, aktualisert den Status der entsprechenden ausgehenden Anmeldung- Parameters:
communication- Kommunikationstate- neuer StatusmainTransmitterId- Id des Zentraldatenverteilers
-
getBaseSubscriptionInfo
public de.bsvrz.dav.daf.communication.lowLevel.telegrams.BaseSubscriptionInfo getBaseSubscriptionInfo()
Gibt das BaseSubscriptionInfo zurück- Returns:
- das BaseSubscriptionInfo
-
updateRemoteConnections
public void updateRemoteConnections()
Wird aufgerufen, wenn im ListsManager ein Update stattfand und so eventuell neue oder bessere Wege für die Remote-Anmeldungen existieren
-
hasSource
public boolean hasSource()
Gibttruezurück, wenn eine Quelle verbunden ist (entweder lokal oder über eine Transmitterverbindung)- Returns:
true, wenn eine Quelle verbunden ist, sonstfalse
-
hasDrain
public boolean hasDrain()
Gibttruezurück, wenn eine Senke verbunden ist (entweder lokal oder über eine Transmitterverbindung)- Returns:
true, wenn eine Senke verbunden ist, sonstfalse
-
isValidSender
public boolean isValidSender(CommunicationInterface communication)
Prüft, ob die angegebene Kommunikationsklasse senden darf (also als gültiger Sender angemeldet ist)- Parameters:
communication- Kommunikation- Returns:
- true wenn gültig
-
setMultiRemoteLockActive
public void setMultiRemoteLockActive(boolean multiRemoteLockActive)
Setzt, ob Anmeldung ungültig gemacht werden sollen, weil mehrere remote-Zzentraldatenverteiler positive Rückmeldungen verschickt haben- Parameters:
multiRemoteLockActive- ob die Sperre_multiRemoteLockActiveaktiv sein soll.
-
getSendingSubscriptions
public java.util.List<SendingSubscription> getSendingSubscriptions(CommunicationInterface communicationInterface)
Gibt alle Sende-Anmeldungen zu einer Verbindung zurück- Parameters:
communicationInterface- Verbindung- Returns:
- Alle Quellen und Sender hinter dieser Verbindung (evtl. eine leere Liste falls nicht vorhanden)
-
getReceivingSubscriptions
public java.util.List<ReceivingSubscription> getReceivingSubscriptions(CommunicationInterface communicationInterface)
Gibt alle Empfangs-Anmeldungen zu einer Verbindung zurück- Parameters:
communicationInterface- Verbindung- Returns:
- Alle Senken und Empfänger hinter dieser Verbindung (evtl. eine leere Liste falls nicht vorhanden)
-
getSendingSubscriptions
public java.util.Collection<SendingSubscription> getSendingSubscriptions()
Gibt alle sendenden Anmeldungen zurück- Returns:
- alle Sender und Quellen dieser Datenidentifikation
-
getReceivingSubscriptions
public java.util.Collection<ReceivingSubscription> getReceivingSubscriptions()
Gibt alle Empfangs-Anmeldungen zurück- Returns:
- alle Senken und Empfänger dieser Datenidentifikation
-
updateBestWay
public void updateBestWay(long transmitterId, TransmitterCommunicationInterface oldConnection, TransmitterCommunicationInterface newConnection)Wird von bestWaymanager aufgerufen, wenn es eine neue beste lokale Verbindung zu einem Zentraldatenverteiler gibt- Parameters:
transmitterId- Zentraldatenverteiler-IDoldConnection- Alte VerbindungnewConnection- Neue Verbindung
-
serializeToBytes
public byte[] serializeToBytes() throws java.io.IOExceptionSerialisiert die Anmelde-Informationen in Bytes um sie über den Datenverteiler zu Testzwecken abrufen zu können.- Returns:
- Byte-Array
- Throws:
java.io.IOException
-
toString
public java.lang.String toString()
- Overrides:
toStringin classjava.lang.Object
-
getOrCreateRemoteDrainSubscription
public RemoteDrainSubscription getOrCreateRemoteDrainSubscription(TransmitterCommunicationInterface connection)
Erstellt eine Remote-Senken-Anmeldung über eine angegebene Verbindung bzw. gibt diese zurück wenn sie schon besteht- Parameters:
connection- Verbindung- Returns:
- Senkenanmeldung
-
getOrCreateRemoteSourceSubscription
public RemoteSourceSubscription getOrCreateRemoteSourceSubscription(TransmitterCommunicationInterface connection)
Erstellt eine Remote-Quellen-Anmeldung über eine angegebene Verbindung bzw. gibt diese zurück wenn sie schon besteht- Parameters:
connection- Verbindung- Returns:
- Quellenanmeldung
-
updateOrCreateRemoteReceiverSubscription
public void updateOrCreateRemoteReceiverSubscription(TransmitterCommunicationInterface communication, java.util.Collection<java.lang.Long> ids)
Erstellt eine eingehende Anmeldung von einem anderen Datenverteiler als interessierter Empfänger (dieser Datenverteiler ist dann typischerweise potentiell Quell-Datenverteiler bzw. agiert als Proxy zum eigentlichen Zentraldatenverteiler). Wenn es schon eine bestehende Anmeldung gibt wird diese stattdessen um die potentiellen Zentraldatenverteiler erweitert.- Parameters:
communication- Verbindungids- Liste mit Zentaldatenverteiler-Ids, die berücksichtigt werden sollen
-
updateOrCreateRemoteSenderSubscription
public void updateOrCreateRemoteSenderSubscription(TransmitterCommunicationInterface communication, java.util.Collection<java.lang.Long> ids)
Erstellt eine eingehende Anmeldung von einem anderen Datenverteiler als interessierter Sender (dieser Datenverteiler ist dann typischerweise potentiell eine Senke bzw. agiert als Proxy zum eigentlichen Zentraldatenverteiler). Wenn es schon eine bestehende Anmeldung gibt wird diese stattdessen um die potentiellen Zentraldatenverteiler erweitert.- Parameters:
communication- Verbindungids- Liste mit Zentaldatenverteiler-Ids, die berücksichtigt werden sollen
-
open
public void open()
Markiert das SubscriptionInfo als offen, sodass Änderungen an den Anmeldungen durchgeführt werden dürfen.Wird auf den SubscriptionsManager synchronisiert ausgeführt
-
close
public void close()
Markiert das SubscriptionInfo als geschlossen, nachdem Änderungen an den Anmeldungen durchgeführt wurden. Falls das Objekt leer ist und von keinem mehr offen ist, wird geprüft ob Anmeldungen vorhanden sind. Falls nicht, wird das Objekt aus dem SubscriptionsManager entfernt.Synchronisiert auf den _subscriptionsManager, daher keine Synchronisation von _referenceCounter notwendig.
- Specified by:
closein interfacejava.lang.AutoCloseable- Specified by:
closein interfacejava.io.Closeable
-
-