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

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

public class ConfigAreaFile
extends Object
implements ConfigurationAreaFile

Diese Klasse stellt eine Konfigurationsbereichsdatei dar und speichert alle Objekte des Bereichs mit Historie.

Author:
Achim Wullenkord (AW), Kappich Systemberatung

Nested Class Summary
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.
 
Constructor Summary
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.
 
Method Summary
 void close()
          Diese Methode wird aufgerufen, wenn das System heruntergefahren soll.
 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.
 void flush()
          Diese Methode wird aufgerufen, wenn alle modifizierten Objekte des Konfigurationsbereichs persistent gespeichert werden sollen.
 short getActiveVersion(long startTime, ConfigurationAreaTime kindOfTime)
          Gibt zu einem Zeitpunkt die Version zurück, die aktiv war.
 SystemObjectInformationInterface[] getActualObjects(long typeId)
          Gibt alle aktuellen Objekte zurück, die als TypeId die übergebene TypeId besitzen.
 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 getGreatestId()
          Diese Methode gibt die größte vergebene laufende Nummer einer Id des Konfigurationsbereichs zurück.
 Collection 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.
 SystemObjectInformationInterface[] getObjects(String pid, long startTime, long endTime, ConfigurationAreaTime kindOfTime)
          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.
 int getSerializerVersion()
          Alle Daten, die als Byte-Array gespeichert werden müssen, werden mit einem Serializer Serializer erstellt.
 boolean initialVersionRestructure()
          Diese Methode wird aufgerufen, wenn der Konfigurationsverantwortliche eine neue Version aktiviert.
 Iterator<SystemObjectInformationInterface> iterator()
          Stellt alle dynamischen Objekte und Konfigurationsobjekte zur Verfügung.
 boolean restructure()
          Diese Methode reorganisiert eine Konfigurationsbereichsdatei.
 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.
 
Methods inherited from class java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
 

Constructor Detail

ConfigAreaFile

public ConfigAreaFile(File configAreaFile,
                      short activeVersion,
                      ConfigFileManager configFileManager,
                      List<VersionInfo> localActivatedVersionTimes)
               throws 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:
IOException

ConfigAreaFile

public ConfigAreaFile(File configAreaFile,
                      String pid,
                      short activeVersion,
                      int serializerVersion,
                      ConfigFileManager configFileManager)
               throws 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:
IOException
Method Detail

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.

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.

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 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:
IOException - Fehler beim Zugriff auf die Datei in der der Konfigurationsbereich gespeichert ist

close

public void close()
           throws 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:
IOException - Fehler beim Zugriff auf die Datei in der der Konfigurationsbereich gespeichert ist

createDynamicObject

public DynamicObjectInfo createDynamicObject(long objectID,
                                             long typeID,
                                             String pid,
                                             short simulationVariant,
                                             String name,
                                             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,
                                                         String pid,
                                                         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 eine leere Liste zurückgegeben.

getObjects

public SystemObjectInformationInterface[] getObjects(long startTime,
                                                     long endTime,
                                                     ConfigurationAreaTime kindOfTime,
                                                     TimeSpecificationType timeSpecificationType,
                                                     Collection<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.

iterator

public Iterator<SystemObjectInformationInterface> iterator()
Description copied from interface: ConfigurationAreaFile
Stellt alle dynamischen Objekte und Konfigurationsobjekte zur Verfügung.

Specified by:
iterator in interface ConfigurationAreaFile
Returns:
s.o.

getMixedObjectSetObjects

public Collection getMixedObjectSetObjects()
                                    throws IOException,
                                           NoSuchVersionException
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
Throws:
IOException
NoSuchVersionException

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 SystemObjectInformationInterface[] getObjects(String pid,
                                                     long startTime,
                                                     long endTime,
                                                     ConfigurationAreaTime kindOfTime)
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.
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).

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()

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 boolean restructure()
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 Konfigrationsverantwortlichen aufgerufen werden.

Specified by:
restructure in interface ConfigurationAreaFile
Returns:
true = Die Restrukturierung der Daten war erfolgreich; false = Die Restrukturierung der Daten hat nicht geklappt, es wird auf der alten Datei weitergearbeitet, es sind keine Daten verloren gegangen

getConfigAreaPid

public String getConfigAreaPid()
Gibt die Pid des Konfigurationsbereichs zurück.

Returns:
Pid des Konfigurationsbereichs