de.bsvrz.dav.dav.communication.appProtocol
Class T_A_HighLevelCommunication

java.lang.Object
  extended by de.bsvrz.dav.dav.communication.appProtocol.T_A_HighLevelCommunication
All Implemented Interfaces:
HighLevelCommunicationCallbackInterface, T_A_HighLevelCommunicationInterface, ServerHighLevelCommunication

public class T_A_HighLevelCommunication
extends Object
implements T_A_HighLevelCommunicationInterface, HighLevelCommunicationCallbackInterface

Diese Klasse stellt eine Verbindung vom Datenverteiler zur Applikation dar. Über diese Verbindung können Telegramme an eine Applikation verschickt werden.

Author:
Kappich Systemberatung

Field Summary
private  long _applicationId
          Der Applikation Id
private  String _applicationName
          Der Name der Applikation
private  ConnectionsManager.ApplicationStatusUpdater _applicationStatusUpdater
          Wird benachrichtigt, sobald die Verbindung zur Applikation komplett aufgebaut wurde.
private  String _applicationTypePid
          Die Pid des Applikationstyps
private  AuthentificationComponent _authentificationComponent
          Die Authentifizierungskomponente
private  boolean _closed
           
private  Object _closedLock
           
private  long _configurationId
          Der Konfiguration Id
private  String _configurationPid
          Die Pid der Konfiguration
private  long _connectionCreatedTime
           
private  ConnectionsManager _connectionsManager
          Die Verwaltung der Datenverteiler Verbindungen
private static Debug _debug
           
private  LowLevelCommunicationInterface _lowLevelCommunication
          Die erste Ebene der Kommunikation
private  ServerConnectionProperties _properties
          Die Eigenschaften diese Verbindung
private  long _remoteUserId
          Die Id des Benutzers
private  Map<BaseSubscriptionInfo,List<ApplicationDataTelegram>> _stalledTelegramListMap
          Map in der eine je Datenidentifikation eine Liste von empfangenen Telegrammen, die zu einem Datensatz gehören zwischengespeichert werden können
private  T_A_SubscriptionComponent _subscriptionComponent
          Die Anmeldekomponente diese Verbindung
private  SubscriptionsManager _subscriptionsManager
          Die Verwaltung der Anmelde Komponenten
private  Object _sync
          Objekt zur internen Synchronization
private  List<DataTelegram> _syncSystemTelegramList
          Temporäre Liste der Systemtelegramme für interne Synchronisationszwecke.
private  int[] _versions
          Die unterstützten Versionen des Datenverteilers
private  boolean _waitForConfiguration
          Die Information ob auf die Konfiguration gewartet werden muss.
 
Constructor Summary
T_A_HighLevelCommunication(ServerConnectionProperties properties, SubscriptionsManager subscriptionsManager, ConnectionsManager connectionsManager, boolean waitForConfiguration)
          Erzeugt ein neues Objekt mit den gegebenen Parametern.
 
Method Summary
 void continueAuthentification()
          Diese Methode wird von der Verbindungsverwaltung aufgerufen, sobald die Konfiguration vorhanden ist, um zu signalisieren, dass eine blockierte Authentifizierung weiter bearbeitet werden kann: Steht eine Authentifizierungsschlüsselanfrage an, während die Konfiguration noch nicht vorhanden ist, wird die Antwort blockiert bis die Konfiguration bereit ist.
 List<ApplicationDataTelegram> createStalledTelegramList(BaseSubscriptionInfo info, int maxCount)
          Erzeugt eine Liste für verzögerte Telegramme für eine Datenidentifikation und speichert sie in einer Map.
 List<ApplicationDataTelegram> deleteStalledTelegramList(BaseSubscriptionInfo info)
          Liefert eine vorher erzeugte Liste für verzögerte Telegramme für eine Datenidentifikation und entfernt sie aus der Map.
 void disconnected(boolean error, String message)
           
 String getApplicationName()
          Gibt den Namen der Applikation zurück.
 String getApplicationTypePid()
          Gibt den Typ der Applikation zurück.
 long getConfigurationId()
          Gibt die Id der Konfiguration zurück.
 long getConnectionCreatedTime()
          Zeitpunkt, an dem das Objekt erstellt wurde und somit eine Verbindung zum DaV bestand.
 long getDataTransmitterId()
          Gibt die Id des Datenverteilers zurück.
 long getId()
          Diese Methode wird von der Verbindungsverwaltung aufgerufen, um die ID der verbundenen Applikation zu erhalten.
