Class 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 Detail

      • 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 Detail

      • 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.
      • 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()
      • 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
      • 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
      • 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
      • getRelativeFilePositionForInvalidConfigObject

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

        public static long getRelativeFilePositionForInvalidDynamicObject​(long dynamicAreaOffset,
                                                                          long absoluteFilePosition)
      • 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.
      • 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