Package com.jada.content.template

Source Code of com.jada.content.template.TemplateEngine

/*
* Copyright 2007-2010 JadaSite.

* This file is part of JadaSite.
* JadaSite is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation, either version 3 of the License, or
* (at your option) any later version.

* JadaSite 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 General Public License for more details.

* You should have received a copy of the GNU General Public License
* along with JadaSite.  If not, see <http://www.gnu.org/licenses/>.
*/

package com.jada.content.template;

import java.io.File;
import java.io.StringWriter;
import java.util.Date;
import java.util.Hashtable;
import java.util.Vector;

import javax.persistence.EntityManager;
import javax.servlet.ServletContext;
import javax.servlet.http.HttpServletRequest;

import org.apache.velocity.Template;
import org.apache.velocity.VelocityContext;
import org.apache.velocity.app.VelocityEngine;
import org.apache.velocity.exception.ParseErrorException;
import org.apache.velocity.exception.ResourceNotFoundException;
import org.apache.velocity.runtime.RuntimeConstants;

import com.jada.api.DataApi;
import com.jada.content.ContentBean;
import com.jada.content.ContentFilterBean;
import com.jada.content.ContentLookupDispatchAction;
import com.jada.content.ContentSessionBean;
import com.jada.content.data.CategoryInfo;
import com.jada.content.data.CommentInfo;
import com.jada.content.data.ContactUsInfo;
import com.jada.content.data.ContactUsInfoList;
import com.jada.content.data.ContentApi;
import com.jada.content.data.ContentInfo;
import com.jada.content.data.DataInfo;
import com.jada.content.data.EmptyTemplateInfo;
import com.jada.content.data.ItemComparePageInfo;
import com.jada.content.data.ItemInfo;
import com.jada.content.data.MenuComponentInfo;
import com.jada.content.data.OrderInfo;
import com.jada.content.data.PageHeaderInfo;
import com.jada.content.data.SearchInfo;
import com.jada.content.data.ShoppingCartSummaryInfo;
import com.jada.content.data.SiteInfo;
import com.jada.content.data.SyndicationInfo;
import com.jada.content.frontend.ContentUtility;
import com.jada.dao.ContentDAO;
import com.jada.dao.CustomAttributeDAO;
import com.jada.dao.ItemDAO;
import com.jada.dao.PollHeaderDAO;
import com.jada.dao.SiteDomainDAO;
import com.jada.dao.SyndicationDAO;
import com.jada.jpa.connection.JpaConnection;
import com.jada.jpa.entity.Category;
import com.jada.jpa.entity.CategoryLanguage;
import com.jada.jpa.entity.Comment;
import com.jada.jpa.entity.Content;
import com.jada.jpa.entity.CustomAttribute;
import com.jada.jpa.entity.Customer;
import com.jada.jpa.entity.HomePage;
import com.jada.jpa.entity.HomePageLanguage;
import com.jada.jpa.entity.Item;
import com.jada.jpa.entity.SiteCurrency;
import com.jada.jpa.entity.SiteDomain;
import com.jada.jpa.entity.SiteDomainLanguage;
import com.jada.jpa.entity.SiteProfile;
import com.jada.system.ApplicationGlobal;
import com.jada.system.Languages;
import com.jada.util.Constants;
import com.jada.util.Format;
import com.jada.util.Utility;
import com.jada.xml.site.SiteDomainParamBean;

public class TemplateEngine {
  protected VelocityEngine engine = null;
  protected HttpServletRequest request = null;
  protected ServletContext servletContext = null;
  protected boolean emptyTemplate = false;
  protected SiteDomain siteDomain = null;
  protected SiteDomainLanguage siteDomainLanguage = null;
  protected SiteDomainParamBean siteDomainParamBean = null;
  protected SiteProfile siteProfile = null;
  protected SiteCurrency siteCurrency = null;
  protected String siteName = null;
  protected int pageSize = Constants.DEFAULT_LISTING_PAGE_SIZE;
  protected ContentApi api = null;
  protected SiteInfo siteInfo = null;
  protected Hashtable<String, Object> parameters = new Hashtable<String, Object>();
  protected DataApi dataApi = null;
 
  static String emptyPlaceHolder = "<-!-!-!EMPTYPLACEHOLDER!-!-!->";
    static String REPOST_URLS[][] = {{"/content/checkout/shoppingCart.do.*", "/content/checkout/shoppingCart.do?process=start&prefix=${siteDomainPrefix}"},
                    {"/myaccount/login/myAccountLogin.do.*", "/myaccount/login/myAccountLogin.do?process=start&prefix=${siteDomainPrefix}"},
                    {"/web/fe/.*/contentCommentUpdate/.*", null},
                    {"/web/fe/.*", ""}
                   
                  };
   
    static public TemplateEngine getInstance() throws ClassNotFoundException, InstantiationException, IllegalAccessException {
      String classname = ApplicationGlobal.getTemmplateEngineClassName();
      Class<?> c = Class.forName(classname);
      return (TemplateEngine) c.newInstance();
    }

  public void init(SiteDomain siteDomain, SiteProfile siteProfile, SiteCurrency siteCurrency, ServletContext servletContext) throws Exception {
    emptyTemplate = false;
    this.siteDomain = siteDomain;
    this.servletContext = servletContext;
    initBackground(siteProfile, siteCurrency);
  }
 
  public void init(HttpServletRequest request, ServletContext servletContext) throws Exception {
    init(request, servletContext, false);
  }

  public void init(HttpServletRequest request, ServletContext servletContext, boolean emptyTemplate) throws Exception {
    this.request = request;
    this.servletContext = servletContext;
    this.emptyTemplate = emptyTemplate;
    init();
  }
 
