package p_v.myapplication;

import org.xmlpull.v1.XmlPullParser;
import org.xmlpull.v1.XmlPullParserException;
import org.xmlpull.v1.XmlPullParserFactory;

import java.io.IOException;
import java.io.InputStream;
import java.util.ArrayList;
import java.util.List;

/**
 * Created by p_v on 05.12.2016.
 */

public class XMLParser {

    List<Auta> list_auta;
    private Auta auta;
    private String text;

    public XMLParser() {
        list_auta = new ArrayList<Auta>();
    }

    public List<Auta> vypisAuta() {
        return list_auta;
    }

    public List<Auta> parse(InputStream is) {

        try {
            //vytvorenie implementácie XML Pull Parser
            XmlPullParserFactory factory = XmlPullParserFactory.newInstance();
            //nastavíme podporu XML namespace
            factory.setNamespaceAware(true);
            //objekt XMLPullParser je oproti DOM jednoduchší a efektívnejší
            //XMLPullParser interface vytvorí novú inštanciu XML Pul Parsera
            XmlPullParser parser = factory.newPullParser();
            //nastaví input stream
            parser.setInput(is, null);
            /*
             * metóda getEventTyp() vracia typ objektu, ktorý parser aktuálne prechádza
             * hodnoty:
             *      0 - START_DOCUMENT (zač. stav parseru),
             *      2 - START_TAG (počiatočný TAG XML elementu),
             *      4 - TEXT (textový obsah elementu, hodnota sa načíta pomocou getText()),
             *      3 - END_TAG (koncový tag XML dokukemntu),
             *      1 - END_DOCUMENT (koniec dokumentu)
             * Parser bude v cykle prechádzať medzi krokmi najprv krok:
             *     0 - začiatok XML súboru null
             *     2 - TAG name <auta>
             *     4 - či je za TAG name <auta> nejaký text = nie je
             *     2 - TAG <auto> , vytvorí new Auto
             *     4 - null
             *     2 - TAG name <id>
             *     4 - či je za <id> nejaký text, áno je číslo napr. 1, uloží do premennej text
             *     3 - ukončovací tag <id> , ak je to id, tak nastav setID
             *     4 - null
             *     2 - TAG name <znacka>
             *     4 - text napr. Nissan, uloží text
             *     3 - setZnacka()
             */

            int typ = parser.getEventType();
            while (typ != XmlPullParser.END_DOCUMENT) {
                //zistí sa názov XML TAG
                String tagname = parser.getName();
                switch (typ) {
                    //ak je začínajúci TAG "auto", inak choď na ďalší krok TAG - v tomto kroku ignoruj tagy id, znacka, model
                    case XmlPullParser.START_TAG:
                        if (tagname.equalsIgnoreCase("auto")) {
                            auta = new Auta();
                        }
                        break;
                    //ak sme v kroku TEXT a obsahuje nejaký text, tak ho ulož a pokročuj na ďalšom kroku (next()) - END_TAG
                    case XmlPullParser.TEXT:
                        text = parser.getText();
                        break;
                    case XmlPullParser.END_TAG:
                        if (tagname.equalsIgnoreCase("auto")) {
                            list_auta.add(auta);
                        } else if (tagname.equalsIgnoreCase("id")) {
                            auta.setId(text);
                        } else if (tagname.equalsIgnoreCase("znacka")) {
                            auta.setZnacka(text);
                        } else if (tagname.equalsIgnoreCase("model")) {
                            auta.setModel(text);
                        }
                        break;
                    default:
                        break;
                }
                //next() - posun na ďalší objekt
                typ = parser.next();
            }
        } catch (XmlPullParserException e) {
            e.printStackTrace();
        } catch (IOException e) {
            e.printStackTrace();
        }
        return list_auta;

    }
}
