/*
* Copyright 2000-2013 Enonic AS
* http://www.enonic.com/license
*/
package com.enonic.cms.core.portal.datasource.handler.context;
import javax.servlet.http.HttpServletRequest;
import org.apache.commons.lang.StringUtils;
import org.jdom.Document;
import org.jdom.Element;
import org.springframework.stereotype.Component;
import com.enonic.cms.core.portal.datasource.handler.DataSourceRequest;
import com.enonic.cms.core.portal.datasource.handler.base.SimpleDataSourceHandler;
@Component("ds.GetHttpContextHandler")
public final class GetHttpContextHandler
extends SimpleDataSourceHandler
{
public GetHttpContextHandler()
{
super( "getHttpContext" );
}
@Override
public Document handle( final DataSourceRequest req )
throws Exception
{
return new Document( createHttpElement( req.getHttpRequest() ) );
}
private Element createHttpElement( final HttpServletRequest request )
{
final Element httpEl = new Element( "http" );
if ( request != null )
{
httpEl.setAttribute( "action", request.getMethod() );
httpEl.addContent( new Element( "user-agent" ).setText( request.getHeader( "user-agent" ) ) );
httpEl.addContent( new Element( "client-ip" ).setText( request.getRemoteAddr() ) );
httpEl.addContent( new Element( "referer" ).setText( request.getHeader( "referer" ) ) );
// accept
final Element acceptElem = new Element( "accept" );
httpEl.addContent( acceptElem );
// language
final String acceptLanguage = request.getHeader( "accept-language" );
if ( acceptLanguage != null )
{
final String[] languages = StringUtils.split( acceptLanguage, "," );
for ( String languageStr : languages )
{
if ( languageStr.indexOf( ";" ) > 0 )
{
final Element langElem = new Element( "language" );
langElem.setText( languageStr.substring( 0, languageStr.indexOf( ";" ) ) );
langElem.setAttribute( "q", languageStr.substring( languageStr.indexOf( ";" ) + 3 ) );
acceptElem.addContent( langElem );
}
else
{
acceptElem.addContent( new Element( "language" ).setText( languageStr ) );
}
}
}
}
return httpEl;
}
}