Package org.springframework.roo.addon.gwt

Source Code of org.springframework.roo.addon.gwt.TemplateResourceLoader

package org.springframework.roo.addon.gwt;

import hapax.Template;
import hapax.TemplateException;
import hapax.TemplateLoader;
import hapax.parser.TemplateParser;

import java.io.IOException;
import java.io.InputStream;
import java.util.HashMap;
import java.util.Map;

import org.apache.commons.io.IOUtils;
import org.apache.commons.lang3.Validate;

/**
* Loads hapax templates from the classpath.
*
* @author Alan Stewart
* @since 1.1
*/
public class TemplateResourceLoader implements TemplateLoader {

    private static final Map<String, Template> cache = new HashMap<String, Template>();
    private static final String TEMPLATE_DIR = "org/springframework/roo/addon/gwt/scaffold/templates/";

    /**
     * Creates a TemplateLoader for CTemplate language using the default
     * template directory
     */
    public static TemplateLoader create() {
        return new TemplateResourceLoader(TEMPLATE_DIR);
    }

    /**
     * Creates a TemplateLoader for CTemplate language
     */
    public static TemplateLoader create(final String base_path) {
        return new TemplateResourceLoader(base_path);
    }

    /**
     * Creates a TemplateLoader using the argument parser.
     */
    public static TemplateLoader createForParser(final String base_path,
            final TemplateParser parser) {
        return new TemplateResourceLoader(base_path, parser);
    }

    protected final String baseDir;

    protected final TemplateParser parser;

    public TemplateResourceLoader(final String baseDir) {
        this(baseDir, null);
    }

    public TemplateResourceLoader(final String baseDir,
            final TemplateParser parser) {
        this.baseDir = baseDir;
        this.parser = parser;
    }

    public Template getTemplate(final String resource) throws TemplateException {
        return getTemplate(new TemplateLoader.Context(this, baseDir), resource);
    }

    public Template getTemplate(final TemplateLoader context, String resource)
            throws TemplateException {
        if (!resource.endsWith(".xtm")) {
            resource += ".xtm";
        }

        final String templatePath = baseDir + resource;
        if (cache.containsKey(templatePath)) {
            return cache.get(templatePath);
        }

        final InputStream inputStream = getClass().getClassLoader()
                .getResourceAsStream(templatePath);
        Validate.notNull(inputStream, "template path required");
        String contents;
        try {
            contents = IOUtils.toString(inputStream);
        }
        catch (final IOException e) {
            throw new IllegalStateException(e);
        }
        finally {
            IOUtils.closeQuietly(inputStream);
        }

        final Template template = parser == null ? new Template(contents,
                context) : new Template(parser, contents, context);

        synchronized (cache) {
            cache.put(templatePath, template);
        }

        return template;
    }

    public String getTemplateDirectory() {
        return baseDir;
    }
}
TOP

Related Classes of org.springframework.roo.addon.gwt.TemplateResourceLoader

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.