de.bsvrz.puk.config.configFile.fileaccess
Class ConfigFileManager

java.lang.Object
  extended by de.bsvrz.puk.config.configFile.fileaccess.ConfigFileManager
All Implemented Interfaces:
ConfigurationFileManager

public class ConfigFileManager
extends Object
implements ConfigurationFileManager

Diese Methode stellt Konfigurationsbereiche zur Verfügung und verwaltet den Zugriff auf diese. Der Zugriff bezieht sich dabei auf die Dateien selber (Anlegen, Daten speichern, usw.), aber auch auf die dynamischen Objekte/Konfigurationsobjekte der einzelnen Bereiche.

Author:
Kappich+Kniß Systemberatung Aachen (K2S), Achim Wullenkord (AW)

Nested Class Summary
private static class ConfigFileManager.LoadInformations
          Diese Klasse speichert alle Informationen, die nötig sind um ein als "ungültig" markiertes Objekt nachträglich komplett aus einer Datei in den Hauptspeicher zu laden.
 
Field Summary
private  Map<String,ConfigurationAreaFile> _configurationFiles
          HashMap, die alle Dateien und somit Konfigurationsbereiche verwaltet.
private static Debug _debug
          DebugLogger für Debug-Ausgaben
private  Map<Long,Object> _idMap
          Speichert "alle" Objekte, aller Konfigurationsbereiche.
private  Map<String,SystemObjectInformationInterface> _pidMapActive
          Speichert alle aktiven Objekte, aller Konfigurationsbereiche.
private  Map<String,Set<SystemObjectInformationInterface>> _pidMapNew
          Speichert alle noch nicht aktiven Objekte, aller Konfigurationsbereiche.
private  Map<Integer,Set<ConfigFileManager.LoadInformations>> _pidMapOld
          Speichert zu dem HashCode einer Pid eine Menge von Objekten.
private  Map<Short,Set<DynamicObjectInformation>> _simulationObjects
          Speichert zu einer Simulationsvariante alle dynamischen Objekte.
 
Constructor Summary
ConfigFileManager()
           
 
Method Summary
 ConfigurationAreaFile addAreaFile(String configurationAreaPid, File configurationAreaDir, short activeVersion, List<VersionInfo> localVersionTimes)
          Der aktuellen Konfiguration wird der angegebene Konfigurationsbereich hinzugefügt.
 void close()
          Diese Methode wird aufgerufen, wenn ein System heruntegefahren werden soll.
 ConfigurationAreaFile createAreaFile(String configurationAreaPid, File configurationAreaDir)
          Diese Methode erstellt zu einem neuen Konfigurationsbereich eine Konfigurationsdatei.
 SystemObjectInformationInterface getActiveObject(long id)
           
 SystemObjectInformationInterface getActiveObject(String pid)
          Diese Methode gibt ein Objekt zurück, das derzeit in einem Konfigurationsbereich aktiv ist.
 ConfigurationAreaFile getAreaFile(String configurationAreaPid)
          Diese Methode gibt ein Objekt zurück, das den Konfigurationsbereich darstellt.
 ConfigurationAreaFile[] getConfigurationAreas()
          Diese Methode gibt alle Konfigurationsbereiche zurück, die mit ConfigurationFileManager.addAreaFile(java.lang.String, java.io.File, short, java.util.List) eingefügt wurden.
 SystemObjectInformationInterface[] getNewObjects(String pid)
          Diese Methode gibt alle Objekte zurück, die derzeit in einem Konfigurationsbereich weder aktiv noch als ungültig markiert sind.
 SystemObjectInformationInterface getObject(long id)
          Gibt ein Objekt zurück, das über die Id identifiziert wird.
 List<DynamicObjectInfo> getObjects(short simulationVariant)
          Diese Methode gibt alle dynamischen Objekte zurück, die zu einer Simulationsvariante gehören.
 SystemObjectInformationInterface getOldObject(long id)
           
 SystemObjectInformationInterface[] getOldObjects(String pid, long startTime, long endTime)
          Diese Methode gibt alle Objekte zurück, die in einem Konfigurationsbereich als ungültig markiert sind und die im angegebnen Zeitbereich ungültig geworden sind.
