⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 templateprocessvisitor.java

📁 OBPM是一个开源
💻 JAVA
字号:
/*
 * Created on 2005-1-22
 *
 * TODO To change the template for this generated file go to
 * Window - Preferences - Java - Code Style - Code Templates
 */
package cn.myapps.core.dynaform.form.ejb;

/**
 * @author ZhouTY
 * 
 * TODO To change the template for this generated type comment go to Window -
 * Preferences - Java - Code Style - Code Templates
 */

import java.util.Collection;
import java.util.HashMap;
import java.util.Iterator;
import java.util.List;
import java.util.Map;

import org.apache.commons.beanutils.PropertyUtils;
import org.htmlparser.Attribute;
import org.htmlparser.Parser;
import org.htmlparser.Tag;
import org.htmlparser.Text;
import org.htmlparser.util.ParserException;
import org.htmlparser.visitors.NodeVisitor;

import cn.myapps.core.dynaform.component.ejb.Component;
import cn.myapps.core.dynaform.component.ejb.ComponentProcess;
import cn.myapps.core.macro.runner.JavaScriptRunner;
import cn.myapps.util.DateUtil;
import cn.myapps.util.Debug;
import cn.myapps.util.ProcessFactory;
import cn.myapps.util.StringUtil;
import cn.myapps.util.sequence.Sequence;
import cn.myapps.util.text.TemplateContext;

public class TemplateProcessVisitor extends NodeVisitor {
	Form _form;

	public TemplateProcessVisitor() {

	}

	public TemplateProcessVisitor(Form form) {
		_form = form;

	}

	public void visitStringNode(Text text) {
		String str = text.getPage().getText(text.getStartPosition(),
				text.getEndPosition());
		if (!(str == null || str.equals("") || str.equals("\n") || str
				.equals("\n\r"))) {
			Textpart field = new Textpart();
			field.setText(str);
			_form.addTextpart(field);

		}
	}

	public void visitTag(Tag tag) {
		try {
			String className = tag.getAttribute("className");
			if (className == null) {
				String str = tag.getPage().getText(tag.getStartPosition(),
						tag.getEndPosition());
				if (str != null && str.length() > 0) {
					Textpart field = new Textpart();
					field.setText(str);
					_form.addTextpart(field);
				}
			} else if (className
					.equalsIgnoreCase("cn.myapps.core.dynaform.form.ejb.form")
					|| className
							.equalsIgnoreCase("cn.myapps.core.dynaform.form.ejb.replayform")) {
				if (_form == null) {
					Class cls = Class.forName(className);
					_form = (Form) cls.newInstance();
				}
				setFields(_form, tag.getAttributesEx());
			} else if (className
					.equalsIgnoreCase("cn.myapps.core.dynaform.form.ejb.ComponentTag")) {
				String componentid = tag.getAttribute("componentid");
				String aliasesExpr = tag.getAttribute("aliases");
				String[] aliases = aliasesExpr.split(";");
				Map aliaslist = new HashMap();
				for (int i = 0; i < aliases.length; i++) {
					String oldName = aliases[i].substring(0, aliases[i]
							.indexOf(":"));
					String alias = aliases[i]
							.substring(aliases[i].indexOf(":") + 1);
					aliaslist.put(oldName, alias);
				}

				ComponentProcess cp = (ComponentProcess) ProcessFactory
						.createProcess(ComponentProcess.class);
				Component component = (Component) cp.doView(componentid);

				if (component != null) {
					TemplateContext context = TemplateContext.parse(component
							.getTemplatecontext());
					for (Iterator iter = aliaslist.keySet().iterator(); iter
							.hasNext();) {
						String key = (String) iter.next();
						String value = (String) aliaslist.get(key);
						context.putParams(key, value);
					}

					new TemplateParser().parseTemplate(_form, context.toText());
				}
			} else if (className != null) {
				Class cls = Class.forName(className);
				Object obj = cls.newInstance();

				FormField f = (FormField) obj;
				f.setId(Sequence.getSequence());
				setFields(f, tag.getAttributesEx());
				
				_form.addField(f);
			}

		} catch (Exception e) {
			e.printStackTrace();
		}
	}

