public class ArchiveUser
extends java.lang.Object
RealArchiveElement
Objekte alle direkt hintereinander nach dem gleichen Wert anfragen. Es ist nicht möglich, dass
eines dieser Objekte z.B. drei Werte aus dem Archivsystem holt, solange ein anderes Objekt nur einen Wert abgeholt hat. Dieses Fehlverhalten wird von dieser
Klasse nicht abgefangen! Durch Aufruf der #setArchiveDataKind(ArchiveDataKind)
und setTimeSpec(ArchiveTimeSpecification)
werden die
bisherigen Anmeldungen verworfen. Für Relativanfragen gilt diese Regelung nicht: Hier wird immer eine neue Relativanfrage gestellt. Durch den Aufruf von
request(Object,DataDescription,SystemObject)
wird keine Archivanfrage gestellt, sondern es werden alle nötigen Archivanfragen gesammelt. Erst der
Aufruf von execute()
fasst alle bisher gesammelten Anfragen pro Objekttyp in einer Archivanfrage zusammen. (D.h. alle für alle Datenidentifikationen
mit dem gleichen Objekttyp wir eine Anfrage gestellt) Die Methoden dieser Klasse sind threadsafe.Modifier and Type | Field and Description |
---|---|
private boolean |
_aborted
Wurde die Verbindugn unterbrochen?
|
private ArchiveRequestManager |
_arm
Anfrageschnittstelle zum Archiv
|
private ArchiveDataKindCombination |
_dataKinds
Datentyp (online, nachgeliefert, etc.)
|
private static Debug |
_debug
Debug Ausgaben
|
private java.util.HashMap<DataIdentification,ArchiveDataStream> |
_dids
Abbildung Datenidentifikationen zu Streams
|
private java.util.HashMap<DataIdentification,java.util.ArrayList<DataIdentification>> |
_diPool
Fasst Datenidentifikationen mit dem gleichen ObjektTYP zusammen.
|
private java.util.HashMap<DataIdentification,java.lang.Integer> |
_numSubscribers
Zuordnung Streams zu Anzahl Interessenten (je Stream)
|
private ArchiveRequestOption |
_requestOptions
Anfrageoptionen: Zustand oder Deltaanfrage
|
private ArchiveOrder |
_sortOrder
Sortierung der nachgelieferten Daten
|
private java.util.HashMap<java.lang.Object,DataIdentification> |
_subscribers
Abbildung Interessenten zu Datenidentifikationen
|
private java.util.HashMap<ArchiveDataStream,java.lang.Integer> |
_take
Abbildung Stream zu Anzahl der Werte, die bereits abgeholt wurden
|
private ArchiveTimeSpecification |
_timeSpec
Zeitbereich der abgefragt wird
|
private java.util.HashMap<ArchiveDataStream,ArchiveData> |
_values
Abbildung Stream zu aktuellem Wert
|
Constructor and Description |
---|
ArchiveUser(ArchiveRequestManager arm,
ArchiveTimeSpecification timeSpec,
ArchiveDataKindCombination dataKindCombination,
ArchiveOrder sortOrder,
ArchiveRequestOption requestOptions)
Konstruktor
|
Modifier and Type | Method and Description |
---|---|
void |
abort()
Beendet alle ausstehenden Archivanfrage.
|
private static void |
enablePidQuery(ArchiveDataSpecification ads) |
void |
execute()
Sendet die bisher in
request(Object,DataDescription,SystemObject) gesammelten Archivanfragen in einer Anfrage an das Archivsystem. |
ArchiveTimeSpecification |
getTimeSpec() |
void |
request(java.lang.Object subscriber,
DataDescription dataDescription,
SystemObject object)
Stellt eine Anfrage ans Archivsystem.
|
ArchiveDataQueryResult |
requestRelative(DataDescription dataDescription,
SystemObject object,
long timeStamp)
Liefert genau einen Archivdatensatz mit kleineren-gleichen Datenzeitstempel als dem übergebenen Intervallende
|
private void |
reset()
Setzt die Verbindungen zum Archivsystem zurück.
|
void |
setArchiveDataKinds(ArchiveDataKindCombination dataKindCombination)
Setzt die Datenart, die abgefragt werden soll.
|
void |
setTimeSpec(ArchiveTimeSpecification timeSpec)
Setzt die Zeitspezifikation.
|
ArchiveData |
take(java.lang.Object subscriber)
Liefert einen Archivdatensatz.
|
private static final Debug _debug
private final ArchiveRequestManager _arm
private ArchiveTimeSpecification _timeSpec
private ArchiveDataKindCombination _dataKinds
private final ArchiveOrder _sortOrder
private final ArchiveRequestOption _requestOptions
private final java.util.HashMap<java.lang.Object,DataIdentification> _subscribers
private final java.util.HashMap<DataIdentification,ArchiveDataStream> _dids
private final java.util.HashMap<DataIdentification,java.lang.Integer> _numSubscribers
private final java.util.HashMap<ArchiveDataStream,java.lang.Integer> _take
private final java.util.HashMap<ArchiveDataStream,ArchiveData> _values
private final java.util.HashMap<DataIdentification,java.util.ArrayList<DataIdentification>> _diPool
private boolean _aborted
public ArchiveUser(ArchiveRequestManager arm, ArchiveTimeSpecification timeSpec, ArchiveDataKindCombination dataKindCombination, ArchiveOrder sortOrder, ArchiveRequestOption requestOptions)
arm
- Anfrageschnittstelle zum ArchivtimeSpec
- Zeitbereich der abgefragt wirddataKindCombination
- Datentyp (online, nachgeliefert, etc.)sortOrder
- Sortierung der nachgelieferten DatenrequestOptions
- Anfrageoptionen: Zustand oder Deltaanfragepublic void request(java.lang.Object subscriber, DataDescription dataDescription, SystemObject object)
subscriber
- Abonnent der ArchivdatendataDescription
- Datenstrukturobject
- Objektpublic ArchiveData take(java.lang.Object subscriber) throws java.lang.InterruptedException, java.lang.IllegalStateException, java.io.IOException
subscriber
- Interessentjava.lang.InterruptedException
- Falls der aufrufende Thread unterbrochen wurde, während auf den nächsten Datensatz gewartet wurde.java.io.IOException
- Ein-/Ausgabefehlerjava.lang.IllegalStateException
- Falls der Ergebnisdatenstrom mit der Methode abort abgebrochen wurde.public ArchiveDataQueryResult requestRelative(DataDescription dataDescription, SystemObject object, long timeStamp)
dataDescription
- Datenstrukturobject
- ObjekttimeStamp
- Intervallendepublic void setTimeSpec(ArchiveTimeSpecification timeSpec)
timeSpec
- Zeitspezifikationpublic ArchiveTimeSpecification getTimeSpec()
public void setArchiveDataKinds(ArchiveDataKindCombination dataKindCombination)
dataKindCombination
- private void reset()
public void abort()
public void execute() throws FailureException, java.lang.InterruptedException
request(Object,DataDescription,SystemObject)
gesammelten Archivanfragen in einer Anfrage an das Archivsystem.FailureException
- Archivsystem ist nicht erreichbar.java.lang.InterruptedException
- Thread wird abgebrochenprivate static void enablePidQuery(ArchiveDataSpecification ads)