RenderInvocation renderInvocation = (RenderInvocation)invocation;
//
StateString navigationalState = renderInvocation.getNavigationalState();
Map<String, String[]> publicNavigationalState = renderInvocation.getPublicNavigationalState();
WindowState windowState = renderInvocation.getWindowState();
Mode mode = renderInvocation.getMode();
//
CacheEntry cachedEntry = (CacheEntry)userContext.getAttribute(scopeKey);
//
if (cachedEntry != null)
{
// Check time validity for fragment
boolean useEntry = false;
StateString entryNavigationalState = cachedEntry.navigationalState;
Map<String, String[]> entryPublicNavigationalState = cachedEntry.publicNavigationalState;
// Then check nav state equality
if (navigationalState == null)
{
if (entryNavigationalState == null)
{
useEntry = true;
}
else if (entryNavigationalState instanceof ParametersStateString)
{
// We consider a parameters state string empty equivalent to a null value
useEntry = ((ParametersStateString)entryNavigationalState).getSize() == 0;
}
}
else if (entryNavigationalState == null)
{
if (navigationalState instanceof ParametersStateString)
{
useEntry = ((ParametersStateString)navigationalState).getSize() == 0;
}
}
else
{
useEntry = navigationalState.equals(entryNavigationalState);
}
// Check public nav state equality
if (useEntry)
{
if (publicNavigationalState == null)
{
if (entryPublicNavigationalState == null)
{
//
}
else
{
useEntry = entryPublicNavigationalState.size() == 0;
}
}
else if (entryPublicNavigationalState == null)
{
useEntry = publicNavigationalState.size() == 0;
}
else
{
ParameterMap publicPM = ParameterMap.wrap(publicNavigationalState);
ParameterMap entryPM = ParameterMap.wrap(entryPublicNavigationalState);
useEntry = publicPM.equals(entryPM);
}
}
// Then check window state equality
useEntry &= windowState.equals(cachedEntry.windowState);
// Then check mode equality
useEntry &= mode.equals(cachedEntry.mode);
// Clean if it is null