de.bsvrz.pat.datgen.generator.xmlParser
Class SaxHandler

java.lang.Object
  extended by org.xml.sax.helpers.DefaultHandler
      extended by de.bsvrz.pat.datgen.generator.xmlParser.SaxHandler
All Implemented Interfaces:
ContentHandler, DTDHandler, EntityResolver, ErrorHandler

public class SaxHandler
extends 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 Datas für die NonPlains eingesetzt werden, die wiederum Datas 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.

Author:
Kappich Systemberatung

Constructor Summary
SaxHandler()
          Creates a new instance of SaxHandler
 
Method Summary
 void characters(char[] ch, int start, int length)
          Callback-Methode für die Verarbeitung von Characters.
 void endDocument()
          Ende des Dokuments erreicht
 void endElement(String uri, String localName, String qName)
          Ende-Tag gefunden.
 void error(SAXParseException e)
          Fehler
 void fatalError(SAXParseException e)
          Schwerer Fehler
 InputSource resolveEntity(String publicId, 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(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(String name)
           
 void startDocument()
          Callback-Methode für Start des XML-Dokuments
 void startElement(String uri, String localName, String qName, Attributes attributes)
          Start-Tag gefunden.
 void warning(SAXParseException e)
          Warnung
 
Methods inherited from class org.xml.sax.helpers.DefaultHandler
endPrefixMapping, ignorableWhitespace, notationDecl, processingInstruction, setDocumentLocator, startPrefixMapping, unparsedEntityDecl
 
Methods inherited from class java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
 

Constructor Detail

SaxHandler

public SaxHandler()
Creates a new instance of SaxHandler

Method Detail

characters

public void characters(char[] ch,
                       int start,
                       int length)
                throws SAXException
Callback-Methode für die Verarbeitung von Characters.

Specified by:
characters in interface ContentHandler
Overrides:
characters in class DefaultHandler
Parameters:
ch - Feld mit den erparsten chars
start - Startposition
length - Länge des Feldes
Throws:
SAXException - bei Problemen

endDocument

public void endDocument()
                 throws SAXException
Ende des Dokuments erreicht

Specified by:
endDocument in interface ContentHandler
Overrides:
endDocument in class DefaultHandler
Throws:
SAXException - bei Problemen

endElement

public void endElement(String uri,
                       String localName,
                       String qName)
                throws SAXException
Ende-Tag gefunden.

Specified by:
endElement in interface ContentHandler
Overrides:
endElement in class DefaultHandler
Parameters:
uri - URI des Tags
localName - Bezeichner
qName - Qualifizierter Name
Throws:
SAXException - bei Problemen

error

public void error(SAXParseException e)
           throws SAXException
Fehler

Specified by:
error in interface ErrorHandler
Overrides:
error in class DefaultHandler
Parameters:
e - Den Fehler auslösende Exception
Throws:
SAXException - bei Problemen

fatalError

public void fatalError(SAXParseException e)
                throws SAXException
Schwerer Fehler

Specified by:
fatalError in interface ErrorHandler
Overrides:
fatalError in class DefaultHandler
Parameters:
e - Den fatalen Fehler auslösende Exception
Throws:
SAXException - bei Problemen

setConnection

public void setConnection(ClientDavInterface cdi)
Die DaV-Verbindung der Applikation im SAX-Handler eintragen

Parameters:
cdi - Die DaV-Verbindung der Applikation

setDataGenerator

public void setDataGenerator(DataGenerator dg)
Den Datengenerator im SAX-Handler eintragen

Parameters:
dg - DataGenerator, von dem aus u. a. dieses Objekt der Klasse SaxHandler gestartet wurde.

setDataModel

public void setDataModel(DataModel dm)
Das Datenmodell der Applikation im SAX-Handler eintragen

Parameters:
dm - Das Datenmodell der Applikation

setIsInVerify

public void setIsInVerify(boolean iiv)
Festlegen, ob sich der Parser in der Verifizierung befindet

Parameters:
iiv - True, wenn in der Verifizierung, sonst False

setRequestedObjects

public void setRequestedObjects(List objects)
Die angeforderten Datenobjekte der Applikation im SAX-Handler eintragen

Parameters:
objects - Die gewünschten Objekte

setSendQueue

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

Parameters:
sq - Die Sende-Queue

skippedEntity

public void skippedEntity(String name)
                   throws SAXException
Specified by:
skippedEntity in interface ContentHandler
Overrides:
skippedEntity in class DefaultHandler
Throws:
SAXException

startDocument

public void startDocument()
                   throws SAXException
Callback-Methode für Start des XML-Dokuments

Specified by:
startDocument in interface ContentHandler
Overrides:
startDocument in class DefaultHandler
Throws:
SAXException - bei Problemen

startElement

public void startElement(String uri,
                         String localName,
                         String qName,
                         Attributes attributes)
                  throws SAXException
Start-Tag gefunden.

Specified by:
startElement in interface ContentHandler
Overrides:
startElement in class DefaultHandler
Parameters:
uri - URI des Tags
localName - Bezeichner
qName - Qualifizierter Name
attributes - Liste der Attribute des Tags
Throws:
SAXException - bei Problemen

setTimeStampOption

public 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

Parameters:
tso - Gibt an, ob die Daten mit den originalen Zeitstempeln wieder eingespielt oder in die Jetztzeit verschoben werden sollen.

warning

public void warning(SAXParseException e)
             throws SAXException
Warnung

Specified by:
warning in interface ErrorHandler
Overrides:
warning in class DefaultHandler
Parameters:
e - Die Warnung auslösende Exception
Throws:
SAXException - bei Problemen

resolveEntity

public InputSource resolveEntity(String publicId,
                                 String systemId)
                          throws SAXException,
                                 IOException
Specified by:
resolveEntity in interface EntityResolver
Overrides:
resolveEntity in class DefaultHandler
Throws:
SAXException
IOException