de.bsvrz.puk.config.main.communication.query
Class ConfigurationQueryManager.QueryHandler

java.lang.Object
  extended by de.bsvrz.puk.config.main.communication.query.ConfigurationQueryManager.QueryHandler
All Implemented Interfaces:
Runnable
Enclosing class:
ConfigurationQueryManager

private class ConfigurationQueryManager.QueryHandler
extends Object
implements Runnable


Nested Class Summary
private  class ConfigurationQueryManager.QueryHandler.MutableSetChangePublisher
          Diese Klasse wird bei Dynamischen Mengen angemeldet, wenn man über Änderungen der dynamischen Menge informiert werden möchte.
private  class ConfigurationQueryManager.QueryHandler.PublishingCommunicationStateListener
          Intern verwendeter Listener für Anmeldungen auf Änderungen der Elemente von dynamischen Zusammenstellungen.
private  class ConfigurationQueryManager.QueryHandler.PublishingMutableCollectionChangeListener
          Intern verwendeter Listener für Anmeldungen auf Änderungen der Elemente von dynamischen Zusammenstellungen.
 
Field Summary
private  HashMap<ConfigurationQueryManager.QueryHandler.PublishingCommunicationStateListener,ConfigurationQueryManager.QueryHandler.PublishingCommunicationStateListener> _communicationChangedHandlers
           
private  DataDescription _dataDescriptionAreaLocal
          Datenidentifikation für Konfigurationsanfragen, die Konfigurationsbereiche steuern.
private  DataDescription _dataDescriptionReadLocal
          Datenidentifikation für lesende Konfigurationsanfragen.
private  DataDescription _dataDescriptionUserLocal
          Datenidentifikation für Konfigurationsanfragen, die Benutzer beeinflussen.
private  DataDescription _dataDescriptionWriteLocal
          Datenidentifikation für schreibende Konfigurationsanfragen.
private  Map<DynamicObjectType,InvalidationListener> _invalidationListenerForAllTyps
          Enthält für jeden dynamischen Typ einen Listener.
private  boolean _isRequestFromApplication
          true, wenn der Kommunikationspartner eine normale Applikation ist; false, wenn der Kommunikationspartner eine andere Konfiguration ist
(package private)  Object _lock
           
private  Object _lockPublisher
          Lockt die Zugriffe auf den Publisher.
private  Set<DynamicObject> _monitoredDynamicObject
          Enthält alle dynamischen Objekte, zu denen es einen _invalidationListenerPublisher gibt.
private  Map<ConfigurationQueryManager.QueryHandler.PublishingMutableCollectionChangeListener,ConfigurationQueryManager.QueryHandler.PublishingMutableCollectionChangeListener> _mutableCollectionChangeHandlers
          Map, die die angemeldeten Listener für Änderungen der Elemente von dynamischen Zusammenstellungen speichert, für Key und Value wird das selbe Listener-Objekt verwendet.
private  Map<DynamicObjectType,DynamicObjectType.NameChangeListener> _nameChangedListener
          Enthält für jeden dynamischen Typ einen Listener.
private  Map<DynamicObjectType,DynamicObjectType.DynamicObjectCreatedListener> _objectCreatedListener
          Enthält für jeden dynamischen Typ einen Listener.
private  ConfigurationQueryManager.QueryHandler.MutableSetChangePublisher _publisher
          Objekt, welches bei dynamischen Mengen genutzt wird, um die Änderungen an diesen Mengen zu publizieren.
private  Set<MutableSet> _publisherSets
          Merkt sich alle dynamischen Mengen, bei denen ein Beobachter (MutableSetChangePublisher) angemeldet wurde.
(package private)  UnboundedQueue<ResultData> _queries
           
private  SystemObject _querySender
           
private  SenderReceiverCommunication _senderReplyAreaTasks
          Objekt, das den Versand von Konfigurationsanfragen(die Antwort darauf) übernimmt.
private  SenderReceiverCommunication _senderReplyReadTasks
          Objekt, das den Versand von Konfigurationsanfragen(die Antwort darauf) übernimmt.
private  SenderReceiverCommunication _senderReplyUserAdministrationTask
          Objekt, das den Versand von Konfigurationsanfragen(die Antwort darauf) übernimmt.
private  SenderReceiverCommunication _senderReplyWriteTasks
          Objekt, das den Versand von Konfigurationsanfragen(die Antwort darauf) übernimmt.
private  ConfigSimulationObject _simulationObject
          Objekt, das aus Sicht der Konfiguration eine Simulation darstellt.
private  short _simulationVariant
          Wird für Anmdeldung als Sender/Empfänger benötigt
