/* * Copyright 2000-2013 Enonic AS * http://www.enonic.com/license */ package com.enonic.cms.core.portal.datasource.context; import javax.servlet.http.HttpServletRequest; import org.jdom.Element; import com.enonic.cms.core.RequestParameters; import com.enonic.cms.core.SiteURLResolver; import com.enonic.cms.core.structure.SitePath; /** * Apr 21, 2009 */ final class QueryStringContextXmlCreator { private SiteURLResolver siteURLResolver; public QueryStringContextXmlCreator( SiteURLResolver siteURLResolver ) { this.siteURLResolver = siteURLResolver; } public Element createQueryStringElement( HttpServletRequest request, SitePath originalSitePath, RequestParameters requestParameters ) { Element queryStringElem = new Element( "querystring" ); if ( request != null ) { String server = request.getHeader( "host" ); if ( server == null || "".equals( server ) ) { // Not all browsers provide the host in the header server = request.getServerName(); final int httpPort = 80; if ( request.getServerPort() != httpPort ) { server += ":" + request.getServerPort(); } } queryStringElem.setAttribute( "server", server ); String servletPath = buildServletPathForVerticalContextQueryString( request, originalSitePath ); queryStringElem.setAttribute( "servletpath", servletPath ); String url = buildUrlForVerticalContextQueryString( request, originalSitePath ); queryStringElem.setAttribute( "url", url ); } // Add parameters for ( RequestParameters.Param param : requestParameters.getParameters() ) { if ( !param.isEmpty() && !param.getName().startsWith( "VERTICAL" ) && !param.getName().startsWith( "vertical" ) ) { String[] values = param.getValues(); for ( String value : values ) { Element parameterEl = new Element( "parameter" ).setText( value ); parameterEl.setAttribute( "name", param.getName() ); queryStringElem.addContent( parameterEl ); } } } return queryStringElem; } private String buildServletPathForVerticalContextQueryString( HttpServletRequest request, SitePath originalSitePath ) { return siteURLResolver.createPathWithinContextPath( request, originalSitePath, false ); } private String buildUrlForVerticalContextQueryString( HttpServletRequest request, SitePath originalSitePath ) { return siteURLResolver.createUrl( request, originalSitePath, true ); } }