/*
* Copyright 2000-2013 Enonic AS
* http://www.enonic.com/license
*/
package com.enonic.cms.core.portal.rendering.tracing;
import java.util.Stack;
/**
* This class implements the abstract render trace context.
*/
public final class TraceContext
{
/**
* Render trace info.
*/
private final RenderTraceInfo info;
/**
* Stack of data trace info.
*/
private final Stack<PagePortletTraceInfo> pageInfoStack;
/**
* Stack of data trace info.
*/
private final Stack<FunctionTraceInfo> functionInfoStack;
/**
* Construct the context.
*/
public TraceContext( RenderTraceInfo info )
{
this.info = info;
this.pageInfoStack = new Stack<PagePortletTraceInfo>();
this.functionInfoStack = new Stack<FunctionTraceInfo>();
}
/**
* Return the render trace info.
*/
public RenderTraceInfo getRenderTraceInfo()
{
return this.info;
}
/**
* Return the page trace info.
*/
public PageTraceInfo getPageTraceInfo()
{
return this.info.getPageInfo();
}
/**
* Add page trace info.
*/
public void setPageTraceInfo( PageTraceInfo info )
{
this.info.setPageInfo( info );
}
/**
* Add page object trace info.
*/
public void pushPageObjectTraceInfo( PagePortletTraceInfo info )
{
PageTraceInfo pageInfo = getPageTraceInfo();
if ( pageInfo != null )
{
pageInfo.addPortlet( info );
}
this.pageInfoStack.push( info );
}
/**
* Pop page object trace info.
*/
public PagePortletTraceInfo popPageObjectTraceInfo()
{
return this.pageInfoStack.pop();
}
/**
* Add page object trace info.
*/
public void pushFunctionTraceInfo( FunctionTraceInfo info )
{
getCurrentDataTraceInfo().addFunction( info );
this.functionInfoStack.push( info );
}
/**
* Pop page object trace info.
*/
public FunctionTraceInfo popFunctionTraceInfo()
{
return this.functionInfoStack.pop();
}
/**
* Return the current data trace info.
*/
public DataTraceInfo getCurrentDataTraceInfo()
{
PagePortletTraceInfo objectInfo = getCurrentPageObjectTraceInfo();
if ( objectInfo != null )
{
return objectInfo;
}
else
{
return this.info.getPageInfo();
}
}
/**
* Return the current page object trace info.
*/
public PagePortletTraceInfo getCurrentPageObjectTraceInfo()
{
if ( !this.pageInfoStack.isEmpty() )
{
return this.pageInfoStack.peek();
}
else
{
return null;
}
}
/**
* Return the current function trace info.
*/
public FunctionTraceInfo getCurrentFunctionTraceInfo()
{
if ( !this.functionInfoStack.isEmpty() )
{
return this.functionInfoStack.peek();
}
else
{
return null;
}
}
}