com.liferay.portal.kernel.portlet.PortletRequestModel.java Source code

Java tutorial

Introduction

Here is the source code for com.liferay.portal.kernel.portlet.PortletRequestModel.java

Source

/**
 * Copyright (c) 2000-present Liferay, Inc. All rights reserved.
 *
 * This library is free software; you can redistribute it and/or modify it under
 * the terms of the GNU Lesser General Public License as published by the Free
 * Software Foundation; either version 2.1 of the License, or (at your option)
 * any later version.
 *
 * This library 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 Lesser General Public License for more
 * details.
 */

package com.liferay.portal.kernel.portlet;

import com.liferay.petra.string.StringPool;
import com.liferay.portal.kernel.log.Log;
import com.liferay.portal.kernel.log.LogFactoryUtil;
import com.liferay.portal.kernel.theme.ThemeDisplay;
import com.liferay.portal.kernel.util.HashMapBuilder;
import com.liferay.portal.kernel.util.HttpUtil;
import com.liferay.portal.kernel.util.StringUtil;
import com.liferay.portal.kernel.util.Validator;
import com.liferay.portal.kernel.util.WebKeys;
import com.liferay.portal.kernel.xml.simple.Element;

import java.io.Serializable;

import java.util.Collection;
import java.util.Enumeration;
import java.util.HashMap;
import java.util.Locale;
import java.util.Map;
import java.util.Set;
import java.util.TimeZone;

import javax.portlet.ActionRequest;
import javax.portlet.MimeResponse;
import javax.portlet.PortletMode;
import javax.portlet.PortletRequest;
import javax.portlet.PortletResponse;
import javax.portlet.PortletSession;
import javax.portlet.PortletURL;
import javax.portlet.RenderRequest;
import javax.portlet.ResourceRequest;
import javax.portlet.ResourceURL;
import javax.portlet.WindowState;
import javax.portlet.WindowStateException;

/**
 * @author Shuyang Zhou
 */
public class PortletRequestModel implements Serializable {

    public PortletRequestModel(PortletRequest portletRequest, PortletResponse portletResponse) {

        _portletRequest = portletRequest;
        _portletResponse = portletResponse;

        _contentType = portletRequest.getResponseContentType();
        _serverName = portletRequest.getServerName();
        _serverPort = portletRequest.getServerPort();
        _secure = portletRequest.isSecure();
        _authType = portletRequest.getAuthType();
        _remoteUser = portletRequest.getRemoteUser();
        _contextPath = portletRequest.getContextPath();
        _locale = portletRequest.getLocale();
        _portletMode = portletRequest.getPortletMode();
        _portletSessionId = portletRequest.getRequestedSessionId();
        _scheme = portletRequest.getScheme();
        _windowState = portletRequest.getWindowState();

        if (portletRequest instanceof ActionRequest) {
            _lifecycle = RenderRequest.ACTION_PHASE;
        } else if (portletRequest instanceof RenderRequest) {
            _lifecycle = RenderRequest.RENDER_PHASE;
        } else if (portletRequest instanceof ResourceRequest) {
            _lifecycle = RenderRequest.RESOURCE_PHASE;
        } else {
            _lifecycle = null;
        }

        if (_portletResponse instanceof MimeResponse) {
            MimeResponse mimeResponse = (MimeResponse) _portletResponse;

            _portletNamespace = mimeResponse.getNamespace();
        } else {
            _portletNamespace = null;
        }

        ThemeDisplay themeDisplay = (ThemeDisplay) portletRequest.getAttribute(WebKeys.THEME_DISPLAY);

        if (themeDisplay != null) {
            _themeDisplayModel = new ThemeDisplayModel(themeDisplay);
        } else {
            _themeDisplayModel = null;
        }
    }

    public String getActionURL() {
        _initURLs();

        return _actionURL;
    }

    public Map<String, Object> getApplicationScopeSessionAttributes() {
        _initPortletSessionAttributes();

        return _applicationScopeSessionAttributes;
    }

    public Map<String, Object> getAttributes() {
        _initAttributes();

        return _attributes;
    }

    public String getAuthType() {
        return _authType;
    }

    public String getContainerNamespace() {
        return _contextPath;
    }

    public String getContentType() {
        return _contentType;
    }

    public String getContextPath() {
        return _contextPath;
    }

