Package org.springframework.web.servlet.view.cambridge

Source Code of org.springframework.web.servlet.view.cambridge.CambridgeView

package org.springframework.web.servlet.view.cambridge;

import cambridge.ExpressionLanguage;
import cambridge.Template;
import cambridge.TemplateFactory;
import cambridge.runtime.ExpressionContext;
import org.springframework.beans.BeansException;
import org.springframework.beans.factory.BeanFactoryUtils;
import org.springframework.beans.factory.NoSuchBeanDefinitionException;
import org.springframework.context.ApplicationContextException;
import org.springframework.web.servlet.support.RequestContextUtils;
import org.springframework.web.servlet.view.AbstractTemplateView;

import javax.servlet.ServletContext;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.util.Locale;
import java.util.Map;

/**
* @author Erdinc Yilmazel (eyilmazel@tripadvisor.com)
* @since 6/13/13
*/
public class CambridgeView extends AbstractTemplateView
{
    CambridgeConfig cambridgeConfig;

    public CambridgeConfig getCambridgeConfig()
    {
        return cambridgeConfig;
    }

    public void setCambridgeConfig(CambridgeConfig cambridgeConfig)
    {
        this.cambridgeConfig = cambridgeConfig;
    }

    @Override
    protected void renderMergedTemplateModel(Map<String, Object> model, HttpServletRequest request, HttpServletResponse response) throws Exception
    {
        String url = getUrl();

        String templateExtension = cambridgeConfig.getTemplateExtension();
        if (!url.endsWith(templateExtension))
        {
            url = url + "." + templateExtension;
        }

        Locale locale = RequestContextUtils.getLocale(request);

        TemplateFactory templateFactory = cambridgeConfig.getTemplateFactory(url);
        Template template = templateFactory.createTemplate(locale);
        ExpressionContext context = template.getContext();
        context.setVariables(model);
        template.printTo(response.getWriter());
    }

    @Override
    protected void initServletContext(ServletContext servletContext)
    {
        if (cambridgeConfig == null)
        {
            cambridgeConfig = autodetectConfiguration();
        }
    }

    @Override
    protected void initApplicationContext() throws BeansException
    {
        super.initApplicationContext();
    }

    protected CambridgeConfig autodetectConfiguration() throws BeansException
    {
        try
        {
            return BeanFactoryUtils.beanOfTypeIncludingAncestors(
                getApplicationContext(), CambridgeConfig.class, true, false);
        }
        catch (NoSuchBeanDefinitionException ex)
        {
            throw new ApplicationContextException(
                "Must define a single FreeMarkerConfig bean in this web application context " +
                    "(may be inherited): FreeMarkerConfigurer is the usual implementation. " +
                    "This bean may be given any name.", ex);
        }
    }
}
TOP

Related Classes of org.springframework.web.servlet.view.cambridge.CambridgeView

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.