private  SystemObjectInformationInterface loadOldObject(ConfigFileManager.LoadInformations oldObject)
          Lädt ein als ungültig markiertes Objekt in den Hauptspeicher
(package private)  void newObjectCreated(SystemObjectInformationInterface newObjectInfo)
          Diese Methode wird aufgerufen, wenn ein neues dynamisches Objekt oder Konfigurationsobjekt zu einem Konfigurationsbreich hinzugefügt wurde.
private  void putActiveObjectPidHashMap(SystemObjectInformationInterface object)
          Legt ein Objekt in der Map ab, die alle Pids, aller aktiven Objekte verwaltet.
private  void putNewObjectPidHashMap(SystemObjectInformationInterface object)
           
private  void putObjectId(Long id, ConfigFileManager.LoadInformations object)
           
private  void putObjectId(SystemObjectInformationInterface object)
           
private  void putOldObjectPidHashMap(int pidHashCode, ConfigFileManager.LoadInformations loadInformations)
           
(package private)  void putSimulationObject(DynamicObjectInformation dynamicObjectInformation)
          Fügt ein dynamisches Objekt mit einer Simulationsvariante größer 0 in eine Map ein.
private  void removeActiveObjectPidHashMap(DynamicObjectInfo dynamicObjectInfo)
          Entfernt ein Objekt aus der Map, die alle Pids der aktiven Objekte verwaltet.
(package private)  void removeDynamicSimulationObject(DynamicObjectInformation dynamicObjectInformation)
          Entfernt ein dynamisches Objekt mit einer Simulationvariante größer 0 aus allen Datenstrukturen, die zum schnellen Zugriff auf Objekte angelegt wurden.
(package private)  void removeNewObject(ConfigurationObjectInfo object)
          Entfernt ein Objekt, das in zukünftig gültig sein wird, aus den Datenstrukturen des Objekts dieser Klasse.
(package private)  void removeObject(long id)
          Entfernt ein Objekt aus der Datenstruktur, die den schnellen Zugriff mittels Id auf Objekte zuläßt.
private  void removeObjectPidMapOld(DynamicObjectInformation dynamicObjectInformation)
          Entfernt die Ladeinformtionen eines dynamischen Objekts, aus der Map, die alle alten dynamsichen Objekte der Mischmenge enthält.
private  void removeSimulationObjectFromMap(DynamicObjectInformation dynamicObjectInformation)
          Entfernt ein dynamisches Objekt aus der Datenstruktur, die alle dynamischen Objekte über Simulationsvariante verwaltet.
 void saveConfigurationAreaFiles()
          Methode, die alle Konfigurationsbreiche speichert.
(package private)  void setDynamicObjectInvalid(DynamicObjectInformation oldDynamicObject)
          Ein dynamisches Objekt wird ungültig (Konfigurationsobjekte müssen nicht beachtet werden, da sie erst beim nächsten Neustart ungültig werden)
 
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
DebugLogger für Debug-Ausgaben


_idMap

private final Map<Long,Object> _idMap
Speichert "alle" Objekte, aller Konfigurationsbereiche. Als Schlüssel dient die ID. Es werden die Objekte gespeichert, die sich in der Mischmenge des jeweiligen Bereichs befinden. Aktuelle und zukünftig aktuelle Objekte stehen direkt als Objekt zur Verfügung (ConfigurationObjectInfo und DynamicObjectInfo), Objekte die als "ungültig" markiert sind, aber sich trotzdem noch in der Mischmenge befinden, werden nur mit der Dateiposition und einem ConfigAreaFile-Objekt gespeichert. Dadurch können sie, falls nötig, nachgeladen werden.


