de.bsvrz.puk.config.configFile.datamodel
Class ConfigMutableSet

java.lang.Object
  extended by de.bsvrz.puk.config.configFile.datamodel.AbstractConfigSystemObject
      extended by de.bsvrz.puk.config.configFile.datamodel.ConfigSystemObject
          extended by de.bsvrz.puk.config.configFile.datamodel.ConfigConfigurationObject
              extended by de.bsvrz.puk.config.configFile.datamodel.ConfigObjectSet
                  extended by de.bsvrz.puk.config.configFile.datamodel.ConfigMutableSet
All Implemented Interfaces:
ConfigurationCommunicationInterface, ConfigurationObject, MutableCollection, MutableSet, ObjectSet, SystemObject, SystemObjectCollection, Comparable

public class ConfigMutableSet
extends ConfigObjectSet
implements MutableSet

Implementierung des Interfaces MutableSet für dynamische Mengen auf Seiten der Konfiguration.

Author:
Kappich Systemberatung

Nested Class Summary
private  class ConfigMutableSet.MutableElement
          Repräsentiert ein Element der Menge mit dem Zeitstempel, ab dem das Element zur Menge gehört und dem Zeitstempel, ab dem das Element nicht mehr zur Menge gehört.
 
Field Summary
private  Map<Short,Set<MutableSetChangeListener>> _changeListeners
          Speichert alle angemeldeten Beobachter in Abhängigkeit zur Simulationsvariante.
(package private)  ConfigurationCommunicationListenerSupport _configComHelper
          Delegations-Klasse für das Interface ConfigurationCommunicationInterface
private static Debug _debug
          DebugLogger für Debug-Ausgaben
private  boolean _elementAccessFieldsInitialized
          Wurden die Fields _elementChangesAllowed und _elementsFile schon initialisiert ?
private  boolean _elementChangesAllowed
          Dürfen Änderungen an der Elementzugehörigkeit durch diese Konfiguration durchgeführt werden?
private  Set<SystemObject> _elements
          Die aktuellen Elemente dieser dynamischen Menge.
private  byte[] _elementsDataBytes
          Byte Array mit dem aus der Datei _elementsFile gelesenen oder noch zu schreibenden Datensatz mit der Elementzugehörigkeit der Menge
private  boolean _elementsDataBytesChanged
          Muss der in _elementsDataBytes enthaltene Datensatz noch in der Datei gespeichert werden?
private  File _elementsFile
          Datei in der die Elementzugehörigkeit dieser Menge gespeichert werden soll, oder null, falls die Elementzugehörigkeit als Datensatz der Menge gespeichert werden soll
private  String _elementsManagementPid
           
private  Object _lockElementAccessProperties
          Objekt für den synchronisierten Zugriff auf die Fields _elementAccessFieldsInitialized, _elementChangesAllowed und _elementsFile.
private  Object _lockElements
          Objekt für den synchronisierten Zugriff auf die Elemente.
private  Object _lockListeners
          Objekt für den synchronisierten Zugriff auf die Listener.
private  ConfigMutableCollectionSupport _mutableCollectionSupport
          Objekt zur Verwaltung von Anmeldungen auf Änderungen der Elemente dieser Menge.
 
Fields inherited from class de.bsvrz.puk.config.configFile.datamodel.ConfigSystemObject
_systemObjectInfo
 
Constructor Summary
ConfigMutableSet(ConfigurationArea configurationArea, SystemObjectInformationInterface systemObjectInfo)
          Konstruktor einer dynamischen Menge.
 
Method Summary
 void add(SystemObject[] objects)
           
 void add(SystemObject[] objects, short simulationVariant)
          Erweitert die add-Methode um eine Simulationsvariante, die angibt, in welcher Simulation diese Objekte der Menge hinzugefügt werden.
 void add(SystemObject object, short simulationVariant)
          Fügt ein Element zur dynamischen Menge in Abhängigkeit der Simulationsvariante.
 void addChangeListener(MutableSetChangeListener listener)
           
 void addChangeListener(MutableSetChangeListener listener, short simulationVariant)
           
 void addChangeListener(short simulationVariant, MutableCollectionChangeListener changeListener)
           
 void addConfigurationCommunicationChangeListener(ConfigurationCommunicationChangeListener listener)
           
private  boolean checkChangeElementsPermit()
          Prüft, ob die Konfiguration berechtigt ist an der Elementzugehörigkeit dieser Menge eine Änderung durchzuführen.
private  void checkObjectTypeOfElements(SystemObject[] objects)
          Prüft, ob alle Objekte vom richtigen Typ sind.
