Class ConfigAreaFile

java.lang.Object
de.bsvrz.puk.config.configFile.fileaccess.ConfigAreaFile
All Implemented Interfaces:
ConfigurationAreaFile

public class ConfigAreaFile
extends java.lang.Object
implements ConfigurationAreaFile
Diese Klasse stellt eine Konfigurationsbereichsdatei dar und speichert alle Objekte des Bereichs mit Historie.
  • Constructor Details

    • ConfigAreaFile

      public ConfigAreaFile​(java.io.File configAreaFile, short activeVersion, ConfigFileManager configFileManager, java.util.List<VersionInfo> localActivatedVersionTimes) throws java.io.IOException
      Dieser Konstruktor wird benutzt, wenn eine Datei für einen Konfigurationsbereich bereits existiert.
      Parameters:
      configAreaFile - Datei, in der der Konfigurationsberich gespeichert ist
      activeVersion - aktive Version mit der der Konfigurationsbereich gestartet wird
      configFileManager - Objekt, das alle Konfigurationsbereiche verwaltet
      localActivatedVersionTimes - Liste, die zu jeder Version, die lokal aktiviert wurde, den Zeitpunkt enthält, wann die Version aktiviert wurde
      Throws:
      java.io.IOException
    • ConfigAreaFile

      public ConfigAreaFile​(java.io.File configAreaFile, java.lang.String pid, short activeVersion, int serializerVersion, ConfigFileManager configFileManager) throws java.io.IOException
      Erzeugt eine Datei, die einen Konfigurationsbereich abbildet. Der Header wird erstellt, usw..
      Parameters:
      configAreaFile - Datei, in der die Objekte gespeichert werden
      pid - Pid des Konfigurationsbereichs
      activeVersion - aktuelle Version
      serializerVersion - Version, mit der alle Daten in der Datei serialisiert werden müssen. Alle Daten, die
      configFileManager -
      Throws:
      java.io.IOException
  • Method Details

    • getRelativeFilePositionForInvalidConfigObject

      public static long getRelativeFilePositionForInvalidConfigObject​(long headerEnd, long absoluteFilePosition)
    • getRelativeFilePositionForInvalidDynamicObject

      public static long getRelativeFilePositionForInvalidDynamicObject​(long dynamicAreaOffset, long absoluteFilePosition)
    • toString

      public java.lang.String toString()
      Overrides:
      toString in class java.lang.Object
    • getNextActiveVersion

      public short getNextActiveVersion()
      Description copied from interface: ConfigurationAreaFile
      Liefert die Version, ab der neu erstellte Konfigurationsobjekte gültig werden.
      Specified by:
      getNextActiveVersion in interface ConfigurationAreaFile
      Returns:
      Liefert eine Version, ab der neu erstellte Konfigurationsobjekte gültig werden.
    • setNextActiveVersion

      public void setNextActiveVersion​(short nextActiveVersion)
      Description copied from interface: ConfigurationAreaFile
      Legt die Version fest mit der Konfigurationsobjekte, die mit ConfigurationAreaFile.createConfigurationObject(long, long, java.lang.String, java.lang.String) erzeugt werden, gültig werden.
      Specified by:
      setNextActiveVersion in interface ConfigurationAreaFile
      Parameters:
      nextActiveVersion - Version, mit der Konfigurationsobjekte gültig werden. Die erste Version, mit der ein Objekt gültig sein kann, ist die 1. Die Versionen sind positive Ganzzahlen, die fortlaufend nummeriert sind.
    • getConfigurationAreaInfo

      public ConfigurationObjectInfo getConfigurationAreaInfo()
      Methode, die das Objekt, das den Konfigurationsbereich darstellt, zurück gibt.
      Specified by:
      getConfigurationAreaInfo in interface ConfigurationAreaFile
      Returns:
      Objekt oder null, wenn der Bereich gerade erzeugt wurde.
    • flush

      public void flush() throws java.io.IOException
      Description copied from interface: ConfigurationAreaFile
      Diese Methode wird aufgerufen, wenn alle modifizierten Objekte des Konfigurationsbereichs persistent gespeichert werden sollen.
      Specified by:
      flush in interface ConfigurationAreaFile
      Throws:
      java.io.IOException - Fehler beim Zugriff auf die Datei in der der Konfigurationsbereich gespeichert ist
    • createBackupFile

      public void createBackupFile​(java.io.File targetDirectory) throws java.io.IOException
      Sichert die Datei in ein angegebenes Zielverzeichnis
      Parameters:
      targetDirectory - Zielverzeichnis
      Throws:
      java.io.IOException - IO-Fehler
    • getBackupProgress

      public long getBackupProgress()
    • getFileLength

      public long getFileLength()
    • close

      public void close() throws java.io.IOException
      Description copied from interface: ConfigurationAreaFile
      Diese Methode wird aufgerufen, wenn das System heruntergefahren soll. Es müssen alle Daten gespeichert werden (siehe ConfigurationAreaFile.flush() und ein Zustand hergestellt werden, mit dem das System zu einem späteren Zeitpunkt wieder hochgefahren werden kann.
      Specified by:
      close in interface ConfigurationAreaFile
      Throws:
      java.io.IOException - Fehler beim Zugriff auf die Datei in der der Konfigurationsbereich gespeichert ist
    • createDynamicObject

      public DynamicObjectInfo createDynamicObject​(long objectID, long typeID, java.lang.String pid, short simulationVariant, java.lang.String name, de.bsvrz.dav.daf.main.config.DynamicObjectType.PersistenceMode persistenceMode)
      Description copied from interface: ConfigurationAreaFile
      Diese Methode erzeugt ein dynamisches Objekt, das sofort gültig ist.
      Specified by:
      createDynamicObject in interface ConfigurationAreaFile
      Parameters:
      objectID - ID des Objekts
      typeID - Typ des Objekts, der Typ wird über die ID festgelegt
      pid - Pid des Objekts
      simulationVariant - Simulationsvariante unter der das dynamische Objekt gültig ist
      name - Name des Objekts, null wird als "" interpretiert
      persistenceMode - Soll das dynamische Objekte persistent gespeichert werden
      Returns:
      Objekt, über das auf das dynamische Objekt zugegriffen werden kann
      See Also:
      ConfigurationAreaFile.getGreatestId()
    • createConfigurationObject

      public ConfigurationObjectInfo createConfigurationObject​(long objectID, long typeID, java.lang.String pid, java.lang.String name)
      Description copied from interface: ConfigurationAreaFile
      Diese Methode erzeugt ein Konfigurationsobjekt.
      Specified by:
      createConfigurationObject in interface ConfigurationAreaFile
      Parameters:
      objectID - ID des Objekts
      typeID - Typ des Objekts, der Typ wird über die ID festgelegt
      pid - Pid des Objekts
      name - Name des Objekts, null wird als "" interpretiert
      Returns:
      Objekt, über das auf das Konfigurationsobjekt zugegriffen werden kann
      See Also:
      ConfigurationAreaFile.getGreatestId()
    • getCurrentObjects

      public SystemObjectInformationInterface[] getCurrentObjects()
      Description copied from interface: ConfigurationAreaFile
      Diese Methode gibt alle dynamischen Objekte und Konfigurationsobjekte zurück, die in der aktuellen Version aktuell sind.
      Specified by:
      getCurrentObjects in interface ConfigurationAreaFile
      Returns:
      s.o.
    • getActualObjects

      public SystemObjectInformationInterface[] getActualObjects​(long typeId)
      Description copied from interface: ConfigurationAreaFile
      Gibt alle aktuellen Objekte zurück, die als TypeId die übergebene TypeId besitzen.
      Specified by:
      getActualObjects in interface ConfigurationAreaFile
      Parameters:
      typeId - TypeId, die ein Objekt besitzen muss, damit es zurückgegeben wird
      Returns:
      Objekte, deren TypeId gleich der übergebenen TypeId sind. Ist kein Objekt vorhanden, so wird ein leeres Array zurückgegeben.
    • getActualObjects

      public SystemObjectInformationInterface[] getActualObjects​(java.util.Collection<java.lang.Long> typeIds)
      Description copied from interface: ConfigurationAreaFile
      Gibt alle aktuellen Objekte zurück, die als TypeId einen der übergebenen TypeIds besitzen.
      Specified by:
      getActualObjects in interface ConfigurationAreaFile
      Parameters:
      typeIds - TypeIds, die ein Objekt besitzen muss, damit es zurückgegeben wird
      Returns:
      Objekte, deren TypeId gleich einem der übergebenen TypeIds sind. Ist kein Objekt vorhanden, so wird ein leeres Array zurückgegeben.
    • getObjects

      public SystemObjectInformationInterface[] getObjects​(long startTime, long endTime, ConfigurationAreaTime kindOfTime, de.bsvrz.dav.daf.main.config.TimeSpecificationType timeSpecificationType, java.util.Collection<java.lang.Long> typeIds)
      Description copied from interface: ConfigurationAreaFile
      Diese Methode gibt alle dynamischen Objekte und Konfigurationsobjekte zurück, die innerhalb des angegebenen Zeitbereichs gültig waren und deren TypeId gleich einer der übergebenen TypeIdŽs ist. Der Parameter timeSpecificationType bestimmt, wann/wie lange ein Objekt gültig gewesen sein muss um in die Lösung aufgenommen zu werden.

      Specified by:
      getObjects in interface ConfigurationAreaFile
      Parameters:
      startTime - Zeitpunkt, ab der ein Objekt gültig sein muss, um zurückgegeben zu werden
      endTime - Zeitpunkt, bis zu der Objekte zurückgegeben werden
      kindOfTime - Ein Konfigurationsobjekt wird mit der Aktivierung einer Version gültig. Da der Konfigurationsverantwortliche die Version zu einem früheren Zeitpunkt aktiviert haben kann, als die lokale Konfiguration, legt dieser Parameter fest, welcher Zeitpunkt für ein Konfigurationsobjekt benutzt werden soll an dem es als "gültig" markiert wurde.
      timeSpecificationType - Gibt die Art und Weise an, wie der Zeitraum zu betrachten ist.
      typeIds - Liste von TypeIdŽs. Damit ein Objekt zurückgegeben wird, muss die TypeId des Objekts mit einer TypeId in der Liste übereinstimmen
      Returns:
      Objekte, die in dem angegebene Zeitbereich zu einem Zeitpunkt gültig waren und deren TypeId mit einer geforderten TypeId übereinstimmt
    • getActiveVersion

      public short getActiveVersion​(long startTime, ConfigurationAreaTime kindOfTime)
      Gibt zu einem Zeitpunkt die Version zurück, die aktiv war.
      Parameters:
      startTime - Zeitpunkt, zu dem die Version aktiv gewesen sein muss
      kindOfTime - Soll die Aktivierungszeit des Konfigurationsverantwortlichen oder die lokale Aktivierung zur Berechnung der Version benutzt werden
      Returns:
      Version, die zu dem angegebenen Zeitpunkt aktiviert war. Der Wert -1 bedeutet, dass es keine aktive Version gibt, die zu dem geforderten Zeitpunkt aktiviert war
    • getNewObjects

      public SystemObjectInformationInterface[] getNewObjects()
      Description copied from interface: ConfigurationAreaFile
      Diese Methode gibt alle Konfigurationsobjekte zurück, die in einer zukünftigen Version aktuell werden.
      Specified by:
      getNewObjects in interface ConfigurationAreaFile
      Returns:
      Konfigurationsobjekte, die zukünftig aktuell werden aber es in der aktuellen Version noch nicht sind.
    • forEach

      public void forEach​(java.util.function.Consumer<? super SystemObjectInformationInterface> consumer)
      Iteriert über alle Objekte in diesem Bereich.
      Specified by:
      forEach in interface ConfigurationAreaFile
      Parameters:
      consumer - Consumer, an den jedes gefundene Objekt übergeben wird
    • forEachOldConfigurationObject

      public void forEachOldConfigurationObject​(java.util.function.Consumer<? super ConfigurationObjectInfo> consumer)
      Iteriert über alle Konfigurationsobjekte in den NGA-Blöcken in diesem Bereich.
      Specified by:
      forEachOldConfigurationObject in interface ConfigurationAreaFile
      Parameters:
      consumer - Consumer, an den jedes gefundene Objekt übergeben wird
    • forEachOldDynamicObject

      public void forEachOldDynamicObject​(java.util.function.Consumer<? super DynamicObjectInfo> consumer)
      Iteriert über alle dynamischen Objekte im NGDyn-Block in diesem Bereich.
      Specified by:
      forEachOldDynamicObject in interface ConfigurationAreaFile
      Parameters:
      consumer - Java-8-Style Consumer, an den jedes gefundene Objekt übergeben wird
    • forEachMixedObject

      public void forEachMixedObject​(java.util.function.Consumer<? super SystemObjectInformationInterface> consumer)
      Iteriert über alle Objekte in der Mischmenge in diesem Bereich.
      Specified by:
      forEachMixedObject in interface ConfigurationAreaFile
      Parameters:
      consumer - Java-8-Style Consumer, an den jedes gefundene Objekt übergeben wird
    • getMixedObjectSetObjects

      public java.util.Collection<java.lang.Object> getMixedObjectSetObjects()
      Lädt alle "aktuellen" und in "Zukunft aktuellen" Objekte. Objekte die ungültig sind, aber sich noch in der Mischobjektmenge befinden, werden nur Teilweise (ID, Pid-HashCode, Dateiposition) geladen.

      Soll der Bereich in einer anderen als der aktuellen Version geladen werden, dann müssen ebenfalls die nGa-Bereiche betrachtet werden.

      Returns:
      Collecetion, die alle Objekte der Mischmenge enthält (entweder ganz, oder nur als ID-Pid-Dateiposition Kombination) und Objekte aus den entsprechende nGa-Bereichen (enthalten Sind Objekte der Typen SystemObjectInformationInterface und ConfigAreaFile.OldObject
    • getOldObject

      public SystemObjectInformationInterface getOldObject​(long id)
      Description copied from interface: ConfigurationAreaFile
      Diese Methode gibt ein Objekt zurück, das als ungültig markiert wurde. Ist in diesem Konfigurationsbereich kein Objekt mit der Id vorhanden, wird null zurückgegeben.
      Specified by:
      getOldObject in interface ConfigurationAreaFile
      Parameters:
      id - Id des geforderten Objekts
      Returns:
      Objekt, das als ungültig markiert wurde oder null
    • getObjects

      public java.util.List<SystemObjectInformationInterface> getObjects​(java.lang.String pid, long startTime, long endTime, ConfigurationAreaTime kindOfTime, short simulationVariant)
      Description copied from interface: ConfigurationAreaFile
      Diese Methode gibt Objekte zurück, die in dem angegebenen Zeibereich gültig waren.
      Specified by:
      getObjects in interface ConfigurationAreaFile
      Parameters:
      pid - Pid, über die die Objekte identifiziert werden
      startTime - Zeitpunkt, ab dem ein Objekt mit der angegebenen Pid gültig gewesen sein muss um zurückgegeben zu werden. War das Objekt vor dem angegebenen Zeitraum bereits gültig, so wird es ebenfalls zurückgegeben.
      endTime - Zeitpunkt, bis zu dem ein Objekt mit der angegebenen Pid gültig gewesen sein muss um zurückgegeben zu werden. Ist das Objekt über diesen Zeitraum hinweg gültig, so wird es ebenfalls zurückgegeben. Der Zeitpunkt darf nicht in der Zukunft liegen, der größt mögliche Zeitpunkt ist die aktuelle Zeit.
      kindOfTime - Legt fest, welcher Zeitpunkt bei einer aktivierten Version benutzt wird. Der Zeitpunkt der lokalen Aktivierung einer Version oder aber der Zeitpunkt der Aktivierung durch den Konfigurationsverantwortlichen.
      simulationVariant - Zusätzlich zu berücksichtigende Simulationsvariante (außer 0). Es wird nicht nach dieser Simulationsvariante gefilert, d. h. wenn der Aufrufer nur Objekte benötigt, die innerhalb einer speziellen Simulation gültig sind, dann muss er selbst die zurückgegebenen Objekte noch einmal selbst filtern und dabei auch die in der Simulationsstrecke definierten Typen beachten.
      Returns:
      Alle Objekte, die über die Pid identifiziert werden und im gewünschten Zeitbereich gültig waren. Sind keine Objekte vorhanden, wird ein leeres Array zurückgegeben (Größe 0). Wenn eine Simulationsvariante außer 0 angegeben wurde, werden sowohl Objekte dieser Variante als auch nicht simulierte Objekte (SimVar = 0) zurückgegeben.
    • getSerializerVersion

      public int getSerializerVersion()
      Description copied from interface: ConfigurationAreaFile
      Alle Daten, die als Byte-Array gespeichert werden müssen, werden mit einem Serializer Serializer erstellt. Die benutzte Version ist in der gesamten Datei identisch. Ein Versionswechsel innerhalb der Datei ohne die Konvertierung aller Daten auf die neue Version ist nicht gestattet.
      Specified by:
      getSerializerVersion in interface ConfigurationAreaFile
      Returns:
      Versionsnummer des Serialisierers mit dem alle Byte-Arrays erstellt wurden
    • initialVersionRestructure

      public boolean initialVersionRestructure()
      Diese Methode wird aufgerufen, wenn der Konfigurationsverantwortliche eine neue Version aktiviert. Der Aufruf bewirkt, dass die Datei falls erforderlich restrukturiert wird. Diese Methode muss druch den Konfigurationsverantwortlichen aufgerufen werden, wenn dieser die aktive Version wechselt.
      Specified by:
      initialVersionRestructure in interface ConfigurationAreaFile
      Returns:
      true = Die Reorganisation war erfolgreich oder nicht erforderlich; false = Die Reorganisation war nicht erfolgreich
      See Also:
      restructure(de.bsvrz.puk.config.configFile.fileaccess.ConfigurationAreaFile.RestructureMode)
    • getGreatestId

      public long getGreatestId()
      Description copied from interface: ConfigurationAreaFile
      Diese Methode gibt die größte vergebene laufende Nummer einer Id des Konfigurationsbereichs zurück. Die laufende Nummer ist in den ersten 40 Bits der Id kodiert.
      Specified by:
      getGreatestId in interface ConfigurationAreaFile
      Returns:
      Die größte vergebene laufende Nummer einer Id des Konfigurationsbereich oder 0 falls die Id noch unbekannt ist. Der Wert 0 wird zum Beispiel dann zurückgegeben, wenn der Konfigurationsbereich neu angelegt wurde und noch keine größte Id bekannt ist
    • restructure

      public void restructure​(ConfigurationAreaFile.RestructureMode mode) throws java.io.IOException
      Description copied from interface: ConfigurationAreaFile
      Diese Methode reorganisiert eine Konfigurationsbereichsdatei. Die Mischmenge wird dabei, falls möglich, verkleinert und die als ungültig markierten Objekte werden in die entsprechenden Blöcke kopiert. Kommt es bei der Reorganisation zu einem Fehler, so wird der Zustand vor der Reorganisation wiederhergestellt. Alle Methoden, die einen Dateizugriff benötigen (flush, Objekt auf Invalid setzen, usw.) und während der Reorganisation aufgerufen werden, sind blockierend.

      Diese Methode darf nur durch den Konfigurationsverantwortlichen aufgerufen werden.

      Specified by:
      restructure in interface ConfigurationAreaFile
      Parameters:
      mode - Restrukturierungsart (siehe RestructureMode
      Throws:
      java.io.IOException - Falls ein Fehler bei der Restrukturierung auftrat. In diesem Fall bleibt der vorherige Zustand erhalten.
    • swapFiles

      public void swapFiles​(de.bsvrz.puk.config.configFile.fileaccess.RestructureInfo restructureInfo, java.io.File configAreaNewName) throws java.io.IOException
      Throws:
      java.io.IOException
    • addToIndizes

      public void addToIndizes​(java.util.List<de.bsvrz.puk.config.configFile.fileaccess.ConfigAreaFile.SortObject> idIndex, java.util.Map<java.lang.Integer,​de.bsvrz.puk.config.configFile.fileaccess.ConfigAreaFile.SortObjectPid> pidIndex, BinaryObject objectInformation, long filePosition)
    • addToIndizes

      public void addToIndizes​(java.util.List<de.bsvrz.puk.config.configFile.fileaccess.ConfigAreaFile.SortObject> idIndex, java.util.Map<java.lang.Integer,​de.bsvrz.puk.config.configFile.fileaccess.ConfigAreaFile.SortObjectPid> pidIndex, SystemObjectInformationInterface objectInformation, long filePosition)
    • getConfigAreaPid

      public java.lang.String getConfigAreaPid()
      Gibt die Pid des Konfigurationsbereichs zurück.
      Returns:
      Pid des Konfigurationsbereichs
    • markObjectsForDeletion

      public void markObjectsForDeletion​(java.util.List<java.lang.Long> objectsToDelete)
      Description copied from interface: ConfigurationAreaFile
      Markiert eine Menge von dynamischen Objekten als ausreichend als und nicht mehr Referenziert, sodass diese ggf. beim nächsten Neustart endgültig gelöscht werden können. Jedes dynamische Objekt muss mindestens zweimal durch diese Methode markiert werden (auch über einen Neustart hinweg) bevor es gelöscht wird, da das Objekt mit dem ersten Aufruf zuerst als nicht mehr referenzierbar markiert wird und dann beim zweiten Aufruf sichergestellt ist, dass das Objekt in Zukunft nicht mehr referenziert werden kann.
      Specified by:
      markObjectsForDeletion in interface ConfigurationAreaFile
      Parameters:
      objectsToDelete - Menge mit zu löschenden dynamischen Objekten dieses Bereichs (Objekt-IDs)
    • deleteDynamicObjectsPermanently

      public void deleteDynamicObjectsPermanently()
      Löscht die für das Löschen vorgemerkten dynamischen Objekte vollständig und permanent. Die übergebenen Objekte sollten bereits einige Zeit gelöscht sein und sich im NgaDyn-Block befinden. Es sollte keine Referenzen auf diese Objekte geben.

      Da sich dadurch die Positionen von nicht-Gültigen Objekten in der Datei ändern können, können Objekte im Speicher durch diesen Vorgang unbrauchbar werden. Daher muss nach dem Aufruf dieser Methode das Datenmodell neu initialisiert werden oder alternativ die Methode zu einem Zeitpunkt aufgerufen werden, wenn noch keine alten Objekte im Speicher sind.

    • referenceAllowed

      public boolean referenceAllowed​(SystemObjectInformationInterface systemObjectInfo)
      Description copied from interface: ConfigurationAreaFile
      Prüft, ob ein angegebenenes Objekt von anderen Objekten referenzert werden darf
      Specified by:
      referenceAllowed in interface ConfigurationAreaFile
      Parameters:
      systemObjectInfo - Objekt-Info (Objekt sollte zum aktuellen Bereich gehören)
      Returns:
      true, falls es referenziert werden darf (es bisher nicht als zu Löschen markiert wurde, sonst false
    • getOldObjects

      public SystemObjectInformationInterface[] getOldObjects​(java.util.SortedSet<java.lang.Long> ids)
      Description copied from interface: ConfigurationAreaFile
      Diese Methode tut das gleiche wie ConfigurationAreaFile.getOldObject(long), aber für mehrere IDs gleichzeitig. Dadurch kann die Performance wesentlich gesteigert werden.

      Die optimierte Implementierung setzt voraus, dass die IDs bereits natürlich sortiert übergeben werden. Das wird von der Implementierung nicht überprüft!

      Specified by:
      getOldObjects in interface ConfigurationAreaFile
      Parameters:
      ids - Objekt-IDs aufsteigend sortiert
      Returns:
      Objekte in Anfragereihenfolge (kann null-Elemente enthalten)
    • getHeaderEnd

      public long getHeaderEnd()
    • getStartOldDynamicObjects

      public long getStartOldDynamicObjects()
    • getStartIdIndex

      public long getStartIdIndex()
    • getStartPidHashCodeIndex

      public long getStartPidHashCodeIndex()
    • getStartMixedSet

      public long getStartMixedSet()
    • updateHeaderPositions

      public void updateHeaderPositions​(de.bsvrz.puk.config.configFile.fileaccess.HeaderInfo headerInfo)
    • writeInvalidTime

      public void writeInvalidTime​(DynamicObjectInformation object)
      Wird aufgerufen, wenn ein dynamisches Objekt ungültig wird. Falls das Objekt bereits
      Parameters:
      object -
    • restructure

      @Deprecated public boolean restructure()
      Deprecated.
      Bitte Mode-Parameter übergeben um die Art der Restrukturierung anzugeben.
      Führt eine volle Restrukturierugn aus
      Specified by:
      restructure in interface ConfigurationAreaFile
      Returns:
      true falls erfolgreich sonst false