de.bsvrz.sys.funclib.dataIdentificationSettings
Class SettingsManager

java.lang.Object
  extended by de.bsvrz.sys.funclib.dataIdentificationSettings.SettingsManager

public class SettingsManager
extends Object

Diese Klasse dient zur Verwaltung von Parametersätzen mit Einstellungen die sich auf Datenidentifikationen beziehen. Derartige Parameterdatensätze werden z.B. zur Steuerung des Archivverhaltens (atg.archiv) und der Parametrierung (atg.parametrierung) eingesetzt. Über die Parameterdatensätze können in einzelnen Einträgen mit Hilfe von Aufzählungen und Wildcards Einstellungen für viele Datenidentifikation auf einmal eingeben werden.

Author:
Kappich Systemberatung

Nested Class Summary
(package private)  class SettingsManager.ChangeNotifier
           
(package private) static class SettingsManager.NotificationObject
           
(package private) static class SettingsManager.NotificationType
           
private  class SettingsManager.Receiver
          Klasse, die zur Entgegennahme der Parameterdatensätze vom Datenverteiler die entsprechende Update-Methode implementiert.
private  class SettingsManager.RegisterDynamicListener
          Klasse, die sich auf Änderungen von dynamischen Objekten (erstellen und ungültig setzen), ObjektTypen und änderbaren Mengen anmeldet.
 
Field Summary
private  boolean _aspectUsed
           
(package private)  SettingsManager.ChangeNotifier _changeNotifier
          Runnable-Objekt des Threads, der asynchron die Änderungen der Einstellungen und dynamischen Objekten/Mengen verarbeitet und die angemeldeten Listener informiert.
private  ClientDavInterface _connection
           
private static Debug _debug
           
private  Set<DynamicObject> _dynamicObjects
          Die dynamischen Objekte werden hier gespeichert, da zur Laufzeit diese Objekte ungültig werden können und dann müssen die Einstellungen neu publiziert werden.
private  Set<DynamicObjectType> _dynamicObjectTypes
          Die dynamischen Objekt-Typen werden hier gespeichert, da zur Laufzeit Objekte dieser Typen erstellt und auf ungültig gesetzt werden können.
private  List<EndOfSettingsListener> _endOfSettingsListener
           
private  Set<AttributeGroup> _excludedAttributeGroups
          Dieses Set speichert alle Attributgruppen, die über den SettingsManager nicht angemeldet werden dürfen.
private  Data _lastSettingsData
          Speichert den zuletzt empfangenen Datensatz mit den Einstellungen.
private  Set<MutableSet> _mutableSets
          Die änderbaren Mengen werden hier gespeichert, da sich zur Laufzeit der Inhalt der Elemente ändern kann.
private  DataIdentification _parameterIdentification
           
private  ClientReceiverInterface _receiver
           
private  SettingsManager.RegisterDynamicListener _registerDynamicListener
          Wurden dynamische Typen angegeben, so registriert sich dieses Objekt bei diesen, um Änderungen mitzubekommen.
private  Map<DataIdentification,Data> _settingsTable
           
private  short _simulationVariantForTypeAndSetWildcardExpansion
           
private  boolean _simulationVariantUsed
           
private  List<UpdateListener> _updateListeners
           
 
Constructor Summary
SettingsManager(ClientDavInterface connection, DataIdentification parameterIdentification)
          Erzeugt ein neues Verwaltungsobjekt.
SettingsManager(ClientDavInterface connection, DataIdentification parameterIdentification, short simulationVariantForTypeAndSetWildcardExpansion)
          Erzeugt ein neues Verwaltungsobjekt.
 
Method Summary
private  void activateSettings(Map<DataIdentification,Data> newSettingsTable)
          Iteriert über die Tabelle mit den Einstellungen je Datenidentifikation und informiert die angemeldeten Beobachter über Änderungen an den Einstellungen je Datenidentifikation.
 void addEndOfSettingsListener(EndOfSettingsListener listener)
          Ergänzt die Liste der Beobachter, die informiert werden wollen, sobald alle Einstellungen abgearbeitet wurden.
 void addUpdateListener(UpdateListener listener)
          Ergänzt die Liste der Beobachter, die bei Änderung des Parameters zu informieren sind, um einen weiteren Eintrag.
