if (pageMaps == null)
{
pageMaps = new HashMap();
usedPages.set(pageMaps);
}
IntHashMap pages = (IntHashMap)pageMaps.get(getName());
if (pages == null)
{
pages = new IntHashMap();
pageMaps.put(getName(), pages);
}
// for now i only get by id.
// does it really make any sense that there are multiply instances of the
// same page are alive in one session??
Page page = (Page)pages.get(id);
if (page != null) return page;
PageVersions pv = null;
if (versionNumber == -1)
{
// when no version was specified, get the last touched page for given page id
for (int index = pageVersions.size() - 1; index >= 0; --index)
{
if (((PageVersions)pageVersions.get(index)).pageid == id)
{
pv = (PageVersions)pageVersions.get(index);
versionNumber = pv.versionid;
break;
}
}
}
String sessionId = getSession().getId();
if (lastPage != null && lastPage.getNumericId() == id)
{
page = lastPage.getVersion(versionNumber);
if (page != null)
{
// ask the page store if it is ready saving the page.
getStore().pageAccessed(sessionId, page);
pages.put(id,page);
return page;
}
}
if (sessionId != null)
{
int ajaxVersionNumber = 0;
if (pv == null)
{
int index = pageVersions.indexOf(new PageVersions(id, versionNumber,-1));
if (index != -1)
{
pv = (PageVersions)pageVersions.get(index);
}
}
if (pv != null)
{
ajaxVersionNumber = pv.ajaxversionid;
}
lastPage = null;
page = getStore().getPage(sessionId, getName(), id, versionNumber, ajaxVersionNumber);
pages.put(id,page);
return page;
}
return null;
}