_pidMapActive

private final Map<String,SystemObjectInformationInterface> _pidMapActive
Speichert alle aktiven Objekte, aller Konfigurationsbereiche. Als Schlüssel dient die Pid (String). Das Rückgabeobjekt ist das Objekt, das zu der Pid gehört. Dieser Mechanismus garantiert, dass es zu jeder Pid nur ein aktuelles Objekte gibt, werden mehrer Objekte mit der gleichen Pid eingetragen, so wird nur das letzte Objekt eingefügt.


_pidMapNew

private final Map<String,Set<SystemObjectInformationInterface>> _pidMapNew
Speichert alle noch nicht aktiven Objekte, aller Konfigurationsbereiche. Als Schlüssel dient der HashCode der Pid. Es wird eine Menge zurückgegeben, die alle Objekte enthält deren Pid mit dem HashCode abgebildet wurden. Die Menge muss dann untersucht werden.


_pidMapOld

private final Map<Integer,Set<ConfigFileManager.LoadInformations>> _pidMapOld
Speichert zu dem HashCode einer Pid eine Menge von Objekten. Die Objekte enthalten alle Informationen , um das Objekt (ungültig markiert) aus der Datei zu laden.
Es muss die gesamte Menge durchsucht werden, da der HashCode nicht eindeutig ist, um die Pid genau zu identifizieren. Ausserdem kann es mehrer Pid´s zu einem Objekt geben.


_configurationFiles

private final Map<String,ConfigurationAreaFile> _configurationFiles
HashMap, die alle Dateien und somit Konfigurationsbereiche verwaltet. Als Schlüssel dient die Pid des Konfigurationsbereichs. Das zurückgegebene Objekt ermöglicht den Zugriff auf den Konfigurationsbereich.


_simulationObjects

private final Map<Short,Set<DynamicObjectInformation>> _simulationObjects
Speichert zu einer Simulationsvariante alle dynamischen Objekte. Als Schlüssel dient die Simulationsvariante, als Value wird eine Liste aller dynamischen Objekte der Simulationsvariante gespeichert.

Wenn der Konfigurationsbereich geladen wird, wird die Liste mit Objekten bestückt. Wird ein neues dynamisches Objekt erzeugt, wird es ebenfalls in die Map aufgenommen.

Constructor Detail

ConfigFileManager

public ConfigFileManager()
Method Detail

createAreaFile

public ConfigurationAreaFile createAreaFile(String configurationAreaPid,
                                            File configurationAreaDir)
                                     throws IllegalArgumentException,
                                            IOException,
                                            NoSuchVersionException
Diese Methode erstellt zu einem neuen Konfigurationsbereich eine Konfigurationsdatei. Der neue Konfigurationsbereich erhält den Zustand inaktiv. Soll er von der Konfiguration genutzt werden können, so muss er aktiviert werden.

Specified by:
createAreaFile in interface ConfigurationFileManager
Parameters:
configurationAreaPid - die Pid des neuen Konfigurationsbereichs
configurationAreaDir - das Verzeichnis, in dem die Konfigurationsdatei angelegt werden soll
Returns:
der neue Konfigurationsbereich
Throws:
IllegalArgumentException - Falls die Argumente ungültig sind.
IOException - Falls Fehler im Zusammenhang mit der Datei des Konfigurationsbereichs auftreten.
NoSuchVersionException - TBD

addAreaFile

public ConfigurationAreaFile addAreaFile(String configurationAreaPid,
                                         File configurationAreaDir,
                                         short activeVersion,
                                         List<VersionInfo> localVersionTimes)
                                  throws IllegalArgumentException,
                                         IOException,
                                         NoSuchVersionException
Der aktuellen Konfiguration wird der angegebene Konfigurationsbereich hinzugefügt. Gibt es bereits einen Konfigurationsbereich mit der angegebenen Pid, wird eine Fehlermeldung erzeugt.