    public String getLifecycle() {
        return _lifecycle;
    }

    public Locale getLocale() {
        return _locale;
    }

    public Map<String, String[]> getParameters() {
        _initParameters();

        return _parameters;
    }

    public PortletMode getPortletMode() {
        return _portletMode;
    }

    public String getPortletNamespace() {
        return _portletNamespace;
    }

    public PortletRequest getPortletRequest() {
        return _portletRequest;
    }

    public PortletResponse getPortletResponse() {
        return _portletResponse;
    }

    public Map<String, Object> getPortletScopeSessioAttributes() {
        _initPortletSessionAttributes();

        return _portletScopeSessioAttributes;
    }

    public String getPortletSessionId() {
        return _portletSessionId;
    }

    public String getRemoteUser() {
        return _remoteUser;
    }

    public String getRenderURL() {
        _initURLs();

        return _renderURL;
    }

    public String getRenderURLExclusive() {
        _initURLs();

        return _renderURLExclusive;
    }

    public String getRenderURLMaximized() {
        _initURLs();

        return _renderURLMaximized;
    }

    public String getRenderURLMinimized() {
        _initURLs();

        return _renderURLMinimized;
    }

    public String getRenderURLNormal() {
        _initURLs();

        return _renderURLNormal;
    }

    public String getRenderURLPopUp() {
        _initURLs();

        return _renderURLPopUp;
    }

    public String getResourceURL() {
        _initURLs();

        return _resourceURL;
    }

    public String getScheme() {
        return _scheme;
    }

    public String getServerName() {
        return _serverName;
    }

    public int getServerPort() {
        return _serverPort;
    }

    public ThemeDisplayModel getThemeDisplayModel() {
        return _themeDisplayModel;
    }

    public WindowState getWindowState() {
        return _windowState;
    }

    public boolean isSecure() {
        return _secure;
    }

