/* * Copyright 2000-2013 Enonic AS * http://www.enonic.com/license */ package com.enonic.cms.web.portal.instanttrace; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import javax.servlet.http.HttpSession; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Component; import com.enonic.cms.core.Path; import com.enonic.cms.core.portal.livetrace.LivePortalTraceJsonGenerator; import com.enonic.cms.core.portal.livetrace.PortalRequestTrace; import com.enonic.cms.web.portal.PortalWebContext; import com.enonic.cms.web.portal.handler.WebHandlerBase; @Component public class InstantTraceInfoHandler extends WebHandlerBase { @Autowired private LivePortalTraceJsonGenerator livePortalTraceJsonGenerator; @Override protected boolean canHandle( final Path localPath ) { return InstantTracePathInspector.isTraceInfoPath( localPath ); } @Override protected void doHandle( final PortalWebContext context ) throws Exception { final HttpServletRequest httpRequest = context.getRequest(); final InstantTraceId instantTraceId = InstantTraceRequestInspector.getInstantTraceId( context.getSitePath().getLocalPath() ); final HttpSession httpSession = httpRequest.getSession( false ); if ( httpSession == null ) { return; } final InstantTraceSessionObject instantTraceSessionObject = InstantTraceSessionInspector.getInstantTraceSessionObject( httpSession ); final PortalRequestTrace trace = instantTraceSessionObject.getTrace( instantTraceId ); if ( trace == null ) { return; } final String traceInfo = livePortalTraceJsonGenerator.generate( trace ); final byte[] responseAsBytes = traceInfo.getBytes( "UTF-8" ); final HttpServletResponse httpResponse = context.getResponse(); httpResponse.setContentLength( responseAsBytes.length ); httpResponse.setContentType( "application/json; charset=utf-8" ); httpResponse.getOutputStream().write( responseAsBytes ); } }