Specified by:
addAreaFile in interface ConfigurationFileManager
Parameters:
configurationAreaPid - die Pid des Konfigurationsbereichs
configurationAreaDir - das Verzeichnis, in dem die Konfigurationsdatei gespeichert wurde. Diese Verzeichnis wird benutzt um den Bereich zu laden.
activeVersion - die aktuelle Version des Konfigurationsbereichs
localVersionTimes - Diese Liste speichert zu jeder Version, die jemals aktiviert wurde, den Zeitpunkt an dem die Version aktiviert wurde. Die Zeitpunkte beziehen sich auf den Zeit, an dem sie auf der Konfiguration, die diese Methode aufruft, aktiviert wurden.
Returns:
der hinzugefügte Konfigurationsbereich
Throws:
IllegalArgumentException - Falls der Konfigurationsbereich mit der Pid bereits zur Konfiguration hinzugefügt wurde.
IllegalStateException - Datei existiert nicht
IOException - TBD
NoSuchVersionException - TBD

putActiveObjectPidHashMap

private void putActiveObjectPidHashMap(SystemObjectInformationInterface object)
Legt ein Objekt in der Map ab, die alle Pids, aller aktiven Objekte verwaltet. Es gibt zu einer Pid immer nur ein altives Objekt, wurde bereits ein aktives Objekt gespeichert, so wird dieses durch das neue Objekt überschrieben.

Parameters:
object - Objekt, das in die Map aufgenommen werden soll

removeActiveObjectPidHashMap

private void removeActiveObjectPidHashMap(DynamicObjectInfo dynamicObjectInfo)
Entfernt ein Objekt aus der Map, die alle Pids der aktiven Objekte verwaltet. Diese Methode macht nur bei dynamischen Objekten Sinn, da nur diese zur Laufzeit des Programms entfernt werden müssen (sie werden ungültig). Bei Konfigurationsobjekten findet dieser wechsel nur beim Start der Konfigurations statt.

Parameters:
dynamicObjectInfo - Objekt, das aus der Map entfernt werden soll

putNewObjectPidHashMap

private void putNewObjectPidHashMap(SystemObjectInformationInterface object)

putOldObjectPidHashMap

private void putOldObjectPidHashMap(int pidHashCode,
                                    ConfigFileManager.LoadInformations loadInformations)

getAreaFile

public ConfigurationAreaFile getAreaFile(String configurationAreaPid)
Description copied from interface: ConfigurationFileManager
Diese Methode gibt ein Objekt zurück, das den Konfigurationsbereich darstellt.

Specified by:
getAreaFile in interface ConfigurationFileManager
Parameters:
configurationAreaPid - Pid des Konfigurationsbereichs
Returns:
Objekt, mit dem auf den Konfigurationsbereich zugegriffen werden kann. Ist kein Objekt vorhanden, wird null zurückgegeben.

getObject

public SystemObjectInformationInterface getObject(long id)
Description copied from interface: ConfigurationFileManager
Gibt ein Objekt zurück, das über die Id identifiziert wird. Es werden alle Konfigurationsbereiche betrachtet, die mit ConfigurationFileManager.addAreaFile(java.lang.String, java.io.File, short, java.util.List) hinzugefügt wurden.

Specified by:
getObject in interface ConfigurationFileManager
Parameters:
id - Id des Objekts
Returns:
Objekt, das angefordert wurde oder null falls kein Objekt gefunden werden konnte

removeObject

void removeObject(long id)
Entfernt ein Objekt aus der Datenstruktur, die den schnellen Zugriff mittels Id auf Objekte zuläßt.

Parameters:
id - Id des Objekts, das entfernt werden soll

removeDynamicSimulationObject

void removeDynamicSimulationObject(DynamicObjectInformation dynamicObjectInformation)
Entfernt ein dynamisches Objekt mit einer Simulationvariante größer 0 aus allen Datenstrukturen, die zum schnellen Zugriff auf Objekte angelegt wurden.