private  int getPrefferedVersion(int[] versions)
          Gibt die Version zurück, die von dieser Verbindung unterstützt wird.
 long getRemoteUserId()
          Gibt die ID des verbundenen Benutzers zurück.
 String getSendBufferState()
          Liefert einen beschreibenden Text mit dem Zustand des Sendepuffers aus der LowLevelCommunication.
 List<ApplicationDataTelegram> getStalledTelegramList(BaseSubscriptionInfo info)
          Liefert eine vorher erzeugte Liste für verzögerte Telegramme für eine Datenidentifikation.
 SubscriptionComponent getSubscriptionComponent()
          Gibt die Komponente zurück, die die Anmeldungen der Verbindung verwaltet.
 long getTelegrammTime(long maxWaitingTime)
          Diese Methode wird von der Verbindungsverwaltung aufgerufen.
 boolean isConfiguration()
          Gibt zurück, ob es sich um die Konfiguration handelt.
 void sendData(ApplicationDataTelegram telegram)
          Sendet ein Telegramm über die Telegrammverwaltung zur Applikation.
 void sendData(ApplicationDataTelegram[] telegrams)
          Sendet mehrere Telegramme über die Telegrammverwaltung zur Applikation.
 void setApplicationStatusUpdater(ConnectionsManager.ApplicationStatusUpdater applicationStatusUpdater)
          Dieses Objekt wird benachrichtigt, sobald die Verbindung zur Applikation aufgebaut wurde.
 void terminate(boolean error, String message)
          Terminiert die Kommunikationsverbindung.
 void terminate(boolean error, String message, DataTelegram terminationTelegram)
           
 void triggerSender(BaseSubscriptionInfo data, byte state)
          Diese Methode wird von der Verbindungsverwaltung aufgerufen, um eine Sendesteuerung an die Applikation weiterzuleiten.
 void update(DataTelegram telegram)
           
 void updateConfigData(SendDataObject receivedData)
           
 
Methods inherited from class java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
 

Field Detail

_debug

private static final Debug _debug

_lowLevelCommunication

private LowLevelCommunicationInterface _lowLevelCommunication
Die erste Ebene der Kommunikation


_properties

private ServerConnectionProperties _properties
Die Eigenschaften diese Verbindung


_versions

private int[] _versions
Die unterstützten Versionen des Datenverteilers


_applicationId

private long _applicationId
Der Applikation Id


_remoteUserId

private long _remoteUserId
Die Id des Benutzers


_configurationId

private long _configurationId
Der Konfiguration Id


_applicationName

private String _applicationName
Der Name der Applikation


_applicationTypePid

private String _applicationTypePid
Die Pid des Applikationstyps


_configurationPid

private String _configurationPid
Die Pid der Konfiguration


_subscriptionsManager

private SubscriptionsManager _subscriptionsManager
Die Verwaltung der Anmelde Komponenten


_connectionsManager

private ConnectionsManager _connectionsManager
Die Verwaltung der Datenverteiler Verbindungen


_subscriptionComponent

private T_A_SubscriptionComponent _subscriptionComponent
Die Anmeldekomponente diese Verbindung


_authentificationComponent

private AuthentificationComponent _authentificationComponent
Die Authentifizierungskomponente


_syncSystemTelegramList