  public void initBackground(SiteProfile siteProfile, SiteCurrency siteCurrency) throws Exception {
    siteDomainLanguage = siteDomain.getSiteDomainLanguage();
    siteDomainParamBean = SiteDomainDAO.getSiteDomainParamBean(siteDomain.getSiteDomainLanguage(), siteDomainLanguage);
    this.siteProfile = siteProfile;
    this.siteCurrency = siteCurrency;
    String value = siteDomainParamBean.getCategoryPageSize();
    if (!Format.isNullOrEmpty(value)) {
      pageSize = Format.getInt(value);
    }
    siteName = siteDomainLanguage.getSiteName();
    if (!siteDomainLanguage.getSiteProfileClass().getSiteProfileClassId().equals(siteProfile.getSiteProfileClass().getSiteProfileClassId())) {
      for (SiteDomainLanguage language : siteDomain.getSiteDomainLanguages()) {
        if (language.getSiteProfileClass().getSiteProfileClassId().equals(siteProfile.getSiteProfileClass().getSiteProfileClassId())) {
          siteDomainLanguage = language;
        }
      }
      if (siteDomainLanguage.getSiteName() != null) {
        siteName = siteDomainLanguage.getSiteName();
      }
    }
    engine = new VelocityEngine();
    engine.setProperty(RuntimeConstants.RUNTIME_LOG_LOGSYSTEM_CLASS, "org.apache.velocity.runtime.log.Log4JLogChute" );

      engine.setProperty("runtime.log.logsystem.log4j.logger", "loggername");

    initResourceLoader();
    dataApi = DataApi.getInstance();
    api = new ContentApi(siteDomain, siteProfile, siteCurrency);
    siteInfo = api.getSite();
  }
 
  public void init() throws Exception {
    ContentBean contentBean = ContentLookupDispatchAction.getContentBean(request);
    siteDomain = contentBean.getContentSessionBean().getSiteDomain();
    siteDomainLanguage = siteDomain.getSiteDomainLanguage();
    siteDomainParamBean = SiteDomainDAO.getSiteDomainParamBean(siteDomain.getSiteDomainLanguage(), siteDomainLanguage);
    this.siteProfile = contentBean.getContentSessionBean().getSiteProfile();
    this.siteCurrency = contentBean.getContentSessionBean().getSiteCurrency();
    String value = siteDomainParamBean.getCategoryPageSize();
    if (!Format.isNullOrEmpty(value)) {
      pageSize = Format.getInt(value);
    }
    siteName = siteDomainLanguage.getSiteName();
    if (!contentBean.getContentSessionBean().isSiteProfileClassDefault()) {
      for (SiteDomainLanguage language : siteDomain.getSiteDomainLanguages()) {
        if (language.getSiteProfileClass().getSiteProfileClassId().equals(contentBean.getContentSessionKey().getSiteProfileClassId())) {
          siteDomainLanguage = language;
        }
      }
      if (siteDomainLanguage.getSiteName() != null) {
        siteName = siteDomainLanguage.getSiteName();
      }
    }
    engine = new VelocityEngine();
    initResourceLoader();
    dataApi = DataApi.getInstance();
    api = new ContentApi(request);
    siteInfo = api.getSite();
  }
 
  public String getTemplateName() {
    String templateName = null;
    if (request != null) {
      templateName = request.getParameter("templateName");
    }
    if (templateName == null) {
      if (siteDomain.getTemplate() != null) {
        templateName = siteDomain.getTemplate().getTemplateName();
      }
    }
    return templateName;
  }
 
  public void initResourceLoader() throws Exception {
    String resourceLoader = "";
      engine.setApplicationAttribute(ServletContext.class.getName(), servletContext);
      String templateName = getTemplateName();
    if (templateName != null && templateName.trim().length() > && !templateName.trim().equals(Constants.TEMPLATE_BASIC)) {
      String templateUrlPrefix = Utility.getTemplatePrefix(siteDomain.getSite(), templateName);
        resourceLoader += "file";
        engine.setProperty("file.resource.loader.class", "org.apache.velocity.runtime.resource.loader.FileResourceLoader");
        engine.setProperty("file.resource.loader.path", templateUrlPrefix);
    }
    if (resourceLoader.length() > 0) {
      resourceLoader += ", ";
    }
    resourceLoader += "webapp";
      engine.setProperty("webapp.resource.loader.class", "org.apache.velocity.tools.view.servlet.WebappLoader");
      engine.setProperty("webapp.resource.loader.path", "/content/template/" + Constants.TEMPLATE_BASIC + "");

      engine.setProperty("resource.loader", resourceLoader);
    engine.init();
  }
 
  protected VelocityContext getDefaultContext() {
    VelocityContext context = new VelocityContext();
    context.put("template", this);
    context.put("siteInfo", siteInfo);
    return context;
  }
 
  public Template getTemplate(String templateName) throws ResourceNotFoundException, ParseErrorException, Exception {
    return engine.getTemplate(templateName);
  }
 
  public String mergeData(String vmName) throws ResourceNotFoundException, ParseErrorException, Exception{
    Template template = engine.getTemplate(vmName);
    VelocityContext context = getDefaultContext();
    StringWriter writer = new StringWriter();
    template.merge(context, writer);
    return writer.toString();
  }
 
  public String mergeData(String vmName, String variableName, Object info) throws ResourceNotFoundException, ParseErrorException, Exception {
    Template template = engine.getTemplate(vmName);
    VelocityContext context = getDefaultContext();
    context.put("template", this);
    context.put(variableName, info);
    StringWriter writer = new StringWriter();
    template.merge(context, writer);
    return writer.toString();
  }
 
  public EmptyTemplateInfo getEmptyTemplateInfo() throws ResourceNotFoundException, ParseErrorException, Exception {
    return getEmptyTemplateInfo("template.vm");
  }
 
  public EmptyTemplateInfo getEmptyPrintTemplateInfo() throws ResourceNotFoundException, ParseErrorException, Exception {
    return getEmptyTemplateInfo("print.vm");
  }
 
  public EmptyTemplateInfo getEmptySecureTemplateInfo() throws ResourceNotFoundException, ParseErrorException, Exception {
    return getEmptyTemplateInfo("templateSecure.vm");
  }
 
