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

com.whaleal.icefrog.extra.template.engine.wit.WitEngine Maven / Gradle / Ivy

There is a newer version: 1.1.71
Show newest version
package com.whaleal.icefrog.extra.template.engine.wit;

import com.whaleal.icefrog.core.io.FileUtil;
import com.whaleal.icefrog.core.lang.Dict;
import com.whaleal.icefrog.extra.template.Template;
import com.whaleal.icefrog.extra.template.TemplateConfig;
import com.whaleal.icefrog.extra.template.TemplateEngine;
import com.whaleal.icefrog.extra.template.TemplateException;
import org.febit.wit.Engine;
import org.febit.wit.exceptions.ResourceNotFoundException;
import org.febit.wit.util.Props;

import java.io.File;

/**
 * Wit(http://zqq90.github.io/webit-script/)模板引擎封装
 *
 * @author looly
 */
public class WitEngine implements TemplateEngine {

    private Engine engine;

    // --------------------------------------------------------------------------------- Constructor start

    /**
     * 默认构造
     */
    public WitEngine() {
    }

    /**
     * 构造
     *
     * @param config 模板配置
     */
    public WitEngine( TemplateConfig config ) {
        init(config);
    }

    /**
     * 构造
     *
     * @param engine {@link Engine}
     */
    public WitEngine( Engine engine ) {
        init(engine);
    }
    // --------------------------------------------------------------------------------- Constructor end

    /**
     * 创建引擎
     *
     * @param config 模板配置
     * @return {@link Engine}
     */
    private static Engine createEngine( TemplateConfig config ) {
        final Props configProps = Engine.createConfigProps("");
        Dict dict = null;

        if (null != config) {
            dict = Dict.create();
            // 自定义编码
            dict.set("DEFAULT_ENCODING", config.getCharset());

            switch (config.getResourceMode()) {
                case CLASSPATH:
                    configProps.set("pathLoader.root", config.getPath());
                    configProps.set("routeLoader.defaultLoader", "classpathLoader");
                    break;
                case STRING:
                    configProps.set("routeLoader.defaultLoader", "stringLoader");
                    break;
                case FILE:
                    configProps.set("pathLoader.root", config.getPath());
                    configProps.set("routeLoader.defaultLoader", "fileLoader");
                    break;
                case WEB_ROOT:
                    final File root = FileUtil.file(FileUtil.getWebRoot(), config.getPath());
                    configProps.set("pathLoader.root", FileUtil.getAbsolutePath(root));
                    configProps.set("routeLoader.defaultLoader", "fileLoader");
                    break;
            }
        }

        return Engine.create(configProps, dict);
    }

    @Override
    public TemplateEngine init( TemplateConfig config ) {
        init(createEngine(config));
        return this;
    }

    /**
     * 初始化引擎
     *
     * @param engine 引擎
     */
    private void init( Engine engine ) {
        this.engine = engine;
    }

    @Override
    public Template getTemplate( String resource ) {
        if (null == this.engine) {
            init(TemplateConfig.DEFAULT);
        }
        try {
            return WitTemplate.wrap(engine.getTemplate(resource));
        } catch (ResourceNotFoundException e) {
            throw new TemplateException(e);
        }
    }
}




© 2015 - 2025 Weber Informatics LLC | Privacy Policy