package org.itsnat.droid.impl.browser;
import org.itsnat.droid.impl.dom.DOMAttrRemote;
import org.itsnat.droid.impl.dom.ParsedResource;
import org.itsnat.droid.impl.dom.ResourceDescRemote;
import org.itsnat.droid.impl.dom.XMLDOM;
import org.itsnat.droid.impl.dom.layout.XMLDOMLayoutPage;
import org.itsnat.droid.impl.domparser.XMLDOMParserContext;
import java.util.ArrayList;
import java.util.List;
import java.util.Map;
/**
* Created by jmarranz on 24/01/2016.
*/
public class XMLDOMDownloader
{
protected final XMLDOM xmlDOM;
protected final String pageURLBase;
protected final HttpRequestData httpRequestData;
protected final String itsNatServerVersion;
protected final Map<String,ParsedResource> urlResDownloadedMap;
protected final XMLDOMParserContext xmlDOMParserContext;
public XMLDOMDownloader(XMLDOM xmlDOM,String pageURLBase, HttpRequestData httpRequestData, String itsNatServerVersion,Map<String,ParsedResource> urlResDownloadedMap,
XMLDOMParserContext xmlDOMParserContext)
{
this.xmlDOM = xmlDOM;
this.pageURLBase = pageURLBase;
this.httpRequestData = httpRequestData;
this.itsNatServerVersion = itsNatServerVersion;
this.urlResDownloadedMap = urlResDownloadedMap;
this.xmlDOMParserContext = xmlDOMParserContext;
}
public static XMLDOMDownloader createXMLDOMDownloader(XMLDOM xmlDOM,String pageURLBase, HttpRequestData httpRequestData, String itsNatServerVersion,
Map<String,ParsedResource> urlResDownloadedMap,XMLDOMParserContext xmlDOMParserContext)
{
if (xmlDOM instanceof XMLDOMLayoutPage)
return XMLDOMLayoutPageDownloader.createXMLDOMLayoutPageDownloader((XMLDOMLayoutPage)xmlDOM,pageURLBase,httpRequestData,itsNatServerVersion,urlResDownloadedMap,xmlDOMParserContext);
else
return new XMLDOMDownloaderOther(xmlDOM,pageURLBase,httpRequestData,itsNatServerVersion,urlResDownloadedMap,xmlDOMParserContext);
}
public void downloadRemoteResources() throws Exception
{
List<DOMAttrRemote> attrRemoteList = xmlDOM.getDOMAttrRemoteList();
downloadRemoteAttrResources(attrRemoteList);
}
public void downloadRemoteAttrResources(List<DOMAttrRemote> attrRemoteList) throws Exception
{
if (attrRemoteList != null)
{
List<ResourceDescRemote> resDescRemoteList = new ArrayList<ResourceDescRemote>();
for(DOMAttrRemote attr : attrRemoteList)
{
resDescRemoteList.add(attr.getResourceDescRemote());
}
downloadRemoteResources(resDescRemoteList);
}
}
protected void downloadRemoteResources(List<ResourceDescRemote> resDescRemoteList) throws Exception
{
// llena los elementos de DOMAttrRemote attrRemoteList con el recurso descargado que le corresponde
HttpResourceDownloader resDownloader = new HttpResourceDownloader(pageURLBase, httpRequestData,itsNatServerVersion,urlResDownloadedMap,xmlDOMParserContext);
resDownloader.downloadResources(resDescRemoteList);
}
}