package org.itsnat.droid.impl.browser.serveritsnat;
import org.itsnat.droid.ItsNatSession;
import org.itsnat.droid.impl.browser.PageImpl;
import org.itsnat.droid.impl.browser.PageRequestImpl;
import org.itsnat.droid.impl.browser.PageRequestResult;
import org.itsnat.droid.impl.dom.DOMAttrRemote;
import org.itsnat.droid.impl.xmlinflated.layout.InflatedXMLLayoutPageItsNatImpl;
import org.itsnat.droid.impl.xmlinflater.layout.page.XMLInflaterLayoutPageItsNat;
import java.util.LinkedList;
/**
* Created by Jose on 11/12/2015.
*/
public class PageItsNatImpl extends PageImpl
{
protected final String itsNatServerVersion; // NO PUEDE SER NULL
protected ItsNatSessionImpl itsNatSession; // itsNatSession es null cuando la página no contiene script de inicialización aunque sea generada por ItsNat
protected String clientId;
public PageItsNatImpl(PageRequestImpl pageRequestToClone, PageRequestResult pageReqResult,String itsNatServerVersion)
{
super(pageRequestToClone, pageReqResult);
this.itsNatServerVersion = itsNatServerVersion;
}
public XMLInflaterLayoutPageItsNat getXMLInflaterLayoutPageItsNat()
{
return (XMLInflaterLayoutPageItsNat)xmlInflaterLayoutPage;
}
public ItsNatDocItsNatImpl getItsNatDocItsNatImpl()
{
return (ItsNatDocItsNatImpl)itsNatDoc;
}
public InflatedXMLLayoutPageItsNatImpl getInflatedXMLLayoutPageItsNatImpl()
{
return (InflatedXMLLayoutPageItsNatImpl)getXMLInflaterLayoutPageItsNat().getInflatedXMLLayoutPageItsNatImpl();
}
@Override
public String getItsNatServerVersion()
{
return itsNatServerVersion;
}
public ItsNatSessionImpl getItsNatSessionImpl()
{
return itsNatSession;
}
@Override
public ItsNatSession getItsNatSession()
{
return itsNatSession;
}
@Override
public String getId()
{
return clientId;
}
@Override
public void finishLoad(PageRequestResult pageReqResult)
{
ItsNatDocItsNatImpl itsNatDoc = getItsNatDocItsNatImpl();
InflatedXMLLayoutPageItsNatImpl inflatedLayoutPage = getXMLInflaterLayoutPageItsNat().getInflatedXMLLayoutPageItsNatImpl();
String loadInitScript = inflatedLayoutPage.getLoadInitScript();
if (loadInitScript != null) // El caso null es cuando se devuelve un layout sin script inicial (layout sin scripting)
{
LinkedList<DOMAttrRemote> attrRemoteListBSParsed = pageReqResult.getAttrRemoteListBSParsed();
itsNatDoc.evalLoadInitScript(loadInitScript, attrRemoteListBSParsed);
// pageReqResult se pierde, se pierde también attrRemoteListBSParsed pero no pasa nada pues sólo se usa una vez
}
if (getId() != null && itsNatDoc.isEventsEnabled()) // Es página generada por ItsNat con scripting y tiene los eventos enabled
itsNatDoc.sendLoadEvent();
else
dispose(); // En el servidor
}
public void setSessionIdAndClientId(String stdSessionId,String sessionToken,String sessionId,String clientId)
{
this.clientId = clientId;
this.itsNatSession = getItsNatDroidBrowserImpl().getItsNatSession(stdSessionId,sessionToken,sessionId);
itsNatSession.registerPage(this);
}
@Override
public void dispose()
{
if (dispose) return;
super.dispose();
ItsNatDocItsNatImpl itsNatDoc = getItsNatDocItsNatImpl();
if (getId() != null && itsNatDoc.isEventsEnabled())
itsNatDoc.sendUnloadEvent();
if (itsNatSession != null) // itsNatSession es null cuando la página no contiene script de inicialización aunque sea generada por ItsNat
{
itsNatSession.disposePage(this);
getItsNatDroidBrowserImpl().disposeSessionIfEmpty(itsNatSession);
}
}
}