  public EmptyTemplateInfo getEmptyTemplateInfo(String vmfile) throws ResourceNotFoundException, ParseErrorException, Exception {
    String data = mergeData(vmfile);
    EmptyTemplateInfo emptyTemplateInfo = new EmptyTemplateInfo();
    emptyTemplateInfo.setTemplatePrefix("");
    emptyTemplateInfo.setTemplateSuffix("");
    int pos = data.indexOf(emptyPlaceHolder);
    if (pos > 0) {
      emptyTemplateInfo.setTemplatePrefix(data.substring(0, pos));
    }
    if (data.length() > pos + emptyPlaceHolder.length()) {
      emptyTemplateInfo.setTemplateSuffix(data.substring(pos + emptyPlaceHolder.length()));
    }
    return emptyTemplateInfo;
  }
 
  public String getRepostURL() throws Exception {
    String url = request.getRequestURI().substring(request.getContextPath().length());
    for (int i = 0; i < REPOST_URLS.length; i++) {
      if (url.matches(REPOST_URLS[i][0])) {
        if (REPOST_URLS[i][1] == null) {
          break;
        }
        if (REPOST_URLS[i][1].length() > 0) {
          return "/" + ApplicationGlobal.getContextPath() + parseRepostURL(REPOST_URLS[i][1]);
        }
        else {
          return "/" + ApplicationGlobal.getContextPath() + url;
        }
      }
    }
    ContentSessionBean sessionBean = ContentLookupDispatchAction.getContentBean(request).getContentSessionBean();
    String result = "/" + ApplicationGlobal.getContextPath() +
            Constants.FRONTEND_URL_PREFIX +
            "/" + sessionBean.getSiteDomain().getSiteDomainPrefix() +
            "/" + sessionBean.getSiteProfile().getSiteProfileClass().getSiteProfileClassName() +
            "/home";
    return result;
  }
 
  public String parseRepostURL(String url) throws Exception {
    ContentBean contentBean = ContentLookupDispatchAction.getContentBean(request);
    ContentSessionBean sessionBean = contentBean.getContentSessionBean();
    url = url.replace("${siteDomainPrefix}", sessionBean.getSiteDomain().getSiteDomainPrefix());
    return url;
  }
 
  public PageHeaderInfo getPageHeader() throws Exception {
    if (isPageHome()) {
      return getPageHomeHeaderInfo();
    }
    else if (isPageContactUs()) {
      return getPageContactUsInfo();
    }
    else if (isPageCategory()) {
      return getPageCategoryInfo();
    }
    else if (isPageItem()) {
      return getPageItemInfo();
    }
    else if (isPageItemComment()) {
      return getPageItemCommentInfo();
    }
    else if (isPageContent()) {
      return getPageContentInfo();
    }
    else if (isPageContentComment()) {
      return getPageContentCommentInfo();
    }
    else if (isPageItemCompare()) {
      return getPageItemCompareInfo();
    }
    else if (isPageSearch()) {
      return getPageSearchInfo();
    }
   
    PageHeaderInfo pageHeaderInfo = new PageHeaderInfo();
    pageHeaderInfo.setPageTitle(siteName);
    pageHeaderInfo.setMetaKeywords(siteName);
    pageHeaderInfo.setMetaDescription(siteName);
    return pageHeaderInfo;
  }
 
  public PageHeaderInfo getPageHomeHeaderInfo() {
    PageHeaderInfo pageHeaderInfo = new PageHeaderInfo();
    ContentBean contentBean = ContentLookupDispatchAction.getContentBean(request);
    HomePage homePage = siteDomain.getHomePage();
    pageHeaderInfo.setPageTitle(siteName);
    pageHeaderInfo.setMetaKeywords(siteName);
    pageHeaderInfo.setMetaDescription(siteName);
    if (!Format.isNullOrEmpty(homePage.getHomePageLanguage().getHomePageTitle())) {
      pageHeaderInfo.setPageTitle(homePage.getHomePageLanguage().getHomePageTitle());
    }
    if (!Format.isNullOrEmpty(homePage.getHomePageLanguage().getMetaKeywords())) {
      pageHeaderInfo.setMetaKeywords(homePage.getHomePageLanguage().getMetaKeywords());
    }
    if (!Format.isNullOrEmpty(homePage.getHomePageLanguage().getMetaDescription())) {
      pageHeaderInfo.setMetaDescription(homePage.getHomePageLanguage().getMetaDescription());
    }
    if (!contentBean.getContentSessionBean().isSiteProfileClassDefault()) {
      for (HomePageLanguage language : homePage.getHomePageLanguages()) {
        if (language.getSiteProfileClass().getSiteProfileClassId().equals(contentBean.getContentSessionKey().getSiteProfileClassId())) {
          if (language.getHomePageTitle() != null) {
            pageHeaderInfo.setPageTitle(language.getHomePageTitle());
          }
          if (language.getMetaKeywords() != null) {
            pageHeaderInfo.setMetaKeywords(language.getMetaKeywords());
          }
          if (language.getMetaDescription() != null) {
            pageHeaderInfo.setMetaDescription(language.getMetaDescription());
          }
          break;
        }
      }
    }
    return pageHeaderInfo;
  }
 
