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 and Description |
---|
SubscriptionInfo(SubscriptionsManager subscriptionsManager,
BaseSubscriptionInfo baseSubscriptionInfo)
Erstellt eine neue SubscriptionInfo
|
Modifier and Type | Method and Description |
---|---|
void |
addReceivingSubscription(ReceivingSubscription receivingSubscription)
Fügt eine empfangende Anmeldung hinzu
|
void |
addSendingSubscription(SendingSubscription sendingSubscription)
Fügt eine sendende Anmeldung hinzu
|
void |
close()
Markiert das SubscriptionInfo als geschlossen, nachdem Änderungen an den Anmeldungen durchgeführt wurden.
|
void |
distributeTelegram(ApplicationDataTelegram applicationDataTelegram,
boolean toCentralDistributor,
CommunicationInterface communication)
Verschickt ein einzelnes Datentelegramm an alle interessierten und korrekt angemeldeten Empfänger
|
void |
distributeTelegrams(java.util.List<ApplicationDataTelegram> applicationDataTelegrams,
boolean toCentralDistributor,
CommunicationInterface communication)
Verschickt eine Liste von zusammengehörigen Datentelegrammen an alle interessierten und korrekt angemeldeten Empfänger
|
BaseSubscriptionInfo |
getBaseSubscriptionInfo()
Gibt das BaseSubscriptionInfo zurück
|
long |
getCurrentDataIndex(long runningNumber)
Gibt den zuletzt berechneten Datenindex zurück
|
long |
getNextDataIndex(long runningNumber)
Berechnet den nächsten Datenindex und gibt diesen zurück
|
RemoteDrainSubscription |
getOrCreateRemoteDrainSubscription(TransmitterCommunicationInterface connection)
Erstellt eine Remote-Senken-Anmeldung über eine angegebene Verbindung bzw. gibt diese zurück wenn sie schon besteht
|
RemoteSourceSubscription |
getOrCreateRemoteSourceSubscription(TransmitterCommunicationInterface connection)
Erstellt eine Remote-Quellen-Anmeldung über eine angegebene Verbindung bzw. gibt diese zurück wenn sie schon besteht
|
java.util.Collection<ReceivingSubscription> |
getReceivingSubscriptions()
Gibt alle Empfangs-Anmeldungen zurück
|
java.util.List<ReceivingSubscription> |
getReceivingSubscriptions(CommunicationInterface communicationInterface)
Gibt alle Empfangs-Anmeldungen zu einer Verbindung zurück
|
java.util.Collection<SendingSubscription> |
getSendingSubscriptions()
Gibt alle sendenden Anmeldungen zurück
|
java.util.List<SendingSubscription> |
getSendingSubscriptions(CommunicationInterface communicationInterface)
Gibt alle Sende-Anmeldungen zu einer Verbindung zurück
|
java.util.List<ReceivingSubscription> |
getValidReceiverSubscriptions()
Gibt alle gültigen empfangenden Anmeldungen zurück
|
java.util.List<SendingSubscription> |
getValidSenderSubscriptions()
Gibt alle gültigen sendenden Anmeldungen zurück
|
void |
handleUserRightsChanged(long userId)
Aktualisert die Rechte von Anmeldungen und macht diese dadurch gültig/ungültig
|
boolean |
hasDrain()
Gibt true zurück, wenn eine Senke verbunden ist (entweder lokal oder über eine Transmitterverbindung)
|
boolean |
hasSource()
Gibt true zurück, wenn eine Quelle verbunden ist (entweder lokal oder über eine Transmitterverbindung)
|
boolean |
isCentralDistributor()
Gibt true zurück, wenn dieser Datenverteiler Zentraldatenverteiler für diese Anmeldung ist
|
boolean |
isEmpty()
Gibt true zurück, wenn es keine Anmeldungen gibt
|
boolean |
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 Anmeldung
|
java.util.List<ReceivingSubscription> |
removeReceivingSubscriptions(CommunicationInterface communication)
Entfernt alle empfangende Anmedungen, die über die angegebene Verbindung angemeldet sind
|
void |
removeSendingSubscription(SendingSubscription sendingSubscription)
Entfernt eine sendende Anmeldung
|
java.util.List<SendingSubscription> |
removeSendingSubscriptions(CommunicationInterface communication)
Entfernt alle sendende Anmedungen, die über die angegebene Verbindung angemeldet sind
|
byte[] |
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 haben
|
void |
setRemoteDrainSubscriptionStatus(TransmitterCommunicationInterface communication,
ConnectionState state,
long mainTransmitterId)
Verarbeitet eine Anmeldungsquittung von einem anderen Datenverteiler, aktualisert den Status der entsprechenden ausgehenden Anmeldung
|
void |
setRemoteSourceSubscriptionStatus(TransmitterCommunicationInterface communication,
ConnectionState state,
long mainTransmitterId)
Verarbeitet eine Anmeldungsquittung von einem anderen Datenverteiler, aktualisert den Status der entsprechenden ausgehenden Anmeldung
|
java.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 gibt
|
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).
|
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
|
public SubscriptionInfo(SubscriptionsManager subscriptionsManager, BaseSubscriptionInfo baseSubscriptionInfo)
Erstellt eine neue SubscriptionInfo
subscriptionsManager
- AnmeldungsverwaltungbaseSubscriptionInfo
- Datenidentifikationpublic void addSendingSubscription(SendingSubscription sendingSubscription)
Fügt eine sendende Anmeldung hinzu
sendingSubscription
- neue sendende Anmeldungpublic void addReceivingSubscription(ReceivingSubscription receivingSubscription)
Fügt eine empfangende Anmeldung hinzu
receivingSubscription
- neue empfangende Anmeldungpublic void removeReceivingSubscription(ReceivingSubscription receivingSubscription)
Entfernt eine empfangende Anmeldung
receivingSubscription
- empfangende Anmeldungpublic void removeSendingSubscription(SendingSubscription sendingSubscription)
Entfernt eine sendende Anmeldung
sendingSubscription
- sendende Anmeldungpublic java.util.List<SendingSubscription> removeSendingSubscriptions(CommunicationInterface communication)
Entfernt alle sendende Anmedungen, die über die angegebene Verbindung angemeldet sind
communication
- Verbindungpublic java.util.List<ReceivingSubscription> removeReceivingSubscriptions(CommunicationInterface communication)
Entfernt alle empfangende Anmedungen, die über die angegebene Verbindung angemeldet sind
communication
- Verbindungpublic java.util.List<SendingSubscription> getValidSenderSubscriptions()
Gibt alle gültigen sendenden Anmeldungen zurück
public java.util.List<ReceivingSubscription> getValidReceiverSubscriptions()
Gibt alle gültigen empfangenden Anmeldungen zurück
public boolean isEmpty()
Gibt true zurück, wenn es keine Anmeldungen gibt
public boolean isCentralDistributor()
Gibt true zurück, wenn dieser Datenverteiler Zentraldatenverteiler für diese Anmeldung ist
public long getNextDataIndex(long runningNumber)
Berechnet den nächsten Datenindex und gibt diesen zurück
runningNumber
- Laufende Nummer, wird vom SubscriptionsManager bereitgestellt, da diese Objekte gelöscht werden sobas keine Anmeldungen mehr vorhanden sindpublic long getCurrentDataIndex(long runningNumber)
Gibt den zuletzt berechneten Datenindex zurück
runningNumber
- Laufende Nummer, wird vom SubscriptionsManager bereitgestellt, da diese Objekte gelöscht werden sobas keine Anmeldungen mehr vorhanden sindpublic void distributeTelegram(ApplicationDataTelegram applicationDataTelegram, boolean toCentralDistributor, CommunicationInterface communication)
Verschickt ein einzelnes Datentelegramm an alle interessierten und korrekt angemeldeten Empfänger
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 stattpublic void distributeTelegrams(java.util.List<ApplicationDataTelegram> applicationDataTelegrams, boolean toCentralDistributor, CommunicationInterface communication)
Verschickt eine Liste von zusammengehörigen Datentelegrammen an alle interessierten und korrekt angemeldeten Empfänger
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 stattpublic void updatePendingSubscriptionDataIndex(CommunicationInterface communication, long dataIndex)
public void handleUserRightsChanged(long userId)
Aktualisert die Rechte von Anmeldungen und macht diese dadurch gültig/ungültig
userId
- geänderter Benutzer, dessen Anmeldungen zu aktualisieren sindpublic void setRemoteSourceSubscriptionStatus(TransmitterCommunicationInterface communication, ConnectionState state, long mainTransmitterId)
Verarbeitet eine Anmeldungsquittung von einem anderen Datenverteiler, aktualisert den Status der entsprechenden ausgehenden Anmeldung
communication
- Kommunikationstate
- neuer StatusmainTransmitterId
- Id des Zentraldatenverteilerspublic void setRemoteDrainSubscriptionStatus(TransmitterCommunicationInterface communication, ConnectionState state, long mainTransmitterId)
Verarbeitet eine Anmeldungsquittung von einem anderen Datenverteiler, aktualisert den Status der entsprechenden ausgehenden Anmeldung
communication
- Kommunikationstate
- neuer StatusmainTransmitterId
- Id des Zentraldatenverteilerspublic BaseSubscriptionInfo getBaseSubscriptionInfo()
Gibt das BaseSubscriptionInfo zurück
public void updateRemoteConnections()
Wird aufgerufen, wenn im ListsManager ein Update stattfand und so eventuell neue oder bessere Wege für die Remote-Anmeldungen existieren
public boolean hasSource()
Gibt true zurück, wenn eine Quelle verbunden ist (entweder lokal oder über eine Transmitterverbindung)
public boolean hasDrain()
Gibt true zurück, wenn eine Senke verbunden ist (entweder lokal oder über eine Transmitterverbindung)
public boolean isValidSender(CommunicationInterface communication)
Prüft, ob die angegebene Kommunikationsklasse senden darf (also als gültiger Sender angemeldet ist)
communication
- Kommunikationpublic void setMultiRemoteLockActive(boolean multiRemoteLockActive)
Setzt, ob Anmeldung ungültig gemacht werden sollen, weil mehrere remote-Zzentraldatenverteiler positive Rückmeldungen verschickt haben
multiRemoteLockActive
- ob die Sperre _multiRemoteLockActive
aktiv sein soll.public java.util.List<SendingSubscription> getSendingSubscriptions(CommunicationInterface communicationInterface)
Gibt alle Sende-Anmeldungen zu einer Verbindung zurück
communicationInterface
- Verbindungpublic java.util.List<ReceivingSubscription> getReceivingSubscriptions(CommunicationInterface communicationInterface)
Gibt alle Empfangs-Anmeldungen zu einer Verbindung zurück
communicationInterface
- Verbindungpublic java.util.Collection<SendingSubscription> getSendingSubscriptions()
Gibt alle sendenden Anmeldungen zurück
public java.util.Collection<ReceivingSubscription> getReceivingSubscriptions()
Gibt alle Empfangs-Anmeldungen zurück
public void updateBestWay(long transmitterId, TransmitterCommunicationInterface oldConnection, TransmitterCommunicationInterface newConnection)
Wird von bestWaymanager aufgerufen, wenn es eine neue beste lokale Verbindung zu einem Zentraldatenverteiler gibt
transmitterId
- Zentraldatenverteiler-IDoldConnection
- Alte VerbindungnewConnection
- Neue Verbindungpublic byte[] serializeToBytes() throws java.io.IOException
Serialisiert die Anmelde-Informationen in Bytes um sie über den Datenverteiler zu Testzwecken abrufen zu können.
java.io.IOException
public java.lang.String toString()
toString
in class java.lang.Object
public RemoteDrainSubscription getOrCreateRemoteDrainSubscription(TransmitterCommunicationInterface connection)
Erstellt eine Remote-Senken-Anmeldung über eine angegebene Verbindung bzw. gibt diese zurück wenn sie schon besteht
connection
- Verbindungpublic RemoteSourceSubscription getOrCreateRemoteSourceSubscription(TransmitterCommunicationInterface connection)
Erstellt eine Remote-Quellen-Anmeldung über eine angegebene Verbindung bzw. gibt diese zurück wenn sie schon besteht
connection
- Verbindungpublic 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.
communication
- Verbindungids
- Liste mit Zentaldatenverteiler-Ids, die berücksichtigt werden sollenpublic 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.
communication
- Verbindungids
- Liste mit Zentaldatenverteiler-Ids, die berücksichtigt werden sollenpublic void open()
Markiert das SubscriptionInfo als offen, sodass Änderungen an den Anmeldungen durchgeführt werden dürfen.
Wird auf den SubscriptionsManager synchronisiert ausgeführt
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.
close
in interface java.io.Closeable
close
in interface java.lang.AutoCloseable