	public void visitEndTag(Tag tag) {
		if (!tag.getTagName().trim().equalsIgnoreCase("FORM")) {
			String text = tag.getPage().getText(tag.getStartPosition(),
					tag.getEndPosition());
			if (text != null && text.length() > 0) {
				Textpart field = new Textpart();
				field.setText(text);
				_form.addTextpart(field);

			}
		}
	}

	public void setFields(Object obj, List attributes) throws Exception {
		// Set object Field value.
		for (int i = 0; i < attributes.size(); i++) {
			Attribute attr = (Attribute) attributes.get(i);
			String fieldname = attr.getName();
			String fieldval = attr.getValue();

			Class type = null;
			try {
				type = PropertyUtils.getPropertyType(obj, fieldname);
			} catch (Exception e) {
				type = null;
			}

			if (type == null) {
				if (obj instanceof FormField) {
					FormField field = (FormField) obj;
					field.addOtherProps(fieldname, fieldval);
				}
				continue;
			}

			if (type != null) {
				if (type.equals(Long.TYPE)) { // Long
					fieldval = StringUtil.isNumber(fieldval) ? fieldval : "0";
					PropertyUtils.setSimpleProperty(obj, fieldname, Long
							.valueOf(fieldval));
					continue;
				} else if (type.equals(Integer.TYPE)) { // Int
					fieldval = StringUtil.isNumber(fieldval) ? fieldval : "0";
					PropertyUtils.setSimpleProperty(obj, fieldname, Integer
							.valueOf(fieldval));
					continue;
				} else if (type.equals(Short.TYPE)) { // Short
					fieldval = StringUtil.isNumber(fieldval) ? fieldval : "0";
					PropertyUtils.setSimpleProperty(obj, fieldname, Short
							.valueOf(fieldval));
					continue;
				} else if (type.equals(Double.TYPE)) { // Double
					fieldval = StringUtil.isNumber(fieldval) ? fieldval : "0";
					PropertyUtils.setSimpleProperty(obj, fieldname, Double
							.valueOf(fieldval));
					continue;
				} else if (type.equals(Class.forName("java.lang.String"))) { // String
					fieldval = fieldval != null ? fieldval : "";
					PropertyUtils.setProperty(obj, fieldname, fieldval);
					continue;
				}

				else if (type.equals(Float.TYPE)) { // Float
					fieldval = StringUtil.isNumber(fieldval) ? fieldval : "0";
					PropertyUtils.setSimpleProperty(obj, fieldname, Float
							.valueOf(fieldval));
					continue;
				}

				else if (type.equals(Boolean.TYPE)) { // Boolean
					fieldval = StringUtil.isBoolean(fieldval) ? fieldval
							: "false";
					PropertyUtils.setSimpleProperty(obj, fieldname, Boolean
							.valueOf(fieldval));
					continue;
				}

				else if (type.equals(Class.forName("java.sql.Date"))) { // Date
					java.util.Date dt = StringUtil.isDate(fieldval) ? DateUtil
							.parseDateTime(fieldval) : new java.util.Date(
							System.currentTimeMillis());
					PropertyUtils.setSimpleProperty(obj, fieldname, dt);
					continue;
				}

				else if (type.equals(Class.forName("java.util.Date"))) { // java.util.Date
					java.util.Date dt = StringUtil.isDate(fieldval) ? DateUtil
							.parseDate(fieldval) : new java.sql.Date(System
							.currentTimeMillis());
					PropertyUtils.setSimpleProperty(obj, fieldname, dt);
					continue;
				}
			}

		}
	}

	public Form getResult() {
		return _form;
	}

	public static Form parseTemplate(Form form, String template)
			throws Exception {
		Parser parser = new Parser();

		if (template == null) {
			template = "";
		}

		template = template.replaceAll("\\[计算插入模板\\]</MARQUEE>", "");

		// System.out.println(template);
		parser.setInputHTML(template);
		TemplateProcessVisitor visitor = new TemplateProcessVisitor(form);
		parser.visitAllNodesWith(visitor);

		Form form2 = visitor.getResult();
		Collection colls = form2.getFields();
		Iterator iters = colls.iterator();
		while (iters.hasNext()) {
			FormField field = (FormField) iters.next();
			Debug.println(field.getName());
		}
		return form2;
	}

	public static void main(String[] args) throws ParserException {
//		Map map = getMapByStr("{}");
//		System.out.println(map);
	}
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -