home *** CD-ROM | disk | FTP | other *** search
- package BsscXML;
-
- import java.io.IOException;
- import java.io.Reader;
- import java.util.Stack;
-
- public class BsscXMLParser implements IBsscXMLParser, Runnable {
- private Stack m_processingElements = null;
- private IBsscXMLDocumentBuilder m_document = null;
- private boolean m_bReady;
- private Reader m_is = null;
-
- public static String xmlToText(String var0) {
- StringBuffer var1 = new StringBuffer();
- int var2 = var0.length();
-
- for(int var3 = 0; var3 < var2; ++var3) {
- if (var0.charAt(var3) == '&') {
- if (var3 + 3 < var2 && var0.charAt(var3 + 1) == 'l' && var0.charAt(var3 + 2) == 't' && var0.charAt(var3 + 3) == ';') {
- var1.append('<');
- var3 += 3;
- } else if (var3 + 3 < var2 && var0.charAt(var3 + 1) == 'g' && var0.charAt(var3 + 2) == 't' && var0.charAt(var3 + 3) == ';') {
- var1.append('>');
- var3 += 3;
- } else if (var3 + 5 < var2 && var0.charAt(var3 + 1) == 'q' && var0.charAt(var3 + 2) == 'u' && var0.charAt(var3 + 3) == 'o' && var0.charAt(var3 + 4) == 't' && var0.charAt(var3 + 5) == ';') {
- var1.append('"');
- var3 += 5;
- } else if (var3 + 4 < var2 && var0.charAt(var3 + 1) == 'a' && var0.charAt(var3 + 2) == 'm' && var0.charAt(var3 + 3) == 'p' && var0.charAt(var3 + 4) == ';') {
- var1.append('&');
- var3 += 4;
- } else {
- var1.append(var0.charAt(var3));
- }
- } else {
- var1.append(var0.charAt(var3));
- }
- }
-
- return var1.toString();
- }
-
- public void parse() {
- if (this.m_is != null) {
- this.parse(this.m_is);
- }
-
- }
-
- public void parse(Reader var1) {
- try {
- BsscXMLTokenizer var2 = new BsscXMLTokenizer(this);
- var2.tokenize(var1);
- var1.close();
- } catch (IOException var3) {
- ((Throwable)var3).printStackTrace();
- }
- }
-
- public void beginElement(String var1) throws BsscXMLException {
- IBsscXMLElementBuilder var2 = BsscXML.createElement(var1);
- if (!this.m_processingElements.empty()) {
- Object var3 = this.m_processingElements.peek();
- if (!(var3 instanceof IBsscXMLElementBuilder)) {
- throw new BsscXMLException("Type Mismatch!");
- }
-
- ((IBsscXMLElementBuilder)var3).addChild(var2);
- var2.setParent((IBsscXMLElementBuilder)var3);
- } else {
- if (this.m_document == null) {
- throw new BsscXMLException("Internal Error!");
- }
-
- this.m_document.setRoot(var2);
- }
-
- this.m_processingElements.push(var2);
- }
-
- public void findValue(String var1) throws BsscXMLException {
- Object var2 = this.m_processingElements.peek();
- if (var2 instanceof IBsscXMLElementBuilder) {
- String var3 = xmlToText(var1);
- ((IBsscXMLElementBuilder)var2).setValue(var3);
- } else {
- throw new BsscXMLException("Type Mismatch!");
- }
- }
-
- public void beginDocument() {
- }
-
- public void endElement(String var1) throws BsscXMLException {
- Object var2 = this.m_processingElements.peek();
- if (var2 instanceof IBsscXMLElementBuilder) {
- if (((IBsscXMLElementBuilder)var2).checkName(var1)) {
- this.m_processingElements.pop();
- } else {
- throw new BsscXMLException("Bad XML Format!");
- }
- } else {
- throw new BsscXMLException("Type Mismatch!");
- }
- }
-
- public BsscXMLParser(IBsscXMLConsumer var1) {
- this.m_document = new BsscXMLDocument();
- ((BsscXMLDocument)this.m_document).addConsumer(var1);
- this.m_processingElements = new Stack();
- }
-
- public void endDocument() throws BsscXMLException {
- if (!this.m_processingElements.empty()) {
- throw new BsscXMLException("Wrong XML Format!");
- } else {
- this.m_document.setReady(true);
- }
- }
-
- public void findAttr(String var1, String var2) throws BsscXMLException {
- Object var3 = this.m_processingElements.peek();
- if (var3 instanceof IBsscXMLElementBuilder) {
- String var4 = xmlToText(var2);
- ((IBsscXMLElementBuilder)var3).setAttribute(var1, var4);
- } else {
- throw new BsscXMLException("Type Mismatch!");
- }
- }
-
- public void run() {
- this.parse();
- }
-
- public void setSource(Reader var1) {
- this.m_is = var1;
- }
- }
-