package org.smartly.packages.cms.impl.cms.endpoint; import org.apache.velocity.VelocityContext; import org.apache.velocity.app.VelocityEngine; import org.json.JSONObject; import org.smartly.commons.logging.Logger; import org.smartly.commons.util.JsonWrapper; import org.smartly.commons.util.StringUtils; import org.smartly.packages.cms.SmartlyHttpCms; import org.smartly.packages.velocity.impl.VLCManager; /** * */ public class CMSEndPointPage { public static final String NAME = "page"; private static final String VHTML_DIRECTIVE = "<!-- [vhtml] -->"; private final String _url; private final VelocityEngine _vengine; private final VelocityContext _vcontext; private JSONObject _localizations; private String _runtime_on_create; // vhtml/template script to run on context page creation private String _head; // head bottom private String _header; // content header private String _content;// content private String _footer; // content footer private String _script; // custom scripts public CMSEndPointPage(final CMSEndPointPage page, final VelocityEngine engine, final VelocityContext context) { _vcontext = context; _vengine = engine; _url = page._url; _localizations = page._localizations; _runtime_on_create = page._runtime_on_create; _head = page._head; _header = page._header; _content = page._content; _footer = page._footer; _script = page._script; //-- execute scripts to prepare or modify page context --// execScript(_url, _runtime_on_create, _vengine, _vcontext); } public CMSEndPointPage(final String url) { _vcontext = null; _vengine = null; _url = url; } public String getUrl() { return _url; } public String getContent() { if (null != _content && null != _vcontext && null != _vengine && isVhtml(_content)) { return merge(_url, _content, _vengine, _vcontext); } return null != _content ? _content : ""; } public void setContent(String value) { this._content = value; } public String getScript() { if (null != _script && null != _vcontext && null != _vengine && isVhtml(_script)) { return merge(_url, _script, _vengine, _vcontext); } return null != _script ? _script : ""; } public void setScript(String value) { this._script = value; } public String getFooter() { if (null != _footer && null != _vcontext && null != _vengine && isVhtml(_footer)) { return merge(_url, _footer, _vengine, _vcontext); } return null != _footer ? _footer : ""; } public void setFooter(String _footer) { this._footer = _footer; } public String getHead() { if (null != _head && null != _vcontext && null != _vengine && isVhtml(_head)) { return merge(_url, _head, _vengine, _vcontext); } return null != _head ? _head : ""; } public void setHead(String _head) { this._head = _head; } public String getHeader() { if (null != _header && null != _vcontext && null != _vengine && isVhtml(_header)) { return merge(_url, _header, _vengine, _vcontext); } return null != _header ? _header : ""; } public void setHeader(String _header) { this._header = _header; } public void setScriptOnCreate(final String value) { _runtime_on_create = value; } public JSONObject getLocalizations() { return _localizations; } public void setLocalizations(JSONObject _localizations) { this._localizations = _localizations; } public String label(final String lang, final String key) { return JsonWrapper.getString(_localizations, lang.concat(".").concat(key), ""); } public void label(final String lang, final String key, final Object value) { final String deep_key = lang.concat(".").concat(key); // set label and autocreate if any JsonWrapper.put(_localizations, deep_key, null != value ? value.toString() : "", true); } // ------------------------------------------------------------------------ // p r i v a t e // ------------------------------------------------------------------------ private Logger getLogger() { return SmartlyHttpCms.getCMSLogger(); } // -------------------------------------------------------------------- // S T A T I C // -------------------------------------------------------------------- private static boolean isVhtml(final String text) { return StringUtils.hasText(text) && text.length() > VHTML_DIRECTIVE.length() && text.substring(0, VHTML_DIRECTIVE.length()).equalsIgnoreCase(VHTML_DIRECTIVE); } private static String merge(final String url, final String text, final VelocityEngine engine, final VelocityContext context) { try { return VLCManager.getInstance().evaluateText(engine, url, text, context); } catch (Throwable ignored) { } return text; } private static void execScript(final String templateName, final String script, final VelocityEngine engine, final VelocityContext context) { final boolean can_run = null != script && null != context && null != engine; if (can_run) { try { final String response = VLCManager.getInstance().evaluateText(engine, templateName, script, context); } catch (Throwable ignored) { } } } }