Example usage for com.liferay.portal.kernel.servlet RequestDispatcherUtil getEffectivePath

List of usage examples for com.liferay.portal.kernel.servlet RequestDispatcherUtil getEffectivePath

Introduction

In this page you can find the example usage for com.liferay.portal.kernel.servlet RequestDispatcherUtil getEffectivePath.

Prototype

public static String getEffectivePath(HttpServletRequest httpServletRequest) 

Source Link

Usage

From source file:com.liferay.frontend.css.rtl.servlet.internal.RTLServlet.java

License:Open Source License

protected URL getResourceURL(HttpServletRequest request) throws IOException {

    String path = URLDecoder.decode(RequestDispatcherUtil.getEffectivePath(request), StringPool.UTF8);

    URL url = _servletContextHelper.getResource(path);

    if (url == null) {
        return null;
    }//w w  w  .j a v  a 2  s. com

    String languageId = request.getParameter("languageId");

    if ((languageId == null) || !PortalUtil.isRightToLeft(request)) {
        if (_log.isDebugEnabled()) {
            _log.debug("Skip because specified language " + languageId + " is not right to left");
        }

        return url;
    }

    String rtlPath = FileUtil.appendSuffix(path, "_rtl");

    URL rtlURL = _servletContextHelper.getResource(rtlPath);

    if (rtlURL != null) {
        return rtlURL;
    }

    File dataFile = _bundle.getDataFile(rtlPath);

    if (dataFile.exists() && (dataFile.lastModified() > url.openConnection().getLastModified())) {

        URI uri = dataFile.toURI();

        return uri.toURL();
    }

    CSSRTLConverter cssRTLConverter = new CSSRTLConverter(false);

    String rtl = cssRTLConverter.process(StringUtil.read(url.openStream()));

    InputStream inputStream = new ByteArrayInputStream(rtl.getBytes(StringPool.UTF8));

    OutputStream outputStream = null;

    try {
        dataFile.getParentFile().mkdirs();

        dataFile.createNewFile();

        outputStream = new FileOutputStream(dataFile);

        StreamUtil.transfer(inputStream, outputStream, false);
    } catch (IOException ioe) {
        if (_log.isWarnEnabled()) {
            _log.warn("Unable to cache RTL CSS", ioe);
        }
    } finally {
        if (outputStream != null) {
            outputStream.close();
        }
    }

    inputStream.reset();

    URI uri = dataFile.toURI();

    return uri.toURL();
}