package org.itsnat.droid.impl.browser.serveritsnat;
import org.itsnat.droid.ItsNatDroidBrowser;
import org.itsnat.droid.ItsNatSession;
import org.itsnat.droid.Page;
import org.itsnat.droid.impl.browser.ItsNatDroidBrowserImpl;
import org.itsnat.droid.impl.browser.PageImpl;
import org.itsnat.droid.impl.util.MiscUtil;
import java.util.Collections;
import java.util.HashMap;
import java.util.LinkedList;
import java.util.List;
import java.util.Map;
/**
* Created by jmarranz on 10/06/14.
*/
public class ItsNatSessionImpl implements ItsNatSession
{
protected ItsNatDroidBrowserImpl browser;
protected String stdSessionId;
protected String id;
protected String token;
protected Map<String,PageImpl> pageMap = new HashMap<String, PageImpl>( 5 );
protected List<Page> pageList = new LinkedList<Page>();
public ItsNatSessionImpl(ItsNatDroidBrowserImpl browser,String stdSessionId,String token,String id)
{
this.browser = browser;
this.stdSessionId = stdSessionId;
this.token = token;
this.id = id;
}
public ItsNatDroidBrowser getItsNatDroidBrowser()
{
return browser;
}
public String getStandardSessionId()
{
return stdSessionId;
}
public String getId()
{
return id;
}
public String getToken()
{
return token;
}
public int getPageCount()
{
return pageMap.size();
}
public List<Page> getPageList()
{
return Collections.unmodifiableList(pageList);
}
public void registerPage(PageImpl page)
{
PageImpl prev = pageMap.put(page.getId(), page);
if (prev != null && prev != page) throw MiscUtil.internalError();
pageList.add(page);
removeExcess();
}
private void removeExcess()
{
int max = browser.getMaxPagesInSession();
if (max < 0) return; // Ilimitado
int size = pageList.size();
for(int i = 0; i < (size - max); i++)
{
PageImpl page = (PageImpl)pageList.get(0);
disposePage(page);
}
}
public void disposePage(PageImpl page)
{
pageMap.remove(page.getId());
pageList.remove(page);
}
}