(package private)  Thread _worker
           
 
Constructor Summary
ConfigurationQueryManager.QueryHandler(SystemObject querySender, short simulationVariant, ConfigSimulationObject simulationObject)
          Bearbeitet Konfigurationsanfragen und reicht diese an das Datenmodell weiter und verschickt anschließend die Antwort.
 
Method Summary
private  Collection<ConfigAreaAndVersion> createAreaAndVersion(Deserializer deserializer)
          Ließt aus einem Deserializer Konfigurationsbereiche und zugehörige Versionen aus.
private  DynamicObject createDynamicObject(ConfigConfigurationArea configurationArea, DynamicObjectType type, String pid, String name, List<DataAndATGUsageInformation> data, boolean useOldCreateMethod)
          Diese Methode erzeugt ein dynamisches Objekt.
private  ObjectTimeSpecification deserializeObjectTimeSpecification(Deserializer deserializer)
          Ließt aus einem Deserialisierer ein Objekt vom Typ ObjectTimeSpecification aus.
private  void detachListener()
          Meldet alle Listener ab, die auf Änderungen bei dynamischen Typen angemeldet waren.
private  void detachSelf()
           
private  short getInternalSimVariant(short externalSimVariant, MutableCollection mutableCollection)
          Ermittelt die Simulationsvariante für interne Anmeldungen auf Änderungen der Elemente von dynamischen Zusammenstellungen.
private  void handleChangeElementsRequest(Deserializer deserializer, Serializer serializer, ObjectSet set, boolean mutableSet, boolean considerSimulationVariant)
          Bearbeitet eine Anfrage vom Typ "DynamischeMengeElementeÄndern" oder "KonfigurierendeMengeElementeÄndern".
private  void handleQuery(ResultData resultData)
           
 void run()
           
private  void serializeObjectList(Serializer serializer, List<SystemObject> result)
          Schreibt eine Liste mit Systemobjekten in eine Serializer.
private  void transferConsistencyCheckResult(ConsistencyCheckResultInterface consistencyCheckResult, Serializer serializer)
          Schreibt das Ergebnis einer Konsistenzprüfung in einen Serialisierer.
private  void transferList(List<ConsistencyCheckResultEntry> errorOrWarning, Serializer serializer)
          Schreibt eine Liste, die lokale/Interferenzfehler oder Warnungen enthält in einen Serializer.
private  void writeSystemObject(Serializer serializer, SystemObject systemObject, long queryId, String queryPid)
           
 
Methods inherited from class java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
 

Field Detail

_querySender

private final SystemObject _querySender

_isRequestFromApplication

private boolean _isRequestFromApplication
true, wenn der Kommunikationspartner eine normale Applikation ist; false, wenn der Kommunikationspartner eine andere Konfiguration ist


_worker

Thread _worker

_queries

UnboundedQueue<ResultData> _queries

_lock

Object _lock

_lockPublisher

private Object _lockPublisher
Lockt die Zugriffe auf den Publisher.


_publisher

private ConfigurationQueryManager.QueryHandler.MutableSetChangePublisher _publisher
Objekt, welches bei dynamischen Mengen genutzt wird, um die Änderungen an diesen Mengen zu publizieren.


_publisherSets

private Set<MutableSet> _publisherSets
Merkt sich alle dynamischen Mengen, bei denen ein Beobachter (MutableSetChangePublisher) angemeldet wurde.


_monitoredDynamicObject

private Set<DynamicObject> _monitoredDynamicObject
Enthält alle dynamischen Objekte, zu denen es einen _invalidationListenerPublisher gibt.


_senderReplyReadTasks

private final SenderReceiverCommunication _senderReplyReadTasks
Objekt, das den Versand von Konfigurationsanfragen(die Antwort darauf) übernimmt.


_senderReplyWriteTasks

private final SenderReceiverCommunication _senderReplyWriteTasks
Objekt, das den Versand von Konfigurationsanfragen(die Antwort darauf) übernimmt.


_senderReplyAreaTasks

private final SenderReceiverCommunication _senderReplyAreaTasks
Objekt, das den Versand von Konfigurationsanfragen(die Antwort darauf) übernimmt.


_senderReplyUserAdministrationTask

private final SenderReceiverCommunication _senderReplyUserAdministrationTask
Objekt, das den Versand von Konfigurationsanfragen(die Antwort darauf) übernimmt.


_dataDescriptionReadLocal

private final DataDescription _dataDescriptionReadLocal
Datenidentifikation für lesende Konfigurationsanfragen. Die Simulationsvariante wird beachtet.


_dataDescriptionWriteLocal

private final DataDescription _dataDescriptionWriteLocal
Datenidentifikation für schreibende Konfigurationsanfragen. Die Simulationsvariante wird beachtet.


_dataDescriptionAreaLocal