private  void extractSettings(Data settingsData, Map<DataIdentification,Data> newSettings)
          Aktualisiert die Tabelle mit den Einstellungen je Datenidentifikation mit den jeweiligen Einstellungen aus dem übergebenen Datensatz.
private  boolean hasMatchingAttributGroupUsage(DynamicObjectType toBeRegisteredType, Set<AttributeGroup> specifiedAtgs, Set<Aspect> specifiedAspects)
          Prüft, ob an dem angegebenen dynamischen Typ passende Attributgruppen und Aspekte Online verwendet werden können.
private  void notifyEndOfSettings()
          Iteriert über alle Beobachter, die informiert werden wollen, sobald alle Einstellungen an den UpdateListener geschickt wurden.
private  void notifySettings(DataIdentification dataIdentification, Data oldSettings, Data newSettings)
          Iteriert über alle Beobachter und gibt die Datenidentifikation mit alten und neuen Einstellungen an die update(...) Methode weiter.
private  void registerDynamicObjects(Set<DynamicObject> dynamicObjects)
          Anmeldungen bei den relevanten dynamischen Objekten.
private  void registerDynamicObjectType(Set<DynamicObjectType> registeredDynamicObjectTypes, DynamicObjectType toBeRegisteredType)
          Registriert den angegebenen dynamischen Typ zur Anmeldung auf neue und gelöschte Objekte.
private  void registerDynamicObjectTypeOrSubTypes(Set<DynamicObjectType> registeredDynamicObjectTypes, DynamicObjectType toBeRegisteredType, Set<AttributeGroup> specifiedAtgs, Set<Aspect> specifiedAspects)
          Registriert den angegebenen dynamischen Typ oder Sub-Typen davon zur Anmeldung auf neue und gelöschte Objekte, falls am Typ bzw.
private  void registerDynamicObjectTypes(Set<DynamicObjectType> dynamicObjectTypes)
          Anmeldungen bei den relevanten dynamischen Objekt-Typen.
private  void registerMutableSets(Set<MutableSet> mutableSets)
          Anmeldungen bei den relevanten änderbaren Mengen auf Änderung.
 void removeEndOfSettingsListener(EndOfSettingsListener listener)
          Löscht einen Beobachter aus der Liste der Beobachter, die informiert werden wollen, sobald alle Einstellungen abgearbeitet wurden.
private  SystemObject[] removeNullReferences(SystemObject[] objects)
           
 void removeUpdateListener(UpdateListener listener)
          Löscht einen Beobachter aus der Liste der Beobachter, die bei Änderung des Parameters zu informieren sind.
 void start()
          Meldet die im Konstruktor übergebene Datenidentifikation an und startet damit auch die Verarbeitung und Weitergabe der alten und neuen Einstellungen pro Datenidentifikation aus erhaltenen Parameterdatensätzen an die angemeldeten Beobachter.
 void stop()
          Meldet die im Konstruktor übergebene Datenidentifikation wieder ab und beendet damit auch die Verarbeitung und Weitergabe der alten und neuen Einstellungen pro Datenidentifikation aus erhaltenen Parameterdatensätzen an die angemeldeten Beobachter.
 
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

_connection

private final ClientDavInterface _connection

_parameterIdentification

private final DataIdentification _parameterIdentification

_simulationVariantForTypeAndSetWildcardExpansion

private short _simulationVariantForTypeAndSetWildcardExpansion

_updateListeners

private final List<UpdateListener> _updateListeners

_endOfSettingsListener

private final List<EndOfSettingsListener> _endOfSettingsListener

_receiver

private ClientReceiverInterface _receiver

_settingsTable

private Map<DataIdentification,Data> _settingsTable

_aspectUsed

private final boolean _aspectUsed

_simulationVariantUsed

private final boolean _simulationVariantUsed

_excludedAttributeGroups

private final Set<AttributeGroup> _excludedAttributeGroups
Dieses Set speichert alle Attributgruppen, die über den SettingsManager nicht angemeldet werden dürfen. Sonst gibt es ein Senke - Empfänger - Konflikt.


_dynamicObjectTypes

private final Set<DynamicObjectType> _dynamicObjectTypes
Die dynamischen Objekt-Typen werden hier gespeichert, da zur Laufzeit Objekte dieser Typen erstellt und auf ungültig gesetzt werden können.


_dynamicObjects

private final Set<DynamicObject> _dynamicObjects
Die dynamischen Objekte werden hier gespeichert, da zur Laufzeit diese Objekte ungültig werden können und dann müssen die Einstellungen neu publiziert werden.


