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.Closeable
Diese 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 void
addReceivingSubscription(ReceivingSubscription receivingSubscription)
Fügt eine empfangende Anmeldung hinzuvoid
addSendingSubscription(SendingSubscription sendingSubscription)
Fügt eine sendende Anmeldung hinzuvoid
close()
Markiert das SubscriptionInfo als geschlossen, nachdem Änderungen an den Anmeldungen durchgeführt wurden.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ängervoid
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ängerde.bsvrz.dav.daf.communication.lowLevel.telegrams.BaseSubscriptionInfo
getBaseSubscriptionInfo()
Gibt das BaseSubscriptionInfo zurücklong
getCurrentDataIndex(long runningNumber)
Gibt den zuletzt berechneten Datenindex zurücklong
getNextDataIndex(long runningNumber)
Berechnet den nächsten Datenindex und gibt diesen zurückRemoteDrainSubscription
getOrCreateRemoteDrainSubscription(TransmitterCommunicationInterface connection)
Erstellt eine Remote-Senken-Anmeldung über eine angegebene Verbindung bzw. gibt diese zurück wenn sie schon bestehtRemoteSourceSubscription
getOrCreateRemoteSourceSubscription(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ückvoid
handleUserRightsChanged(long userId)
Aktualisert die Rechte von Anmeldungen und macht diese dadurch gültig/ungültigboolean
hasDrain()
Gibttrue
zurück, wenn eine Senke verbunden ist (entweder lokal oder über eine Transmitterverbindung)boolean
hasSource()
Gibttrue
zurück, wenn eine Quelle verbunden ist (entweder lokal oder über eine Transmitterverbindung)boolean
isCentralDistributor()
Gibttrue
zurück, wenn dieser Datenverteiler Zentraldatenverteiler für diese Anmeldung istboolean
isEmpty()
Gibttrue
zurück, wenn es keine Anmeldungen gibtboolean
isValidSender(CommunicationInterface communication)
Prüft, ob die angegebene Kommunikationsklasse senden darf (also als gültiger Sender angemeldet ist)void
open()
Markiert das SubscriptionInfo als offen, sodass Änderungen an den Anmeldungen durchgeführt werden dürfen.void
removeReceivingSubscription(ReceivingSubscription receivingSubscription)
Entfernt eine empfangende Anmeldungjava.util.List<ReceivingSubscription>
removeReceivingSubscriptions(CommunicationInterface communication)
Entfernt alle empfangende Anmedungen, die über die angegebene Verbindung angemeldet sindvoid
removeSendingSubscription(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.void
setMultiRemoteLockActive(boolean multiRemoteLockActive)
Setzt, ob Anmeldung ungültig gemacht werden sollen, weil mehrere remote-Zzentraldatenverteiler positive Rückmeldungen verschickt habenvoid
setRemoteDrainSubscriptionStatus(TransmitterCommunicationInterface communication, ConnectionState state, long mainTransmitterId)
Verarbeitet eine Anmeldungsquittung von einem anderen Datenverteiler, aktualisert den Status der entsprechenden ausgehenden Anmeldungvoid
setRemoteSourceSubscriptionStatus(TransmitterCommunicationInterface communication, ConnectionState state, long mainTransmitterId)
Verarbeitet eine Anmeldungsquittung von einem anderen Datenverteiler, aktualisert den Status der entsprechenden ausgehenden Anmeldungjava.lang.String
toString()
void
updateBestWay(long transmitterId, TransmitterCommunicationInterface oldConnection, TransmitterCommunicationInterface newConnection)
Wird von bestWaymanager aufgerufen, wenn es eine neue beste lokale Verbindung zu einem Zentraldatenverteiler gibtvoid
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).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).void
updatePendingSubscriptionDataIndex(CommunicationInterface communication, long dataIndex)
void
updateRemoteConnections()
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()
Gibttrue
zurück, wenn es keine Anmeldungen gibt- Returns:
true
, wenn es keine Anmeldungen gibt, sonstfalse
-
isCentralDistributor
public boolean isCentralDistributor()
Gibttrue
zurü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()
Gibttrue
zurück, wenn eine Quelle verbunden ist (entweder lokal oder über eine Transmitterverbindung)- Returns:
true
, wenn eine Quelle verbunden ist, sonstfalse
-
hasDrain
public boolean hasDrain()
Gibttrue
zurü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_multiRemoteLockActive
aktiv 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.IOException
Serialisiert 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:
toString
in 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:
close
in interfacejava.lang.AutoCloseable
- Specified by:
close
in interfacejava.io.Closeable
-
-