    public Map<String, Object> toMap() {
        Map<String, Object> portletRequestModelMap = HashMapBuilder.<String, Object>put("auth-type", _authType)
                .put("container-namespace", _contextPath).put("container-type", "portlet")
                .put("content-type", _contentType).put("context-path", _contextPath).put("lifecycle", _lifecycle)
                .put("locale", _locale).put("portlet-mode", _portletMode)
                .put("portlet-session-id", _portletSessionId).put("remote-user", _remoteUser).put("scheme", _scheme)
                .put("secure", _secure).put("server-name", _serverName).put("server-port", _serverPort)
                .put("window-state", _windowState).build();

        if (_portletNamespace != null) {
            portletRequestModelMap.put("portlet-namespace", _portletNamespace);

            _initURLs();

            if (_actionURL != null) {
                portletRequestModelMap.put("action-url", "_actionURL");
            }

            if (_renderURL != null) {
                portletRequestModelMap.put("render-url", _renderURL);

                if (_renderURLExclusive != null) {
                    portletRequestModelMap.put("render-url-exclusive", _renderURLExclusive);
                }

                if (_renderURLMaximized != null) {
                    portletRequestModelMap.put("render-url-maximized", _renderURLMaximized);
                }

                if (_renderURLMinimized != null) {
                    portletRequestModelMap.put("render-url-minimized", _renderURLMinimized);
                }

                if (_renderURLNormal != null) {
                    portletRequestModelMap.put("render-url-normal", _renderURLNormal);
                }

                if (_renderURLPopUp != null) {
                    portletRequestModelMap.put("render-url-pop-up", _renderURLPopUp);
                }
            }

            portletRequestModelMap.put("resource-url", _resourceURL);
        }

        if (_themeDisplayModel != null) {
            Map<String, Object> themeDisplayModelMap = new HashMap<>();

            portletRequestModelMap.put("theme-display", themeDisplayModelMap);

            themeDisplayModelMap.put("cdn-host", _themeDisplayModel.getCdnHost());
            themeDisplayModelMap.put("company-id", _themeDisplayModel.getCompanyId());
            themeDisplayModelMap.put("do-as-user-id", _themeDisplayModel.getDoAsUserId());
            themeDisplayModelMap.put("i18n-language-id", _themeDisplayModel.getI18nLanguageId());
            themeDisplayModelMap.put("i18n-path", _themeDisplayModel.getI18nPath());
            themeDisplayModelMap.put("language-id", _themeDisplayModel.getLanguageId());
            themeDisplayModelMap.put("locale", _themeDisplayModel.getLocale());
            themeDisplayModelMap.put("path-context", _themeDisplayModel.getPathContext());
            themeDisplayModelMap.put("path-friendly-url-private-group",
                    _themeDisplayModel.getPathFriendlyURLPrivateGroup());
            themeDisplayModelMap.put("path-friendly-url-private-user",
                    _themeDisplayModel.getPathFriendlyURLPrivateUser());
            themeDisplayModelMap.put("path-friendly-url-public", _themeDisplayModel.getPathFriendlyURLPublic());
            themeDisplayModelMap.put("path-image", _themeDisplayModel.getPathImage());
            themeDisplayModelMap.put("path-main", _themeDisplayModel.getPathMain());
            themeDisplayModelMap.put("path-theme-images", _themeDisplayModel.getPathThemeImages());
            themeDisplayModelMap.put("plid", _themeDisplayModel.getPlid());
            themeDisplayModelMap.put("portal-url", _themeDisplayModel.getPortalURL());
            themeDisplayModelMap.put("real-user-id", _themeDisplayModel.getRealUserId());
            themeDisplayModelMap.put("scope-group-id", _themeDisplayModel.getScopeGroupId());
            themeDisplayModelMap.put("secure", _themeDisplayModel.isSecure());
            themeDisplayModelMap.put("server-name", _themeDisplayModel.getServerName());
            themeDisplayModelMap.put("server-port", _themeDisplayModel.getServerPort());

            TimeZone timeZone = _themeDisplayModel.getTimeZone();

            themeDisplayModelMap.put("time-zone", timeZone.getID());

            themeDisplayModelMap.put("url-portal", _themeDisplayModel.getURLPortal());
            themeDisplayModelMap.put("user-id", _themeDisplayModel.getUserId());

            PortletDisplayModel portletDisplayModel = _themeDisplayModel.getPortletDisplayModel();

            if (portletDisplayModel != null) {
                Map<String, Object> portletDisplayModelMap = new HashMap<>();

                themeDisplayModelMap.put("portlet-display", portletDisplayModelMap);

                portletDisplayModelMap.put("id", portletDisplayModel.getId());
                portletDisplayModelMap.put("instance-id", portletDisplayModel.getInstanceId());
                portletDisplayModelMap.put("portlet-name", portletDisplayModel.getPortletName());
                portletDisplayModelMap.put("resource-pk", portletDisplayModel.getResourcePK());
                portletDisplayModelMap.put("root-portlet-id", portletDisplayModel.getRootPortletId());
                portletDisplayModelMap.put("title", portletDisplayModel.getTitle());
            }
        }

        portletRequestModelMap.put("parameters", getParameters());

        _attributes = filterInvalidAttributes(getAttributes());

        portletRequestModelMap.put("attributes", _attributes);

        Map<String, Object> portletSessionMap = new HashMap<>();

        portletRequestModelMap.put("portlet-session", portletSessionMap);

        _portletScopeSessioAttributes = filterInvalidAttributes(getPortletScopeSessioAttributes());

        portletSessionMap.put("portlet-attributes", _portletScopeSessioAttributes);

        _applicationScopeSessionAttributes = filterInvalidAttributes(getApplicationScopeSessionAttributes());

        portletSessionMap.put("application-attributes", _applicationScopeSessionAttributes);

        return portletRequestModelMap;
    }