Parameters:
dynamicObjectInformation - Objekt, das entfernt werden soll

removeObjectPidMapOld

private void removeObjectPidMapOld(DynamicObjectInformation dynamicObjectInformation)
Entfernt die Ladeinformtionen eines dynamischen Objekts, aus der Map, die alle alten dynamsichen Objekte der Mischmenge enthält.

Sind zu einer Pid keine Ladeinformationen mehr enthalten, wird die Menge aus der Map gelöscht.

Parameters:
dynamicObjectInformation - Objekt, das entfernt werden soll

getActiveObject

public SystemObjectInformationInterface getActiveObject(long id)

getActiveObject

public SystemObjectInformationInterface getActiveObject(String pid)
Description copied from interface: ConfigurationFileManager
Diese Methode gibt ein Objekt zurück, das derzeit in einem Konfigurationsbereich aktiv ist. Es werden alle Konfigurationsbreiche geprüft, die mit ConfigurationFileManager.addAreaFile(java.lang.String, java.io.File, short, java.util.List) hinzugefügt wurden.

Specified by:
getActiveObject in interface ConfigurationFileManager
Parameters:
pid - Pid des Objekts, das gesucht werden soll
Returns:
Objekt, dessen Pid übergeben wurde oder null falls kein Objekt existiert

getNewObjects

public SystemObjectInformationInterface[] getNewObjects(String pid)
Description copied from interface: ConfigurationFileManager
Diese Methode gibt alle Objekte zurück, die derzeit in einem Konfigurationsbereich weder aktiv noch als ungültig markiert sind. Es werden alle Konfigurationsbereiche geprüft, die mit ConfigurationFileManager.addAreaFile(java.lang.String, java.io.File, short, java.util.List) hinzugefügt wurden.

Specified by:
getNewObjects in interface ConfigurationFileManager
Parameters:
pid - pid der gesuchten Objekte
Returns:
Alle Objekte, deren Pid mit der übergebenen Pid übereinstimmt. Konnte kein Objekt gefunden werden, wird eine leeres Array zurückgegeben

getOldObject

public SystemObjectInformationInterface getOldObject(long id)
Parameters:
id -
Returns:
Objekt oder null falls nicht vorhanden

loadOldObject

private SystemObjectInformationInterface loadOldObject(ConfigFileManager.LoadInformations oldObject)
Lädt ein als ungültig markiertes Objekt in den Hauptspeicher

Parameters:
oldObject - Objekt, das alle Informationen zum laden des Objekts enthält
Returns:
Ein ungütlig markiertes Objekt

getOldObjects

public SystemObjectInformationInterface[] getOldObjects(String pid,
                                                        long startTime,
                                                        long endTime)
Description copied from interface: ConfigurationFileManager
Diese Methode gibt alle Objekte zurück, die in einem Konfigurationsbereich als ungültig markiert sind und die im angegebnen Zeitbereich ungültig geworden sind. Es werden alle Konfigurationsbreiche geprüft, die mit ConfigurationFileManager.addAreaFile(java.lang.String, java.io.File, short, java.util.List) hinzugefügt wurden.

Specified by:
getOldObjects in interface ConfigurationFileManager
Parameters:
pid - pid des gesuchten Objekts
startTime - Startzeitpunkt des Bereichs
endTime - Endzeitpunkt des Bereichs
Returns:
die gesuchten Objekte

getConfigurationAreas

public ConfigurationAreaFile[] getConfigurationAreas()
Description copied from interface: ConfigurationFileManager
Diese Methode gibt alle Konfigurationsbereiche zurück, die mit ConfigurationFileManager.addAreaFile(java.lang.String, java.io.File, short, java.util.List) eingefügt wurden.

Specified by:
getConfigurationAreas in interface ConfigurationFileManager
Returns:
s.o.