  public PageHeaderInfo getPageCategoryInfo() throws Exception {
    PageHeaderInfo pageHeaderInfo = new PageHeaderInfo();
    String catNaturalKey = getCategoryParameter(request, 3);
    Category category = dataApi.getCategory(siteDomain.getSite().getSiteId(), catNaturalKey);
        if (category == null) {
          pageHeaderInfo.setPageTitle(siteName + " - " + getLanguageByValue("Page not found"));
          pageHeaderInfo.setMetaKeywords("");
          pageHeaderInfo.setMetaDescription("");
          return pageHeaderInfo;
        }
        pageHeaderInfo.setPageTitle(category.getCategoryLanguage().getCatShortTitle());
        if (Format.isNullOrEmpty(category.getCategoryLanguage().getMetaKeywords())) {
          pageHeaderInfo.setMetaKeywords(category.getCategoryLanguage().getCatShortTitle());
        }
        else {
          pageHeaderInfo.setMetaKeywords(category.getCategoryLanguage().getMetaKeywords());
        }
        if (Format.isNullOrEmpty(category.getCategoryLanguage().getMetaDescription())) {
          pageHeaderInfo.setMetaDescription(category.getCategoryLanguage().getCatShortTitle());
        }
        else {
          pageHeaderInfo.setMetaDescription(category.getCategoryLanguage().getMetaDescription());
        }
        ContentBean contentBean = ContentLookupDispatchAction.getContentBean(request);
        if (!contentBean.getContentSessionKey().isSiteProfileClassDefault()) {
          for (CategoryLanguage language : category.getCategoryLanguages()) {
            if (language.getSiteProfileClass().getSiteProfileClassId().equals(contentBean.getContentSessionKey().getSiteProfileClassId())) {
              if (language.getCatShortTitle() != null) {
                pageHeaderInfo.setPageTitle(language.getCatShortTitle());
              }
              if (!Format.isNullOrEmpty(language.getMetaKeywords())) {
                pageHeaderInfo.setMetaKeywords(language.getMetaKeywords());
              }
              if (!Format.isNullOrEmpty(language.getMetaDescription())) {
                pageHeaderInfo.setMetaDescription(language.getMetaDescription());
              }
              break;
            }
          }
        }
    return pageHeaderInfo;
  }
 
  public PageHeaderInfo getPageItemInfo() throws Exception {
    PageHeaderInfo pageHeaderInfo = new PageHeaderInfo();
   
    String itemNaturalKey = getItemKey();
    boolean updateStatistics = false;
    ItemInfo itemInfo = api.getItem(itemNaturalKey, updateStatistics);
    if (itemInfo == null) {
      pageHeaderInfo.setPageTitle(siteName + " - " + getLanguageByValue("Page not found"));
          pageHeaderInfo.setMetaKeywords("");
          pageHeaderInfo.setMetaDescription("");
          return pageHeaderInfo;
    }
    pageHeaderInfo.setPageTitle(itemInfo.getPageTitle());
    pageHeaderInfo.setMetaKeywords(itemInfo.getMetaKeywords());
    pageHeaderInfo.setMetaDescription(itemInfo.getMetaDescription());

    return pageHeaderInfo;
  }
 
  public PageHeaderInfo getPageItemCommentInfo() throws Exception {
    return getPageItemInfo();
  }
 
  public PageHeaderInfo getPageContentInfo() throws Exception {
    PageHeaderInfo pageHeaderInfo = new PageHeaderInfo();
    String contentNaturalKey = getContentKey();
    boolean updateStatistics = false;
    ContentInfo contentInfo = api.getContent(contentNaturalKey, updateStatistics);
    if (contentInfo == null) {
      pageHeaderInfo.setPageTitle(siteName + " - " + getLanguageByValue("Page not found"));
          pageHeaderInfo.setMetaKeywords("");
          pageHeaderInfo.setMetaDescription("");
          return pageHeaderInfo;
    }
   
    pageHeaderInfo.setPageTitle(contentInfo.getPageTitle());
    pageHeaderInfo.setMetaKeywords(contentInfo.getMetaKeywords());
    pageHeaderInfo.setMetaDescription(contentInfo.getMetaDescription());

    return pageHeaderInfo;
  }
 
  public PageHeaderInfo getPageContentCommentInfo() throws Exception {
    return getPageContentInfo();
  }
 
  public PageHeaderInfo getPageContactUsInfo() throws Exception {
    PageHeaderInfo pageHeaderInfo = new PageHeaderInfo();
    String value = getLanguageByValue("Contact Us");
    pageHeaderInfo.setPageTitle(value);
    pageHeaderInfo.setMetaKeywords(value);
    pageHeaderInfo.setMetaDescription(value);
    return pageHeaderInfo;
  }
 
  public PageHeaderInfo getPageItemCompareInfo() throws Exception {
    PageHeaderInfo pageHeaderInfo = new PageHeaderInfo();
    String value = getLanguageByValue("Item Compare");
    pageHeaderInfo.setPageTitle(value);
    pageHeaderInfo.setMetaKeywords(value);
    pageHeaderInfo.setMetaDescription(value);
    return pageHeaderInfo;
  }
 
  public PageHeaderInfo getPageSearchInfo() throws Exception {
    PageHeaderInfo pageHeaderInfo = new PageHeaderInfo();
    String value = getLanguageByValue("Search");
    pageHeaderInfo.setPageTitle(value);
    pageHeaderInfo.setMetaKeywords(value);
    pageHeaderInfo.setMetaDescription(value);
    return pageHeaderInfo;
  }
 
  /*
   * To be deprecated.
   */
 
  /**
     * @deprecated
     * Replace by getPageHeader()
     */
    @Deprecated
  public String getPageTitle() throws Exception {
    if (isPageHome()) {
      return getPageHomeTitle();
    }
    else if (isPageContactUs()) {
      return getPageContactUsTitle();
    }
    else if (isPageContent()) {
      return getPageContentTitle();
    }
    else if (isPageContentComment()) {
      return getPageContentCommentTitle();
    }
    else if (isPageItem()) {
      return getPageItemTitle();
    }
    else if (isPageItemComment()) {
      return getPageItemCommentTitle();
    }
    else if (isPageCategory()) {
      return getPageCategoryTitle();
    }
    else if (isPageItemCompare()) {
      return getPageItemCompareTitle();
    }
    else if (isPageSearch()) {
      return getPageSearchTitle();
    }
    return siteName;
  }
 
  /**
     * @deprecated
     * Calling method getPageTitle() is deprecated.
     */
    @Deprecated
    public String getPageHomeTitle() {
    ContentBean contentBean = ContentLookupDispatchAction.getContentBean(request);
    HomePage homePage = siteDomain.getHomePage();
    String homePageTitle = siteName;
    if (!Format.isNullOrEmpty(homePage.getHomePageLanguage().getHomePageTitle())) {
      homePageTitle = homePage.getHomePageLanguage().getHomePageTitle();
    }
    if (!contentBean.getContentSessionBean().isSiteProfileClassDefault()) {
      for (HomePageLanguage language : homePage.getHomePageLanguages()) {
        if (language.getSiteProfileClass().getSiteProfileClassId().equals(contentBean.getContentSessionKey().getSiteProfileClassId())) {
          if (language.getHomePageTitle() != null) {
            homePageTitle = language.getHomePageTitle();
            break;
          }
        }
      }
    }
    return homePageTitle;
  }
 
