CombineTag.java
package sk.iway.iwcm.tags;
import java.util.Date;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.jsp.JspException;
import javax.servlet.jsp.PageContext;
import javax.servlet.jsp.tagext.BodyContent;
import javax.servlet.jsp.tagext.BodyTagSupport;
import sk.iway.iwcm.Constants;
import sk.iway.iwcm.PageLng;
import sk.iway.iwcm.Tools;
import sk.iway.iwcm.doc.TemplateDetails;
import sk.iway.iwcm.i18n.Prop;
/**
* Trieda pre vygenerovanie linky na /admin/scripts/combine.jsp kde je ako verzia uvedeny timestamp startu servera (kvoli efektivite) a aktualny jazyk
*
*@Title Interway Content Management
*@Company Interway s.r.o. (www.interway.sk)
*@Copyright Interway s.r.o. (c) 2001-2002
*@author $Author: jeeff $
*@created $Date: 2015/05/11 16:02:38 $
*/
@SuppressWarnings({"java:S1104", "java:S3008", "java:S1444"})
public final class CombineTag extends BodyTagSupport
{
private static Date versionDateTime = new Date();
private static final long serialVersionUID = -7352999434842740830L;
public static String FILES_ADMIN_JQUERY_JS = "/admin/skins/webjet8/assets/global/plugins/jquery.min.js,"+
"/admin/skins/webjet8/assets/global/plugins/jquery-migrate-3.3.0.min.js,"+
"/admin/skins/webjet8/assets/global/plugins/jquery.browser.min.js,"+
"/admin/skins/webjet8/assets/global/plugins/jquery-ui/jquery-ui.min.js,"+
"/components/_common/javascript/ajax_support.js";
public static String FILES_ADMIN_STANDARD_JS =
"/admin/skins/webjet8/assets/global/plugins/bootstrap/js/popper.min.js,"+
"/admin/skins/webjet8/assets/global/plugins/bootstrap/js/bootstrap.js,"+
"/admin/skins/webjet8/assets/global/plugins/jquery-slimscroll/jquery.slimscroll.js,"+
"/admin/skins/webjet8/assets/global/plugins/jquery.blockui.min.js,"+
"/admin/skins/webjet8/assets/global/plugins/jquery.cokie.min.js,"+
"/admin/skins/webjet8/assets/global/plugins/jstree/dist/jstree.js,"+
"/admin/skins/webjet8/assets/global/plugins/datatables/datatables.js,"+
"/admin/skins/webjet8/assets/global/plugins/jquery-multi-select/js/jquery.multi-select.js,"+
"/admin/skins/webjet8/assets/global/plugins/bootstrap-select/bootstrap-select.js,"+
"/admin/skins/webjet8/assets/global/plugins/bootstrap-datepicker/js/bootstrap-datepicker.js,"+
"/admin/skins/webjet8/assets/global/plugins/bootstrap-datepicker/js/locales/bootstrap-datepicker.USERLANG.js,"+
"/admin/skins/webjet8/assets/global/plugins/bootstrap-timepicker/js/bootstrap-timepicker.min.js,"+
"/admin/skins/webjet8/assets/global/plugins/clockface/js/clockface.js,"+
"/admin/skins/webjet8/assets/global/plugins/bootstrap-daterangepicker/moment.min.js,"+
"/admin/skins/webjet8/assets/global/plugins/bootstrap-daterangepicker/daterangepicker.js,"+
"/components/_common/minicolors/jquery.minicolors.min.js,"+
"/admin/skins/webjet8/assets/global/plugins/bootstrap-datetimepicker/js/bootstrap-datetimepicker.min.js,"+
"/admin/skins/webjet8/assets/global/scripts/metronic.js,"+
"/admin/skins/webjet8/assets/admin/layout/scripts/layout.js,"+
"/admin/skins/webjet8/assets/admin/pages/scripts/components-dropdowns.js";
public static String FILES_ADMIN_STANDARD_CSS = "/admin/skins/webjet8/assets/global/plugins/tabler/css/tabler-icons.min.css,"+
"/admin/skins/webjet8/assets/global/plugins/bootstrap/css/bootstrap.css,"+
"/admin/skins/webjet8/assets/global/plugins/jstree/dist/themes/default/style.min.css,"+
"/admin/skins/webjet8/assets/global/plugins/bootstrap-datepicker/css/datepicker3.css,"+
"/components/_common/minicolors/jquery.minicolors.css,"+
"/admin/skins/webjet8/assets/global/plugins/bootstrap-timepicker/css/bootstrap-timepicker.min.css,"+
"/admin/skins/webjet8/assets/global/css/plugins.css,"+
"/admin/skins/webjet8/assets/global/css/components.css,"+
"/admin/skins/webjet8/assets/admin/pages/css/tasks.css,"+
"/admin/skins/webjet8/assets/admin/layout/css/layout.css,"+
"/admin/skins/webjet8/assets/admin/layout/css/themes/default.css,"+
"/admin/skins/webjet8/assets/admin/layout/css/custom.css,"+
"/admin/skins/webjet8/assets/global/plugins/jquery-multi-select/css/multi-select.css,"+
"/admin/skins/webjet8/assets/global/plugins/datatables/datatables.css,"+
"/admin/skins/webjet8/assets/global/css/custom.css,"+
"/admin/skins/webjet8/assets/global/css/chosen-style.css,"+
"/admin/skins/webjet8/assets/global/css/datatables-editor-style.css,"+
"/admin/skins/webjet8/assets/global/css/new-webjet-style.css";
public static String FILES_ADMIN_LOGON_JS =
"/admin/skins/webjet8/assets/js/zxcvbn/core/zxcvbn-ts.js,"+
"/admin/skins/webjet8/assets/js/zxcvbn/language-common/zxcvbn-ts.js,"+
"/admin/skins/webjet8/assets/js/zxcvbn/language-en/zxcvbn-ts.js";
public static String FILES_ADMIN_INLINE_JS = "/admin/skins/webjet8/ckeditor/dist/ckeditor.js," +
"/admin/skins/webjet8/assets/global/plugins/jquery-ui/jquery-ui.js," +
"/admin/webpages/page-builder/scripts/jquery.minicolors.min.js," +
"/admin/webpages/page-builder/scripts/ninja-page-builder.js.jsp," +
"/admin/webpages/page-builder/scripts/pagesupport.js";
public static String FILES_ADMIN_INLINE_CSS = "/components/_common/admin/inline/inline.css," +
"/admin/webpages/page-builder/style/style.css," +
"/admin/webpages/page-builder/style/jquery.minicolors.css," +
"/admin/skins/webjet8/ckeditor/dist/plugins/webjetcomponents/samples/contents.css," +
"/admin/v9/dist/css/vendor-inline.style.css";
//set oznacuje schovany zoznam suborov pre kombinovanie
private String set = null;
//typ kombinovaneho vystupu (js alebo css)
private String type = null;
private String combine = null;
@Override
public int doEndTag() throws JspException
{
HttpServletRequest request = (HttpServletRequest)pageContext.getRequest();
TemplateDetails temp = (TemplateDetails)request.getAttribute("templateDetails");
if (temp != null) {
request.getSession().setAttribute("templateInstallName", temp.getTemplateInstallName());
}
String lng = getLng(pageContext, request);
boolean combineEnabled = true;
if ("false".equals(request.getParameter("combineEnabled")))
{
combineEnabled = false;
request.getSession().setAttribute("combineEnabled", "false");
}
if ("true".equals(request.getParameter("combineEnabled")))
{
combineEnabled = true;
request.getSession().removeAttribute("combineEnabled");
}
if (request.getSession().getAttribute("combineEnabled")!=null) combineEnabled = false;
//moznost nastavit len pre jeden request
if ("false".equals(request.getParameter("combineEnabledRequest"))) combineEnabled = false;
if ("true".equals(request.getParameter("combineEnabledRequest"))) combineEnabled = true;
if ("false".equals(getCombine())) combineEnabled = false;
try
{
StringBuilder tag = new StringBuilder();
long v = getVersion();
String filesToCombine = getSet();
if (Tools.isEmpty(filesToCombine))
{
BodyContent bc = getBodyContent();
String body = bc.getString();
if (Tools.isNotEmpty(body))
{
filesToCombine = body;
}
}
filesToCombine = removeCrLf(filesToCombine);
filesToCombine = Tools.replace(filesToCombine, "USERLANG", Tools.replace(lng, "cz", "cs"));
String baseCss = (String)request.getAttribute("base_css_link_nocombine");
String cssLink = (String)request.getAttribute("css_link_nocombine");
if (Tools.isNotEmpty(baseCss) || Tools.isNotEmpty(cssLink))
{
filesToCombine = Tools.replace(filesToCombine, "base_css_link", removeCrLf(baseCss));
filesToCombine = Tools.replace(filesToCombine, "css_link", removeCrLf(cssLink));
}
if (combineEnabled)
{
if (filesToCombine.startsWith("admin"))
{
//zobrazenie v admin casti
if ("css".equals(getType()))
{
tag.append("<link href=\"/admin/scripts/combine.jsp?t=css&set=").append(filesToCombine).append("&v=").append(v).append("&lng=").append(lng).append("\" rel=\"stylesheet\" type=\"text/css\"/>");
}
else
{
//MBO: ak vlozi jQuery tak to setne aj do req aby sa uz znova nedal vlozit cez Tool.insertJquery
if (filesToCombine!=null && filesToCombine.startsWith("adminJqueryJs"))
{
Tools.insertJQuery(request);
}
tag.append("<script src=\"/admin/scripts/combine.jsp?t=js&set=").append(filesToCombine).append("&v=").append(v).append("&lng=").append(lng).append("\" type=\"text/javascript\"></script>");
}
}
else
{
//zobrazenie na beznej web stranke
if ("css".equals(getType()))
{
if ("tempCss".equals(filesToCombine))
{
if (Tools.isNotEmpty(baseCss) || Tools.isNotEmpty(cssLink))
{
filesToCombine = baseCss;
if (Tools.isEmpty(filesToCombine)) filesToCombine = cssLink;
else if (Tools.isNotEmpty(cssLink)) filesToCombine = filesToCombine + ","+cssLink;
}
}
tag.append("<link href=\"/components/_common/combine.jsp?t=css&f=").append(filesToCombine).append("&v=").append(v).append("&lng=").append(lng).append("\" rel=\"stylesheet\" type=\"text/css\"/>");
}
else
{
tag.append("<script src=\"/components/_common/combine.jsp?t=js&f=").append(filesToCombine).append("&v=").append(v).append("&lng=").append(lng).append("\" type=\"text/javascript\"></script>");
}
}
}
else
{
String[] files = Tools.getTokens( Tools.replace(getFiles(filesToCombine), "USERLANG", Tools.replace(lng, "cz", "cs")), ",\n");
for (String file : files)
{
if ("css".equals(getType()))
{
tag.append("<link href=\"").append(file).append("?v=").append(v).append("&lng=").append(lng).append("\" rel=\"stylesheet\" type=\"text/css\"/>\n");
}
else
{
tag.append("<script src=\"").append(file).append("?v=").append(v).append("&lng=").append(lng).append("\" type=\"text/javascript\"></script>\n");
}
}
}
pageContext.getOut().write(tag.toString());
}
catch (Exception e)
{
sk.iway.iwcm.Logger.error(e);
}
return(EVAL_PAGE);
}
private String removeCrLf(String set)
{
String newSet = Tools.replace(set, "\n", ",");
newSet = Tools.replace(newSet, "\r", "");
newSet = Tools.replace(newSet, " ", "");
newSet = Tools.replace(newSet, "\t", "");
newSet = Tools.replace(newSet, ",,", ",");
//ked nie je pagefunctions na konci a je to vlozene cez EL tak sa spojja dve dokopy (odstrani sa enter) a vtedy sa to posaha
newSet = Tools.replace(newSet, "page_functions.js.jsp/", "page_functions.js.jsp,/");
return newSet;
}
public static String getFiles(String set)
{
String files = set;
if ("adminJqueryJs".equals(set))
{
files = CombineTag.FILES_ADMIN_JQUERY_JS;
}
else if ("adminJqueryJs2".equals(set))
{
files = CombineTag.FILES_ADMIN_JQUERY_JS;
}
else if ("adminStandardJs".equals(set))
{
files = CombineTag.FILES_ADMIN_STANDARD_JS;
}
else if ("adminLogonJs".equals(set))
{
files = CombineTag.FILES_ADMIN_LOGON_JS;
}
else if ("adminStandardCss".equals(set))
{
files = CombineTag.FILES_ADMIN_STANDARD_CSS;
}
else if ("adminStandardCssWj9".equals(set))
{
files = CombineTag.FILES_ADMIN_STANDARD_CSS;
//files = Tools.replace(files, "/admin/skins/webjet8/assets/global/plugins/font-awesome/css/font-awesome.min.css,", "/admin/skins/webjet8/assets/global/plugins/font-awesome/css/fontawesome5.min.css,");
}
else if ("adminInlineJs".equals(set))
{
files = CombineTag.FILES_ADMIN_INLINE_JS;
}
else if ("adminInlineCss".equals(set))
{
files = CombineTag.FILES_ADMIN_INLINE_CSS;
}
else
{
String constValue = Constants.getString("combine-"+set);
if (Tools.isNotEmpty(constValue)) files = constValue;
}
return files;
}
@Override
public void release()
{
super.release();
this.set = null;
this.type = null;
this.combine = null;
}
public String getSet()
{
return set;
}
public void setSet(String set)
{
this.set = set;
}
public String getType()
{
return type;
}
public void setType(String type)
{
this.type = type;
}
public String getCombine() {
return combine;
}
public void setCombine(String combine) {
this.combine = combine;
}
/**
* Vrati jazyk aktualne prihlaseneho usera, aby sa spravne nacitali cachovane subory (sucast parametra)
* @param pageContext
* @param request
* @return
*/
public static String getLng(PageContext pageContext, HttpServletRequest request)
{
String lng = Constants.getString("defaultLanguage");
if (pageContext.getAttribute("lng")!=null)
{
lng = (String)pageContext.getAttribute("lng");
}
else if (request.getAttribute("PageLng")!=null)
{
lng = (String)request.getAttribute("PageLng");
}
else
{
lng = (String)request.getSession().getAttribute(Prop.SESSION_I18N_PROP_LNG);
if (lng == null)
{
lng = PageLng.getUserLng(request); // sk.iway.iwcm.Constants.getString("defaultLanguage");
}
}
if (Tools.isEmpty(lng)) lng = "sk";
return lng;
}
/**
* Vrati verziu aktualnych suborov, aby sa spravne cachovali subory
* @return
*/
public static long getVersion()
{
return versionDateTime.getTime();
}
public static void setVersion(long version)
{
versionDateTime = new Date(version);
}
public static void resetVersion()
{
versionDateTime = new Date();
}
}