Class HighLevelConnectionsManager

java.lang.Object
de.bsvrz.dav.dav.main.HighLevelConnectionsManager
All Implemented Interfaces:
HighLevelConnectionsManagerInterface

public final class HighLevelConnectionsManager
extends java.lang.Object
implements HighLevelConnectionsManagerInterface
Diese Klasse stellt das Bindeglied zwischen dem LowLevelConnectionsManager und den Funktionen der oberen Ebene wie dem HighLevelApplicationManager, HighLevelTransmitterManager und dem TelegramManager dar. Zusätzlich bietet diese Klasse Funktionen von allgemeinem Interesse zur Verbindungsverwaltung, wie z.B. das Herausfinden einer Datenverteiler- oder Applikations-Verbindung von einer Id, das Terminieren des Datenverteilers, das Terminieren von Verbindungen usw., zudem bindet diese Klasse den TerminationQueryReceiver ein, der clientseitige Terminierungsanfragen entgegennimmt.
  • Constructor Details

    • HighLevelConnectionsManager

      public HighLevelConnectionsManager​(LowLevelConnectionsManagerInterface lowLevelConnectionsManager, de.bsvrz.dav.daf.accessControl.AccessControlMode userRightsChecking)
      Initialisiert den HighLevelConnectionsManager
      Parameters:
      lowLevelConnectionsManager - LowLevelConnectionsManager
      userRightsChecking -
  • Method Details

    • setSelfClientDavConnection

      public void setSelfClientDavConnection​(SelfClientDavConnection selfClientDavConnection)
      Setzt die eigene Datenverteilerverbindung und initialisiert damit weitere Funktionen
      Parameters:
      selfClientDavConnection - selfClientDavConnection
    • getApplicationManager

      public HighLevelApplicationManager getApplicationManager()
      Gibt die Applikationsverwaltung zurück
      Returns:
      Applikationsverwaltung
    • getTransmitterManager

      public HighLevelTransmitterManager getTransmitterManager()
      Gibt die Verwaltung für andere Datenverteilerverbindungen zurück
      Returns:
      Datenverteiler-Verwaltung
      Throws:
      java.lang.IllegalStateException - wenn noch keine verbindung Konfiguration besteht und deswegen noch keine Datenverteiler-Datenverteiler-Verbindungen vorgesehen sind.
    • removeConnection

      public void removeConnection​(T_A_HighLevelCommunication communication)
      Wird aufgerufen, wenn die Verbindung zu einer Applikation terminiert wurde. Hierbei werden verbliebene Anmeldungen entfernt und verschiedene Aufräumarbeiten erledigt.
      Specified by:
      removeConnection in interface HighLevelConnectionsManagerInterface
      Parameters:
      communication - Applikationsverbindung
    • removeConnection

      public void removeConnection​(T_T_HighLevelCommunication communication)
      Wird aufgerufen, wenn die Verbindung zu einem Datenverteiler terminiert wurde. Hierbei werden verbliebene Anmeldungen entfernt und verschiedene Aufräumarbeiten erledigt.
      Specified by:
      removeConnection in interface HighLevelConnectionsManagerInterface
      Parameters:
      communication - Datenverteiler-Verbindung
    • getConfigurationId

      public long getConfigurationId​(java.lang.String configurationPid)
      Gibt die ID der Konfiguration mit der gegebenen Pid zurück
      Specified by:
      getConfigurationId in interface HighLevelConnectionsManagerInterface
      Parameters:
      configurationPid - Die Pid der Konfiguration
      Returns:
      die Id der Konfiguration oder -1 falls kein Objekt gefunden werden konnte
      Throws:
      java.lang.IllegalStateException - falls noch keine Verbindung zur Konfiguration besteht
    • getTransmitterTypePid

      public java.lang.String getTransmitterTypePid()
      Description copied from interface: HighLevelConnectionsManagerInterface
      Gibt den Typ der lokalen ClientDav-Verbindung zurück
      Specified by:
      getTransmitterTypePid in interface HighLevelConnectionsManagerInterface
      Returns:
      Gibt die Typ-Pid des lokalen Applikationsobjektes zurück
    • getTransmitterApplicationName

      public java.lang.String getTransmitterApplicationName()
      Description copied from interface: HighLevelConnectionsManagerInterface
      Gibt den Namen der lokalen Transmitter-Anwendung zurück
      Specified by:
      getTransmitterApplicationName in interface HighLevelConnectionsManagerInterface
      Returns:
      Gibt den Namen der lokalen Applikation zurück
    • getTransmitterId

      public long getTransmitterId()
      Description copied from interface: HighLevelConnectionsManagerInterface
      Gibt die ID des eigenen Transmitters zurück
      Specified by:
      getTransmitterId in interface HighLevelConnectionsManagerInterface
      Returns:
      Gibt die Id dieses Datenverteilers zurück
    • getUserName

      public java.lang.String getUserName()
      Description copied from interface: HighLevelConnectionsManagerInterface
      Gibt den Benutzernamen zurück unter dem der Datenverteiler läuft
      Specified by:
      getUserName in interface HighLevelConnectionsManagerInterface
      Returns:
      Gibt den Benutzernamen zurück, der z.B. bei der Authentifizierung bei anderen Datenverteilern benutzt wird
    • getStoredClientCredentials

      @Nullable public de.bsvrz.dav.daf.main.authentication.ClientCredentials getStoredClientCredentials​(java.lang.String userName, java.lang.String suffix)
      Gibt das gespeicherte Passwort für einen bestimmten Benutzer aus der Passwort-Datei zurück
      Specified by:
      getStoredClientCredentials in interface HighLevelConnectionsManagerInterface
      Parameters:
      userName - Benutzername
      suffix - Verbindungspartner (damit kann je Verbindungspartner ein unterschiedliches Passwort definiert werden) Wird ignoriert falls null oder leer
      Returns:
      Passwort oder null falls kein Passwort für diesen Benutzer ermittelt werden konnte
    • getStoredClientCredentials

      @Nullable public de.bsvrz.dav.daf.main.authentication.ClientCredentials getStoredClientCredentials​(java.lang.String userName, long id)
      Description copied from interface: HighLevelConnectionsManagerInterface
      Gibt das in der Passwort(passwd)-Datei gespeicherte Passwort für den angegebenen Benutzernamen zurück
      Specified by:
      getStoredClientCredentials in interface HighLevelConnectionsManagerInterface
      Parameters:
      userName - Benutzername
      id - ID-Des Verbindungspartners (Systemobjekt, wird automatisch in eine Pid umgewandelt)
      Returns:
      Passwort oder null falls der Benutzername nicht gefunden werden konnte
    • getWeight

      public short getWeight​(long transmitterId)
      Gibt das gewicht zwischen der Verbindung zwischen diesem Datenverteiler und einem anderen direkt verbundenen Datenverteiler zurück.
      Specified by:
      getWeight in interface HighLevelConnectionsManagerInterface
      Parameters:
      transmitterId - ID des anderen Datenverteilers
      Returns:
      Gewicht
    • getTransmitterConnectionInfo

      public de.bsvrz.dav.daf.main.impl.config.telegrams.TransmitterConnectionInfo getTransmitterConnectionInfo​(long connectedTransmitterId)
      Gibt das TransmitterConnectionInfo-Objekt zu einem Datenverteiler zurück
      Specified by:
      getTransmitterConnectionInfo in interface HighLevelConnectionsManagerInterface
      Parameters:
      connectedTransmitterId - Verbundener Datenverteiler
      Returns:
      Verbindungsinformationen
    • getRemoteTransmitterConnectionInfo

      public de.bsvrz.dav.daf.main.impl.config.telegrams.TransmitterConnectionInfo getRemoteTransmitterConnectionInfo​(long connectedTransmitterId)
      Bestimmt die Verbindungsinformationen für eine Verbindung vom angegebenen Datenverteiler zu diesem Datenverteiler.
      Specified by:
      getRemoteTransmitterConnectionInfo in interface HighLevelConnectionsManagerInterface
      Parameters:
      connectedTransmitterId - ID des DAV
      Returns:
      Verbindungsinformationen
    • getTelegramManager

      public TelegramManager getTelegramManager()
      Gibt den TelegramManager zurück
      Specified by:
      getTelegramManager in interface HighLevelConnectionsManagerInterface
      Returns:
      TelegramManager
    • getApplicationConnectionFromId

      public T_A_HighLevelCommunication getApplicationConnectionFromId​(long applicationId)
      Bestimmt anhand einer Id die Verbindung dieser angemeldeten Applikation
      Specified by:
      getApplicationConnectionFromId in interface HighLevelConnectionsManagerInterface
      Parameters:
      applicationId - ID
      Returns:
      Applikationsverbindung oder null falls die Applikation nicht verbunden ist bzw. noch keine Id zugewiesen bekommen hat.
    • getTransmitterConnectionFromId

      public T_T_HighLevelCommunication getTransmitterConnectionFromId​(long transmitterId)
      Bestimmt anhand einer Id die Verbindung diesem angemeldeten Datenverteiler
      Specified by:
      getTransmitterConnectionFromId in interface HighLevelConnectionsManagerInterface
      Parameters:
      transmitterId - ID
      Returns:
      Datenverteilerverbindung oder null falls der Datenverteiler nicht verbunden ist bzw. noch keine Id zugewiesen bekommen hat.
    • getAllApplicationConnections

      public java.util.Collection<T_A_HighLevelCommunication> getAllApplicationConnections()
      Gibt alle Applikationsverbindungen zurück
      Specified by:
      getAllApplicationConnections in interface HighLevelConnectionsManagerInterface
      Returns:
      alle Applikationsverbindungen
    • getAllTransmitterConnections

      public java.util.Collection<T_T_HighLevelCommunication> getAllTransmitterConnections()
      Gibt alle Datenverteilerverbindungen zurück
      Specified by:
      getAllTransmitterConnections in interface HighLevelConnectionsManagerInterface
      Returns:
      alle Datenverteilerverbindungen
    • shutdown

      public void shutdown​(boolean isError, java.lang.String message)
      Beendet den Datenverteiler
      Specified by:
      shutdown in interface HighLevelConnectionsManagerInterface
      Parameters:
      isError - Zum signalisieren, dass ein Fehler aufgetreten ist: true, sonst false
      message - Nach Bedarf eine Fehlermeldung o.ä. zur Ursache des Terminierungsbefehls
    • getAccessControlPluginsClassNames

      public java.util.List<java.lang.String> getAccessControlPluginsClassNames()
      Gibt eine Liste mit den per Kommandozeile festgelegten Zugriffssteuerungs-Plugin-Klassennamen zurück
      Specified by:
      getAccessControlPluginsClassNames in interface HighLevelConnectionsManagerInterface
      Returns:
      Liste mit den Zugriffssteuerungs-Plugin-Klassennamen
    • getDavObject

      public de.bsvrz.dav.daf.main.config.ConfigurationObject getDavObject()
      Description copied from interface: HighLevelConnectionsManagerInterface
      Gibt das Konfigurations-Objekt, das den datenverteiler repräsentiert zurück
      Specified by:
      getDavObject in interface HighLevelConnectionsManagerInterface
      Returns:
      das Konfigurations-Objekt, das den datenverteiler repräsentiert
    • getPotentialCentralDistributors

      public java.util.List<java.lang.Long> getPotentialCentralDistributors​(de.bsvrz.dav.daf.communication.lowLevel.telegrams.BaseSubscriptionInfo baseSubscriptionInfo)
      Description copied from interface: HighLevelConnectionsManagerInterface
      Gibt potentielle Zentraldatenverteiler für die angegebene Anmeldeinformation zurück
      Specified by:
      getPotentialCentralDistributors in interface HighLevelConnectionsManagerInterface
      Parameters:
      baseSubscriptionInfo - Anmeldeinformation
      Returns:
      Potentielle Zentraldatenverteiler
    • getBestConnectionToRemoteDav

      public T_T_HighLevelCommunicationInterface getBestConnectionToRemoteDav​(long remoteDav)
      Description copied from interface: HighLevelConnectionsManagerInterface
      Gibt die beste Verbindung zum angegebenen (nicht notwendigerweise direkt verbundenen) Datenverteiler zurück
      Specified by:
      getBestConnectionToRemoteDav in interface HighLevelConnectionsManagerInterface
      Returns:
      die beste Verbindung zum angegebenen Datenverteiler
    • updateListsNewLocalSubscription

      public void updateListsNewLocalSubscription​(de.bsvrz.dav.daf.communication.lowLevel.telegrams.BaseSubscriptionInfo baseSubscriptionInfo)
      Description copied from interface: HighLevelConnectionsManagerInterface
      Informiert die Anmeldelisten, dass dieser Datenverteiler Zentraldatenverteiler für die angegebene Anmeldung geworden ist
      Specified by:
      updateListsNewLocalSubscription in interface HighLevelConnectionsManagerInterface
      Parameters:
      baseSubscriptionInfo - Anmeldung
    • updateListsRemovedLocalSubscription

      public void updateListsRemovedLocalSubscription​(de.bsvrz.dav.daf.communication.lowLevel.telegrams.BaseSubscriptionInfo baseSubscriptionInfo)
      Description copied from interface: HighLevelConnectionsManagerInterface
      Informiert die Anmeldelisten, dass dieser Datenverteiler nicht mehr Zentraldatenverteiler für die angegebene Anmeldung ist
      Specified by:
      updateListsRemovedLocalSubscription in interface HighLevelConnectionsManagerInterface
      Parameters:
      baseSubscriptionInfo - Anmeldung
    • isClosing

      public boolean isClosing()
      Description copied from interface: HighLevelConnectionsManagerInterface
      Gibt true zurück, wenn sich der Datenverteiler gerade beendet
      Specified by:
      isClosing in interface HighLevelConnectionsManagerInterface
      Returns:
      true, wenn sich der Datenverteiler gerade beendet, sonst false
    • getSubscriptionsManager

      public HighLevelSubscriptionsManager getSubscriptionsManager()
      Description copied from interface: HighLevelConnectionsManagerInterface
      Gibt den SubscriptionsManager zurück
      Specified by:
      getSubscriptionsManager in interface HighLevelConnectionsManagerInterface
      Returns:
      den SubscriptionsManager
    • fetchSrpVerifierAndUser

      public de.bsvrz.dav.daf.communication.srpAuthentication.SrpVerifierAndUser fetchSrpVerifierAndUser​(java.lang.String userNameForVerifier, int passwordIndex) throws de.bsvrz.dav.daf.communication.srpAuthentication.SrpNotSupportedException
      Description copied from interface: HighLevelConnectionsManagerInterface
      Holt den SRP-Überprüfungscode und die Benutzer-ID von einem Benutzer von der Konfiguration
      Specified by:
      fetchSrpVerifierAndUser in interface HighLevelConnectionsManagerInterface
      Parameters:
      userNameForVerifier - Anzufragender Benutzername
      passwordIndex - Index des Einmalpassworts
      Returns:
      Überprüfungscode und Benutzername analog zur UserAdministration-Implementierung. Insbesondere ist der Benutzer UserLogin.notAuthenticated() falls es den Benutzer nicht gibt, aber es wird immer ein SRP-Überprüfungscode erzeugt um eine SrpServerAuthentication.step1(String, BigInteger, BigInteger, boolean) Fake-Authentifizierung} zu ermöglichen.
      Throws:
      de.bsvrz.dav.daf.communication.srpAuthentication.SrpNotSupportedException - Falls SRP nicht untersützt wird
    • disableSingleServingPassword

      public void disableSingleServingPassword​(java.lang.String userName, int passwordIndex)
      Description copied from interface: HighLevelConnectionsManagerInterface
      Markiert das angegebene Einmalpasswort als benutzt (nachdem der Benutzer es zum erfolgreichen Einloggen verwendet hat)
      Specified by:
      disableSingleServingPassword in interface HighLevelConnectionsManagerInterface
      Parameters:
      userName - Benutzername
      passwordIndex - Index des Einmalpassworts
    • initializeUser

      public void initializeUser​(long userId)
      Initialisiert die Zugriffsrechte für den angegebenen Benutzer
      Parameters:
      userId - Benutzer-ID (muss in der lokalen Konfiguration existieren)
    • updateTransmitterCommunicationStates

      public void updateTransmitterCommunicationStates​(java.util.Map<de.bsvrz.dav.daf.main.impl.config.telegrams.TransmitterInfo,​CommunicationStateAndMessage> connections)
      Benachrichtigung über den Status der konfigurierten Transmitter-Verbindungen

      Als Key werden die konfigurierten Verbindungsinformationen gespeichert (siehe ConfigurationManager.getTransmitterConnectionInfo(long)).

      Als Values wird der Verbindungsstatus gespeichert plus eine eventuelle Fehlernachricht.

      Parameters:
      connections - Konfigurierte Verbindungen