  /**
     * @deprecated
     * Calling method getPageTitle() is deprecated.
     */
    @Deprecated
  public String getPageCategoryTitle() throws Exception {
    String catNaturalKey = getCategoryParameter(request, 3);
    Category category = dataApi.getCategory(siteDomain.getSite().getSiteId(), catNaturalKey);
        if (category == null) {
          return siteName + " - " + getLanguageByValue("Page not found");
        }
        String catShortTitle = category.getCategoryLanguage().getCatShortTitle();
        ContentBean contentBean = ContentLookupDispatchAction.getContentBean(request);
        if (!contentBean.getContentSessionKey().isSiteProfileClassDefault()) {
          for (CategoryLanguage language : category.getCategoryLanguages()) {
            if (language.getSiteProfileClass().getSiteProfileClassId().equals(contentBean.getContentSessionKey().getSiteProfileClassId())) {
              if (language.getCatShortTitle() != null) {
                catShortTitle = language.getCatShortTitle();
              }
              break;
            }
          }
        }
        return siteName + " - " + catShortTitle;
  }
 
  /**
     * @deprecated
     * Calling method getPageTitle() is deprecated.
     */
    @Deprecated
  public String getPageItemTitle() throws Exception {
    String itemNaturalKey = getItemKey();
    boolean updateStatistics = false;
    ItemInfo itemInfo = api.getItem(itemNaturalKey, updateStatistics);
    if (itemInfo == null) {
      return siteName + " - " + getLanguageByValue("Page not found");
    }
    return siteName + " - " + itemInfo.getPageTitle();
  }
 
  /**
     * @deprecated
     * Calling method getPageTitle() is deprecated.
     */
    @Deprecated
  public String getPageItemCommentTitle() throws Exception {
    String itemNaturalKey = getItemKey();
    boolean updateStatistics = false;
    ItemInfo itemInfo = api.getItem(itemNaturalKey, updateStatistics);
    return siteName + " - " + itemInfo.getPageTitle();
  }
 
  /**
     * @deprecated
     * Calling method getPageTitle() is deprecated.
     */
    @Deprecated
  public String getPageItemCommentUpdateTitle() throws Exception {
    return getPageItemCommentTitle();
  }
 
  /**
     * @deprecated
     * Calling method getPageTitle() is deprecated.
     */
    @Deprecated
  public String getPageContentTitle() throws Exception {
    String contentNaturalKey = getContentKey();
    boolean updateStatistics = false;
    ContentInfo contentInfo = api.getContent(contentNaturalKey, updateStatistics);
    return siteName + " - " + contentInfo.getPageTitle();
  }
 
  /**
     * @deprecated
     * Calling method getPageTitle() is deprecated.
     */
    @Deprecated
  public String getPageContentCommentTitle() throws Exception {
    return getPageContentTitle();
  }
 
  /**
     * @deprecated
     * Calling method getPageTitle() is deprecated.
     */
    @Deprecated
  public String getPageContentCommentUpdateTitle() {
    return null;
  }
 
  /**
     * @deprecated
     * Calling method getPageTitle() is deprecated.
     */
    @Deprecated
  public String getPageContactUsTitle() throws Exception {
    return siteName + " - " + getLanguageByValue("Contact Us");
  }
 
  /**
     * @deprecated
     * Calling method getPageTitle() is deprecated.
     */
    @Deprecated
  public String getPageSearchTitle() throws Exception {
    return siteName + " - " + getLanguageByValue("Search");
  }
 
  /**
     * @deprecated
     * Calling method getPageTitle() is deprecated.
     */
    @Deprecated
  public String getPageItemCompareTitle() throws Exception {
    return siteName + " - " + getLanguageByValue("Item Compare");
  }
 
  public MenuComponentInfo getHorizontalMenu(String menuSetName, String styleClassSuffix) throws ResourceNotFoundException, ParseErrorException, Exception {
    MenuComponentInfo menuComponentInfo = new MenuComponentInfo();
    /* Generate unique id for yui's div.  Important when rendering 2 menus with the same menuSetName. */
    String menuDivId = ContentUtility.getNextMenuDivId(menuSetName);
    menuComponentInfo.setMenuDivId(menuDivId);
    boolean vertical = false;
    boolean customerSession = ContentLookupDispatchAction.isCustomerSession(request);
    String horizontalMenuCode = ContentUtility.generateMenu(api, menuSetName, menuDivId, vertical, customerSession, styleClassSuffix);
    menuComponentInfo.setMenuCode(horizontalMenuCode);
    return menuComponentInfo;
  }
 
  public MenuComponentInfo getVerticalMenu(String menuSetName, String styleClassSuffix) throws ResourceNotFoundException, ParseErrorException, Exception  {
    MenuComponentInfo menuComponentInfo = new MenuComponentInfo();
    String menuDivId = ContentUtility.getNextMenuDivId(menuSetName);
    menuComponentInfo.setMenuDivId(menuDivId);
    boolean vertical = true;
    boolean customerSession = ContentLookupDispatchAction.isCustomerSession(request);
    String verticalMenuCode = ContentUtility.generateMenu(api, menuSetName, menuDivId, vertical, customerSession, styleClassSuffix);
    menuComponentInfo.setMenuCode(verticalMenuCode);
    return menuComponentInfo;
  }
 
  public DataInfo getHomeFeatureData() throws Exception {
    return api.getHomeFeatureData();
  }
 
  public DataInfo[] getHomeDataInfos() throws Exception {
    return api.getHomeDataInfos();
  }
 
  public ItemInfo[] getMostPopularItems() throws Exception {
    return api.getMostPopularItems(getModuleDisplaySize());
  }
 
  public ContentInfo[] getTopRatedContent() throws Exception {
    return api.getTopRatedContent(getModuleDisplaySize());
  }
 
