public class ConfigFileManager extends java.lang.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.
Modifier and Type | Class and Description |
---|---|
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.
|
private static class |
ConfigFileManager.PidAndSimvar
Speichert eine Pid zusammen mit einer Simulationsvariante für die Verwaltung der Simulationsspezifischen Pids
|
Modifier and Type | Field and Description |
---|---|
private java.util.Map<java.lang.String,ConfigurationAreaFile> |
_configurationFiles
HashMap, die alle Dateien und somit Konfigurationsbereiche verwaltet.
|
private static Debug |
_debug
DebugLogger für Debug-Ausgaben
|
private java.util.Map<java.lang.Long,java.lang.Object> |
_idMap
Speichert “alle” Objekte, aller Konfigurationsbereiche.
|
private java.util.Map<java.lang.String,SystemObjectInformationInterface> |
_pidMapActive
Speichert alle aktiven Objekte, aller Konfigurationsbereiche.
|
private java.util.Map<java.lang.String,java.util.Set<SystemObjectInformationInterface>> |
_pidMapNew
Speichert alle noch nicht aktiven Objekte, aller Konfigurationsbereiche.
|
private java.util.Map<ConfigFileManager.PidAndSimvar,SystemObjectInformationInterface> |
_pidMapSimulation
Speichert alle dynamischen Objekte aus Simulationen anhand von Pid und Simulationsvariente.
|
private java.util.Map<java.lang.Short,java.util.Set<DynamicObjectInformation>> |
_simulationObjects
Speichert zu einer Simulationsvariante alle dynamischen Objekte.
|
Constructor and Description |
---|
ConfigFileManager() |
Modifier and Type | Method and Description |
---|---|
ConfigurationAreaFile |
addAreaFile(java.lang.String configurationAreaPid,
java.io.File configurationAreaDir,
short activeVersion,
java.util.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(java.lang.String configurationAreaPid,
java.io.File configurationAreaDir)
Diese Methode erstellt zu einem neuen Konfigurationsbereich eine Konfigurationsdatei.
|
SystemObjectInformationInterface |
getActiveObject(long id) |
SystemObjectInformationInterface |
getActiveObject(java.lang.String pid)
Diese Methode gibt ein Objekt zurück, das derzeit in einem Konfigurationsbereich aktiv ist.
|
ConfigurationAreaFile |
getAreaFile(java.lang.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<de.bsvrz.puk.config.main.managementfile.VersionInfo>) eingefügt wurden. |
SystemObjectInformationInterface[] |
getNewObjects(java.lang.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.
|
java.util.List<DynamicObjectInfo> |
getObjects(short simulationVariant)
Diese Methode gibt alle dynamischen Objekte zurück, die zu einer Simulationsvariante gehören.
|
SystemObjectInformationInterface |
getOldObject(long id) |
SystemObjectInformationInterface |
getSimulationObject(java.lang.String pid,
short simulationVariant)
Gibt ein simulationsspezifisches Objekt anhand der Pid zurück.
|
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(java.lang.Long id,
ConfigFileManager.LoadInformations object) |
private void |
putObjectId(SystemObjectInformationInterface object) |
(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 |
removeSimulationObjectFromMap(DynamicObjectInformation dynamicObjectInformation)
Entfernt ein dynamisches Objekt aus der Datenstruktur, die alle dynamischen Objekte über Simulationsvariante verwaltet.
|
private void |
removeSimulationObjectPidHashMap(DynamicObjectInfo dynamicObjectInfo,
short simulationVariant)
Dasselbe wie removeActiveObjectPidHashMap(DynamicObjectInfo), nur für Simulationsobjekte
|
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)
|
private static final Debug _debug
DebugLogger für Debug-Ausgaben
private final java.util.Map<java.lang.Long,java.lang.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.
private final java.util.Map<java.lang.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. Objekte aus Simulationen werden hier nicht eingefügt und stattdessen in der Map _pidMapSimulation gespeichert.
private final java.util.Map<ConfigFileManager.PidAndSimvar,SystemObjectInformationInterface> _pidMapSimulation
Speichert alle dynamischen Objekte aus Simulationen anhand von Pid und Simulationsvariente. Objekte aus Simulationen werden hier statt in _pidMapActive
gespeichert, da Pids nur je Simulationsvariante eindeutig sein müssen und es sonst zu Kollisionen bei Verwendung der gleichen Pid in unterschieldichen Simulationen kommen könnte.
private final java.util.Map<java.lang.String,java.util.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.
private final java.util.Map<java.lang.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.
private final java.util.Map<java.lang.Short,java.util.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.
public ConfigurationAreaFile createAreaFile(java.lang.String configurationAreaPid, java.io.File configurationAreaDir) throws java.lang.IllegalArgumentException, java.io.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.
createAreaFile
in interface ConfigurationFileManager
configurationAreaPid
- die Pid des neuen KonfigurationsbereichsconfigurationAreaDir
- das Verzeichnis, in dem die Konfigurationsdatei angelegt werden solljava.lang.IllegalArgumentException
- Falls die Argumente ungültig sind.java.io.IOException
- Falls Fehler im Zusammenhang mit der Datei des Konfigurationsbereichs auftreten.NoSuchVersionException
- TBDpublic ConfigurationAreaFile addAreaFile(java.lang.String configurationAreaPid, java.io.File configurationAreaDir, short activeVersion, java.util.List<VersionInfo> localVersionTimes) throws java.lang.IllegalArgumentException, java.io.IOException, NoSuchVersionException
Der aktuellen Konfiguration wird der angegebene Konfigurationsbereich hinzugefügt. Gibt es bereits einen Konfigurationsbereich mit der angegebenen Pid, wird eine Fehlermeldung erzeugt.
addAreaFile
in interface ConfigurationFileManager
configurationAreaPid
- die Pid des KonfigurationsbereichsconfigurationAreaDir
- das Verzeichnis, in dem die Konfigurationsdatei gespeichert wurde. Diese Verzeichnis wird benutzt um den Bereich zu laden.activeVersion
- die aktuelle Version des KonfigurationsbereichslocalVersionTimes
- 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.java.lang.IllegalArgumentException
- Falls der Konfigurationsbereich mit der Pid bereits zur Konfiguration hinzugefügt wurde.java.lang.IllegalStateException
- Datei existiert nichtjava.io.IOException
- TBDNoSuchVersionException
- TBDprivate 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 aktives Objekt, wurde bereits ein aktives Objekt gespeichert, so wird dieses durch das neue Objekt überschrieben.
object
- Objekt, das in die Map aufgenommen werden sollprivate 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.
dynamicObjectInfo
- Objekt, das aus der Map entfernt werden sollprivate void removeSimulationObjectPidHashMap(DynamicObjectInfo dynamicObjectInfo, short simulationVariant)
Dasselbe wie removeActiveObjectPidHashMap(DynamicObjectInfo), nur für Simulationsobjekte
private void putNewObjectPidHashMap(SystemObjectInformationInterface object)
public ConfigurationAreaFile getAreaFile(java.lang.String configurationAreaPid)
ConfigurationFileManager
Diese Methode gibt ein Objekt zurück, das den Konfigurationsbereich darstellt.
getAreaFile
in interface ConfigurationFileManager
configurationAreaPid
- Pid des Konfigurationsbereichsnull
zurückgegeben.public SystemObjectInformationInterface getObject(long id)
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<de.bsvrz.puk.config.main.managementfile.VersionInfo>)
hinzugefügt wurden.
getObject
in interface ConfigurationFileManager
id
- Id des Objektsnull
falls kein Objekt gefunden werden konntevoid removeObject(long id)
Entfernt ein Objekt aus der Datenstruktur, die den schnellen Zugriff mittels Id auf Objekte zuläßt.
id
- Id des Objekts, das entfernt werden sollvoid removeDynamicSimulationObject(DynamicObjectInformation dynamicObjectInformation)
Entfernt ein dynamisches Objekt mit einer Simulationvariante größer 0 aus allen Datenstrukturen, die zum schnellen Zugriff auf Objekte angelegt wurden.
dynamicObjectInformation
- Objekt, das entfernt werden sollpublic SystemObjectInformationInterface getActiveObject(long id)
public SystemObjectInformationInterface getActiveObject(java.lang.String pid)
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<de.bsvrz.puk.config.main.managementfile.VersionInfo>)
hinzugefügt wurden. Objekte, die nur in Simulationen gültig sind werden hier nicht zurückgegeben, stattdessen ist ConfigurationFileManager.getSimulationObject(String, short)
zu benutzen.
getActiveObject
in interface ConfigurationFileManager
pid
- Pid des Objekts, das gesucht werden sollnull
falls kein Objekt existiertpublic SystemObjectInformationInterface getSimulationObject(java.lang.String pid, short simulationVariant)
ConfigurationFileManager
Gibt ein simulationsspezifisches Objekt anhand der Pid zurück. Es werden nur Objekte zurückgegeben, die in einer Simulation erzeugt wurden und damit auch nur in dieser Simulation gültig sind.
getSimulationObject
in interface ConfigurationFileManager
pid
- PidsimulationVariant
- Simulationsvariantenull
falls kein Objekt existiertpublic SystemObjectInformationInterface[] getNewObjects(java.lang.String pid)
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<de.bsvrz.puk.config.main.managementfile.VersionInfo>)
hinzugefügt wurden.
getNewObjects
in interface ConfigurationFileManager
pid
- pid der gesuchten Objektepublic SystemObjectInformationInterface getOldObject(long id)
id
- null
falls nicht vorhandenprivate SystemObjectInformationInterface loadOldObject(ConfigFileManager.LoadInformations oldObject)
Lädt ein als ungültig markiertes Objekt in den Hauptspeicher
oldObject
- Objekt, das alle Informationen zum laden des Objekts enthältpublic ConfigurationAreaFile[] getConfigurationAreas()
ConfigurationFileManager
Diese Methode gibt alle Konfigurationsbereiche zurück, die mit ConfigurationFileManager.addAreaFile(java.lang.String, java.io.File, short, java.util.List<de.bsvrz.puk.config.main.managementfile.VersionInfo>)
eingefügt wurden.
getConfigurationAreas
in interface ConfigurationFileManager
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.
dynamicObjectInformation
- Objekt, das eingetragen werden sollprivate 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.
dynamicObjectInformation
- Objekt, das entfernt werden sollpublic java.util.List<DynamicObjectInfo> getObjects(short simulationVariant) throws java.lang.IllegalArgumentException
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.
getObjects
in interface ConfigurationFileManager
simulationVariant
- Simulationsvariante, für die alle dynamischen Objekte zurückgegeben werden sollen. (Wertebereich 1…999)java.lang.IllegalArgumentException
void newObjectCreated(SystemObjectInformationInterface newObjectInfo)
Diese Methode wird aufgerufen, wenn ein neues dynamisches Objekt oder Konfigurationsobjekt zu einem Konfigurationsbreich hinzugefügt wurde.
newObjectInfo
- 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)
oldDynamicObject
- Objekt, das ungültig wurdevoid removeNewObject(ConfigurationObjectInfo object)
Entfernt ein Objekt, das in zukünftig gültig sein wird, aus den Datenstrukturen des Objekts dieser Klasse.
object
- Objekt, das aus allen Datenstrukturen entfernt werden sollprivate void putObjectId(SystemObjectInformationInterface object)
private void putObjectId(java.lang.Long id, ConfigFileManager.LoadInformations object)
public void saveConfigurationAreaFiles() throws java.io.IOException
Methode, die alle Konfigurationsbreiche speichert. Der Aufruf der Methode ist blockierend und kehrt erst dann zurück, wenn alle Konfigurationsbereiche gespeichert sind.
saveConfigurationAreaFiles
in interface ConfigurationFileManager
java.io.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.public void close()
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.
close
in interface ConfigurationFileManager