de.blizzy.documentr.web.util.FacadeHostRequestWrapper.java Source code

Java tutorial

Introduction

Here is the source code for de.blizzy.documentr.web.util.FacadeHostRequestWrapper.java

Source

/*
documentr - Edit, maintain, and present software documentation on the web.
Copyright (C) 2012-2013 Maik Schreiber
    
This program is free software: you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
the Free Software Foundation, either version 3 of the License, or
(at your option) any later version.
    
This program is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
GNU General Public License for more details.
    
You should have received a copy of the GNU General Public License
along with this program.  If not, see <http://www.gnu.org/licenses/>.
*/
package de.blizzy.documentr.web.util;

import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletRequestWrapper;

import org.apache.commons.lang3.StringUtils;
import org.springframework.web.util.UriComponentsBuilder;

public class FacadeHostRequestWrapper extends HttpServletRequestWrapper {
    private String documentrHost;

    FacadeHostRequestWrapper(HttpServletRequest request, String documentrHost) {
        super(request);
        this.documentrHost = documentrHost;
    }

    @Override
    public StringBuffer getRequestURL() {
        StringBuffer urlBuf = super.getRequestURL();
        String url = urlBuf.toString();
        String contextPath = getContextPath();
        String facadeUrl = buildFacadeUrl(url, contextPath, documentrHost);
        if (!facadeUrl.equals(url)) {
            return new StringBuffer(facadeUrl);
        } else {
            return urlBuf;
        }
    }

    public static String buildFacadeUrl(String url, String contextPath, String documentrHost) {
        contextPath = StringUtils.defaultIfBlank(contextPath, StringUtils.EMPTY);
        if (contextPath.equals("/")) { //$NON-NLS-1$
            contextPath = StringUtils.EMPTY;
        }

        String newUrl;
        if (StringUtils.isNotBlank(contextPath)) {
            int pos = url.indexOf(contextPath);
            newUrl = documentrHost + url.substring(pos + contextPath.length());
        } else {
            UriComponentsBuilder builder;
            try {
                builder = UriComponentsBuilder.fromHttpUrl(url);
            } catch (IllegalArgumentException e) {
                builder = UriComponentsBuilder.fromUriString(url);
            }
            String path = StringUtils.defaultIfBlank(builder.build().getPath(), StringUtils.EMPTY);
            if (StringUtils.isNotBlank(path)) {
                int pos = StringUtils.lastIndexOf(url, path);
                newUrl = documentrHost + url.substring(pos);
            } else {
                newUrl = documentrHost;
            }
        }
        return newUrl;
    }
}