  public SyndicationInfo[] getSyndications() throws ResourceNotFoundException, ParseErrorException, Exception  {
    return api.getSyndication();
  }
 
  public ContactUsInfoList getContactUs() throws ResourceNotFoundException, ParseErrorException, Exception  {
    ContactUsInfoList contactUsInfoList = new ContactUsInfoList();
    ContactUsInfo[] contactUsInfo = api.getContactUs();
    contactUsInfoList.setContactUsInfos(contactUsInfo);
    String message = request.getParameter("message");
    String messageText = "";
    if (message != null) {
      messageText = this.getLanguage(message);
    }
    contactUsInfoList.setMessageText(messageText);
    return contactUsInfoList;
  }
 
  public ShoppingCartSummaryInfo getShoppingCartSummary() throws ResourceNotFoundException, ParseErrorException, Exception  {
    return api.getShoppingCartSummary(request);
  }
 
  public String getContentKey() throws Exception {
    String contentNaturalKey = Utility.reEncode(getCategoryParameter(request, 2));
    return contentNaturalKey;
  }
 
  public ContentInfo getContent() throws Exception {
    String contentNaturalKey = getContentKey();
    boolean updateStatistics = true;
    ContentInfo contentInfo = api.getContent(contentNaturalKey, updateStatistics);
    return contentInfo;
  }
 
  public ContentInfo[] getRelatedContents() throws Exception {
    return api.getRelatedContent(getContentKey());
  }
 
  public CommentInfo[] getContentComment() throws Exception {
    return api.getContentComment(getContentKey());
  }
 
  public Hashtable<String, String> updateContentComment() throws Exception {
    Customer customer = ContentLookupDispatchAction.getCustomer(request);
    if (customer == null) {
      return null;
    }
   
    String contentNaturalKey = Utility.reEncode(getCategoryParameter(request, 2));
    String commentTitle = request.getParameter("commentTitle");
    commentTitle = Utility.escapeStrictHTML(commentTitle);
    String commentLine = request.getParameter("comment");
    commentLine = Utility.escapeStrictHTML(commentLine);

    Hashtable<String, String> attributes = new Hashtable<String, String>();
    if (Format.isNullOrEmpty(commentTitle)) {
      attributes.put("commentTitleMessage", getLanguage("content.error.string.required"));
    }
    if (Format.isNullOrEmpty(commentLine)) {
      attributes.put("commentMessage", getLanguage("content.error.string.required"));
    }
   
    if (attributes.size() == 0) {
      EntityManager em = JpaConnection.getInstance().getCurrentEntityManager();
      Content content = (Content) ContentDAO.loadNatural(siteDomain.getSite().getSiteId(), contentNaturalKey);
      Comment comment = new Comment();
      comment.setCommentTitle(commentTitle);
      comment.setComment(commentLine);
      comment.setCommentRating(0);
      comment.setActive(Constants.VALUE_YES);
      String custName = customer.getCustEmail();
      if (custName.length() > 20) {
        custName = custName.substring(0, 19);
      }
      comment.setRecCreateBy(custName);
      comment.setRecCreateDatetime(new Date(System.currentTimeMillis()));
      comment.setRecUpdateBy(custName);
      comment.setRecUpdateDatetime(new Date(System.currentTimeMillis()));
      comment.setCustomer(customer);
      comment.setContent(content);
      content.getComments().add(comment);
      em.persist(comment);
     
      attributes.put("commentTitle", "");
      attributes.put("comment", "");
    }
    else {
      attributes.put("commentTitle", commentTitle);
      attributes.put("comment", commentLine);
    }
    return attributes;
  }
 
  public String getItemKey() throws Exception {
    String itemNaturalKey = Utility.reEncode(getCategoryParameter(request, 2));
    return itemNaturalKey;
  }
 
  public ItemInfo getItem() throws Exception {
    String itemNaturalKey = getItemKey();
    boolean updateStatistics = true;
    ItemInfo itemInfo = api.getItem(itemNaturalKey, updateStatistics);
    return itemInfo;
  }
 
  public Hashtable<String, String> updateItemComment() throws Exception {
    Customer customer = ContentLookupDispatchAction.getCustomer(request);
    if (customer == null) {
      return null;
    }
   
    String itemNaturalKey = Utility.reEncode(getCategoryParameter(request, 2));
    String commentTitle = request.getParameter("commentTitle");
    commentTitle = Utility.escapeStrictHTML(commentTitle);
    String commentLine = request.getParameter("comment");
    commentLine = Utility.escapeStrictHTML(commentLine);
    String commentRating = request.getParameter("commentRating");

    Hashtable<String, String> attributes = new Hashtable<String, String>();
    if (Format.isNullOrEmpty(commentTitle)) {
      attributes.put("commentTitleMessage", getLanguage("content.error.string.required"));
    }
    if (Format.isNullOrEmpty(commentLine)) {
      attributes.put("commentMessage", getLanguage("content.error.string.required"));
    }
    if (Format.isNullOrEmpty(commentRating) || commentRating.equals("0")) {
      attributes.put("commentRatingMessage", getLanguage("content.error.string.required"));
    }

    if (attributes.size() == 0) {
      EntityManager em = JpaConnection.getInstance().getCurrentEntityManager();
      Item item = (Item) ItemDAO.loadNatural(siteDomain.getSite().getSiteId(), itemNaturalKey);
      Comment comment = new Comment();
      comment.setCommentTitle(commentTitle);
      comment.setComment(commentLine);
      comment.setCommentRating(Integer.valueOf(commentRating));
      comment.setActive(Constants.VALUE_YES);
      String custName = customer.getCustEmail();
      if (custName.length() > 20) {
        custName = custName.substring(0, 19);
      }
      comment.setRecCreateBy(custName);
      comment.setRecCreateDatetime(new Date(System.currentTimeMillis()));
      comment.setRecUpdateBy(custName);
      comment.setRecUpdateDatetime(new Date(System.currentTimeMillis()));
      comment.setCustomer(customer);
      comment.setItem(item);
      item.getComments().add(comment);
      em.persist(comment);
     
      attributes.put("commentTitle", "");
      attributes.put("comment", "");
      attributes.put("commentRating", "");
    }
    else {
      attributes.put("commentTitle", commentTitle);
      attributes.put("comment", commentLine);
      attributes.put("commentRating", commentRating);
    }
    return attributes;
  }
 