(package private)  void configurationCommunicationChange(boolean configComStatus)
           
 void deleteElements(short simulationVariant)
          Löscht alle Elemente permanent aus dieser dynamischen Menge.
 List<SystemObject> getElements()
           
 List<SystemObject> getElements(long time)
           
 List<SystemObject> getElements(short simulationVariant)
           
 List<SystemObject> getElementsDuringPeriod(long startTime, long endTime)
           
 List<SystemObject> getElementsDuringPeriod(long startTime, long endTime, short simulationVariant)
          Bestimmt die Elemente, die während des gesamten angegebenen Zeitbereichs zur Zusammenstellung gehört haben in Abhängigkeit der Simulationsvariante.
 List<SystemObject> getElementsInPeriod(long startTime, long endTime)
           
 List<SystemObject> getElementsInPeriod(long startTime, long endTime, short simulationVariant)
          Bestimmt die Elemente, die an mindestens einem Zeitpunkt des angegebenen Zeitbereichs zur Zusammenstellung gehört haben in Abhängigkeit der Simulationsvariante.
 String getElementsManagementPid()
           
 List<SystemObject> getElementsWithSimulationVariant(long time, short simulationVariant)
           
 List<SystemObject> getElementsWithSimulationVariant(short simulationVariant)
           
private  List<ConfigMutableSet.MutableElement> getMutableElements()
          Diese Methode liest den konfigurierenden Datensatz für die Elemente dieser Menge ein und gibt sie in einer Liste zurück.
(package private)  void informListeners(SystemObject[] addedObjects, SystemObject[] removedObjects, short simulationVariant)
          Bei Änderungen an der dynamischen Menge werden alle angemeldeten Beobachter informiert.
 boolean isConfigurationCommunicationActive()
           
private  void loadElementAccessProperties()
           
 void remove(SystemObject[] objects)
           
 void remove(SystemObject[] objects, short simulationVariant)
          Erweitert die remove-Methode um eine Simulationsvariante, die angibt, in welcher Simulation diese Objekte aus der Menge entfernt werden sollen.
 void remove(SystemObject object, short simulationVariant)
          Entfernt ein Element aus der dynamischen Menge in Abhängigkeit der Simulationsvariante.
 void removeChangeListener(MutableSetChangeListener listener)
           
 void removeChangeListener(MutableSetChangeListener listener, short simulationsVariant)
           
 void removeChangeListener(short simulationVariant, MutableCollectionChangeListener changeListener)
           
 void removeConfigurationCommunicationChangeListener(ConfigurationCommunicationChangeListener listener)
           
(package private)  void saveElementsData()
           
private  void saveMutableSets(List<ConfigMutableSet.MutableElement> mutableElements)
          Speichert die Elemente dieser Menge (auch historische) in einem konfigurierenden Datensatz ab.
private  void setConfigurationData(SystemObject[] addedElements, SystemObject[] removedElements, short simulationVariant)
          Speichert einen konfigurierenden Datensatz mit den übergebenen Änderungen der Elemente an der Menge.
 
Methods inherited from class de.bsvrz.puk.config.configFile.datamodel.ConfigObjectSet
add, getObjectSetType, remove
 
Methods inherited from class de.bsvrz.puk.config.configFile.datamodel.ConfigConfigurationObject
addSet, directDuplicate, directModification, duplicate, duplicate, getMutableSet, getNonMutableSet, getNotValidSince, getObjectSet, getObjectSets, getValidSince, invalidate, isValid, removeSet, revalidate, simpleRevalidate
 
Methods inherited from class de.bsvrz.puk.config.configFile.datamodel.ConfigSystemObject
checkChangePermit, createConfigurationData, equals, getConfigurationData, getConfigurationData, getConfigurationData, getConfigurationData, getConfigurationData, getConfigurationDataBytes, getId, getName, getPid, getSerializerVersion, getType, getUsedAttributeGroupUsages, hashCode, removeConfigurationData, setConfigurationData, setConfigurationData, setName, simpleInvalidation
 
Methods inherited from class de.bsvrz.puk.config.configFile.datamodel.AbstractConfigSystemObject
compareTo, getConfigurationArea, getConfigurationData, getDataModel, getInfo, getNameOrPidOrId, getPidOrId, getPidOrNameOrId, isOfType, isOfType, setConfigurationData, toString
 
Methods inherited from class java.lang.Object
clone, finalize, getClass, notify, notifyAll, wait, wait, wait
 