putSimulationObject

void putSimulationObject(DynamicObjectInformation dynamicObjectInformation)
Fügt ein dynamisches Objekt mit einer Simulationsvariante größer 0 in eine Map ein. Ein Objekt mit Simulationsvariante kleiner gleich 0 wird nicht eingetragen.

Parameters:
dynamicObjectInformation - Objekt, das eingetragen werden soll

removeSimulationObjectFromMap

private void removeSimulationObjectFromMap(DynamicObjectInformation dynamicObjectInformation)
Entfernt ein dynamisches Objekt aus der Datenstruktur, die alle dynamischen Objekte über Simulationsvariante verwaltet.

Enthält die Menge, der dynamischen Objekte, die zu einer Simulationsvariante gehören, keine Objekte mehr, wird die Menge ebenfalls entfernt.

Parameters:
dynamicObjectInformation - Objekt, das entfernt werden soll

getObjects

public List<DynamicObjectInfo> getObjects(short simulationVariant)
                                   throws IllegalArgumentException
Description copied from interface: ConfigurationFileManager
Diese Methode gibt alle dynamischen Objekte zurück, die zu einer Simulationsvariante gehören. Der Zustand der dynamischen Objekte (gültig/ungültig) wird dabei nicht berücksichtigt. Die Simulationsvariante muss dabei größer 0 sein.

Specified by:
getObjects in interface ConfigurationFileManager
Parameters:
simulationVariant - Simulationsvariante, für die alle dynamischen Objekte zurückgegeben werden sollen. (Wertebereich 1...999)
Returns:
Liste mit dynamischen Objekten. Sind keine Objekte vorhande, wird eine leere Liste zurückgegeben.
Throws:
IllegalArgumentException

newObjectCreated

void newObjectCreated(SystemObjectInformationInterface newObjectInfo)
Diese Methode wird aufgerufen, wenn ein neues dynamisches Objekt oder Konfigurationsobjekt zu einem Konfigurationsbreich hinzugefügt wurde.

Parameters:
newObjectInfo -

setDynamicObjectInvalid

void setDynamicObjectInvalid(DynamicObjectInformation oldDynamicObject)
Ein dynamisches Objekt wird ungültig (Konfigurationsobjekte müssen nicht beachtet werden, da sie erst beim nächsten Neustart ungültig werden)

Parameters:
oldDynamicObject - Objekt, das ungültig wurde

removeNewObject

void removeNewObject(ConfigurationObjectInfo object)
Entfernt ein Objekt, das in zukünftig gültig sein wird, aus den Datenstrukturen des Objekts dieser Klasse.

Parameters:
object - Objekt, das aus allen Datenstrukturen entfernt werden soll

putObjectId

private void putObjectId(SystemObjectInformationInterface object)

putObjectId

private void putObjectId(Long id,
                         ConfigFileManager.LoadInformations object)

saveConfigurationAreaFiles

public void saveConfigurationAreaFiles()
                                throws IOException
Methode, die alle Konfigurationsbreiche speichert. Der Aufruf der Methode ist blockierend und kehrt erst dann zurück, wenn alle Konfigurationsbereiche gespeichert sind.

Specified by:
saveConfigurationAreaFiles in interface ConfigurationFileManager
Throws:
IOException - Es ist beim speichern der Versorgungsdateien zu einem Fehler gekommen. Es wurde trotz des Fehlers bei jeder Datei ConfigurationAreaFile.flush() aufgerufen. Die zuletzt aufgetretene IOException wird zurückgegeben.

close

public void close()
Description copied from interface: ConfigurationFileManager
Diese Methode wird aufgerufen, wenn ein System heruntegefahren werden soll. Sie speichert alle Konfigurationsbereiche (siehe ConfigurationFileManager.saveConfigurationAreaFiles() und stellt einen Zustand her in dem das System wieder gestartet werden kann.

Specified by:
close in interface ConfigurationFileManager