_mutableSets

private final Set<MutableSet> _mutableSets
Die änderbaren Mengen werden hier gespeichert, da sich zur Laufzeit der Inhalt der Elemente ändern kann. Dann müssen die neuen Einstellungen publiziert werden.


_registerDynamicListener

private final SettingsManager.RegisterDynamicListener _registerDynamicListener
Wurden dynamische Typen angegeben, so registriert sich dieses Objekt bei diesen, um Änderungen mitzubekommen.


_lastSettingsData

private Data _lastSettingsData
Speichert den zuletzt empfangenen Datensatz mit den Einstellungen.


_changeNotifier

SettingsManager.ChangeNotifier _changeNotifier
Runnable-Objekt des Threads, der asynchron die Änderungen der Einstellungen und dynamischen Objekten/Mengen verarbeitet und die angemeldeten Listener informiert.

Constructor Detail

SettingsManager

public SettingsManager(ClientDavInterface connection,
                       DataIdentification parameterIdentification)
Erzeugt ein neues Verwaltungsobjekt. Beim Zugriff auf dynamische Mengen und dynamischen Typen wird zur Auflösung von Wildcards für Elemente von dynamischen Mengen und dynamischen Typen die Simulationsvariante der angegebenen Datenidentifikation des Parameterdatensatzes oder die Simulationsvariante 0 verwendet, falls in der Datenidentifikation des Parameterdatensatzes keine explizite Angabe der Simulationsvariante gemacht wurde.

Parameters:
connection - Verbindung zum Datenverteiler
parameterIdentification - der Parameterdatensatz

SettingsManager

public SettingsManager(ClientDavInterface connection,
                       DataIdentification parameterIdentification,
                       short simulationVariantForTypeAndSetWildcardExpansion)
Erzeugt ein neues Verwaltungsobjekt.

Parameters:
connection - Verbindung zum Datenverteiler
parameterIdentification - der Parameterdatensatz
simulationVariantForTypeAndSetWildcardExpansion - Simulationsvariante, die beim Zugriff auf dynamische Mengen und dynamischen Typen zur Auflösung von Wildcards verwendet werden soll.
Method Detail

addUpdateListener

public void addUpdateListener(UpdateListener listener)
Ergänzt die Liste der Beobachter, die bei Änderung des Parameters zu informieren sind, um einen weiteren Eintrag.

Parameters:
listener - Neuer Beobachter.

removeUpdateListener

public void removeUpdateListener(UpdateListener listener)
Löscht einen Beobachter aus der Liste der Beobachter, die bei Änderung des Parameters zu informieren sind.

Parameters:
listener - Zu löschender Beobachter.

addEndOfSettingsListener

public void addEndOfSettingsListener(EndOfSettingsListener listener)
Ergänzt die Liste der Beobachter, die informiert werden wollen, sobald alle Einstellungen abgearbeitet wurden.

Parameters:
listener - neuer Beobachter

removeEndOfSettingsListener

public void removeEndOfSettingsListener(EndOfSettingsListener listener)
Löscht einen Beobachter aus der Liste der Beobachter, die informiert werden wollen, sobald alle Einstellungen abgearbeitet wurden.

Parameters:
listener - zu löschender Beobachter

start

public void start()
Meldet die im Konstruktor übergebene Datenidentifikation an und startet damit auch die Verarbeitung und Weitergabe der alten und neuen Einstellungen pro Datenidentifikation aus erhaltenen Parameterdatensätzen an die angemeldeten Beobachter.

Throws:
IllegalStateException - Wenn der Manager bereits gestartet wurde.

stop

public void stop()
Meldet die im Konstruktor übergebene Datenidentifikation wieder ab und beendet damit auch die Verarbeitung und Weitergabe der alten und neuen Einstellungen pro Datenidentifikation aus erhaltenen Parameterdatensätzen an die angemeldeten Beobachter.


extractSettings

private void extractSettings(Data settingsData,
                             Map<DataIdentification,Data> newSettings)
Aktualisiert die Tabelle mit den Einstellungen je Datenidentifikation mit den jeweiligen Einstellungen aus dem übergebenen Datensatz.

Parameters:
settingsData -
newSettings - die neuen Einstellungen

registerMutableSets

private void registerMutableSets(Set<MutableSet> mutableSets)
Anmeldungen bei den relevanten änderbaren Mengen auf Änderung.