private final DataDescription _dataDescriptionAreaLocal
Datenidentifikation für Konfigurationsanfragen, die Konfigurationsbereiche steuern. Die Identifikation wird auch bei Simulationen erzeugt, um eine Null-Pointer Exception zu verhindern. Allerdings wird weder ein Sender noch ein Empfänger für diese Anfragen angemeldet.


_dataDescriptionUserLocal

private final DataDescription _dataDescriptionUserLocal
Datenidentifikation für Konfigurationsanfragen, die Benutzer beeinflussen. Die Identifikation wird auch bei Simulationen erzeugt, um eine Null-Pointer Exception zu verhindern. Allerdings wird weder ein Sender noch ein Empfänger für diese Anfragen angemeldet.


_simulationVariant

private final short _simulationVariant
Wird für Anmdeldung als Sender/Empfänger benötigt


_simulationObject

private ConfigSimulationObject _simulationObject
Objekt, das aus Sicht der Konfiguration eine Simulation darstellt. Ist die _simulationVariant > 0, so muss dieses Objekt vorhanden sein.


_invalidationListenerForAllTyps

private final Map<DynamicObjectType,InvalidationListener> _invalidationListenerForAllTyps
Enthält für jeden dynamischen Typ einen Listener. Die Listener werden gespeichert, um sie später wieder abmelden zu können.


_nameChangedListener

private final Map<DynamicObjectType,DynamicObjectType.NameChangeListener> _nameChangedListener
Enthält für jeden dynamischen Typ einen Listener. Die Listener werden gespeichert, um sie später wieder abmelden zu können.


_objectCreatedListener

private final Map<DynamicObjectType,DynamicObjectType.DynamicObjectCreatedListener> _objectCreatedListener
Enthält für jeden dynamischen Typ einen Listener. Die Listener werden gespeichert, um sie später wieder abmelden zu können.


_mutableCollectionChangeHandlers

private Map<ConfigurationQueryManager.QueryHandler.PublishingMutableCollectionChangeListener,ConfigurationQueryManager.QueryHandler.PublishingMutableCollectionChangeListener> _mutableCollectionChangeHandlers
Map, die die angemeldeten Listener für Änderungen der Elemente von dynamischen Zusammenstellungen speichert, für Key und Value wird das selbe Listener-Objekt verwendet. Allerdings ist die interne Simulationsvariante im Listenerobjekt nicht signifikant für die HashMap.


_communicationChangedHandlers

private HashMap<ConfigurationQueryManager.QueryHandler.PublishingCommunicationStateListener,ConfigurationQueryManager.QueryHandler.PublishingCommunicationStateListener> _communicationChangedHandlers
Constructor Detail

ConfigurationQueryManager.QueryHandler

public ConfigurationQueryManager.QueryHandler(SystemObject querySender,
                                              short simulationVariant,
                                              ConfigSimulationObject simulationObject)
Bearbeitet Konfigurationsanfragen und reicht diese an das Datenmodell weiter und verschickt anschließend die Antwort.

Parameters:
querySender - Applikation, die die Anfragen gestellt hat
simulationVariant - Simulationsvariante, mit der die Antworten angemeldet werden. Ist die Simulationsvariante > 0, so muss auch das Objekt simulationObject übergeben werden.
simulationObject - Objekt, über das zusätzliche Informationen über eine Simulation abgefragt werden können. Dieses Objekt kann auch null sein, falls der Parameter simulationVariant kleiner/gleich 0 ist.
Method Detail

detachListener

private void detachListener()
Meldet alle Listener ab, die auf Änderungen bei dynamischen Typen angemeldet waren.


detachSelf

private void detachSelf()

handleQuery

private void handleQuery(ResultData resultData)

run

public void run()
Specified by:
run in interface Runnable

getInternalSimVariant

private short getInternalSimVariant(short externalSimVariant,
                                    MutableCollection mutableCollection)
Ermittelt die Simulationsvariante für interne Anmeldungen auf Änderungen der Elemente von dynamischen Zusammenstellungen.

Parameters:
externalSimVariant - Von außen vorgegebene Simulationsvariante.
mutableCollection - Dynamische Menge oder dynamischer Typ für den die interne Simulationsvariante ermittelt werden soll.
Returns:
Simulationsvariante für interne Anmeldungen auf Änderungen der Elemente von dynamischen Zusammenstellungen.

serializeObjectList

private void serializeObjectList(Serializer serializer,
                                 List<SystemObject> result)
                          throws IOException
Schreibt eine Liste mit Systemobjekten in eine Serializer. Der Aufbau ist 1) Länge der Liste (int) 2)Referenzen auf die Objekte der Liste

Parameters:
serializer - Serialisierer, in den die Daten geschrieben werden.
result - Liste, die geschrieben werden soll. Wird null übergeben, so wird für die Länge der Liste eine 0 geschrieben.
Throws:
IOException - Fehler beim schreiben der Daten

