public class SaxHandler
extends org.xml.sax.helpers.DefaultHandler
SAX-Handler für den Zugriff auf die XML-Datei.
Datensätze können Felder und Listen (im folgenden NonPlains genannt) enthalten. Würde man die XML-Datei “von Hand” verarbeiten, so hätte eine Methode datenVerarbeiten
wohl einen rekursiven Aufbau (vgl DataGenerator.DataCycler#setRandomData
:
IF (tag == “attribut”) THEN // Wert aus XML-Datei lesen ELSE IF (tag == “feld”) THEN FOR ALL (Feldelemente) DO datenVerarbeiten(); ENDFOR ELSE IF (tag == “liste”) THEN FOR EACH (listenelement) DO datenVerarbeiten(); ENDFOR ENDIF
Durch die Art des Einlesens der XML-Datei mit dem SAX-Parser (jedes Lesen eines Start-/Ende-Tags löst Aufruf einer der hier zu findenden Call-Back-Methoden aus), ist das rekursive Abarbeiten nicht möglich ==> Über einen Stack wird erreicht, daß die Zuordnung der eingelesenen Attribute zu den richtigen Einträgen in der rekursiven Datenstruktur gelingt:
Ein Datensatz vom Typ Data
wird “lazy” erzeugt, d. h. enthält er ein NonPlain, so wird beim Erzeugen eines Data
lediglich eine “flacher” Datenstruktur erzeugt, in die wiederum Data
s für die NonPlains eingesetzt werden, die wiederum Data
s für NonPlains enthalten können usw.
Die o. g. zunächst erzeugte flache Datenstruktur ist data
. Jedes weitere für NonPlains erzeugte Data
wird auf einen Stack gelegt. Durch readTop()
wird nun erreicht, daß beim Einlesen eines Attributs immer das Data
-Element gefüllt wird, welches sich gerade in Bearbeitung befindet, d. h. der Stack bildet das “Gedächtnis” des Parsers und “aus Sicht der Attribute” ist nur dieses Data
-Element bekannt, wie es auch in einer rekursiven Methode der Fall wäre.
Modifier and Type | Field and Description |
---|---|
private Aspect |
asp
Aspekt
|
private AttributeGroup |
atg
Attributgruppe
|
private static int |
BEFORE_PROTOCOL
Konstante: Man befindet sich vor dem “Protokoll”-Tag
|
private static int |
BEHIND_PROTOCOL
Konstante: Man befindet sich hinter dem “Protokoll”-Tag.
|
private long |
blockTime
Gewünschter Sendezeitpunkt für einen Datenblock
|
private static ClientDavInterface |
connection
Verbindung zum DaV
|
private Data |
data
Datenelement
|
private DataGenerator |
dataGenerator
Aufrufender Datengenerator
|
private DataModel |
dataModel
Das benutzte Datenmodell der Applikation
|
private DataDescription |
dd
Datenbeschreibung (bestehend aus Attributgruppe, Aspekt und Simulationsvariante)
|
private static Debug |
debug
Der Debug-Logger der Klasse
|
private boolean |
hasNoData
Zeigt an, ob ein Telegramm Daten enthält
|
private boolean |
hasNoSource
Zeigt an, ob momentan Quelle für das entsprechende Objekt existiert
|
private boolean |
hasObjects
Gibt an, ob beim Aufruf des
Datengenerators Objekte angegeben wurden oder nicht |
private long |
historicalBlockTime
Zeitstempel des Blocks in der XML-Datei
|
private long |
historicalOffset
Offset vom Block zur Startzeit in der XML-Datei
|
private long |
historicalStartTime
Historische Startzeit (d. h.
|
private long |
historicalTimeStamp
Zeit des historischen Zeitstempels
|
private int |
i |
private static int |
IN_BLOCK
Konstante: Man befindet sich im “Block”-Tag.
|
private static int |
IN_BODY
Konstante: Man befindet sich im “Koerper”-Tag.
|
private static int |
IN_HEADER
Konstante: Man befindet sich im “Kopf”-Tag
|
private static int |
IN_PROTOCOL
Konstante: Man befindet sich im “Protokoll”-Tag.
|
private static int |
IN_RECORD
Konstante: Man befindet sich im “Datensatz”-Tag.
|
private boolean |
isDelayed
Zeigt an, ob ein Datensatz als nachgesendet gekennzeichnet ist
|
private boolean |
isInVerify
true wenn sich der XML-Parser im Verifizierungsschritt befindet. |
private java.util.LinkedList |
itemStack
Stack für die Verarbeitung von geschachtelten
Data -Objekten |
private static int |
NACH_HEADER
Konstante: Man befindet sich hinter dem “Kopf”-Tag.
|
private int |
numberOfRecords
Anzahl der geparsten Datensätze
|
private SystemObject |
object
Objekt
|
private long |
offset
Zeitunterschied zwischen Startzeit in der XML-Datei und aktueller Startzeit der Applikation
|
private java.util.List |
requestedObjects
Objekte, für die Daten aus der XML-Datei ausgelesen werden sollen
|
private java.util.LinkedList |
requestedResults
Datensatz eines der vom Anwender erwünschte Objekte, welcher in der XML-Datei gefunden wurde
|
private ResultData[] |
results
Das aus der XML-Datei gelesene Telegramm
|
private SendInterface |
sendQueue
Die Sende-Queue des SAX-Handlers
|
private short |
simVariant
Simulationsvariante
|
private boolean |
simVariantExplicitlySet
Zeigt an, ob die Simulationsvariante explizit aus der XML-Datei gelesen wurde oder nicht
|
private long |
startTime
Startzeit der Applikation
|
private int |
state
Status des SAX-Handlers
|
private long |
timeStamp
Zeitstempel
|
private int |
timeStampOption
Zeitstempel-Option: Zeitstempel der Daten aus der XML-Datei wird beim Einspielen der Daten entweder übernommen oder aber die Daten werden in die Jetztzeit verschoben.
|
Constructor and Description |
---|
SaxHandler()
Creates a new instance of SaxHandler
|
Modifier and Type | Method and Description |
---|---|
void |
characters(char[] ch,
int start,
int length)
Callback-Methode für die Verarbeitung von Characters.
|
void |
endDocument()
Ende des Dokuments erreicht
|
void |
endElement(java.lang.String uri,
java.lang.String localName,
java.lang.String qName)
Ende-Tag gefunden.
|
void |
error(org.xml.sax.SAXParseException e)
Fehler
|
void |
fatalError(org.xml.sax.SAXParseException e)
Schwerer Fehler
|
private void |
makeSubscriptions(java.lang.String argumentString)
“-rolle”-, “-objekte”- und “-daten”-Einträge aus der XML-Datei auswerten und entsprechende Anmeldungen durchführen.
|
private Data |
popItem()
Oberstes Element des
Data -Stacks lesen |
private void |
pushItem(Data item)
Neues
Data auf den Stack der Daten-Elemente legen |
private Data |
readTop()
Oberstes Element des
Data -Stacks lesen, ohne es vom Stack zu entfernen |
org.xml.sax.InputSource |
resolveEntity(java.lang.String publicId,
java.lang.String systemId) |
void |
setConnection(ClientDavInterface cdi)
Die DaV-Verbindung der Applikation im SAX-Handler eintragen
|
void |
setDataGenerator(DataGenerator dg)
Den Datengenerator im SAX-Handler eintragen
|
void |
setDataModel(DataModel dm)
Das Datenmodell der Applikation im SAX-Handler eintragen
|
void |
setIsInVerify(boolean iiv)
Festlegen, ob sich der Parser in der Verifizierung befindet
|
void |
setRequestedObjects(java.util.List objects)
Die angeforderten Datenobjekte der Applikation im SAX-Handler eintragen
|
void |
setSendQueue(SendInterface sq)
Sende-Queue der Applikation im SAX-Handler eintragen (in diesen werden die aus der XML-Datei gelesenen Telegramme geschrieben, so daß sie vom Sende-Thread verschickt werden können)
|
void |
setTimeStampOption(int tso)
Option für den Zeitstempel setzen: Entweder werden die Daten mit den originalen Zeitstempeln wieder eingespielt oder in die Jetztzeit verschoben
|
void |
skippedEntity(java.lang.String name) |
void |
startDocument()
Callback-Methode für Start des XML-Dokuments
|
void |
startElement(java.lang.String uri,
java.lang.String localName,
java.lang.String qName,
org.xml.sax.Attributes attributes)
Start-Tag gefunden.
|
void |
warning(org.xml.sax.SAXParseException e)
Warnung
|
private static final Debug debug
Der Debug-Logger der Klasse
private static final int BEFORE_PROTOCOL
Konstante: Man befindet sich vor dem “Protokoll”-Tag
private static final int IN_PROTOCOL
Konstante: Man befindet sich im “Protokoll”-Tag.
private static final int IN_HEADER
Konstante: Man befindet sich im “Kopf”-Tag
private static final int NACH_HEADER
Konstante: Man befindet sich hinter dem “Kopf”-Tag.
private static final int IN_BODY
Konstante: Man befindet sich im “Koerper”-Tag.
private static final int IN_BLOCK
Konstante: Man befindet sich im “Block”-Tag.
private static final int IN_RECORD
Konstante: Man befindet sich im “Datensatz”-Tag.
private static final int BEHIND_PROTOCOL
Konstante: Man befindet sich hinter dem “Protokoll”-Tag.
private DataGenerator dataGenerator
Aufrufender Datengenerator
private boolean hasObjects
Gibt an, ob beim Aufruf des Datengenerators
Objekte angegeben wurden oder nicht
private boolean isDelayed
Zeigt an, ob ein Datensatz als nachgesendet gekennzeichnet ist
private boolean isInVerify
true
wenn sich der XML-Parser im Verifizierungsschritt befindet.
private ResultData[] results
Das aus der XML-Datei gelesene Telegramm
private long blockTime
Gewünschter Sendezeitpunkt für einen Datenblock
private SystemObject object
Objekt
private DataDescription dd
Datenbeschreibung (bestehend aus Attributgruppe, Aspekt und Simulationsvariante)
private AttributeGroup atg
Attributgruppe
private Aspect asp
Aspekt
private short simVariant
Simulationsvariante
private boolean simVariantExplicitlySet
Zeigt an, ob die Simulationsvariante explizit aus der XML-Datei gelesen wurde oder nicht
private long timeStamp
Zeitstempel
private Data data
Datenelement
private boolean hasNoData
Zeigt an, ob ein Telegramm Daten enthält
private boolean hasNoSource
Zeigt an, ob momentan Quelle für das entsprechende Objekt existiert
private long historicalBlockTime
Zeitstempel des Blocks in der XML-Datei
private long historicalOffset
Offset vom Block zur Startzeit in der XML-Datei
private long historicalStartTime
Historische Startzeit (d. h. Startzeit in der XML-Datei)
private long historicalTimeStamp
Zeit des historischen Zeitstempels
private long offset
Zeitunterschied zwischen Startzeit in der XML-Datei und aktueller Startzeit der Applikation
private long startTime
Startzeit der Applikation
private int state
Status des SAX-Handlers
private int numberOfRecords
Anzahl der geparsten Datensätze
private DataModel dataModel
Das benutzte Datenmodell der Applikation
private static ClientDavInterface connection
Verbindung zum DaV
private SendInterface sendQueue
Die Sende-Queue des SAX-Handlers
private java.util.LinkedList requestedResults
Datensatz eines der vom Anwender erwünschte Objekte, welcher in der XML-Datei gefunden wurde
private java.util.LinkedList itemStack
Stack für die Verarbeitung von geschachtelten Data
-Objekten
private java.util.List requestedObjects
Objekte, für die Daten aus der XML-Datei ausgelesen werden sollen
private int timeStampOption
Zeitstempel-Option: Zeitstempel der Daten aus der XML-Datei wird beim Einspielen der Daten entweder übernommen oder aber die Daten werden in die Jetztzeit verschoben.
private int i
public void characters(char[] ch, int start, int length) throws org.xml.sax.SAXException
Callback-Methode für die Verarbeitung von Characters.
characters
in interface org.xml.sax.ContentHandler
characters
in class org.xml.sax.helpers.DefaultHandler
ch
- Feld mit den erparsten char
sstart
- Startpositionlength
- Länge des Feldesorg.xml.sax.SAXException
- bei Problemenpublic void endDocument() throws org.xml.sax.SAXException
Ende des Dokuments erreicht
endDocument
in interface org.xml.sax.ContentHandler
endDocument
in class org.xml.sax.helpers.DefaultHandler
org.xml.sax.SAXException
- bei Problemenpublic void endElement(java.lang.String uri, java.lang.String localName, java.lang.String qName) throws org.xml.sax.SAXException
Ende-Tag gefunden.
endElement
in interface org.xml.sax.ContentHandler
endElement
in class org.xml.sax.helpers.DefaultHandler
uri
- URI des TagslocalName
- BezeichnerqName
- Qualifizierter Nameorg.xml.sax.SAXException
- bei Problemenpublic void error(org.xml.sax.SAXParseException e) throws org.xml.sax.SAXException
Fehler
error
in interface org.xml.sax.ErrorHandler
error
in class org.xml.sax.helpers.DefaultHandler
e
- Den Fehler auslösende Exceptionorg.xml.sax.SAXException
- bei Problemenpublic void fatalError(org.xml.sax.SAXParseException e) throws org.xml.sax.SAXException
Schwerer Fehler
fatalError
in interface org.xml.sax.ErrorHandler
fatalError
in class org.xml.sax.helpers.DefaultHandler
e
- Den fatalen Fehler auslösende Exceptionorg.xml.sax.SAXException
- bei Problemenpublic void setConnection(ClientDavInterface cdi)
Die DaV-Verbindung der Applikation im SAX-Handler eintragen
cdi
- Die DaV-Verbindung der Applikationpublic void setDataGenerator(DataGenerator dg)
Den Datengenerator im SAX-Handler eintragen
dg
- DataGenerator
, von dem aus u. a. dieses Objekt der Klasse SaxHandler
gestartet wurde.public void setDataModel(DataModel dm)
Das Datenmodell der Applikation im SAX-Handler eintragen
dm
- Das Datenmodell der Applikationpublic void setIsInVerify(boolean iiv)
Festlegen, ob sich der Parser in der Verifizierung befindet
iiv
- True, wenn in der Verifizierung, sonst Falsepublic void setRequestedObjects(java.util.List objects)
Die angeforderten Datenobjekte der Applikation im SAX-Handler eintragen
objects
- Die gewünschten Objektepublic void setSendQueue(SendInterface sq)
Sende-Queue der Applikation im SAX-Handler eintragen (in diesen werden die aus der XML-Datei gelesenen Telegramme geschrieben, so daß sie vom Sende-Thread verschickt werden können)
sq
- Die Sende-Queuepublic void skippedEntity(java.lang.String name) throws org.xml.sax.SAXException
skippedEntity
in interface org.xml.sax.ContentHandler
skippedEntity
in class org.xml.sax.helpers.DefaultHandler
org.xml.sax.SAXException
public void startDocument() throws org.xml.sax.SAXException
Callback-Methode für Start des XML-Dokuments
startDocument
in interface org.xml.sax.ContentHandler
startDocument
in class org.xml.sax.helpers.DefaultHandler
org.xml.sax.SAXException
- bei Problemenpublic void startElement(java.lang.String uri, java.lang.String localName, java.lang.String qName, org.xml.sax.Attributes attributes) throws org.xml.sax.SAXException
Start-Tag gefunden.
startElement
in interface org.xml.sax.ContentHandler
startElement
in class org.xml.sax.helpers.DefaultHandler
uri
- URI des TagslocalName
- BezeichnerqName
- Qualifizierter Nameattributes
- Liste der Attribute des Tagsorg.xml.sax.SAXException
- bei Problemenpublic void setTimeStampOption(int tso)
Option für den Zeitstempel setzen: Entweder werden die Daten mit den originalen Zeitstempeln wieder eingespielt oder in die Jetztzeit verschoben
tso
- Gibt an, ob die Daten mit den originalen Zeitstempeln wieder eingespielt oder in die Jetztzeit verschoben werden sollen.public void warning(org.xml.sax.SAXParseException e) throws org.xml.sax.SAXException
Warnung
warning
in interface org.xml.sax.ErrorHandler
warning
in class org.xml.sax.helpers.DefaultHandler
e
- Die Warnung auslösende Exceptionorg.xml.sax.SAXException
- bei Problemenprivate Data readTop()
Oberstes Element des Data
-Stacks lesen, ohne es vom Stack zu entfernen
Data
-Element, welches zuoberst auf dem Stack liegtprivate void makeSubscriptions(java.lang.String argumentString)
“-rolle”-, “-objekte”- und “-daten”-Einträge aus der XML-Datei auswerten und entsprechende Anmeldungen durchführen. Andere in der Datei festgehaltene Parameter werden ignoriert.
argumentString
- String mit den Aufrufparametern, die in der XML-Datei gespeichert sind.private Data popItem()
Oberstes Element des Data
-Stacks lesen
Data
-Element, welches zuoberst auf dem Stack liegtprivate void pushItem(Data item)
Neues Data
auf den Stack der Daten-Elemente legen
item
- Datenelement, welches auf den Stack gelegt wirdpublic org.xml.sax.InputSource resolveEntity(java.lang.String publicId, java.lang.String systemId) throws org.xml.sax.SAXException, java.io.IOException
resolveEntity
in interface org.xml.sax.EntityResolver
resolveEntity
in class org.xml.sax.helpers.DefaultHandler
org.xml.sax.SAXException
java.io.IOException