private List<DataTelegram> _syncSystemTelegramList
Temporäre Liste der Systemtelegramme für interne Synchronisationszwecke.


_waitForConfiguration

private boolean _waitForConfiguration
Die Information ob auf die Konfiguration gewartet werden muss.


_sync

private Object _sync
Objekt zur internen Synchronization


_closed

private boolean _closed

_closedLock

private Object _closedLock

_connectionCreatedTime

private final long _connectionCreatedTime

_applicationStatusUpdater

private ConnectionsManager.ApplicationStatusUpdater _applicationStatusUpdater
Wird benachrichtigt, sobald die Verbindung zur Applikation komplett aufgebaut wurde. Ist dieses Objekt nicht vorhanden, wird nichts gemacht.


_stalledTelegramListMap

private Map<BaseSubscriptionInfo,List<ApplicationDataTelegram>> _stalledTelegramListMap
Map in der eine je Datenidentifikation eine Liste von empfangenen Telegrammen, die zu einem Datensatz gehören zwischengespeichert werden können

Constructor Detail

T_A_HighLevelCommunication

public T_A_HighLevelCommunication(ServerConnectionProperties properties,
                                  SubscriptionsManager subscriptionsManager,
                                  ConnectionsManager connectionsManager,
                                  boolean waitForConfiguration)
Erzeugt ein neues Objekt mit den gegebenen Parametern.

Parameters:
properties - stellt die Parameter einer Verbindung zwischen zwei Servern
subscriptionsManager - Verwaltung der Anmeldungen
connectionsManager - Verbindungsverwaltung
waitForConfiguration - true: ,false:
Method Detail

setApplicationStatusUpdater

public void setApplicationStatusUpdater(ConnectionsManager.ApplicationStatusUpdater applicationStatusUpdater)
Dieses Objekt wird benachrichtigt, sobald die Verbindung zur Applikation aufgebaut wurde.

Parameters:
applicationStatusUpdater - Objekt, das benachrichtigt wird.

getTelegrammTime

public final long getTelegrammTime(long maxWaitingTime)
                            throws CommunicationError
Description copied from interface: ServerHighLevelCommunication
Diese Methode wird von der Verbindungsverwaltung aufgerufen. Ein Telegramm TelegramTimeRequest wird erzeugt und zur Applikation gesendet. Danach wird auf die Antwort TelegramTimeAnswer gewartet. Wenn die Antwort nicht innerhalb der angegebenen maximalen Wartezeit angekommen ist, wird eine Ausnahme erzeugt.

Specified by:
getTelegrammTime in interface ServerHighLevelCommunication
Parameters:
maxWaitingTime - Maximale Zeit, die auf eine Antwort gewartet wird.
Returns:
die Telegrammlaufzeit oder -1, wenn nicht innnerhalb der maximalen Wartezeit eine Antwort empfangen wurde.
Throws:
CommunicationError - Wenn bei der initialen Kommunikation mit dem Datenverteiler Fehler aufgetreten sind.

sendData

public final void sendData(ApplicationDataTelegram telegram)
Description copied from interface: T_A_HighLevelCommunicationInterface
Sendet ein Telegramm über die Telegrammverwaltung zur Applikation.

Specified by:
sendData in interface T_A_HighLevelCommunicationInterface
Parameters:
telegram - Telegramm, das verschickt werden soll.

sendData

public final void sendData(ApplicationDataTelegram[] telegrams)
Description copied from interface: T_A_HighLevelCommunicationInterface
Sendet mehrere Telegramme über die Telegrammverwaltung zur Applikation.

Specified by:
sendData in interface T_A_HighLevelCommunicationInterface
Parameters:
telegrams - Telegramme, die verschickt werden sollen.

terminate

public final void terminate(boolean error,
                            String message)
Description copied from interface: ServerHighLevelCommunication
Terminiert die Kommunikationsverbindung.

