All Downloads are FREE. Search and download functionalities are using the official Maven repository.

org.zodiac.template.velocity.spring.view.servlet.ServletVelocityViewResolver Maven / Gradle / Ivy

package org.zodiac.template.velocity.spring.view.servlet;

import org.apache.velocity.tools.ToolboxFactory;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.web.servlet.view.AbstractTemplateViewResolver;
import org.springframework.web.servlet.view.AbstractUrlBasedView;
import org.zodiac.template.velocity.spring.view.VelocityViewResolver;

public class ServletVelocityViewResolver extends AbstractTemplateViewResolver implements VelocityViewResolver {

    protected Logger log = LoggerFactory.getLogger(getClass());

    private String dateToolAttribute;

    private String numberToolAttribute;

    private ToolboxFactory toolboxFactory;

    public ServletVelocityViewResolver() {
        setViewClass(requiredViewClass());
    }

    /**
     * Requires {@link ServletVelocityView}.
     */
    @Override
    protected Class requiredViewClass() {
        return ServletVelocityView.class;
    }

    /**
     * Set the name of the DateTool helper object to expose in the Velocity context of this view, or {@code null} if not
     * needed. DateTool is part of Velocity Tools 1.0.
     * 
     * @see org.apache.velocity.tools.generic.DateTool
     * @see ServletVelocityView#setDateToolAttribute
     */
    @Override
    public void setDateToolAttribute(String dateToolAttribute) {
        this.dateToolAttribute = dateToolAttribute;
    }

    /**
     * Set the name of the NumberTool helper object to expose in the Velocity context of this view, or {@code null} if
     * not needed. NumberTool is part of Velocity Tools 1.1.
     * 
     * @see org.apache.velocity.tools.generic.NumberTool
     * @see ServletVelocityView#setNumberToolAttribute
     */
    @Override
    public void setNumberToolAttribute(String numberToolAttribute) {
        this.numberToolAttribute = numberToolAttribute;
    }

    public void setToolboxFactory(ToolboxFactory toolboxFactory) {
        this.toolboxFactory = toolboxFactory;
    }

    @Override
    protected void initApplicationContext() {
        super.initApplicationContext();

        if (this.toolboxFactory != null) {
            if (ServletVelocityView.class == getViewClass()) {
                log.info(
                    "Using ServletVelocityToolboxView instead of default ServletVelocityView due to specified toolboxFactory");
                setViewClass(ServletVelocityToolboxView.class);
            } else if (!ServletVelocityToolboxView.class.isAssignableFrom(getViewClass())) {
                throw new IllegalArgumentException("Given view class [" + getViewClass().getName()
                    + "] is not of type [" + ServletVelocityToolboxView.class.getName()
                    + "], which it needs to be in case of a specified toolboxFactory");
            }
        }
    }

    @Override
    protected AbstractUrlBasedView buildView(String viewName) throws Exception {
        ServletVelocityView view = (ServletVelocityView)super.buildView(viewName);
        view.setDateToolAttribute(this.dateToolAttribute);
        view.setNumberToolAttribute(this.numberToolAttribute);
        if (this.toolboxFactory != null) {
            ((ServletVelocityToolboxView)view).setToolboxFactory(this.toolboxFactory);
        }
        return view;
    }

}




© 2015 - 2025 Weber Informatics LLC | Privacy Policy