    public String toXML() {
        Element requestElement = new Element("request");

        requestElement.addElement("container-type", "portlet");
        requestElement.addElement("container-namespace", _contextPath);
        requestElement.addElement("content-type", _contentType);
        requestElement.addElement("server-name", _serverName);
        requestElement.addElement("server-port", _serverPort);
        requestElement.addElement("secure", _secure);
        requestElement.addElement("auth-type", _authType);
        requestElement.addElement("remote-user", _remoteUser);
        requestElement.addElement("context-path", _contextPath);
        requestElement.addElement("locale", _locale);
        requestElement.addElement("portlet-mode", _portletMode);
        requestElement.addElement("portlet-session-id", _portletSessionId);
        requestElement.addElement("scheme", _scheme);
        requestElement.addElement("window-state", _windowState);
        requestElement.addElement("lifecycle", _lifecycle);

        if (_portletNamespace != null) {
            requestElement.addElement("portlet-namespace", _portletNamespace);

            _initURLs();

            if (_actionURL != null) {
                requestElement.addElement("action-url", _actionURL);
            }

            if (_renderURL != null) {
                requestElement.addElement("render-url", _renderURL);

                if (_renderURLExclusive != null) {
                    requestElement.addElement("render-url-exclusive", _renderURLExclusive);
                }

                if (_renderURLMaximized != null) {
                    requestElement.addElement("render-url-maximized", _renderURLMaximized);
                }

                if (_renderURLMinimized != null) {
                    requestElement.addElement("render-url-minimized", _renderURLMinimized);
                }

                if (_renderURLNormal != null) {
                    requestElement.addElement("render-url-normal", _renderURLNormal);
                }

                if (_renderURLPopUp != null) {
                    requestElement.addElement("render-url-pop-up", _renderURLPopUp);
                }
            }

            requestElement.addElement("resource-url", _resourceURL);
        }

        if (_themeDisplayModel != null) {
            Element themeDisplayElement = requestElement.addElement("theme-display");

            themeDisplayElement.addElement("cdn-host", _themeDisplayModel.getCdnHost());
            themeDisplayElement.addElement("company-id", _themeDisplayModel.getCompanyId());
            themeDisplayElement.addElement("do-as-user-id", _themeDisplayModel.getDoAsUserId());
            themeDisplayElement.addElement("i18n-language-id", _themeDisplayModel.getI18nLanguageId());
            themeDisplayElement.addElement("i18n-path", _themeDisplayModel.getI18nPath());
            themeDisplayElement.addElement("language-id", _themeDisplayModel.getLanguageId());
            themeDisplayElement.addElement("locale", _themeDisplayModel.getLocale());
            themeDisplayElement.addElement("path-context", _themeDisplayModel.getPathContext());
            themeDisplayElement.addElement("path-friendly-url-private-group",
                    _themeDisplayModel.getPathFriendlyURLPrivateGroup());
            themeDisplayElement.addElement("path-friendly-url-private-user",
                    _themeDisplayModel.getPathFriendlyURLPrivateUser());
            themeDisplayElement.addElement("path-friendly-url-public",
                    _themeDisplayModel.getPathFriendlyURLPublic());
            themeDisplayElement.addElement("path-image", _themeDisplayModel.getPathImage());
            themeDisplayElement.addElement("path-main", _themeDisplayModel.getPathMain());
            themeDisplayElement.addElement("path-theme-images", _themeDisplayModel.getPathThemeImages());
            themeDisplayElement.addElement("plid", _themeDisplayModel.getPlid());
            themeDisplayElement.addElement("portal-url", _themeDisplayModel.getPortalURL());
            themeDisplayElement.addElement("real-user-id", _themeDisplayModel.getRealUserId());
            themeDisplayElement.addElement("scope-group-id", _themeDisplayModel.getScopeGroupId());
            themeDisplayElement.addElement("secure", _themeDisplayModel.isSecure());
            themeDisplayElement.addElement("server-name", _themeDisplayModel.getServerName());
            themeDisplayElement.addElement("server-port", _themeDisplayModel.getServerPort());

            TimeZone timeZone = _themeDisplayModel.getTimeZone();

            themeDisplayElement.addElement("time-zone", timeZone.getID());

            themeDisplayElement.addElement("url-portal", _themeDisplayModel.getURLPortal());
            themeDisplayElement.addElement("user-id", _themeDisplayModel.getUserId());

            PortletDisplayModel portletDisplayModel = _themeDisplayModel.getPortletDisplayModel();

            if (portletDisplayModel != null) {
                Element portletDisplayElement = themeDisplayElement.addElement("portlet-display");

                portletDisplayElement.addElement("id", portletDisplayModel.getId());
                portletDisplayElement.addElement("instance-id", portletDisplayModel.getInstanceId());
                portletDisplayElement.addElement("portlet-name", portletDisplayModel.getPortletName());
                portletDisplayElement.addElement("resource-pk", portletDisplayModel.getResourcePK());
                portletDisplayElement.addElement("root-portlet-id", portletDisplayModel.getRootPortletId());
                portletDisplayElement.addElement("title", portletDisplayModel.getTitle());
            }
        }

        Element parametersElement = requestElement.addElement("parameters");

        Map<String, String[]> parameters = getParameters();

        for (Map.Entry<String, String[]> entry : parameters.entrySet()) {
            Element parameterElement = parametersElement.addElement("parameter");

            parameterElement.addElement("name", entry.getKey());

            for (String value : entry.getValue()) {
                parameterElement.addElement("value", value);
            }
        }

        Element attributesElement = requestElement.addElement("attributes");

        Map<String, Object> attributes = getAttributes();

        for (Map.Entry<String, Object> entry : attributes.entrySet()) {
            String name = entry.getKey();

            if (!_isValidAttributeName(name)) {
                continue;
            }

            Object value = entry.getValue();

            if (!_isValidAttributeValue(value)) {
                continue;
            }

            Element attributeElement = attributesElement.addElement("attribute");

            attributeElement.addElement("name", name);
            attributeElement.addElement("value", value);
        }

        Element portletSessionElement = requestElement.addElement("portlet-session");

        attributesElement = portletSessionElement.addElement("portlet-attributes");

        Map<String, Object> portletScopeSessioAttributes = getPortletScopeSessioAttributes();

        for (Map.Entry<String, Object> entry : portletScopeSessioAttributes.entrySet()) {

            String name = entry.getKey();

            if (!_isValidAttributeName(name)) {
                continue;
            }

            Object value = entry.getValue();

            if (!_isValidAttributeValue(value)) {
                continue;
            }

            Element attributeElement = attributesElement.addElement("attribute");

            attributeElement.addElement("name", name);
            attributeElement.addElement("value", value);
        }

        attributesElement = portletSessionElement.addElement("application-attributes");

        Map<String, Object> applicationScopeSessionAttributes = getApplicationScopeSessionAttributes();

        for (Map.Entry<String, Object> entry : applicationScopeSessionAttributes.entrySet()) {

            String name = entry.getKey();

            if (!_isValidAttributeName(name)) {
                continue;
            }

            Object value = entry.getValue();

            if (!_isValidAttributeValue(value)) {
                continue;
            }

            Element attributeElement = attributesElement.addElement("attribute");

            attributeElement.addElement("name", name);
            attributeElement.addElement("value", value);
        }

        return requestElement.toXMLString();
    }