Specified by:
terminate in interface ServerHighLevelCommunication
Parameters:
error - Ist true, wenn die Verbindung im Fehlerfall abgebrochen werden soll, ohne die noch gepufferten Telegramme zu versenden; false, wenn versucht werden soll alle gepufferten Telegramme zu versenden.
message - Fehlermeldung, die die Fehlersituation näher beschreibt.

getConnectionCreatedTime

public long getConnectionCreatedTime()
Zeitpunkt, an dem das Objekt erstellt wurde und somit eine Verbindung zum DaV bestand.

Returns:
Zeit in ms seit dem 1.1.1970

getSendBufferState

public String getSendBufferState()
Liefert einen beschreibenden Text mit dem Zustand des Sendepuffers aus der LowLevelCommunication.

Returns:
Sendepufferzustand als Text
See Also:
LowLevelCommunicationInterface.getSendBufferState()

terminate

public final void terminate(boolean error,
                            String message,
                            DataTelegram terminationTelegram)

disconnected

public void disconnected(boolean error,
                         String message)
Specified by:
disconnected in interface HighLevelCommunicationCallbackInterface

updateConfigData

public void updateConfigData(SendDataObject receivedData)
Specified by:
updateConfigData in interface HighLevelCommunicationCallbackInterface

triggerSender

public final void triggerSender(BaseSubscriptionInfo data,
                                byte state)
Description copied from interface: T_A_HighLevelCommunicationInterface
Diese Methode wird von der Verbindungsverwaltung aufgerufen, um eine Sendesteuerung an die Applikation weiterzuleiten. Aus den übergebenen Parametern wird ein RequestSenderDataTelegram-Array gebildet und über die Telegrammverwaltung an die Applikation gesendet.

Specified by:
triggerSender in interface T_A_HighLevelCommunicationInterface
Parameters:
data - Anmeldeinformationen
state - Benachrichtigungscode
See Also:
RequestSenderDataTelegram

getSubscriptionComponent

public final SubscriptionComponent getSubscriptionComponent()
Description copied from interface: ServerHighLevelCommunication
Gibt die Komponente zurück, die die Anmeldungen der Verbindung verwaltet.

Specified by:
getSubscriptionComponent in interface ServerHighLevelCommunication
Returns:
Komponente die die Anmeldungen der Verbindung

getId

public final long getId()
Description copied from interface: ServerHighLevelCommunication
Diese Methode wird von der Verbindungsverwaltung aufgerufen, um die ID der verbundenen Applikation zu erhalten.

Specified by:
getId in interface ServerHighLevelCommunication
Returns:
ID des Kommunikationpartners

getRemoteUserId

public final long getRemoteUserId()
Description copied from interface: ServerHighLevelCommunication
Gibt die ID des verbundenen Benutzers zurück.

Specified by:
getRemoteUserId in interface ServerHighLevelCommunication
Returns:
die Benutzer ID

getConfigurationId

public final long getConfigurationId()
Description copied from interface: T_A_HighLevelCommunicationInterface
Gibt die Id der Konfiguration zurück.

Specified by:
getConfigurationId in interface T_A_HighLevelCommunicationInterface
Returns:
Id der Konfiguration

getDataTransmitterId

public final long getDataTransmitterId()
Description copied from interface: T_A_HighLevelCommunicationInterface
Gibt die Id des Datenverteilers zurück.

Specified by:
getDataTransmitterId in interface T_A_HighLevelCommunicationInterface
Returns:
Id des Datenverteilers

getApplicationTypePid

public final String getApplicationTypePid()
Description copied from interface: T_A_HighLevelCommunicationInterface
Gibt den Typ der Applikation zurück.

Specified by:
getApplicationTypePid in interface T_A_HighLevelCommunicationInterface
Returns:
Pid des Typs der Applikation

getApplicationName

public final String getApplicationName()
Description copied from interface: T_A_HighLevelCommunicationInterface
Gibt den Namen der Applikation zurück.