  public CommentInfo[] getItemComment() throws Exception {
    return api.getItemComment(getItemKey());
  }
 
  public ItemInfo[] getRelatedItems() throws Exception {
    return api.getRelatedItems(getItemKey());
  }

  public ItemInfo[] getUpSellItems() throws Exception {
    return api.getUpSellItems(getItemKey());
  }

  public ItemInfo[] getCrossSellItems() throws Exception {
    return api.getCrossSellItems(getItemKey());
  }

  public ItemInfo[] getBundleItems() throws Exception {
    return api.getBundleItems(getItemKey());
  }

  public ItemInfo[] getSkuItems() throws Exception {
    return api.getSkuItems(getItemKey());
  }
 
  public CategoryInfo getCategory() throws Exception {
    String topCatNaturalKey = getCategoryParameter(request, 2);
    String catNaturalKey = getCategoryParameter(request, 3);
   
    String value = request.getParameter("pageNum");
    if (value == null) {
      value = "1";
    }
    int pageNum = Format.getInt(value);
    String sortBy = request.getParameter("sortBy");
    if (sortBy == null) {
      sortBy = "";
    }
    ContentFilterBean contentFilterBeans[] = getContentFilterBeans(request);

    CategoryInfo categoryInfo = api.getCategory(catNaturalKey, topCatNaturalKey, pageSize, Constants.PAGE_NAV_COUNT, pageNum, sortBy, contentFilterBeans);
    return categoryInfo;
  }
 
  public CategoryInfo[] getCategoryTitles() throws Exception {
    String topCatNaturalKey = getCategoryParameter(request, 2);
    String catNaturalKey = getCategoryParameter(request, 3);
   
    CategoryInfo categoryInfos[] = api.getCategoryTitles(catNaturalKey, topCatNaturalKey);
    return categoryInfos;
  }
 
  public CategoryInfo[] getCategoryChildren() throws Exception {
    String topCatNaturalKey = getCategoryParameter(request, 2);
    String catNaturalKey = getCategoryParameter(request, 3);
   
    CategoryInfo categoryInfos[] = api.getCategoryChildren(catNaturalKey, topCatNaturalKey);
    return categoryInfos;
  }
 
  protected ContentFilterBean[] getContentFilterBeans(HttpServletRequest request) throws Exception {
    Vector<ContentFilterBean> vector = new Vector<ContentFilterBean>();
    String filters[] = request.getParameterValues("filter");
    if (filters != null) {
      for (String filter : filters) {
        int pos = filter.indexOf(',');
        String customAttribId = filter.substring(0, pos);
        String customAttribOptionId = filter.substring(pos + 1);
        ContentFilterBean bean = new ContentFilterBean();
        bean.setCustomAttribId(Long.valueOf(customAttribId));
        bean.setCustomAttribOptionId(Long.valueOf(customAttribOptionId));
        CustomAttribute  customAttribute = CustomAttributeDAO.load(siteDomain.getSite().getSiteId(), Long.valueOf(customAttribId));
        bean.setSystemRecord(customAttribute.getSystemRecord());
        vector.add(bean);
      }
    }
    ContentFilterBean contentFilterBeans[] = new ContentFilterBean[vector.size()];
    vector.copyInto(contentFilterBeans);
    return contentFilterBeans;
  }
 
  public ItemComparePageInfo getItemCompare() throws Exception {
    return api.getItemComparePage();
  }
 
  public SearchInfo getSearch() throws Exception {
    String value = (String) request.getParameter("pageNum");
    if (value == null) {
      value = "1";
    }
    int pageNum = Format.getInt(value);
    String query = (String) request.getParameter("query");
    SearchInfo searchInfo = api.getSearch(siteDomain.getSite().getSiteId(), query, pageSize, Constants.PAGE_NAV_COUNT, pageNum);
    return searchInfo;
  }
 
  public OrderInfo getOrder() throws Exception {
    Long orderHeaderId = (Long) parameters.get("orderHeaderId");
    return api.getOrder(orderHeaderId);
  }

  /****************************************************************************/
 
  public String getResourcePrefix(String resource) {
    String prefix = "";
    String resourcePath = Utility.getTemplatePrefix(siteDomain.getSite(), getTemplateName()) + resource;
    File file = new File(resourcePath);
    if (file.exists()) {
      prefix = Utility.getTemplateUrlPrefix(siteDomain.getSite(), getTemplateName()) + resource;
    }
    else {
      prefix = "/" + ApplicationGlobal.getContextPath() + "/content/template/basic/" + resource;
    }
    return prefix;
  }
 
  public String getServletResourcePrefix() {
    return "/" + ApplicationGlobal.getContextPath() + "/content/template";
  }
 
  public String getTemplateResourcePrefix() {
    return Utility.getTemplateUrlPrefix(siteDomain.getSite(), getTemplateName());
  }
 
  public String getContextPath() {
    return ApplicationGlobal.getContextPath();
  }
 
  public String getRequestURL() {
    return request.getRequestURL().toString();
  }
 
  private int getModuleDisplaySize() {
    if (Format.isNullOrEmpty(siteDomainParamBean.getModuleDisplaySize())) {
      return Constants.TEMPLATE_MODULE_DISPLAY_SIZE;
    }
    return Format.getInt(siteDomainParamBean.getModuleDisplaySize());
  }
 
  public String getLanguage(String langTranKey) throws Exception {
    return Languages.getLangTranValue(siteProfile.getSiteProfileClass().getLanguage().getLangId(), langTranKey);
  }
 
  public String getLanguageByValue(String langTranValue) throws Exception {
    return Languages.getLangTranValueByEnglishValue(siteProfile.getSiteProfileClass().getLanguage().getLangId(), langTranValue);
  }
 