    protected PortletRequestModel() {
        _authType = null;
        _contentType = null;
        _contextPath = null;
        _lifecycle = null;
        _locale = null;
        _portletMode = null;
        _portletNamespace = null;
        _portletRequest = null;
        _portletResponse = null;
        _portletSessionId = null;
        _remoteUser = null;
        _scheme = null;
        _secure = false;
        _serverName = null;
        _serverPort = 0;
        _themeDisplayModel = null;
        _windowState = null;
    }

    protected Map<String, Object> filterInvalidAttributes(Map<String, Object> map) {

        map = new HashMap<>(map);

        Set<Map.Entry<String, Object>> entrySet = map.entrySet();

        entrySet.removeIf(
                entry -> !_isValidAttributeName(entry.getKey()) || !_isValidAttributeValue(entry.getValue()));

        return map;
    }

    private static boolean _isValidAttributeName(String name) {
        if (StringUtil.equalsIgnoreCase(name, WebKeys.PORTLET_RENDER_PARAMETERS)
                || StringUtil.equalsIgnoreCase(name, "j_password")
                || StringUtil.equalsIgnoreCase(name, "LAYOUT_CONTENT")
                || StringUtil.equalsIgnoreCase(name, "LAYOUTS")
                || StringUtil.equalsIgnoreCase(name, "USER_PASSWORD") || name.startsWith("javax.")
                || name.startsWith("liferay-ui:")) {

            return false;
        }

        return true;
    }

    private static boolean _isValidAttributeValue(Object obj) {
        if (obj == null) {
            return false;
        } else if (obj instanceof Collection<?>) {
            Collection<?> col = (Collection<?>) obj;

            return !col.isEmpty();
        } else if (obj instanceof Map<?, ?>) {
            Map<?, ?> map = (Map<?, ?>) obj;

            return !map.isEmpty();
        } else {
            String objString = String.valueOf(obj);

            if (Validator.isNull(objString)) {
                return false;
            }

            String hashCode = StringPool.AT.concat(StringUtil.toHexString(obj.hashCode()));

            if (objString.endsWith(hashCode)) {
                return false;
            }

            return true;
        }
    }

