📄 templateprocessvisitor.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 + -