  public boolean isPoll() throws Exception {
    return PollHeaderDAO.hasActivePoll(siteDomain.getSite().getSiteId());
  }
 
  public boolean isSyndication() throws Exception {
    return SyndicationDAO.hasSyndication(siteDomain.getSite().getSiteId());
  }
 
  public boolean isCustomerSession() throws Exception {
    return ContentLookupDispatchAction.isCustomerSession(request);
  }
 
  public boolean isShoppingCart() throws Exception {
    ContentBean contentBean = ContentLookupDispatchAction.getContentBean(request);
    SiteCurrency siteCurrency = contentBean.getContentSessionBean().getSiteCurrency();
    if (siteCurrency.getPayPalPaymentGateway() != null) {
      return true;
    }
    if (siteCurrency.getPaymentGateway() != null) {
      return true;
    }
    if (siteCurrency.getCashPayment() == Constants.VALUE_YES) {
      return true;
    }
    return false;
  }
 
  public boolean inCategory(String contentId, String catShortTitle) throws Exception {
    Content content = ContentDAO.load(siteDomain.getSite().getSiteId(), Long.valueOf(contentId));
    for (Category category : content.getCategories()) {
      if (category.getCategoryLanguage().getCatShortTitle().equals(catShortTitle)) {
        return true;
      }
    }
    return false;
  }
 
  public String getCategoryParameter(HttpServletRequest request, int pos) {
    String category = ContentLookupDispatchAction.getCategory(request);
    String tokens[] = category.split("/");
    if (pos > tokens.length - 1) {
      return null;
    }
    return tokens[pos];
  }
 
  public int getCount(Vector<?> vector) {
    if (vector == null) {
      return 0;
    }
    return vector.size();
  }
  public int getCount(Object objects[]) {
    if (objects == null) {
      return 0;
    }
    return objects.length;
  }
  public boolean isEmpty(Vector<?> vector) {
    if (vector == null) {
      return true;
    }
    if (vector.size() > 0) {
      return false;
    }
    return true;
  }
  public boolean isEmpty(Object objects[]) {
    if (objects == null) {
      return true;
    }
    if (objects.length > 0) {
      return false;
    }
    return true;
  }
  public Object getArrayEntry(Object object[], int index) {
    return object[index];
  }
  public Object getParameter(String name) {
    return parameters.get(name);
  }
  public void setParameter(String name, Object value) {
    parameters.put(name, value);
  }
 
  /****************************************************************************/

  public boolean isPageStatic() {
    String categoryName = ContentLookupDispatchAction.getCategoryName(request);
    if (categoryName != null && categoryName.equals(Constants.FRONTEND_URL_STATIC)) {
      return true;
    }
    return false;
  }
  public boolean isPageHome() {
    String categoryName = ContentLookupDispatchAction.getCategoryName(request);
    if (categoryName != null && categoryName.equals(Constants.FRONTEND_URL_HOME)) {
      return true;
    }
    return false;
  }
  public boolean isPageCategory() {
    String categoryName = ContentLookupDispatchAction.getCategoryName(request);
    if (categoryName != null && categoryName.equals(Constants.FRONTEND_URL_SECTION)) {
      return true;
    }
    return false;
  }
  public boolean isPageItem() {
    String categoryName = ContentLookupDispatchAction.getCategoryName(request);
    if (categoryName != null && categoryName.equals(Constants.FRONTEND_URL_ITEM)) {
      return true;
    }
    return false;
  }
  public boolean isPageItemComment() {
    String categoryName = ContentLookupDispatchAction.getCategoryName(request);
    if (categoryName != null && categoryName.equals(Constants.FRONTEND_URL_ITEMCOMMENT)) {
      return true;
    }
    return false;
  }
  public boolean isPageItemCommentUpdate() {
    String categoryName = ContentLookupDispatchAction.getCategoryName(request);
    if (categoryName != null && categoryName.equals(Constants.FRONTEND_URL_ITEMCOMMENTUPDATE)) {
      return true;
    }
    return false;
  }
  public boolean isPageContent() {
    String categoryName = ContentLookupDispatchAction.getCategoryName(request);
    if (categoryName != null && categoryName.equals(Constants.FRONTEND_URL_CONTENT)) {
      return true;
    }
    return false;
  }
  public boolean isPageContentComment() {
    String categoryName = ContentLookupDispatchAction.getCategoryName(request);
    if (categoryName != null && categoryName.equals(Constants.FRONTEND_URL_CONTENTCOMMENT)) {
      return true;
    }
    return false;
  }
  public boolean isPageContentCommentUpdate() {
    String categoryName = ContentLookupDispatchAction.getCategoryName(request);
    if (categoryName != null && categoryName.equals(Constants.FRONTEND_URL_CONTENTCOMMENTUPDATE)) {
      return true;
    }
    return false;
  }
  public boolean isPageContactUs() {
    String categoryName = ContentLookupDispatchAction.getCategoryName(request);
    if (categoryName != null && categoryName.equals(Constants.FRONTEND_URL_CONTACTUS)) {
      return true;
    }
    return false;
  }
  public boolean isPageSearch() {
    String categoryName = ContentLookupDispatchAction.getCategoryName(request);
    if (categoryName != null && categoryName.equals(Constants.FRONTEND_URL_SEARCH)) {
      return true;
    }
    return false;
  }
  public boolean isPageItemCompare() {
    String categoryName = ContentLookupDispatchAction.getCategoryName(request);
    if (categoryName != null && categoryName.equals(Constants.FRONTEND_URL_ITEMCOMPARE)) {
      return true;
    }
    return false;
  }
  public boolean isPageEmpty() {
    return emptyTemplate;
  }
 
  public HttpServletRequest getRequest() {
    return request;
  }

  /****************************************************************************/

}
 
TOP

Related Classes of com.jada.content.template.TemplateEngine

TOP
Copyright © 2018 www.massapi.com. All rights reserved.
All source code are property of their respective owners. Java is a trademark of Sun Microsystems, Inc and owned by ORACLE Inc. Contact coftware#gmail.com.