/**
* 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.frontend.js.spa.web.internal.servlet.taglib;
import com.liferay.frontend.js.spa.web.internal.servlet.taglib.util.SPAUtil;
import com.liferay.portal.kernel.language.Language;
import com.liferay.portal.kernel.log.Log;
import com.liferay.portal.kernel.servlet.taglib.BaseJSPDynamicInclude;
import com.liferay.portal.kernel.servlet.taglib.DynamicInclude;
import com.liferay.portal.kernel.servlet.taglib.aui.ScriptData;
import com.liferay.portal.kernel.theme.ThemeDisplay;
import com.liferay.portal.kernel.util.GetterUtil;
import com.liferay.portal.kernel.util.Html;
import com.liferay.portal.kernel.util.Props;
import com.liferay.portal.kernel.util.PropsKeys;
import com.liferay.portal.kernel.util.StringPool;
import com.liferay.portal.kernel.util.StringUtil;
import com.liferay.portal.kernel.util.WebKeys;
import java.io.IOException;
import java.util.HashMap;
import java.util.Map;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import org.osgi.service.component.annotations.Component;
import org.osgi.service.component.annotations.Reference;
import org.osgi.service.component.annotations.ReferenceCardinality;
import org.osgi.service.component.annotations.ReferencePolicy;
import org.osgi.service.component.annotations.ReferencePolicyOption;
/**
* @author Bruno Basto
*/
@Component(immediate = true, service = DynamicInclude.class)
public class SPATopHeadJSPDynamicInclude extends BaseJSPDynamicInclude {
@Override
public void include(
HttpServletRequest request, HttpServletResponse response,
String key)
throws IOException {
ScriptData scriptData = new ScriptData();
Map<String, String> values = new HashMap<>();
ThemeDisplay themeDisplay = (ThemeDisplay)request.getAttribute(
WebKeys.THEME_DISPLAY);
values.put(
"cacheExpirationTime",
String.valueOf(
_spaUtil.getCacheExpirationTime(themeDisplay.getCompanyId())));
values.put(
"clearScreensCache",
String.valueOf(
_spaUtil.isClearScreensCache(request, request.getSession())));
values.put("debugEnabled", String.valueOf(_spaUtil.isDebugEnabled()));
values.put("excludedPaths", _spaUtil.getExcludedPaths());
values.put(
"loginRedirect",
_html.escapeJS(_spaUtil.getLoginRedirect(request)));
values.put(
"message",
_language.get(
_spaUtil.getLanguageResourceBundle(themeDisplay.getLocale()),
"it-looks-like-this-is-taking-longer-than-expected"));
values.put(
"navigationExceptionSelectors",
_spaUtil.getNavigationExceptionSelectors());
values.put(
"portletsBlacklist", _spaUtil.getPortletsBlacklist(themeDisplay));
values.put(
"requestTimeout", String.valueOf(_spaUtil.getRequestTimeout()));
values.put(
"timeout", String.valueOf(_spaUtil.getUserNotificationTimeout()));
values.put(
"title",
_language.get(
_spaUtil.getLanguageResourceBundle(themeDisplay.getLocale()),
"oops"));
values.put("validStatusCodes", _spaUtil.getValidStatusCodes());
scriptData.append(
null,
StringUtil.replaceToStringBundler(
_TMPL_CONTENT, StringPool.POUND, StringPool.POUND, values),
"frontend-js-spa-web/liferay/init.es", ScriptData.ModulesType.ES6);
scriptData.writeTo(response.getWriter());
}
@Override
public void register(DynamicIncludeRegistry dynamicIncludeRegistry) {
boolean singlePageApplicationEnabled = GetterUtil.getBoolean(
_props.get(PropsKeys.JAVASCRIPT_SINGLE_PAGE_APPLICATION_ENABLED));
if (singlePageApplicationEnabled) {
dynamicIncludeRegistry.register(
"/html/common/themes/top_head.jsp#post");
}
}
@Override
protected String getJspPath() {
return null;
}
@Override
protected Log getLog() {
return null;
}
@Reference(
cardinality = ReferenceCardinality.OPTIONAL,
policy = ReferencePolicy.DYNAMIC,
policyOption = ReferencePolicyOption.GREEDY
)
protected void setSPAUtil(SPAUtil spaUtil) {
_spaUtil = spaUtil;
}
protected void unsetSPAUtil(SPAUtil spaUtil) {
_spaUtil = null;
}
private static final String _TMPL_CONTENT = StringUtil.read(
SPATopHeadJSPDynamicInclude.class, "/META-INF/resources/init.tmpl");
@Reference
private Html _html;
@Reference
private Language _language;
@Reference
private Props _props;
private SPAUtil _spaUtil;
}