Methods inherited from interface de.bsvrz.dav.daf.main.config.ObjectSet
add, getObjectSetType, remove
 
Methods inherited from interface de.bsvrz.dav.daf.main.config.ConfigurationObject
addSet, duplicate, duplicate, getMutableSet, getNonMutableSet, getNotValidSince, getObjectSet, getObjectSets, getValidSince, removeSet, revalidate
 
Methods inherited from interface de.bsvrz.dav.daf.main.config.SystemObject
getConfigurationArea, getConfigurationData, getConfigurationData, getConfigurationData, getDataModel, getId, getInfo, getName, getNameOrPidOrId, getPid, getPidOrId, getPidOrNameOrId, getType, getUsedAttributeGroupUsages, invalidate, isOfType, isOfType, isValid, setConfigurationData, setConfigurationData, setConfigurationData, setName, toString
 
Methods inherited from interface java.lang.Comparable
compareTo
 
Methods inherited from interface de.bsvrz.dav.daf.main.config.ConfigurationObject
addSet, duplicate, duplicate, getMutableSet, getNonMutableSet, getNotValidSince, getObjectSet, getObjectSets, getValidSince, removeSet, revalidate
 
Methods inherited from interface de.bsvrz.dav.daf.main.config.SystemObject
getConfigurationArea, getConfigurationData, getConfigurationData, getConfigurationData, getDataModel, getId, getInfo, getName, getNameOrPidOrId, getPid, getPidOrId, getPidOrNameOrId, getType, getUsedAttributeGroupUsages, invalidate, isOfType, isOfType, isValid, setConfigurationData, setConfigurationData, setConfigurationData, setName, toString
 
Methods inherited from interface java.lang.Comparable
compareTo
 

Field Detail

_debug

private static final Debug _debug
DebugLogger für Debug-Ausgaben


_mutableCollectionSupport

private ConfigMutableCollectionSupport _mutableCollectionSupport
Objekt zur Verwaltung von Anmeldungen auf Änderungen der Elemente dieser Menge.


_changeListeners

private Map<Short,Set<MutableSetChangeListener>> _changeListeners
Speichert alle angemeldeten Beobachter in Abhängigkeit zur Simulationsvariante.


_lockListeners

private final Object _lockListeners
Objekt für den synchronisierten Zugriff auf die Listener.


_elements

private Set<SystemObject> _elements
Die aktuellen Elemente dieser dynamischen Menge.


_lockElements

private final Object _lockElements
Objekt für den synchronisierten Zugriff auf die Elemente.


_lockElementAccessProperties

private final Object _lockElementAccessProperties
Objekt für den synchronisierten Zugriff auf die Fields _elementAccessFieldsInitialized, _elementChangesAllowed und _elementsFile.


_elementAccessFieldsInitialized

private boolean _elementAccessFieldsInitialized
Wurden die Fields _elementChangesAllowed und _elementsFile schon initialisiert ?


_elementChangesAllowed

private boolean _elementChangesAllowed
Dürfen Änderungen an der Elementzugehörigkeit durch diese Konfiguration durchgeführt werden?


_elementsFile

private File _elementsFile
Datei in der die Elementzugehörigkeit dieser Menge gespeichert werden soll, oder null, falls die Elementzugehörigkeit als Datensatz der Menge gespeichert werden soll


_elementsDataBytes

private byte[] _elementsDataBytes
Byte Array mit dem aus der Datei _elementsFile gelesenen oder noch zu schreibenden Datensatz mit der Elementzugehörigkeit der Menge


_elementsDataBytesChanged

private boolean _elementsDataBytesChanged
Muss der in _elementsDataBytes enthaltene Datensatz noch in der Datei gespeichert werden?


_configComHelper

ConfigurationCommunicationListenerSupport _configComHelper
Delegations-Klasse für das Interface ConfigurationCommunicationInterface


_elementsManagementPid

private String _elementsManagementPid
Constructor Detail

ConfigMutableSet

public ConfigMutableSet(ConfigurationArea configurationArea,
                        SystemObjectInformationInterface systemObjectInfo)
Konstruktor einer dynamischen Menge.

Parameters:
configurationArea - Konfigurationsbereich dieser dynamischen Menge
systemObjectInfo - das korrespondierende Objekt aus den Konfigurationsdateien
Method Detail

addChangeListener

public void addChangeListener(MutableSetChangeListener listener)
Specified by:
addChangeListener in interface MutableSet

addChangeListener

public void addChangeListener(MutableSetChangeListener listener,
                              short simulationVariant)

removeChangeListener

public void removeChangeListener(MutableSetChangeListener listener)
Specified by:
removeChangeListener in interface MutableSet

removeChangeListener

public void removeChangeListener(MutableSetChangeListener listener,
                                 short simulationsVariant)

informListeners

void informListeners(SystemObject[] addedObjects,
                     SystemObject[] removedObjects,
                     short simulationVariant)
Bei Änderungen an der dynamischen Menge werden alle angemeldeten Beobachter informiert. Die hinzugefügten und entfernten Elemente werden den Beobachtern ebenfalls mitgeteilt.

Parameters:
addedObjects - hinzugefügte Elemente
removedObjects - entfernte Elemente
simulationVariant - die Simulationsvariante

deleteElements

public void deleteElements(short simulationVariant)
                    throws ConfigurationChangeException
Löscht alle Elemente permanent aus dieser dynamischen Menge.

Parameters:
simulationVariant - die Simulationsvariante
Throws:
ConfigurationChangeException - Falls die Elemente zur Simulationsvariante nicht gelöscht werden konnten oder nicht gelöscht werden dürfen (bei Simulationsvariante 0).

getElements

public List<SystemObject> getElements()
Specified by:
getElements in interface SystemObjectCollection

getElementsWithSimulationVariant

public List<SystemObject> getElementsWithSimulationVariant(short simulationVariant)

getElements

public List<SystemObject> getElements(long time)
Specified by:
getElements in interface SystemObjectCollection

getElementsWithSimulationVariant

public List<SystemObject> getElementsWithSimulationVariant(long time,
                                                           short simulationVariant)

getElementsInPeriod

public List<SystemObject> getElementsInPeriod(long startTime,
                                              long endTime)
Specified by:
getElementsInPeriod in interface SystemObjectCollection

getElementsInPeriod

public List<SystemObject> getElementsInPeriod(long startTime,
                                              long endTime,
                                              short simulationVariant)
Bestimmt die Elemente, die an mindestens einem Zeitpunkt des angegebenen Zeitbereichs zur Zusammenstellung gehört haben in Abhängigkeit der Simulationsvariante.

Parameters:
startTime - Erster Zeitpunkt des Zeitbereichs in Millisekunden seit 1970.
endTime - Letzter Zeitpunkt des Zeitbereichs in Millisekunden seit 1970.
simulationVariant - die Simulationsvariante
Returns:
Liste mit den zu mindestens einem Zeitpunkt des Zeitbereichs zur Zusammenstellung gehörenden System-Objekten.

getElementsDuringPeriod

public List<SystemObject> getElementsDuringPeriod(long startTime,
                                                  long endTime)
Specified by:
getElementsDuringPeriod in interface SystemObjectCollection

getElementsDuringPeriod

public List<SystemObject> getElementsDuringPeriod(long startTime,
                                                  long endTime,
                                                  short simulationVariant)
Bestimmt die Elemente, die während des gesamten angegebenen Zeitbereichs zur Zusammenstellung gehört haben in Abhängigkeit der Simulationsvariante.

Parameters:
startTime - Erster Zeitpunkt des Zeitbereichs in Millisekunden seit 1970.
endTime - Letzter Zeitpunkt des Zeitbereichs in Millisekunden seit 1970.
simulationVariant - die Simulationsvariante
Returns:
Liste mit den während des gesamten Zeitbereichs zur Zusammenstellung gehörenden System-Objekten.

add

public void add(SystemObject object,
                short simulationVariant)
         throws ConfigurationChangeException
Fügt ein Element zur dynamischen Menge in Abhängigkeit der Simulationsvariante.

Parameters:
object - Element, welches hinzugefügt werden soll
simulationVariant - die Simulationsvariante
Throws:
ConfigurationChangeException - Falls das Objekt nicht hinzugefügt werden kann/darf.

add

public void add(SystemObject[] objects)
         throws ConfigurationChangeException
Specified by:
add in interface ObjectSet
Throws:
ConfigurationChangeException

add

public void add(SystemObject[] objects,
                short simulationVariant)
         throws ConfigurationChangeException
Erweitert die add-Methode um eine Simulationsvariante, die angibt, in welcher Simulation diese Objekte der Menge hinzugefügt werden.

Parameters:
objects - die hinzuzufügenden Elemente
simulationVariant - die Simulationsvariante
Throws:
ConfigurationChangeException - Wenn mindestens eines der übergebenen Objekte nicht in die Menge aufgenommen werden konnte und noch nicht in der Menge enthalten war.
See Also:
add(de.bsvrz.dav.daf.main.config.SystemObject[])