Parameters:
mutableSets - die relevanten änderbaren Mengen

registerDynamicObjects

private void registerDynamicObjects(Set<DynamicObject> dynamicObjects)
Anmeldungen bei den relevanten dynamischen Objekten.

Parameters:
dynamicObjects - die relevanten dynamischen Objekte

registerDynamicObjectTypeOrSubTypes

private void registerDynamicObjectTypeOrSubTypes(Set<DynamicObjectType> registeredDynamicObjectTypes,
                                                 DynamicObjectType toBeRegisteredType,
                                                 Set<AttributeGroup> specifiedAtgs,
                                                 Set<Aspect> specifiedAspects)
Registriert den angegebenen dynamischen Typ oder Sub-Typen davon zur Anmeldung auf neue und gelöschte Objekte, falls am Typ bzw. Sub-Typ passende Attributgruppen und Aspekte Online verwendet werden können.

Parameters:
registeredDynamicObjectTypes - Bereits registrierte Typen. Die neu registrierten Typen werden in dieses Set hinzugefügt.
toBeRegisteredType - Zu betrachtender dynamischer Typ.
specifiedAtgs - Relevante Attributgruppen. Ein leeres Set wird als Wildcard für alle Attributgruppen berücksichtigt.
specifiedAspects - Relevante Aspekte. Ein leeres Set wird als Wildcard für alle Aspekte berücksichtigt.

hasMatchingAttributGroupUsage

private boolean hasMatchingAttributGroupUsage(DynamicObjectType toBeRegisteredType,
                                              Set<AttributeGroup> specifiedAtgs,
                                              Set<Aspect> specifiedAspects)
Prüft, ob an dem angegebenen dynamischen Typ passende Attributgruppen und Aspekte Online verwendet werden können.

Parameters:
toBeRegisteredType - Zu betrachtender dynamischer Typ.
specifiedAtgs - Relevante Attributgruppen. Ein leeres Set wird als Wildcard für alle Attributgruppen berücksichtigt.
specifiedAspects - Relevante Aspekte. Ein leeres Set wird als Wildcard für alle Aspekte berücksichtigt.
Returns:
true falls es mindestens eine passende Attributgruppen-Aspekt-Kombination am zu betrachtenden Typ gibt, sonst false.

registerDynamicObjectType

private void registerDynamicObjectType(Set<DynamicObjectType> registeredDynamicObjectTypes,
                                       DynamicObjectType toBeRegisteredType)
Registriert den angegebenen dynamischen Typ zur Anmeldung auf neue und gelöschte Objekte.

Parameters:
registeredDynamicObjectTypes - Bereits registrierte Typen. Der neu registrierte Typ wird in dieses Set hinzugefügt.
toBeRegisteredType - Zu registrierender dynamischer Typ.

registerDynamicObjectTypes

private void registerDynamicObjectTypes(Set<DynamicObjectType> dynamicObjectTypes)
Anmeldungen bei den relevanten dynamischen Objekt-Typen.

Parameters:
dynamicObjectTypes - die relevante Objekt-Typen

removeNullReferences

private SystemObject[] removeNullReferences(SystemObject[] objects)

activateSettings

private void activateSettings(Map<DataIdentification,Data> newSettingsTable)
Iteriert über die Tabelle mit den Einstellungen je Datenidentifikation und informiert die angemeldeten Beobachter über Änderungen an den Einstellungen je Datenidentifikation. Die übergebenen Einstellungen werden als aktuelle Einstellungen übernommen.

Parameters:
newSettingsTable - Map mit Einstellungen je Datenidentifikation

notifySettings

private void notifySettings(DataIdentification dataIdentification,
                            Data oldSettings,
                            Data newSettings)
Iteriert über alle Beobachter und gibt die Datenidentifikation mit alten und neuen Einstellungen an die update(...) Methode weiter.

Parameters:
dataIdentification - Betroffene Datenidentifikation.
oldSettings - Zur Datenidentifikation gehörende Einstellung vor der Änderung oder null wenn es vor der Änderung keinen spezifischen Eintrag gab.
newSettings - Zur Datenidentifikation gehörende Einstellung nach der Änderung oder null

notifyEndOfSettings

private void notifyEndOfSettings()
Iteriert über alle Beobachter, die informiert werden wollen, sobald alle Einstellungen an den UpdateListener geschickt wurden.