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

com.nfwork.dbfound.web.ui.DataSet Maven / Gradle / Ivy

There is a newer version: 4.3.2
Show newest version
package com.nfwork.dbfound.web.ui;

import java.io.Writer;
import java.util.HashMap;
import java.util.Map;

import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.jsp.JspException;
import javax.servlet.jsp.JspWriter;
import javax.servlet.jsp.tagext.TagSupport;

import com.nfwork.dbfound.model.ModelEngine;
import com.nfwork.dbfound.util.JsonUtil;
import com.nfwork.dbfound.util.LogUtil;
import com.nfwork.dbfound.core.Context;
import com.nfwork.dbfound.core.Transaction;
import com.nfwork.dbfound.dto.QueryResponseObject;
import com.nfwork.dbfound.web.WebExceptionHandle;

import freemarker.template.Configuration;
import freemarker.template.Template;

public class DataSet extends TagSupport {

	private static final long serialVersionUID = 7492822892288859474L;
	private String templateName = "dataSet.ftl";

	private String id;
	private String queryName;
	private String modelName;
	private String sourcePath;
	private boolean loadData = true;
	private boolean autoCount = false;
	private String fields;

	public int doEndTag() throws JspException {
		JspWriter out = pageContext.getOut();
		return executeFreemarker(out);
	}

	@SuppressWarnings("unchecked")
	public int executeFreemarker(Writer out) {
		HttpServletRequest request = (HttpServletRequest) pageContext
				.getRequest();
		HttpServletResponse response = (HttpServletResponse) pageContext
				.getResponse();
		Context context = Context.getCurrentContext(request, response);
		try {
			Configuration cfg = FreemarkFactory.getConfig(pageContext
					.getServletContext());
			// 定义Template对象
			Template template = cfg.getTemplate(templateName);
			// 定义数据
			Map root = new HashMap();

			root.put("id", id);
			root.put("loadData", loadData);
			String url = modelName + ".query";
			if (queryName != null && queryName != "_default") {
				url = url + "!" + queryName;
			}
			root.put("url", url);

			if (loadData) {
				if (queryName == null || "".equals(queryName)) {
					queryName = "_default";
				}
				QueryResponseObject ro = ModelEngine.query(context, modelName,
						queryName, sourcePath, autoCount);
				if (ro != null && ro.getDatas().size() > 0) {
					try {
						Map map0 = (Map) ro.getDatas().get(0);
						root.put("keySet", map0.keySet());
					} catch (Exception e) {
						LogUtil.warn("数据返回格式不是list,自动转化field失败");
					}
				}
				root.put("qro", JsonUtil.beanToJson(ro));
			}

			if (fields != null) {
				String fieldsString = "'" + fields.replaceAll(",", "','") + "'";
				root.put("fields", fieldsString);
			}

			template.process(root, out);
		} catch (Exception e) {
			Transaction transaction = context.getTransaction();
			if (transaction.isOpen()) {
				transaction.rollback();
				transaction.end();
			}
			WebExceptionHandle.handle(e, (HttpServletRequest) pageContext
					.getRequest(), (HttpServletResponse) pageContext
					.getResponse());
			return SKIP_PAGE;
		}
		return EVAL_PAGE;
	}

	public String getId() {
		return id;
	}

	public void setId(String id) {
		this.id = id;
	}

	public String getSourcePath() {
		return sourcePath;
	}

	public void setSourcePath(String sourcePath) {
		this.sourcePath = sourcePath;
	}

	public String getQueryName() {
		return queryName;
	}

	public void setQueryName(String queryName) {
		this.queryName = queryName;
	}

	public String getModelName() {
		return modelName;
	}

	public void setModelName(String modelName) {
		this.modelName = modelName;
	}

	public boolean isLoadData() {
		return loadData;
	}

	public void setLoadData(boolean loadData) {
		this.loadData = loadData;
	}

	public String getFields() {
		return fields;
	}

	public void setFields(String fields) {
		this.fields = fields;
	}

	public boolean isAutoCount() {
		return autoCount;
	}

	public void setAutoCount(boolean autoCount) {
		this.autoCount = autoCount;
	}

}




© 2015 - 2025 Weber Informatics LLC | Privacy Policy