checkChangeElementsPermit

private boolean checkChangeElementsPermit()
Prüft, ob die Konfiguration berechtigt ist an der Elementzugehörigkeit dieser Menge eine Änderung durchzuführen.

Returns:
true, falls die Konfiguration die Berechtigung hat, Änderungen an der Elementzugehörigkeit dieser Menge durchzuführen,
false, falls die Konfiguration diese Berechtigung nicht hat.

loadElementAccessProperties

private void loadElementAccessProperties()

getElementsManagementPid

public String getElementsManagementPid()

checkObjectTypeOfElements

private void checkObjectTypeOfElements(SystemObject[] objects)
                                throws ConfigurationChangeException
Prüft, ob alle Objekte vom richtigen Typ sind.

Parameters:
objects - zu prüfende Elemente
Throws:
ConfigurationChangeException - Falls ein Objekt nicht vom erlaubten Typ der Menge ist.

remove

public void remove(SystemObject object,
                   short simulationVariant)
            throws ConfigurationChangeException
Entfernt ein Element aus der dynamischen Menge in Abhängigkeit der Simulationsvariante.

Parameters:
object - Element, welches aus der dynamischen Menge entfernt werden soll
simulationVariant - die Simulationsvariante
Throws:
ConfigurationChangeException - Falls das Element nicht entfernt werden kann.

remove

public void remove(SystemObject[] objects)
            throws ConfigurationChangeException
Specified by:
remove in interface ObjectSet
Throws:
ConfigurationChangeException

remove

public void remove(SystemObject[] objects,
                   short simulationVariant)
            throws ConfigurationChangeException
Erweitert die remove-Methode um eine Simulationsvariante, die angibt, in welcher Simulation diese Objekte aus der Menge entfernt werden sollen.

Parameters:
objects - Elemente, welche aus der dynamischen Menge entfernt werden sollen
simulationVariant - die Simulationsvariante
Throws:
ConfigurationChangeException - Falls die Elemente nicht entfernt werden können.

setConfigurationData

private void setConfigurationData(SystemObject[] addedElements,
                                  SystemObject[] removedElements,
                                  short simulationVariant)
                           throws ConfigurationChangeException
Speichert einen konfigurierenden Datensatz mit den übergebenen Änderungen der Elemente an der Menge.

Parameters:
addedElements - hinzugefügte Elemente
removedElements - entfernte Elemente
simulationVariant - Simulationsvariante
Throws:
ConfigurationChangeException - Wenn der konfigurierende Datensatz nicht geschrieben werden konnte.

saveMutableSets

private void saveMutableSets(List<ConfigMutableSet.MutableElement> mutableElements)
                      throws ConfigurationChangeException
Speichert die Elemente dieser Menge (auch historische) in einem konfigurierenden Datensatz ab.

Parameters:
mutableElements - Elemente dieser Menge
Throws:
ConfigurationChangeException - Falls die Elemente nicht in einem konfigurierenden Datensatz abgespeichert werden können.

getMutableElements

private List<ConfigMutableSet.MutableElement> getMutableElements()
Diese Methode liest den konfigurierenden Datensatz für die Elemente dieser Menge ein und gibt sie in einer Liste zurück.

Returns:
eine Liste von Elementen mit Zeitstempeln, die die Zugehörigkeitszeiträume repräsentieren

saveElementsData

void saveElementsData()

addChangeListener

public void addChangeListener(short simulationVariant,
                              MutableCollectionChangeListener changeListener)
Specified by:
addChangeListener in interface MutableCollection

removeChangeListener

public void removeChangeListener(short simulationVariant,
                                 MutableCollectionChangeListener changeListener)
Specified by:
removeChangeListener in interface MutableCollection

getElements

public List<SystemObject> getElements(short simulationVariant)
Specified by:
getElements in interface MutableCollection

addConfigurationCommunicationChangeListener

public void addConfigurationCommunicationChangeListener(ConfigurationCommunicationChangeListener listener)
Specified by:
addConfigurationCommunicationChangeListener in interface ConfigurationCommunicationInterface

removeConfigurationCommunicationChangeListener

public void removeConfigurationCommunicationChangeListener(ConfigurationCommunicationChangeListener listener)
Specified by:
removeConfigurationCommunicationChangeListener in interface ConfigurationCommunicationInterface

configurationCommunicationChange

void configurationCommunicationChange(boolean configComStatus)

isConfigurationCommunicationActive

public boolean isConfigurationCommunicationActive()
Specified by:
isConfigurationCommunicationActive in interface ConfigurationCommunicationInterface