/*
* Copyright 2000-2013 Enonic AS
* http://www.enonic.com/license
*/
package com.enonic.cms.core.portal.livetrace;
import org.apache.commons.lang.builder.ToStringBuilder;
import com.enonic.cms.core.PathAndParamsToStringBuilder;
import com.enonic.cms.core.structure.SiteEntity;
import com.enonic.cms.core.structure.SitePath;
/**
* Oct 6, 2010
*/
public final class PortalRequestTrace
extends BaseTrace
implements Trace
{
private long requestNumber;
private long completedNumber = -1;
private HttpRequest httpRequest;
private RequestMode mode;
private MaxLengthedString url = new MaxLengthedString();
private User requester;
private String siteKey;
private String siteName;
private MaxLengthedString siteLocalPathAndParams = new MaxLengthedString();
private MaxLengthedString responseRedirect = new MaxLengthedString();
private MaxLengthedString responseForward = new MaxLengthedString();
private PageRenderingTrace pageRenderingTrace;
private WindowRenderingTrace windowRenderingTrace;
private AttachmentRequestTrace attachmentRequestTrace;
private ImageRequestTrace imageRequestTrace;
private CacheUsages cacheUsages = new CacheUsages();
public PortalRequestTrace( long requestNumber, String url )
{
this.requestNumber = requestNumber;
this.url = new MaxLengthedString( url );
}
public long getRequestNumber()
{
return requestNumber;
}
public long getCompletedNumber()
{
return completedNumber;
}
void setCompletedNumber( long completedNumber )
{
this.completedNumber = completedNumber;
}
@SuppressWarnings("UnusedDeclaration")
public String getUrl()
{
return url != null ? url.toString() : null;
}
@SuppressWarnings("UnusedDeclaration")
public RequestMode getMode()
{
return mode;
}
void setMode( RequestMode mode )
{
this.mode = mode;
}
public String getType()
{
if ( pageRenderingTrace != null )
{
return "P";
}
else if ( windowRenderingTrace != null )
{
return "W";
}
else if ( attachmentRequestTrace != null )
{
return "A";
}
else if ( imageRequestTrace != null )
{
return "I";
}
else
{
return "?";
}
}
@SuppressWarnings("UnusedDeclaration")
public String getTypeDescription()
{
if ( pageRenderingTrace != null )
{
return "Page";
}
else if ( windowRenderingTrace != null )
{
return "Window";
}
else if ( attachmentRequestTrace != null )
{
return "Attachment";
}
else if ( imageRequestTrace != null )
{
return "Image";
}
else
{
return "Unknown";
}
}
@SuppressWarnings("UnusedDeclaration")
public HttpRequest getHttpRequest()
{
return httpRequest;
}
void setHttpRequest( HttpRequest httpRequest )
{
this.httpRequest = httpRequest;
}
@SuppressWarnings("UnusedDeclaration")
public String getSiteKey()
{
return siteKey;
}
@SuppressWarnings("UnusedDeclaration")
public String getSiteName()
{
return siteName;
}
void setSite( SiteEntity site )
{
this.siteKey = site.getKey().toString();
this.siteName = site.getName();
}
void setSitePath( SitePath sitePath )
{
PathAndParamsToStringBuilder stringBuilder = new PathAndParamsToStringBuilder();
this.siteLocalPathAndParams = new MaxLengthedString( stringBuilder.toString( sitePath.getPathAndParams() ) );
}
public String getSiteLocalUrl()
{
return siteLocalPathAndParams != null ? siteLocalPathAndParams.toString() : null;
}
@SuppressWarnings("UnusedDeclaration")
public User getRequester()
{
return requester;
}
void setRequester( User requester )
{
this.requester = requester;
}
@SuppressWarnings("UnusedDeclaration")
public String getResponseRedirect()
{
return responseRedirect != null ? responseRedirect.toString() : null;
}
void setResponseRedirect( String responseRedirect )
{
this.responseRedirect = new MaxLengthedString( responseRedirect );
}
@SuppressWarnings("UnusedDeclaration")
public String getResponseForward()
{
return responseForward != null ? responseForward.toString() : null;
}
void setResponseForward( String responseForward )
{
this.responseForward = new MaxLengthedString( responseForward );
}
public boolean hasPageRenderingTrace()
{
return pageRenderingTrace != null;
}
public PageRenderingTrace getPageRenderingTrace()
{
return pageRenderingTrace;
}
void setPageRenderingTrace( PageRenderingTrace pageRenderingTrace )
{
this.pageRenderingTrace = pageRenderingTrace;
}
void setWindowRenderingTrace( WindowRenderingTrace windowRenderingTrace )
{
this.windowRenderingTrace = windowRenderingTrace;
}
public boolean hasWindowRenderingTrace()
{
return windowRenderingTrace != null;
}
@SuppressWarnings("UnusedDeclaration")
public WindowRenderingTrace getWindowRenderingTrace()
{
return windowRenderingTrace;
}
public boolean hasAttachmentRequsetTrace()
{
return attachmentRequestTrace != null;
}
@SuppressWarnings("UnusedDeclaration")
public AttachmentRequestTrace getAttachmentRequestTrace()
{
return attachmentRequestTrace;
}
void setAttachmentRequestTrace( AttachmentRequestTrace attachmentRequestTrace )
{
this.attachmentRequestTrace = attachmentRequestTrace;
}
public boolean hasImageRequestTrace()
{
return imageRequestTrace != null;
}
@SuppressWarnings("UnusedDeclaration")
public ImageRequestTrace getImageRequestTrace()
{
return imageRequestTrace;
}
void setImageRequestTrace( ImageRequestTrace imageRequestTrace )
{
this.imageRequestTrace = imageRequestTrace;
}
@SuppressWarnings("UnusedDeclaration")
public CacheUsages getCacheUsages()
{
return cacheUsages;
}
void postProcess()
{
if ( imageRequestTrace != null )
{
cacheUsages.add( imageRequestTrace.getCacheUsage() );
}
else if ( windowRenderingTrace != null )
{
cacheUsages.add( windowRenderingTrace.getCacheUsage() );
}
else if ( pageRenderingTrace != null )
{
cacheUsages.add( PageCacheUsagesResolver.resolveCacheUsages( pageRenderingTrace ) );
}
else
{
cacheUsages = new CacheUsages();
}
}
@Override
public boolean equals( Object o )
{
if ( this == o )
{
return true;
}
if ( o == null || getClass() != o.getClass() )
{
return false;
}
PortalRequestTrace that = (PortalRequestTrace) o;
if ( requestNumber != that.requestNumber )
{
return false;
}
return true;
}
@Override
public int hashCode()
{
return (int) ( requestNumber ^ ( requestNumber >>> 32 ) );
}
@Override
public String toString()
{
ToStringBuilder builder = new ToStringBuilder( this );
builder.append( "url", url );
builder.append( "duration", getDuration() );
builder.append( "requester", requester );
return builder.toString();
}
}