    private void _initAttributes() {
        if (_attributes != null) {
            return;
        }

        _attributes = new HashMap<>();

        Enumeration<String> enumeration = _portletRequest.getAttributeNames();

        while (enumeration.hasMoreElements()) {
            String name = enumeration.nextElement();

            Object value = _portletRequest.getAttribute(name);

            _attributes.put(name, value);
        }
    }

    private void _initParameters() {
        if (_parameters != null) {
            return;
        }

        _parameters = new HashMap<>(_portletRequest.getParameterMap());
    }

    private void _initPortletSessionAttributes() {
        if (_portletScopeSessioAttributes != null) {
            return;
        }

        PortletSession portletSession = _portletRequest.getPortletSession();

        try {
            _portletScopeSessioAttributes = portletSession.getAttributeMap(PortletSession.PORTLET_SCOPE);

            _applicationScopeSessionAttributes = portletSession.getAttributeMap(PortletSession.APPLICATION_SCOPE);
        } catch (IllegalStateException ise) {
            if (_log.isWarnEnabled()) {
                _log.warn(ise.getMessage());
            }
        }
    }

    private void _initURLs() {
        if ((_resourceURL == null) && (_portletResponse instanceof MimeResponse)) {

            MimeResponse mimeResponse = (MimeResponse) _portletResponse;

            try {
                PortletURL actionURL = mimeResponse.createActionURL();

                _actionURL = actionURL.toString();
            } catch (IllegalStateException ise) {
                if (_log.isWarnEnabled()) {
                    _log.warn(ise.getMessage());
                }
            }

            try {
                PortletURL renderURL = mimeResponse.createRenderURL();

                _renderURL = renderURL.toString();

                try {
                    renderURL.setWindowState(LiferayWindowState.EXCLUSIVE);

                    _renderURLExclusive = renderURL.toString();
                } catch (WindowStateException wse) {
                }

                try {
                    renderURL.setWindowState(LiferayWindowState.MAXIMIZED);

                    _renderURLMaximized = renderURL.toString();
                } catch (WindowStateException wse) {
                }

                try {
                    renderURL.setWindowState(LiferayWindowState.MINIMIZED);

                    _renderURLMinimized = renderURL.toString();
                } catch (WindowStateException wse) {
                }

                try {
                    renderURL.setWindowState(LiferayWindowState.NORMAL);

                    _renderURLNormal = renderURL.toString();
                } catch (WindowStateException wse) {
                }

                try {
                    renderURL.setWindowState(LiferayWindowState.POP_UP);

                    _renderURLPopUp = renderURL.toString();
                } catch (WindowStateException wse) {
                }
            } catch (IllegalStateException ise) {
                if (_log.isWarnEnabled()) {
                    _log.warn(ise.getMessage());
                }
            }

            ResourceURL resourceURL = mimeResponse.createResourceURL();

            String resourceURLString = HttpUtil.removeParameter(resourceURL.toString(),
                    _portletNamespace + "struts_action");

            resourceURLString = HttpUtil.removeParameter(resourceURLString, _portletNamespace + "redirect");

            _resourceURL = resourceURL.toString();
        }
    }

    private static final Log _log = LogFactoryUtil.getLog(PortletRequestModel.class);

    private String _actionURL;
    private Map<String, Object> _applicationScopeSessionAttributes;
    private Map<String, Object> _attributes;
    private final String _authType;
    private final String _contentType;
    private final String _contextPath;
    private final String _lifecycle;
    private final Locale _locale;
    private Map<String, String[]> _parameters;
    private final PortletMode _portletMode;
    private final String _portletNamespace;
    private final PortletRequest _portletRequest;
    private final PortletResponse _portletResponse;
    private Map<String, Object> _portletScopeSessioAttributes;
    private final String _portletSessionId;
    private final String _remoteUser;
    private String _renderURL;
    private String _renderURLExclusive;
    private String _renderURLMaximized;
    private String _renderURLMinimized;
    private String _renderURLNormal;
    private String _renderURLPopUp;
    private String _resourceURL;
    private final String _scheme;
    private final boolean _secure;
    private final String _serverName;
    private final int _serverPort;
    private final ThemeDisplayModel _themeDisplayModel;
    private final WindowState _windowState;

}