package org.itsnat.droid.impl.domparser.layout;
import org.itsnat.droid.impl.dom.DOMElement;
import org.itsnat.droid.impl.dom.XMLDOM;
import org.itsnat.droid.impl.dom.layout.DOMScriptInline;
import org.itsnat.droid.impl.dom.layout.DOMScriptRemote;
import org.itsnat.droid.impl.dom.layout.XMLDOMLayoutPage;
import org.itsnat.droid.impl.domparser.XMLDOMParserContext;
import org.xmlpull.v1.XmlPullParser;
import org.xmlpull.v1.XmlPullParserException;
import java.io.IOException;
/**
* Created by jmarranz on 27/10/14.
*/
public abstract class XMLDOMLayoutParserPage extends XMLDOMLayoutParser
{
protected XMLDOMLayoutParserPage(XMLDOMParserContext xmlDOMParserContext)
{
super(xmlDOMParserContext);
}
@Override
protected DOMElement processElement(String name, DOMElement parentElement, XmlPullParser parser, XMLDOM xmlDOM) throws IOException, XmlPullParserException
{
if (name.equals("script"))
{
parseScriptElement(parser,(XMLDOMLayoutPage)xmlDOM);
return null; // Ignorar porque "desaparece"
}
else
return super.processElement(name,parentElement,parser, xmlDOM);
}
protected void parseScriptElement(XmlPullParser parser, XMLDOMLayoutPage xmlDOM) throws IOException, XmlPullParserException
{
String src = findAttributeFromParser(null, "src", parser);
if (src != null)
{
addDOMScriptRemote(src, xmlDOM);
}
else
{
addDOMScriptInline(parser, xmlDOM);
}
while (parser.next() != XmlPullParser.END_TAG) /*nop*/ ;
}
protected void addDOMScriptRemote(String src, XMLDOMLayoutPage xmlDOM)
{
// Si loadingPage es true es el caso de carga de página, pero si serverVersion es null dicha página
// NO es servida por ItsNat, tenemos que cargar asíncronamente el archivo script pues este es el hilo UI :(
// Si loadInitScript es null estamos en un evento (inserción de un fragment)
DOMScriptRemote script = new DOMScriptRemote(src);
xmlDOM.addDOMScript(script);
}
protected void addDOMScriptInline(XmlPullParser parser, XMLDOMLayoutPage xmlDOM) throws IOException, XmlPullParserException
{
while (parser.next() != XmlPullParser.TEXT) /*nop*/ ;
String code = parser.getText();
DOMScriptInline script = new DOMScriptInline(code);
xmlDOM.addDOMScript(script);
}
}