Specified by:
getApplicationName in interface T_A_HighLevelCommunicationInterface
Returns:
Name der Applikation

isConfiguration

public final boolean isConfiguration()
Description copied from interface: T_A_HighLevelCommunicationInterface
Gibt zurück, ob es sich um die Konfiguration handelt.

Specified by:
isConfiguration in interface T_A_HighLevelCommunicationInterface
Returns:
true, wenn es sich um die Konfiguration handelt, sonst false

continueAuthentification

public final void continueAuthentification()
Description copied from interface: ServerHighLevelCommunication
Diese Methode wird von der Verbindungsverwaltung aufgerufen, sobald die Konfiguration vorhanden ist, um zu signalisieren, dass eine blockierte Authentifizierung weiter bearbeitet werden kann: Steht eine Authentifizierungsschlüsselanfrage an, während die Konfiguration noch nicht vorhanden ist, wird die Antwort blockiert bis die Konfiguration bereit ist. Dies ist notwendig, da nur die Konfiguration bestimmen kann, ob die Authentifizierungsdaten korrekt sind. Auch für die Interpretation der Daten ist die Konfiguration notwendig.

Specified by:
continueAuthentification in interface ServerHighLevelCommunication

getPrefferedVersion

private int getPrefferedVersion(int[] versions)
Gibt die Version zurück, die von dieser Verbindung unterstützt wird.

Parameters:
versions - Versionen, die unterstützt werden sollen. Wird null übergeben, so wird -1 zurückgegeben.
Returns:
Version, die aus den gegebenen Versionen unterstützt wird. Wird keine der übergebenen Versionen unterstützt, so wird -1 zurückgegeben.

update

public final void update(DataTelegram telegram)
Specified by:
update in interface HighLevelCommunicationCallbackInterface

createStalledTelegramList

public List<ApplicationDataTelegram> createStalledTelegramList(BaseSubscriptionInfo info,
                                                               int maxCount)
Erzeugt eine Liste für verzögerte Telegramme für eine Datenidentifikation und speichert sie in einer Map.

Parameters:
info - Datenidentifikation der verzögerten Telegramme
maxCount - Maximale Anzahl der verzögerten Telegramme
Returns:
Neue Liste für verzögerte Telegramme
See Also:
getStalledTelegramList(de.bsvrz.dav.daf.communication.lowLevel.telegrams.BaseSubscriptionInfo), deleteStalledTelegramList(de.bsvrz.dav.daf.communication.lowLevel.telegrams.BaseSubscriptionInfo)

getStalledTelegramList

public List<ApplicationDataTelegram> getStalledTelegramList(BaseSubscriptionInfo info)
Liefert eine vorher erzeugte Liste für verzögerte Telegramme für eine Datenidentifikation.

Parameters:
info - Datenidentifikation der verzögerten Telegramme
Returns:
Vorher erzeugte Liste für verzögerte Telegramme
See Also:
createStalledTelegramList(de.bsvrz.dav.daf.communication.lowLevel.telegrams.BaseSubscriptionInfo,int), deleteStalledTelegramList(de.bsvrz.dav.daf.communication.lowLevel.telegrams.BaseSubscriptionInfo)

deleteStalledTelegramList

public List<ApplicationDataTelegram> deleteStalledTelegramList(BaseSubscriptionInfo info)
Liefert eine vorher erzeugte Liste für verzögerte Telegramme für eine Datenidentifikation und entfernt sie aus der Map.

Parameters:
info - Datenidentifikation der verzögerten Telegramme
Returns:
Vorher erzeugte Liste für verzögerte Telegramme
See Also:
createStalledTelegramList(de.bsvrz.dav.daf.communication.lowLevel.telegrams.BaseSubscriptionInfo,int), getStalledTelegramList(de.bsvrz.dav.daf.communication.lowLevel.telegrams.BaseSubscriptionInfo)