All Downloads are FREE. Search and download functionalities are using the official Maven repository.

com.brettonw.bag.XmlParser Maven / Gradle / Ivy

package com.brettonw.bag;

import org.apache.logging.log4j.LogManager;
import org.apache.logging.log4j.Logger;

import java.io.File;
import java.io.IOException;
import java.io.InputStream;

class XmlParser extends Parser {
    private static final Logger log = LogManager.getLogger (XmlParser.class);

    XmlParser (String input) {
        super (input);
    }

    XmlParser (InputStream inputStream) throws IOException {
        super (inputStream);
    }

    XmlParser (File file) throws IOException {
        super (file);
    }

    BagArray readBagArray () {
        //  :: [ ] | [  ]
        BagArray bagArray = new BagArray();
        return (expect('[') && readElements (bagArray) && expect(']')) ? bagArray : null;
    }

    BagObject readBagObject () {
        //  ::= { } | {  }
        BagObject bagObject = new BagObject();
        return (expect('{') && readMembers (bagObject, true) && expect('}')) ? bagObject : null;
    }

    private boolean readElements (BagArray bagArray) {
        //  ::=  |  , 
        Object value = readValue ();
        if (value != null) {
            // special case for "null"
            if ((value instanceof String) && (((String) value).equalsIgnoreCase ("null"))) {
                value = null;
            }
            bagArray.add (value);
            //log.info ((value != null) ? value.toString () : "null");
        }
        //noinspection PointlessBooleanExpression
        return (expect(',') && readElements (bagArray)) || true;
    }

    private boolean readMembers (BagObject bagObject, boolean first) {
        //  ::=  |  , 
        return readPair (bagObject) ? (expect (',') ? readMembers (bagObject, false) : true) : first;
    }

    private boolean readPair (BagObject bagObject) {
        return false;
    }

    private boolean isAllowedBareValue (char c) {
        return (Character.isLetterOrDigit (c)) || (".+-_$".indexOf (c) >= 0);
    }

    private String readString () {
        return "";
    }

    private Object readValue () {
        //  ::=  |  | 
        consumeWhiteSpace ();

        Object value = null;
        return value;
    }
}