public class ConfigAreaFile extends Object implements ConfigurationAreaFile, HeaderInfo
Modifier and Type | Class and Description |
---|---|
private class |
ConfigAreaFile.FileIterator
Diese Klasse stellt einen Iterator zur Verfügung, der alle Objekte eines Konfigurationsbereichs zur Verfügung stellt.
|
static class |
ConfigAreaFile.OldBlockInformations
Diese Klasse speichert die Dateiposition eines Blocks, der Konfigurationsobjekte enthält, die ungültig sind und durch eine Reorganisation verschoben wurden
und sich nicht mehr in der Mischobjektmenge befinden.
|
(package private) static class |
ConfigAreaFile.OldObject
Ein Objekt, das als "ungültig" markiert ist enthält den HashCode der Pid und die Id des Objekts.
|
private static class |
ConfigAreaFile.OldObjectTypeIdInfo
Diese Klasse speichert alle Inforamtionen, die benötigt werden um ein Objekt, das sich in der Mischmenge befindet aber nicht komplett in den Speicher
geladen wurde, eventuell nachzuladen falls es gebraucht wird.
|
private static class |
ConfigAreaFile.SortObject
Diese Klasse wird mehrfach mit unterschiedlichen Aufgaben benutzt.
|
private static class |
ConfigAreaFile.SortObjectPid |
ConfigurationAreaFile.RestructureMode
Modifier and Type | Field and Description |
---|---|
private short |
_activeVersion
aktive Version, diese wird durch einen Neustart der Konfiguration gesetzt (durch den Konstruktor)
|
private short |
_activeVersionFile
aktive Version, die aus der Datei gelesen wurde.
|
private Map<Long,SystemObjectInformationInterface> |
_actualObjects
Speichert alle (dynamisch und Konf.) aktuellen Objekte, als Schlüssel dient die Id.
|
private Map<Long,List<SystemObjectInformationInterface>> |
_actualObjectsTypeId
Speichert zu allen TypeId's die aktuellen Objekte.
|
private FileLock |
_areaFileLock
Mit diesem Objekt wird ein mehrfacher Zugriff auf diese Datei verhindert.
|
private long |
_backupProgress |
private File |
_configAreaFile
Wo befindet sich die Datei
|
private ConfigurationObjectInfo |
_configAreaObject
Stellt das Objekt dar, das den Konfigurationsbereich repräsentiert.
|
private String |
_configurationAreaPid
Pid des Konfigurationsbereichs
|
private Map<Short,Long> |
_configurationAuthorityVersionActivationTime
synchronisierte Map, die den Aktivierungszeitpunkt jeder Version speichert.
|
private long |
_configurationDataChanged
letzter Zeitpunkt, an dem ein konfigurierender Datensatz geändert wurde.
|
private long |
_configurationObjectChanged
letzter Zeitpunkt, an dem ein Konfigurationsobjekt geändert wurde.
|
private static Debug |
_debug
DebugLogger für Debug-Ausgaben
|
private long |
_dynamicObjectChanged
letzter Zeitpunkt, an dem ein dynamisches Objekt geändert wurde.
|
private long |
_fileLength |
private ConfigFileManager |
_fileManager
Alle Änderungen an einem dynamischen Objekt oder an einem Konfigurationsobjekt, die den Zustand von "gültig" auf "ungültig" setzen oder ein Objekt
hinzufügen müssen an dieses Objekt gemeldet werden
|
private long[] |
_globalActivationTimes
Array mit den globalen Aktivierungszeiten der Versionen dieses Bereichs.
|
private long |
_greatestId
Speichert die größte Id, die im Konfigurationsbereich vergeben wurde.
|
private long |
_headerEnd
Speichert, wo der Header endet.
|
private long[] |
_localActivationTimes
Array mit den lokalen Aktivierungszeiten der Versionen dieses Bereichs.
|
private Map<Short,Long> |
_localVersionActivationTime
Synchronisierte Map, die zu jeder Version den lokalen Aktivierungszeitpunkt speichert.
|
private Set<SystemObjectInformationInterface> |
_modifiedObjects
In dieser Menge werden alle dynamischen Objekte und Konfigurationsobjekte gespeichert, die modifiziert wurden und die aus diesem Grund noch in der Datei zu
speichern sind.
|
private Map<Long,SystemObjectInformationInterface> |
_newObjects
Speichert alle Objekte, die in Zukunft aktuell werden, als Schlüssel dient die Id.
|
private short |
_nextActiveVersion
Speichert die Version, die als nächstes gültig wird.
|
private short |
_nextActiveVersionFile
nächste aktive Version, die aus der Datei eingelesen wurde.
|
private short |
_nextInvalidBlockVersion
Speichert die nächste ungültige Version.
|
private Set<Long> |
_objectsLockedForDeletion
Objekte, die im ersten Durchlauf als löschbar markiert wurden.
|
private Set<Long> |
_objectsPendingDeletion
Objekte, die zwei Durchläufe hintereinander als löschbar erkannt wurden.
|
private short |
_objectVersion
Mit welcher Version wurden die Objekte geschrieben.
|
private Map<Short,ConfigAreaFile.OldBlockInformations> |
_oldObjectBlocks
Speichert zu jedem Block, in dem ungültige Objekte gespeichert sind, ein Objekt ab, das die Position des Blocks (relativ zum Headerende) in der Datei
enthält und einen Zeitstempel (wann wurde diese Version gültig), der sich auf den Block bezieht.
|
private Map<Long,ObjectReference> |
_oldObjectsId
Speichert alle ungültig markierte Objekte, die sich in der Mischmenge befinden.
|
private Map<Integer,Set<FilePointer>> |
_oldObjectsPid
Speichert zu einer Pid (Key = HashCode Integer), alle Dateipositionen der alten Objekte, die sich in der Mischmenge befinden.
|
private Map<Long,List<ConfigAreaFile.OldObjectTypeIdInfo>> |
_oldObjectsTypeId
Speichert zu allen TypeId's die alten Objekte.
|
private Object |
_restructureLock
Wird angefordert, wenn die Reorganisation der Datei statt findet.
|
private int |
_serializerVersion
Mit dieser Version werden alle Daten in der Daten serialisiert.
|
private long |
_startIdIndex
relative Position des Index, der die Id´s verwaltet.
|
private long |
_startMixedSet
Gibt an, wo (relativ zum Header) die Mischobjektmenge beginnt.
|
private long |
_startOldDynamicObjects
relative Position des Blocks, der alle ungültigen dynamischen Objekte enthält, die nach einer Reorganisation in diesem Block geschrieben wurden.
|
private long |
_startPidHashCodeIndex
relative Position des Index, der die hashCodes der Pid´s verwaltet verwaltet.
|
private short |
ACTUAL_OBJECT_VERSION
Legt die aktuelle Version fest, mit der Objekte codiert werden
|
Constructor and Description |
---|
ConfigAreaFile(File configAreaFile,
short activeVersion,
ConfigFileManager configFileManager,
List<VersionInfo> localActivatedVersionTimes)
Dieser Konstruktor wird benutzt, wenn eine Datei für einen Konfigurationsbereich bereits existiert.
|
ConfigAreaFile(File configAreaFile,
String pid,
short activeVersion,
int serializerVersion,
ConfigFileManager configFileManager)
Erzeugt eine Datei, die einen Konfigurationsbereich abbildet.
|
Modifier and Type | Method and Description |
---|---|
private void |
addToIndizes(BufferedRandomAccessFile toFile,
List<ConfigAreaFile.SortObject> newIdIndex,
Map<Integer,ConfigAreaFile.SortObjectPid> newPidIndex,
long absoluteDynamicAreaOffset,
BinaryObject binaryObject,
long headerEnd) |
void |
addToIndizes(List<ConfigAreaFile.SortObject> idIndex,
Map<Integer,ConfigAreaFile.SortObjectPid> pidIndex,
BinaryObject objectInformation,
long filePosition) |
void |
addToIndizes(List<ConfigAreaFile.SortObject> idIndex,
Map<Integer,ConfigAreaFile.SortObjectPid> pidIndex,
SystemObjectInformationInterface objectInformation,
long filePosition) |
private List<SystemObjectInformationInterface> |
binarySearch(BufferedRandomAccessFile file,
long value,
boolean searchId) |
private List<SystemObjectInformationInterface> |
binarySearch(long value,
boolean searchId)
Diese Methode sucht zu einem Value alle Objekte, die als ungültig markiert sind.
|
void |
close()
Diese Methode wird aufgerufen, wenn das System heruntergefahren soll.
|
private void |
copyObjectsPreserveGaps(BufferedRandomAccessFile fromFile,
BufferedRandomAccessFile toFile,
long endPos,
List<ConfigAreaFile.SortObject> newIdIndex,
Map<Integer,ConfigAreaFile.SortObjectPid> newPidIndex,
long absoluteDynamicAreaOffset,
long headerEnd)
Kopiert Objekte zwecks Restrukturierung von einer Datei in eine andere.
|
private void |
copyObjectsRemoveGaps(BufferedRandomAccessFile fromFile,
BufferedRandomAccessFile toFile,
long endPos,
List<ConfigAreaFile.SortObject> newIdIndex,
Map<Integer,ConfigAreaFile.SortObjectPid> newPidIndex,
long absoluteDynamicAreaOffset,
long headerEnd)
Kopiert Objekte zwecks Restrukturierung von einer Datei in eine andere.
|
private void |
copyObjectsRemoveGapsAndDeleteObjects(BufferedRandomAccessFile fromFile,
BufferedRandomAccessFile toFile,
long endPos,
List<ConfigAreaFile.SortObject> newIdIndex,
Map<Integer,ConfigAreaFile.SortObjectPid> newPidIndex,
long absoluteDynamicAreaOffset,
long headerEnd)
Kopiert Objekte zwecks Restrukturierung von einer Datei in eine andere.
|
void |
createBackupFile(File targetDirectory)
Sichert die Datei in ein angegebenes Zielverzeichnis
|
ConfigurationObjectInfo |
createConfigurationObject(long objectID,
long typeID,
String pid,
String name)
Diese Methode erzeugt ein Konfigurationsobjekt.
|
DynamicObjectInfo |
createDynamicObject(long objectID,
long typeID,
String pid,
short simulationVariant,
String name,
DynamicObjectType.PersistenceMode persistenceMode)
Diese Methode erzeugt ein dynamisches Objekt, das sofort gültig ist.
|
private RestructureInfo |
createRestructuredCopy(BufferedRandomAccessFile oldConfigAreaFile,
BufferedRandomAccessFile newConfigAreaFile,
ConfigurationAreaFile.RestructureMode mode)
Führt eigentliche Restrukturierung aus
|
(package private) void |
declareObjectAsAGap(FilePointer filePosition) |
private void |
declareObjectAsAGap(FilePointer filePosition,
BufferedRandomAccessFile file)
Setzt die Id eines Objekts auf 0 und erklärt es somit als Lücke.
|
(package private) void |
deleteDynamicObject(DynamicObjectInformation dynamicObjectInfo)
Entfernt ein dynamisches Objekt aus alle Datenstrukturen(auch ConfigFileManager).
|
void |
deleteDynamicObjectsPermanently()
Löscht die für das Löschen vorgemerkten dynamischen Objekte vollständig und permanent.
|
(package private) void |
dontSaveObject(SystemObjectInformationInterface object)
Diese Methode entfernt ein Objekt aus Menge zu speichernden Objekte
|
void |
flush()
Diese Methode wird aufgerufen, wenn alle modifizierten Objekte des Konfigurationsbereichs persistent gespeichert werden sollen.
|
void |
forEach(Consumer<? super SystemObjectInformationInterface> consumer)
Iteriert über alle Objekte in diesem Bereich.
|
void |
forEachMixedObject(Consumer<? super SystemObjectInformationInterface> consumer)
Iteriert über alle Objekte in der Mischmenge in diesem Bereich.
|
private void |
forEachObjects(long startOffset,
long endOffset,
Consumer<? super SystemObjectInformationInterface> consumer) |
void |
forEachOldConfigurationObject(Consumer<? super ConfigurationObjectInfo> consumer)
Iteriert über alle Konfigurationsobjekte in den NGA-Blöcken in diesem Bereich.
|
void |
forEachOldDynamicObject(Consumer<? super DynamicObjectInfo> consumer)
Iteriert über alle dynamischen Objekte im NGDyn-Block in diesem Bereich.
|
private long |
getActivationTime(int version,
long[] activationTimes)
Bestimmt den Aktivierungszeitpunkt einer vorgegebenen Version.
|
private long[] |
getActivationTimeArray(Map<Short,Long> activationTimeMap)
Erzeugt ein Array mit den Aktivierungszeiten der Versionen dieses Bereichs.
|
(package private) short |
getActiveVersion() |
short |
getActiveVersion(long startTime,
ConfigurationAreaTime kindOfTime)
Gibt zu einem Zeitpunkt die Version zurück, die aktiv war.
|
SystemObjectInformationInterface[] |
getActualObjects(Collection<Long> typeIds)
Gibt alle aktuellen Objekte zurück, die als TypeId einen der übergebenen TypeIds besitzen.
|
SystemObjectInformationInterface[] |
getActualObjects(long typeId)
Gibt alle aktuellen Objekte zurück, die als TypeId die übergebene TypeId besitzen.
|
long |
getBackupProgress() |
String |
getConfigAreaPid()
Gibt die Pid des Konfigurationsbereichs zurück.
|
ConfigurationObjectInfo |
getConfigurationAreaInfo()
Methode, die das Objekt, das den Konfigurationsbereich darstellt, zurück gibt.
|
SystemObjectInformationInterface[] |
getCurrentObjects()
Diese Methode gibt alle dynamischen Objekte und Konfigurationsobjekte zurück, die in der aktuellen Version aktuell sind.
|
long |
getFileLength() |
long |
getGreatestId()
Diese Methode gibt die größte vergebene laufende Nummer einer Id des Konfigurationsbereichs zurück.
|
long |
getHeaderEnd()
Gibt das Headerende zurück ( = Position des Starts der NGA-Blöcke)
|
private File |
getIndexFileName(String indexFileName) |
Collection<Object> |
getMixedObjectSetObjects()
Lädt alle "aktuellen" und in "Zukunft aktuellen" Objekte.
|
SystemObjectInformationInterface[] |
getNewObjects()
Diese Methode gibt alle Konfigurationsobjekte zurück, die in einer zukünftigen Version aktuell werden.
|
short |
getNextActiveVersion()
Liefert die Version, ab der neu erstellte Konfigurationsobjekte gültig werden.
|
SystemObjectInformationInterface[] |
getObjects(long startTime,
long endTime,
ConfigurationAreaTime kindOfTime,
TimeSpecificationType timeSpecificationType,
Collection<Long> typeIds)
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.
|
List<SystemObjectInformationInterface> |
getObjects(String pid,
long startTime,
long endTime,
ConfigurationAreaTime kindOfTime,
short simulationVariant)
Diese Methode gibt Objekte zurück, die in dem angegebenen Zeibereich gültig waren.
|
SystemObjectInformationInterface |
getOldObject(long id)
Diese Methode gibt ein Objekt zurück, das als ungültig markiert wurde.
|
static long |
getRelativeFilePositionForInvalidConfigObject(long headerEnd,
long absoluteFilePosition) |
static long |
getRelativeFilePositionForInvalidDynamicObject(long dynamicAreaOffset,
long absoluteFilePosition) |
private long |
getRunningNumber(long wholeNumber)
Maskiert die ersten 40 Bits einer Id
|
int |
getSerializerVersion()
Alle Daten, die als Byte-Array gespeichert werden müssen, werden mit einem Serializer
Serializer erstellt. |
long |
getStartIdIndex()
Gibt den Start des ID-Index zurück
|
long |
getStartMixedSet()
Gibt den Start der Mischmenge zurück
|
long |
getStartOldDynamicObjects()
Gibt den Start des NG-Dyn-Blocks zurück
|
long |
getStartPidHashCodeIndex()
Gibt den Start des Pid-Index zurück
|
private SystemObjectInformationInterface |
getSystemObjectInfo(ObjectReference ref,
BufferedRandomAccessFile file)
Lädt das Objekt aus der Datei oder holt es aus dem Speicher (transiente Objekte).
|
boolean |
initialVersionRestructure()
Diese Methode wird aufgerufen, wenn der Konfigurationsverantwortliche eine neue Version aktiviert.
|
private boolean |
isValueAtTheMiddle(long start,
long middle,
long end)
Diese Methode prüft ob folgende Gleichung wahr ist:
start <= middle <= end
|
Iterator<SystemObjectInformationInterface> |
iterator()
Deprecated.
|
private SystemObjectInformation |
loadObjectFromFile(BufferedRandomAccessFile file,
FilePointer filePosition,
ConfigAreaFile.FileIterator fileIterator)
Deprecated.
|
(package private) SystemObjectInformation |
loadObjectFromFile(FilePointer filePosition)
Lädt ein Objekt aus einer Datei
|
private SystemObjectInformation |
loadObjectFromFile(FilePointer filePosition,
ConfigAreaFile.FileIterator fileIterator)
Deprecated.
Diese Methode öffnet und schießt ein neues
BufferedRandomAccessFile . Auf Performancegründen sollte für das Laden von mehreren Objekten
immer dasselbe BufferedFile-Objekt verwendet werden. Einzige benutzung ist aktuell der ConfigAreaFile.FileIterator ,
der ebenfalls nicht mehr benutzt wird und deprecated ist. |
void |
markObjectsForDeletion(List<Long> objectsToDelete)
Markiert eine Menge von dynamischen Objekten als ausreichend als und nicht mehr Referenziert, sodass diese ggf.
|
(package private) void |
objectModified(SystemObjectInformationInterface modifiedObject)
Diese Methode wird von einem Objekt aufgerufen, wenn Informationen des Objekts geändert wurden.
|
(package private) boolean |
objectValid(Object objectInfo,
long queryIntervalStart,
long queryIntervalEnd,
ConfigurationAreaTime kindOfTime,
TimeSpecificationType timeSpecificationType)
Diese Methode prüft, ob ein Objekte im angegebenen Zeitraum gültig war/ist.
|
private void |
putActualObject(SystemObjectInformationInterface actualObjekt)
Fügt das Objekt zu allen Datenstrukturen hinzu, die für den schnellen Zugriff(mit Id) auf aktuelle Objekte benötigt werden
|
private void |
putActualObjectTypeId(SystemObjectInformationInterface actualObject)
Speichert ein Objekt in der Map, die alle aktuellen Objekte nach deren TypeId verwaltet
|
private void |
putNewObject(SystemObjectInformationInterface newObjekt)
Fügt das Objekt zu allen Datenstrukturen hinzu, die für den schnellen Zugriff auf "in Zukunft gültige" Objekte benötigt werden
|
private void |
putOldObject(ConfigAreaFile.OldObject oldObject)
Fügt ein als "ungültig" markiertes Objekt in alle interenen Datenstrukturen hinzu, die für einen schnellen Zugriff auf ungültige Objekte benötigt werden.
|
private void |
putOldObjectTypeId(long typeId,
long firstValid,
long firstInvalid,
boolean configurationObject,
ObjectReference objectReference)
Speichert alle benötigten Ladeinforamtionen zu einem Objekt in der Map, die alle alten Objekte verwaltet.
|
private void |
putUnknownObject(SystemObjectInformationInterface unknownObject)
Legt ein dynamisches Objekt oder ein Konfigurationsobjekt in die entsprechende Datenstruktur für aktuelle oder in Zukunft gültige Objekte ab.
|
private Collection<Long> |
readIdIndex(String indexFileName)
Schreibt eine ID-Index-Datei, die die zum Löschen vorgemerkten IDs enthält.
|
private SystemObjectInformation |
readObjectFromFile(long filePosition,
int objectsize,
long id,
long typeId,
long firstInvalid,
long firstValid,
byte objecttype,
BufferedRandomAccessFile file)
Lädt ein dynamischen Objekt oder ein Konfigurationsobjekt aus der Datei des Konfigurationsbereichs.
|
boolean |
referenceAllowed(SystemObjectInformationInterface systemObjectInfo)
Prüft, ob ein angegebenenes Objekt von anderen Objekten referenzert werden darf
|
(package private) void |
removeNewObject(ConfigurationObjectInfo newObject)
Diese Methode entfernt ein Objekt, das in zukünftigen Versionen gültig werden soll aus allen Datenstrukturen (auch dem ConfigFileManager), die den schnellen
Zugriff auf diese Art von Objekten ermöglichen.
|
boolean |
restructure()
Deprecated.
Bitte Mode-Parameter übergeben um die Art der Restrukturierung anzugeben.
|
void |
restructure(ConfigurationAreaFile.RestructureMode mode)
Diese Methode reorganisiert eine Konfigurationsbereichsdatei.
|
private void |
restructureMain(ConfigurationAreaFile.RestructureMode mode) |
(package private) void |
setDynamicObjectInvalid(DynamicObjectInformation invalidObject)
Diese Methode wird aufgerufen, wenn ein dynamisches Objekt auf "ungültig" gesetzt wird.
|
void |
setNextActiveVersion(short nextActiveVersion)
Legt die Version fest mit der Konfigurationsobjekte, die mit
ConfigurationAreaFile.createConfigurationObject(long, long, java.lang.String, java.lang.String) erzeugt werden, gültig werden. |
void |
swapFiles(RestructureInfo restructureInfo,
File configAreaNewName) |
String |
toString() |
(package private) static byte[] |
unzip(byte[] zippedData) |
void |
updateHeaderPositions(HeaderInfo headerInfo) |
private long |
writeConfigurationObjectToFile(ConfigurationObjectInformation configurationObject,
BufferedRandomAccessFile file,
boolean declareGap,
boolean setNewFilePosition)
Speichert ein Objekt ans Ende der übergebenen Datei.
|
private void |
writeCurrentObjects(BufferedRandomAccessFile newConfigAreaFile,
RestructureInfo restructureInfo,
Map<Long,SystemObjectInformationInterface> objectMap) |
(package private) void |
writeDynamicObject(DynamicObjectInformation object)
Speicher ein dynamisches Objekt in die Datei des Konfigurationsbereichs.
|
private long |
writeDynamicObjectToFile(DynamicObjectInformation dynamicObject,
BufferedRandomAccessFile file,
boolean declareGap,
boolean setNewFilePosition)
Speichert ein Objekt ans Ende der übergebenen Datei.
|
private void |
writeHeader(HeaderInfo positions,
BufferedRandomAccessFile file)
Schreibt einen Header in die übergebene Datei.
|
private void |
writeIdIndex(String indexFileName,
Collection<Long> values)
Schreibt einen ID-Index analog zu
readIdIndex(String) . |
void |
writeInvalidTime(DynamicObjectInformation object)
Wird aufgerufen, wenn ein dynamisches Objekt ungültig wird.
|
private void |
writeSystemObjectWithoutIdAndTypeId(SystemObjectInformationInterface object,
Serializer serializer)
Speichert die Pid, den Namen des SystemObjects und alle konfigurierenden Datensätze .
|
(package private) static byte[] |
zip(byte[] data)
Packt ein Byte-Array mit dem Packer "ZIP" und gibt die Daten gepackt zurück
|
private static final Debug _debug
private final File _configAreaFile
private short _activeVersion
private short _activeVersionFile
private short _nextActiveVersion
private short _nextActiveVersionFile
private int _serializerVersion
private long _headerEnd
private final Map<Short,ConfigAreaFile.OldBlockInformations> _oldObjectBlocks
private final Map<Short,Long> _configurationAuthorityVersionActivationTime
private long[] _globalActivationTimes
private short _nextInvalidBlockVersion
private long _startOldDynamicObjects
private long _startIdIndex
private long _startPidHashCodeIndex
private long _startMixedSet
private short _objectVersion
private final short ACTUAL_OBJECT_VERSION
private String _configurationAreaPid
private long _dynamicObjectChanged
private long _configurationObjectChanged
private long _configurationDataChanged
private final Set<SystemObjectInformationInterface> _modifiedObjects
objectModified(de.bsvrz.puk.config.configFile.fileaccess.SystemObjectInformationInterface)
in die Liste ein.private final Map<Long,SystemObjectInformationInterface> _actualObjects
private final Map<Long,SystemObjectInformationInterface> _newObjects
private final Map<Long,ObjectReference> _oldObjectsId
private final Map<Integer,Set<FilePointer>> _oldObjectsPid
private final ConfigFileManager _fileManager
private final Object _restructureLock
private ConfigurationObjectInfo _configAreaObject
createConfigurationObject(long, long, java.lang.String, java.lang.String)
erzeugt, auch in
diesem Fall wird das Objekt über die Pid identifiziert.private final Map<Short,Long> _localVersionActivationTime
private long[] _localActivationTimes
private long _greatestId
private final Map<Long,List<SystemObjectInformationInterface>> _actualObjectsTypeId
private final Map<Long,List<ConfigAreaFile.OldObjectTypeIdInfo>> _oldObjectsTypeId
private final FileLock _areaFileLock
private final Set<Long> _objectsLockedForDeletion
private final Set<Long> _objectsPendingDeletion
private volatile long _backupProgress
private volatile long _fileLength
public ConfigAreaFile(File configAreaFile, short activeVersion, ConfigFileManager configFileManager, List<VersionInfo> localActivatedVersionTimes) throws IOException
configAreaFile
- Datei, in der der Konfigurationsberich gespeichert istactiveVersion
- aktive Version mit der der Konfigurationsbereich gestartet wirdconfigFileManager
- Objekt, das alle Konfigurationsbereiche verwaltetlocalActivatedVersionTimes
- Liste, die zu jeder Version, die lokal aktiviert wurde, den Zeitpunkt enthält, wann die Version aktiviert wurdeIOException
public ConfigAreaFile(File configAreaFile, String pid, short activeVersion, int serializerVersion, ConfigFileManager configFileManager) throws IOException
configAreaFile
- Datei, in der die Objekte gespeichert werdenpid
- Pid des KonfigurationsbereichsactiveVersion
- aktuelle VersionserializerVersion
- Version, mit der alle Daten in der Datei serialisiert werden müssen. Alle Daten, dieconfigFileManager
- IOException
private Collection<Long> readIdIndex(String indexFileName) throws IOException
indexFileName
- Suffix oder Name des Index. Aktuell werden zwei Indizes verwendet, da Objekte im ersten Index
noch in ausnahmefällen Referenziert werden könnenIOException
- falls Dateinhalt nicht stimmt oder ein fehler beim Lesen auftratprivate void writeIdIndex(String indexFileName, Collection<Long> values) throws IOException
readIdIndex(String)
.indexFileName
- Indexname bzw. Suffixvalues
- Zu Schreibende Long-Werte (IDs)IOException
private long[] getActivationTimeArray(Map<Short,Long> activationTimeMap)
activationTimeMap
- Map mit der globalen oder lokalen Zuordnung von aktivierten Versionen zum jeweiligen Zeitpunktprivate long getActivationTime(int version, long[] activationTimes)
version
- Version deren Aktivierungszeitpunkt bestimmt werden soll.activationTimes
- Array mit den globalen bzw. lokalen Aktivierungszeitpunktenpublic void setNextActiveVersion(short nextActiveVersion)
ConfigurationAreaFile
ConfigurationAreaFile.createConfigurationObject(long, long, java.lang.String, java.lang.String)
erzeugt werden, gültig werden.setNextActiveVersion
in interface ConfigurationAreaFile
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.public short getNextActiveVersion()
ConfigurationAreaFile
getNextActiveVersion
in interface ConfigurationAreaFile
public ConfigurationObjectInfo getConfigurationAreaInfo()
getConfigurationAreaInfo
in interface ConfigurationAreaFile
null
, wenn der Bereich gerade erzeugt wurde.public void flush() throws IOException
ConfigurationAreaFile
flush
in interface ConfigurationAreaFile
IOException
- Fehler beim Zugriff auf die Datei in der der Konfigurationsbereich gespeichert istpublic void createBackupFile(File targetDirectory) throws IOException
targetDirectory
- ZielverzeichnisIOException
- IO-Fehlerpublic long getBackupProgress()
public long getFileLength()
public void close() throws IOException
ConfigurationAreaFile
ConfigurationAreaFile.flush()
und ein Zustand
hergestellt werden, mit dem das System zu einem späteren Zeitpunkt wieder hochgefahren werden kann.close
in interface ConfigurationAreaFile
IOException
- Fehler beim Zugriff auf die Datei in der der Konfigurationsbereich gespeichert istvoid writeDynamicObject(DynamicObjectInformation object)
object
- zu speicherndes Objektspublic DynamicObjectInfo createDynamicObject(long objectID, long typeID, String pid, short simulationVariant, String name, DynamicObjectType.PersistenceMode persistenceMode)
ConfigurationAreaFile
createDynamicObject
in interface ConfigurationAreaFile
objectID
- ID des ObjektstypeID
- Typ des Objekts, der Typ wird über die ID festgelegtpid
- Pid des ObjektssimulationVariant
- Simulationsvariante unter der das dynamische Objekt gültig istname
- Name des Objekts, null
wird als "" interpretiertpersistenceMode
- Soll das dynamische Objekte persistent gespeichert werdenConfigurationAreaFile.getGreatestId()
public ConfigurationObjectInfo createConfigurationObject(long objectID, long typeID, String pid, String name)
ConfigurationAreaFile
createConfigurationObject
in interface ConfigurationAreaFile
objectID
- ID des ObjektstypeID
- Typ des Objekts, der Typ wird über die ID festgelegtpid
- Pid des Objektsname
- Name des Objekts, null
wird als "" interpretiertConfigurationAreaFile.getGreatestId()
private long getRunningNumber(long wholeNumber)
wholeNumber
- Id, die maksiert werden sollpublic SystemObjectInformationInterface[] getCurrentObjects()
ConfigurationAreaFile
getCurrentObjects
in interface ConfigurationAreaFile
public SystemObjectInformationInterface[] getActualObjects(long typeId)
ConfigurationAreaFile
getActualObjects
in interface ConfigurationAreaFile
typeId
- TypeId, die ein Objekt besitzen muss, damit es zurückgegeben wirdpublic SystemObjectInformationInterface[] getActualObjects(Collection<Long> typeIds)
ConfigurationAreaFile
getActualObjects
in interface ConfigurationAreaFile
typeIds
- TypeIds, die ein Objekt besitzen muss, damit es zurückgegeben wirdpublic SystemObjectInformationInterface[] getObjects(long startTime, long endTime, ConfigurationAreaTime kindOfTime, TimeSpecificationType timeSpecificationType, Collection<Long> typeIds)
ConfigurationAreaFile
timeSpecificationType
bestimmt, wann/wie lange ein Objekt gültig gewesen sein muss um
in die Lösung aufgenommen zu werden.
getObjects
in interface ConfigurationAreaFile
startTime
- Zeitpunkt, ab der ein Objekt gültig sein muss, um zurückgegeben zu werdenendTime
- Zeitpunkt, bis zu der Objekte zurückgegeben werdenkindOfTime
- 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
übereinstimmenprivate boolean isValueAtTheMiddle(long start, long middle, long end)
public short getActiveVersion(long startTime, ConfigurationAreaTime kindOfTime)
startTime
- Zeitpunkt, zu dem die Version aktiv gewesen sein musskindOfTime
- Soll die Aktivierungszeit des Konfigurationsverantwortlichen oder die lokale Aktivierung zur Berechnung der Version benutzt werdenpublic SystemObjectInformationInterface[] getNewObjects()
ConfigurationAreaFile
getNewObjects
in interface ConfigurationAreaFile
@Deprecated public Iterator<SystemObjectInformationInterface> iterator()
ConfigurationAreaFile
iterator
in interface ConfigurationAreaFile
public void forEach(Consumer<? super SystemObjectInformationInterface> consumer)
forEach
in interface ConfigurationAreaFile
consumer
- Java-8-Style Consumer, an den jedes gefundene Objekt übergeben wirdpublic void forEachOldConfigurationObject(Consumer<? super ConfigurationObjectInfo> consumer)
forEachOldConfigurationObject
in interface ConfigurationAreaFile
consumer
- Java-8-Style Consumer, an den jedes gefundene Objekt übergeben wirdpublic void forEachOldDynamicObject(Consumer<? super DynamicObjectInfo> consumer)
forEachOldDynamicObject
in interface ConfigurationAreaFile
consumer
- Java-8-Style Consumer, an den jedes gefundene Objekt übergeben wirdpublic void forEachMixedObject(Consumer<? super SystemObjectInformationInterface> consumer)
forEachMixedObject
in interface ConfigurationAreaFile
consumer
- Java-8-Style Consumer, an den jedes gefundene Objekt übergeben wirdprivate void forEachObjects(long startOffset, long endOffset, Consumer<? super SystemObjectInformationInterface> consumer)
private void writeHeader(HeaderInfo positions, BufferedRandomAccessFile file) throws IOException
file
- IOException
public Collection<Object> getMixedObjectSetObjects()
SystemObjectInformationInterface
und
ConfigAreaFile.OldObject
IOException
NoSuchVersionException
private void putUnknownObject(SystemObjectInformationInterface unknownObject)
unknownObject
- Objekt, das eingetragen werden sollprivate void putOldObject(ConfigAreaFile.OldObject oldObject)
oldObject
- Objekt, das Id, PidHashCode und die Dateipostion enthält. Das configAreaFileObjekt wird nicht benötigt.private void putNewObject(SystemObjectInformationInterface newObjekt)
newObjekt
- Objekt, das in die Datenstruktur aufgenommen werden sollvoid removeNewObject(ConfigurationObjectInfo newObject)
newObject
- Objekt, das aus allen Datenstrukturen entfernt werden soll.void deleteDynamicObject(DynamicObjectInformation dynamicObjectInfo)
dynamicObjectInfo
- Objekt, das entfernt werden sollprivate void putActualObject(SystemObjectInformationInterface actualObjekt)
actualObjekt
- public SystemObjectInformationInterface getOldObject(long id)
ConfigurationAreaFile
null
zurückgegeben.getOldObject
in interface ConfigurationAreaFile
id
- Id des geforderten Objektsnull
private void putOldObjectTypeId(long typeId, long firstValid, long firstInvalid, boolean configurationObject, ObjectReference objectReference)
typeId
- TypeId des Objekt, das nicht vollständig geladen wurdefirstValid
- Zeitpunkt oder Version mit der das Objekt gültig wurdefirstInvalid
- Zeitpunkt oder Version mit der das Objekt ungültig wurdeconfigurationObject
- true = Es handelt sich um ein Konfigurationsobjekt (firstValid wird als Version interpretiert); false = Es handelt sich um ein
dynamisches Objekt (firstValid wird als Zeitpunkt interpertiert)objectReference
- Objekt zum anfordert des Objekts (Datei oder Speicher)private void putActualObjectTypeId(SystemObjectInformationInterface actualObject)
actualObject
- Objekt, das in die Map aufgenommen werden sollpublic List<SystemObjectInformationInterface> getObjects(String pid, long startTime, long endTime, ConfigurationAreaTime kindOfTime, short simulationVariant)
ConfigurationAreaFile
getObjects
in interface ConfigurationAreaFile
pid
- Pid, über die die Objekte identifiziert werdenstartTime
- 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.boolean objectValid(Object objectInfo, long queryIntervalStart, long queryIntervalEnd, ConfigurationAreaTime kindOfTime, TimeSpecificationType timeSpecificationType)
objectInfo
- Objekt, das geprüft werden sollqueryIntervalStart
- Startzeitpunkt ab dem ein Objekte gültig sein mussqueryIntervalEnd
- Endzeitpunkt, bis zu dem ein Objekt gültig geworden sein musskindOfTime
- Zeit des Konfigurationsverantwortlichen oder die lokale Zeit zu der eine Version gültig geworden isttimeSpecificationType
- Gibt an, ab wann ein Objekt als "gültig" deklariert werden darf. Es gibt 2 Fälle: Fall 1) Das Objekt muss im angegebnen Bereich
irgendwann gültig gewesen sein (Darf aber auch in dem Bereich ungültig geworden sein). Fall 2) Das Objekt muss im gesamten
Zeitbereich gültig gewesen sein, die entspricht TimeSpecificationType.VALID_DURING_PERIODpublic int getSerializerVersion()
ConfigurationAreaFile
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.getSerializerVersion
in interface ConfigurationAreaFile
SystemObjectInformation loadObjectFromFile(FilePointer filePosition) throws IOException, NoSuchVersionException
filePosition
- Position in der Datei, an der das Objekt beginntIOException
NoSuchVersionException
@Deprecated private SystemObjectInformation loadObjectFromFile(FilePointer filePosition, ConfigAreaFile.FileIterator fileIterator) throws IOException, NoSuchVersionException
BufferedRandomAccessFile
. Auf Performancegründen sollte für das Laden von mehreren Objekten
immer dasselbe BufferedFile-Objekt verwendet werden. Einzige benutzung ist aktuell der ConfigAreaFile.FileIterator
,
der ebenfalls nicht mehr benutzt wird und deprecated ist.filePosition
- Position in der Datei, an der das Objekt beginntfileIterator
- Objekt, an dem die Position des nächsten zu ladenden Objekts gespeichert wird. Wird null
übergeben, so wird die Psoition
des nächsten Objekts nicht gesetzt. Wird eine -1 gesetzt,so gibt es kein nächstes Objekt mehrIOException
NoSuchVersionException
@Deprecated private SystemObjectInformation loadObjectFromFile(BufferedRandomAccessFile file, FilePointer filePosition, ConfigAreaFile.FileIterator fileIterator) throws IOException, NoSuchVersionException
IOException
NoSuchVersionException
private SystemObjectInformation readObjectFromFile(long filePosition, int objectsize, long id, long typeId, long firstInvalid, long firstValid, byte objecttype, BufferedRandomAccessFile file) throws IOException, NoSuchVersionException
filePosition
- Position in der Datei, an der das Objekt gespeichert istobjectsize
- Gesamtegröße des Objekts (einschließlich der schon geladenen Daten)id
- Id des ObjektstypeId
- Id des Types des ObjektsfirstInvalid
- Version oder Zeitpunkt, an dem das Objekt ungültig wurde/wirdfirstValid
- Version oder Zeitpunkt, an dem das Objekt gültig wird/wurdeobjecttype
- 0 = Konfigurationsobjekt, Valid und Invalid sind als Versionen zu interpretieren; 1 = dynamisches Objekt, Valid und Invalid sind als
Zeitpunkte zu interpretierenfile
- Datei, aus der das Objekt gelesen werden soll, der fileDescriptor steht bei dynamsichen Objekten auf der Simulationsvariante, bei
Konfigurationsobjekten auf den gepackten DatenIOException
NoSuchVersionException
private long writeDynamicObjectToFile(DynamicObjectInformation dynamicObject, BufferedRandomAccessFile file, boolean declareGap, boolean setNewFilePosition) throws IOException, IllegalStateException
dynamicObject
- Objekt, das gesichert werden sollfile
- Datei, in der das Objekt gespeichert werden soll. Das Objekt wird ans Ende der Datei geschriebendeclareGap
- true = (Normalfall) Das Objekt wird gespeichert, es existiert aber noch eine ältere Version des Objekts in der Datei und diese
wird als Lücke deklariert (ID wird auf 0 gesetzt); false = (Anlegen einer neuen Konfigurationsbereichsdatei oder bei
Reorganisation) Das Objekt wird in der Datei gespeichert (es wird keine Lücke erzeugt). Dies ist aber die erste Version des
Objekts in der Datei und somit gibt es auch keinen Vorgänger der als Lücke deklariert werden sollsetNewFilePosition
- true = (Normalfall) Das Objekt wird in der Datei gespeichert und die neue Position in der Datei wird am Objekt, das sich im
Speicher befindet, gespeichert; false = Das Objekt wird in der Datei gespeichert, aber die neue Dateiposition wird nicht am Objekt
gespeichert sondern muss nachträglich am Objekt, das sich im Speicher befindet, gesetzt werden. Ein Beispiel wäre die
Reorganisation. Das Objekt wird in der neue Datei gespeichert, aber die Dateiposition wird am Objekt im Speicher erst dann
gesetzt, wenn die Reorganisation erfolgreich abgeschlossen werden konnte.IOException
- Fehler beim schreiben in die Datei, Teile des Datensatzes wurden bereits geschriebenIllegalStateException
- Fehler beim sammeln der Daten, die Datei wurde noch nicht verändertprivate long writeConfigurationObjectToFile(ConfigurationObjectInformation configurationObject, BufferedRandomAccessFile file, boolean declareGap, boolean setNewFilePosition) throws IOException, IllegalStateException
configurationObject
- Objekt, das gespeichert werden sollfile
- Datei, in der das Objekt gespeichert werden soll.declareGap
- true = (Normalfall) Das Objekt wird gespeichert, es existiert aber noch eine ältere Version des Objekts in der Datei und diese
wird als Lücke deklariert (ID wird auf 0 gesetzt); false = (Anlegen einer neuen Konfigurationsbereichsdatei oder bei
Reorganisation) Das Objekt wird in der Datei gespeichert (es wird keine Lücke erzeugt). Dies ist aber die erste Version des
Objekts in der Datei und somit gibt es auch keinen Vorgänger der als Lücke deklariert werden sollsetNewFilePosition
- true = (Normalfall) Das Objekt wird in der Datei gespeichert und die neue Position in der Datei wird am Objekt, das sich im
Speicher befindet, gespeichert; false = Das Objekt wird in der Datei gespeichert, aber die neue Dateiposition wird nicht am
Objekt gespeichert sondern muss nachträglich am Objekt, das sich im Speicher befindet, gesetzt werden. Ein Beispiel wäre die
Reorganisation. Das Objekt wird in der neue Datei gespeichert, aber die Dateiposition wird am Objekt im Speicher erst dann
gesetzt, wenn die Reorganisation erfolgreich abgeschlossen werden konnte.IOException
- Fehler beim schreiben in die Datei, Teile des Datensatzes wurden bereits geschriebenIllegalStateException
- Fehler beim sammeln der Daten, die Datei wurde noch nicht verändertprivate void declareObjectAsAGap(FilePointer filePosition, BufferedRandomAccessFile file) throws IOException
filePosition
- Position des Objekts (Länge des Objekts).file
- Dateiobjekt, mit dem auf die Platte zugegriffen werden kannIOException
void declareObjectAsAGap(FilePointer filePosition)
static byte[] zip(byte[] data) throws IOException
data
- ungepackte DatenIOException
static byte[] unzip(byte[] zippedData) throws IOException
IOException
private void writeSystemObjectWithoutIdAndTypeId(SystemObjectInformationInterface object, Serializer serializer) throws IOException
object
- Objekt, von dem nur gewissen Teile gespeichert werdenserializer
- Byte-Strom, in den die Daten eingefügt werdenIOException
short getActiveVersion()
void objectModified(SystemObjectInformationInterface modifiedObject)
ConfigurationFileManager.saveConfigurationAreaFiles()
aufgerufen wird. Die Methode kann mehrfach vom selben Objekt aufgerufen werden, es
wird nur einmal gespeichert.
Es muss außerdem geprüft werden, ob das Objekt Auswirkungen auf die drei Zeitstempel _dynamicObjectChanged,_configurationDataChanged,_configurationObjectChanged
hat (siehe TPuK1-51).modifiedObject
- dynamisches Objekt oder Konfigurationsobjekt, dessen Informationen geändert wurden und das somit persistent in der Datei des
Konfigurationsbereichs gespeichert werden mussvoid dontSaveObject(SystemObjectInformationInterface object)
object
- Objekt, das nicht gespeichert werden sollvoid setDynamicObjectInvalid(DynamicObjectInformation invalidObject)
invalidObject
- Objekt, das "ungültig" geworden istpublic boolean initialVersionRestructure()
initialVersionRestructure
in interface ConfigurationAreaFile
restructure(de.bsvrz.puk.config.configFile.fileaccess.ConfigurationAreaFile.RestructureMode)
public long getGreatestId()
ConfigurationAreaFile
getGreatestId
in interface ConfigurationAreaFile
public void restructure(ConfigurationAreaFile.RestructureMode mode) throws IOException
ConfigurationAreaFile
restructure
in interface ConfigurationAreaFile
mode
- Restrukturierungsart (siehe RestructureMode
IOException
- Falls ein Fehler bei der Restrukturierung auftrat. In diesem Fall bleibt der vorherige Zustand erhalten.private void restructureMain(ConfigurationAreaFile.RestructureMode mode) throws IOException, NoSuchVersionException
IOException
NoSuchVersionException
public void swapFiles(RestructureInfo restructureInfo, File configAreaNewName) throws IOException
IOException
private RestructureInfo createRestructuredCopy(BufferedRandomAccessFile oldConfigAreaFile, BufferedRandomAccessFile newConfigAreaFile, ConfigurationAreaFile.RestructureMode mode) throws IOException, NoSuchVersionException
oldConfigAreaFile
- newConfigAreaFile
- mode
- IOException
NoSuchVersionException
private void writeCurrentObjects(BufferedRandomAccessFile newConfigAreaFile, RestructureInfo restructureInfo, Map<Long,SystemObjectInformationInterface> objectMap) throws IOException
IOException
private void copyObjectsPreserveGaps(BufferedRandomAccessFile fromFile, BufferedRandomAccessFile toFile, long endPos, List<ConfigAreaFile.SortObject> newIdIndex, Map<Integer,ConfigAreaFile.SortObjectPid> newPidIndex, long absoluteDynamicAreaOffset, long headerEnd) throws IOException
fromFile
- von-DateitoFile
- ziel-DateiendPos
- bis zu welcher Position (exklusiv) aus on-datei gelesen werden sollnewIdIndex
- ID-index, der gebildet werden sollnewPidIndex
- PID-Index, der gebildet werden sollabsoluteDynamicAreaOffset
- Absoluter Offset des NgDyn-Bereichs (für Pointer der Indizes)headerEnd
- Absoluter Offset des Headerendes (für Pointer der Indizes)IOException
private void copyObjectsRemoveGaps(BufferedRandomAccessFile fromFile, BufferedRandomAccessFile toFile, long endPos, List<ConfigAreaFile.SortObject> newIdIndex, Map<Integer,ConfigAreaFile.SortObjectPid> newPidIndex, long absoluteDynamicAreaOffset, long headerEnd) throws IOException
fromFile
- von-DateitoFile
- ziel-DateiendPos
- bis zu welcher Position (exklusiv) aus on-datei gelesen werden sollnewIdIndex
- ID-index, der gebildet werden sollnewPidIndex
- PID-Index, der gebildet werden sollabsoluteDynamicAreaOffset
- Absoluter Offset des NgDyn-Bereichs (für Pointer der Indizes)headerEnd
- Absoluter Offset des Headerendes (für Pointer der Indizes)IOException
private void copyObjectsRemoveGapsAndDeleteObjects(BufferedRandomAccessFile fromFile, BufferedRandomAccessFile toFile, long endPos, List<ConfigAreaFile.SortObject> newIdIndex, Map<Integer,ConfigAreaFile.SortObjectPid> newPidIndex, long absoluteDynamicAreaOffset, long headerEnd) throws IOException
fromFile
- von-DateitoFile
- ziel-DateiendPos
- bis zu welcher Position (exklusiv) aus on-datei gelesen werden sollnewIdIndex
- ID-index, der gebildet werden sollnewPidIndex
- PID-Index, der gebildet werden sollabsoluteDynamicAreaOffset
- Absoluter Offset des NgDyn-Bereichs (für Pointer der Indizes)headerEnd
- Absoluter Offset des Headerendes (für Pointer der Indizes)IOException
private void addToIndizes(BufferedRandomAccessFile toFile, List<ConfigAreaFile.SortObject> newIdIndex, Map<Integer,ConfigAreaFile.SortObjectPid> newPidIndex, long absoluteDynamicAreaOffset, BinaryObject binaryObject, long headerEnd)
public static long getRelativeFilePositionForInvalidConfigObject(long headerEnd, long absoluteFilePosition)
public static long getRelativeFilePositionForInvalidDynamicObject(long dynamicAreaOffset, long absoluteFilePosition)
public void addToIndizes(List<ConfigAreaFile.SortObject> idIndex, Map<Integer,ConfigAreaFile.SortObjectPid> pidIndex, BinaryObject objectInformation, long filePosition)
public void addToIndizes(List<ConfigAreaFile.SortObject> idIndex, Map<Integer,ConfigAreaFile.SortObjectPid> pidIndex, SystemObjectInformationInterface objectInformation, long filePosition)
private List<SystemObjectInformationInterface> binarySearch(long value, boolean searchId) throws NoSuchVersionException, IOException
value
- Id oder Pid, nach der die Objekte gesucht werden sollensearchId
- true = value wird als Id interpretiert; false = value wird als HashCode einer Pid interpretiert (siehe Methodenbeschreibung!)null
zurückgegeben,
falls kein Objekt gefunden werden konnteIllegalStateException
- Zu einer Id wurden zwei Elemente gefundenNoSuchVersionException
IOException
private List<SystemObjectInformationInterface> binarySearch(BufferedRandomAccessFile file, long value, boolean searchId) throws NoSuchVersionException, IOException
NoSuchVersionException
IOException
public String getConfigAreaPid()
public void markObjectsForDeletion(List<Long> objectsToDelete)
ConfigurationAreaFile
markObjectsForDeletion
in interface ConfigurationAreaFile
objectsToDelete
- Menge mit zu löschenden dynamischen Objekten dieses Bereichs (Objekt-IDs)public void deleteDynamicObjectsPermanently()
public boolean referenceAllowed(SystemObjectInformationInterface systemObjectInfo)
ConfigurationAreaFile
referenceAllowed
in interface ConfigurationAreaFile
systemObjectInfo
- Objekt-Info (Objekt sollte zum aktuellen Bereich gehören)zu Löschen markiert
wurde,
sonst falsepublic long getHeaderEnd()
HeaderInfo
getHeaderEnd
in interface HeaderInfo
public long getStartOldDynamicObjects()
HeaderInfo
getStartOldDynamicObjects
in interface HeaderInfo
public long getStartIdIndex()
HeaderInfo
getStartIdIndex
in interface HeaderInfo
public long getStartPidHashCodeIndex()
HeaderInfo
getStartPidHashCodeIndex
in interface HeaderInfo
public long getStartMixedSet()
HeaderInfo
getStartMixedSet
in interface HeaderInfo
public void updateHeaderPositions(HeaderInfo headerInfo)
public void writeInvalidTime(DynamicObjectInformation object)
object
- @Deprecated public boolean restructure()
restructure
in interface ConfigurationAreaFile
private SystemObjectInformationInterface getSystemObjectInfo(ObjectReference ref, BufferedRandomAccessFile file) throws NoSuchVersionException, IOException
file
- BufferedFile, das die Konfigurationsdatei enthält. Falls null wird eine neue Datei geöffnet.
(Performanceproblem beim wiederholten Laden von vielen Objekten!)NoSuchVersionException
IOException