handleChangeElementsRequest

private void handleChangeElementsRequest(Deserializer deserializer,
                                         Serializer serializer,
                                         ObjectSet set,
                                         boolean mutableSet,
                                         boolean considerSimulationVariant)
                                  throws IOException,
                                         ConfigurationChangeException
Bearbeitet eine Anfrage vom Typ "DynamischeMengeElementeÄndern" oder "KonfigurierendeMengeElementeÄndern". Dabei wird der Auftrag aus dem Parameter deserializer ausgelesen und in die Antwort in den Paramter serializer geschrieben.

Bei dynamischen Mengen wird die Simulationsvariante berücksichtigt, falls dies gefordert wird.

Bei konfigurierenden Mengen wird die Simulationsvariante niemals berücksichtigt.

Parameters:
deserializer - Enthält den Auftrag
serializer - In dieses Objekt wird die Antwort geschrieben
set - Menge (dynamisch oder konfigurierend)
mutableSet - true = Es handelt sich um eine dynamische Menge
considerSimulationVariant - true = Die Simulationsvariante muss berücksichtigt werden (dieser Parameter ist nur für dynamische Mengen wichtig)
Throws:
IOException
ConfigurationChangeException

deserializeObjectTimeSpecification

private ObjectTimeSpecification deserializeObjectTimeSpecification(Deserializer deserializer)
                                                            throws IOException
Ließt aus einem Deserialisierer ein Objekt vom Typ ObjectTimeSpecification aus.

Parameters:
deserializer -
Returns:
ObjectTimeSpecification
Throws:
IOException

createAreaAndVersion

private Collection<ConfigAreaAndVersion> createAreaAndVersion(Deserializer deserializer)
                                                       throws IOException
Ließt aus einem Deserializer Konfigurationsbereiche und zugehörige Versionen aus.

Parameters:
deserializer - s.o.
Returns:
s.o.
Throws:
IOException

transferConsistencyCheckResult

private void transferConsistencyCheckResult(ConsistencyCheckResultInterface consistencyCheckResult,
                                            Serializer serializer)
                                     throws IOException
Schreibt das Ergebnis einer Konsistenzprüfung in einen Serialisierer.

Parameters:
consistencyCheckResult - Ergebnis der Prüfung
serializer - In diesen Serialisierer wird das Ergebnis der Prüfung geschrieben
Throws:
IOException

transferList

private void transferList(List<ConsistencyCheckResultEntry> errorOrWarning,
                          Serializer serializer)
                   throws IllegalArgumentException,
                          IOException
Schreibt eine Liste, die lokale/Interferenzfehler oder Warnungen enthält in einen Serializer.

Parameters:
errorOrWarning - Fehler oder Warnungen. Enthält die Liste keine Einträge, wird eine Exception geworfen
serializer - Serializer, in den die Fehler, bzw. Warnungen geschrieben werden
Throws:
IllegalArgumentException - Die Liste enthält keine Einträge
IOException

writeSystemObject

private void writeSystemObject(Serializer serializer,
                               SystemObject systemObject,
                               long queryId,
                               String queryPid)
                        throws IOException,
                               ConfigurationException
Throws:
IOException
ConfigurationException

createDynamicObject

private DynamicObject createDynamicObject(ConfigConfigurationArea configurationArea,
                                          DynamicObjectType type,
                                          String pid,
                                          String name,
                                          List<DataAndATGUsageInformation> data,
                                          boolean useOldCreateMethod)
                                   throws ConfigurationChangeException
Diese Methode erzeugt ein dynamisches Objekt. Dabei wird berücksichtigt, ob es sich um eine Simulation handelt, ist dies der Fall, wird geprüft, ob die Simulation das überhaupt darf.

Parameters:
configurationArea - Bereich an dem das Objekt angelegt werden soll
type - Typ des neuen Objekts.
pid - Pid des neuen Objekts
name - Name des neuen Objekts
data - Alle Datensätze, die am neuen Objekt angelegt werden sollen. Es kann eine leere Liste oder null übergeben werden.
useOldCreateMethod - true, wenn die alte "Create-Methode" benutzt werden soll. Die alte create-Methode prüft DERZEIT((29.6.2007) das soll später anders sein) nicht, ob alle Datensätze am neuen Objekt vorhanden sind, die vorhanden sein müssen. false, es wird die neue create-Methode benutzt und somit geprüft, ob alle geforderten Datensätze vorhanden sind. Wurde die Software umgestellt(es muss immer gerpüft werden), kann dieser Parameter sehr wahrscheinlich entfernt werden.
Returns:
Neues Objekt
Throws:
ConfigurationChangeException - Die Konfiguration kann das neue Objekt nicht anlegen (mangelnde Rechte, eine Simuluation darf keine Typen dieser Objekte anlegen, usw.).