Package httl.web.webx

Source Code of httl.web.webx.HttlEngine

/*
* Copyright 2011-2013 HTTL Team. Licensed under the Apache License, Version 2.0 (the "License"); you may not use this
* file except in compliance with the License. You may obtain a copy of the License at
* http://www.apache.org/licenses/LICENSE-2.0 Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND,
* either express or implied. See the License for the specific language governing permissions and limitations under the
* License.
*/
package httl.web.webx;

import httl.web.WebEngine;

import java.io.IOException;
import java.io.OutputStream;
import java.io.StringWriter;
import java.io.Writer;
import java.text.ParseException;
import java.util.Map;

import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

import com.alibaba.citrus.service.template.TemplateContext;
import com.alibaba.citrus.service.template.TemplateEngine;
import com.alibaba.citrus.service.template.TemplateException;
import com.alibaba.citrus.turbine.TurbineRunData;
import com.alibaba.citrus.util.StringUtil;

/**
* HttlEngine. (Integration, Singleton, ThreadSafe)
*
* @author Liang Fei (liangfei0201 AT gmail DOT com)
*/
public class HttlEngine implements TemplateEngine {

    private String path;

    private String templateSuffix = ".httl";

    private String templateEncoding;

    public void setPath(String path) {
        this.path = path;
    }

    public void setTemplateEncoding(String templateEncoding) {
        this.templateEncoding = templateEncoding;
    }

    public void setAdvancedProperties(Map<String, String> configuration) {
        if (configuration.containsKey("template.suffix")) {
            this.templateSuffix = configuration.get("template.suffix");
        }
        for (Map.Entry<String, String> entry : configuration.entrySet()) {
            WebEngine.setProperty(entry.getKey(), entry.getValue());
        }
    }

    public String[] getDefaultExtensions() {
        return new String[] { StringUtil.substringAfter(getTemplateSuffix(), ".") };
    }

    private String getTemplatePath(String name) {
        if (path == null) {
            return name;
        } else {
            return path + name;
        }
    }

    public boolean exists(String templateName) {
        if (WebEngine.getServletContext() == null) {
            return templateName.endsWith(getTemplateSuffix());
        }
        return WebEngine.getEngine().hasResource(getTemplatePath(templateName));
    }

    private String getTemplateSuffix() {
        return this.templateSuffix;
    }

    public String getText(String templateName, TemplateContext context) throws TemplateException, IOException {
        StringWriter writer = new StringWriter();
        writeTo(templateName, context, writer);
        return writer.toString();
    }

    public void writeTo(String templateName, TemplateContext templateContext, OutputStream ostream) throws TemplateException, IOException {
        doWriteTo(templateName, templateContext, ostream);
    }

    public void writeTo(String templateName, TemplateContext templateContext, Writer writer) throws TemplateException, IOException {
        doWriteTo(templateName, templateContext, writer);
    }

    private void doWriteTo(String templateName, TemplateContext templateContext, Object out) throws TemplateException, IOException {
        try {
            String path = getTemplatePath(templateName);
            ContextMap map = new ContextMap(templateContext);
            TurbineRunData rundata = (TurbineRunData) templateContext.get("rundata");
            if (rundata != null) {
                HttpServletRequest request = rundata.getRequest();
                HttpServletResponse response = rundata.getResponse();
                if (rundata.getRequest() != null && rundata.getResponse() != null) {
                    WebEngine.setRequestAndResponse(request, response);
                    WebEngine.getEngine().getTemplate(path, request.getLocale(), templateEncoding, map).render(map, out);
                    return;
                }
            }
            WebEngine.getEngine().getTemplate(path, templateEncoding).render(map, out);
        } catch (ParseException e) {
            throw new TemplateException(e.getMessage(), e);
        }
    }

}
TOP

Related Classes of httl.web.webx.HttlEngine

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.