Class 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 Detail

      • SubscriptionInfo

        public SubscriptionInfo​(SubscriptionsManager subscriptionsManager,
                                de.bsvrz.dav.daf.communication.lowLevel.telegrams.BaseSubscriptionInfo baseSubscriptionInfo)
        Erstellt eine neue SubscriptionInfo
        Parameters:
        subscriptionsManager - Anmeldungsverwaltung
        baseSubscriptionInfo - 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()
        Gibt true zurück, wenn es keine Anmeldungen gibt
        Returns:
        true, wenn es keine Anmeldungen gibt, sonst false
      • isCentralDistributor

        public boolean isCentralDistributor()
        Gibt true zurück, wenn dieser Datenverteiler Zentraldatenverteiler für diese Anmeldung ist
        Returns:
        true, wenn dieser Datenverteiler Zentraldatenverteiler für diese Anmeldung ist, sonst false
      • 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 - Datentelegramm
        toCentralDistributor - wenn das Telegramm noch nicht beim Zentraldatenverteiler behandelt wurde, also der Datenindex noch nicht vernünftig gesetzt wurde
        communication - Verbindung über die der Emfang erfolgt ist (zur Rechteprüfung), bei null findet keine Prüfung statt
        applicationId - 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 - Datentelegramme
        toCentralDistributor - wenn das Telegramm noch nicht beim Zentraldatenverteiler behandelt wurde, also der Datenindex noch nicht vernünftig gesetzt wurde
        communication - Verbindung über die der Emfang erfolgt ist (zur Rechteprüfung), bei null findet keine Prüfung statt
        applicationId - 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 - Kommunikation
        state - neuer Status
        mainTransmitterId - 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 - Kommunikation
        state - neuer Status
        mainTransmitterId - 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()
        Gibt true zurück, wenn eine Quelle verbunden ist (entweder lokal oder über eine Transmitterverbindung)
        Returns:
        true, wenn eine Quelle verbunden ist, sonst false
      • hasDrain

        public boolean hasDrain()
        Gibt true zurück, wenn eine Senke verbunden ist (entweder lokal oder über eine Transmitterverbindung)
        Returns:
        true, wenn eine Senke verbunden ist, sonst false
      • 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-ID
        oldConnection - Alte Verbindung
        newConnection - 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 class java.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 - Verbindung
        ids - 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 - Verbindung
        ids - 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 interface java.lang.AutoCloseable
        Specified by:
        close in interface java.io.Closeable