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

📄 form.java

📁 OBPM是一个开源
💻 JAVA
📖 第 1 页 / 共 3 页
字号:
// Source file:
// C:\\Java\\workspace\\SmartWeb3\\src\\com\\cyberway\\dynaform\\form\\ejb\\Form.java

package cn.myapps.core.dynaform.form.ejb;

import java.util.ArrayList;
import java.util.Collection;
import java.util.Date;
import java.util.HashMap;
import java.util.HashSet;
import java.util.Iterator;
import java.util.Map;
import java.util.Set;

import cn.myapps.base.action.ParamsTable;
import cn.myapps.base.dao.ValueObject;
import cn.myapps.core.deploy.application.ejb.ApplicationVO;
import cn.myapps.core.deploy.module.ejb.ModuleVO;
import cn.myapps.core.dynaform.PermissionType;
import cn.myapps.core.dynaform.document.ejb.Document;
import cn.myapps.core.dynaform.document.ejb.Item;
import cn.myapps.core.macro.runner.JavaScriptRunner;
import cn.myapps.core.page.ejb.Page;
import cn.myapps.core.style.repository.ejb.StyleRepositoryVO;
import cn.myapps.core.user.action.WebUser;
import cn.myapps.core.user.ejb.UserVO;
import cn.myapps.core.workflow.element.Element;
import cn.myapps.core.workflow.element.FlowDiagram;
import cn.myapps.core.workflow.element.ManualNode;
import cn.myapps.core.workflow.engine.StateMachine;
import cn.myapps.core.workflow.engine.StateMachineHelper;
import cn.myapps.core.workflow.storage.definition.ejb.BillDefiVO;
import cn.myapps.core.workflow.storage.runtime.ejb.NodeRT;
import cn.myapps.core.workflow.utility.CommonUtil;
import cn.myapps.core.workflow.utility.FieldPermissionList;
import cn.myapps.util.StringList;
import cn.myapps.util.StringUtil;
import cn.myapps.util.sequence.Sequence;

/**
 * 模板
 * 
 * @hibernate.class table="T_DYNAFORM_FORM"
 * 
 */
public class Form extends ValueObject implements Cloneable {
	public static final int FORM_TYPE_NORMAL = 0x0000001;

	public static final int FORM_TYPE_SUBFORM = 0x0000010;

	public static final int FORM_TYPE_SEARCHFORM = 0x0000100;

	public static final int FORM_TYPE_HOMEPAGE = 0x0001000;

	private final int[] formType = new int[] { FORM_TYPE_NORMAL,
			FORM_TYPE_SUBFORM, FORM_TYPE_SEARCHFORM, FORM_TYPE_HOMEPAGE };

	private final String[] formTypeName = new String[] { "NORMAL", "SUBFORM",
			"SEARCHFORM", "HOMEPAGE" };

	private Map _fields;

	private Collection _textparts;

	protected Collection _elements;

	private Collection _compiledElements;

	/**
	 * Form在模版内容
	 */
	private String templatecontext;

	/**
	 * 描述
	 */
	private String discription;

	/**
	 * Form类型
	 */
	private int type;

	private String id;

	/**
	 * 是否编辑模式,当为非编辑模式时,Form只读。
	 */
	private boolean editmodal = true;

	private ApplicationVO application;

	private ModuleVO module;

	private boolean changed;

	private UserVO lastmodifier;

	private Date lastmodifytime;

	/**
	 * Form名称
	 */
	private String name;

	/**
	 * 打开Form之前执行脚本 当返回值非空时打开失败
	 */
	private String beforopenscript;

	/**
	 * 打开Form之后执行脚本
	 */
	private String afteropenscript;

	/**
	 * 保存Form之前执行脚本 当返回值非空时保存失败
	 */
	private String beforsavescript;

	/**
	 * 保存Form之后执行脚本
	 */
	private String aftersavescript;

	/**
	 * 退出时执行脚本 当返回值非空时退出失败
	 */
	private String onexitscript;

	private String titlescript;

	public StyleRepositoryVO style;

	private Set activitys;

	private Set relatedViews;

	private Set relatedActivitys;

	private int version;

	/**
	 * @hibernate.property column="VERSIONS"
	 * @return
	 */
	public int getVersion() {
		return version;
	}

	public void setVersion(int version) {
		this.version = version;
	}

	/**
	 * @hibernate.set name="activitys" inverse="true" cascade="delete"
	 *                order-by="ORDERNO"
	 * @hibernate.collection-key column="FORM_ID"
	 * 
	 * @hibernate.collection-one-to-many class="cn.myapps.core.dynaform.activity.ejb.Activity"
	 * @return
	 */
	public Set getActivitys() {
		if (this.activitys == null)
			this.activitys = new HashSet();
		return activitys;
	}

	public void setActivitys(Set activitys) {
		this.activitys = activitys;
	}

	/**
	 * @hibernate.property column="AFTEROPENSCRIPT"
	 */
	public String getAfteropenscript() {
		return afteropenscript;
	}

	public void setAfteropenscript(String afteropenscript) {
		this.afteropenscript = afteropenscript;
	}

	/**
	 * @hibernate.property column="AFTERSAVESCRIPT"
	 */
	public String getAftersavescript() {
		return aftersavescript;
	}

	public void setAftersavescript(String aftersavescript) {
		this.aftersavescript = aftersavescript;
	}

	/**
	 * @hibernate.property column="BEFOROPENSCRIPT"
	 */
	public String getBeforopenscript() {
		return beforopenscript;
	}

	public void setBeforopenscript(String beforopenscript) {
		this.beforopenscript = beforopenscript;
	}

	/**
	 * @hibernate.property column="BEFORSAVESCRIPT"
	 */
	public String getBeforsavescript() {
		return beforsavescript;
	}

	public void setBeforsavescript(String beforsavescript) {
		this.beforsavescript = beforsavescript;
	}

	/**
	 * @hibernate.property column="ONEXITSCRIPT"
	 */
	public String getOnexitscript() {
		return onexitscript;
	}

	public void setOnexitscript(String onexitscript) {
		this.onexitscript = onexitscript;
	}

	/**
	 * @roseuid 41ECB66B0306
	 */
	public Form() {
		_fields = new HashMap(20);
		_textparts = new ArrayList(20);
		_elements = new ArrayList(40);
		_compiledElements = new ArrayList(50);
	}

	public String toCalctext(Document doc, ParamsTable params, WebUser user,
			JavaScriptRunner runner, Collection errors) throws Exception {
		return toCalctext(doc, params, user, runner, errors, null, true);
	}

	public String toCalctext(Document doc, ParamsTable params, WebUser user,
			JavaScriptRunner runner, Collection errors, BillDefiVO flowVO,
			boolean bRefreshScript) throws Exception {
		StringBuffer template = new StringBuffer();

		// show error info.
		if (errors != null && errors.size() > 0) {
			template
					.append("<table class=dybody width='100%'><tr><td align='right' width='1%' valign='top' nowrap><font color='red'><b>提示信息:</b></font></td><td align='left' width='99%'><font color='red'><b>");
			Iterator iter = errors.iterator();
			while (iter.hasNext()) {
				ValidateMessage error = (ValidateMessage) iter.next();
				template.append(error.getErrmessage());
			}
			template.append("</font><b></td></tr></table>");
		}

		// show element html tags.
		Iterator iter = _elements.iterator();

		while (iter.hasNext()) {
			FormElement fld = (FormElement) iter.next();
			if (fld != null) {
				if (fld instanceof FormField) {
					FormField ff = (FormField) fld;

					if (!isEditmodal()) {
						ff.setDisplayType(PermissionType.DISABLED);
					}

					try {
						if (!ff.runHiddenScript(runner, doc)) {
							template.append("<SPAN id='" + ff.getName()
									+ "_divid'>");

							String content = "";
							if (fld instanceof IncludeField
									&& ((IncludeField) fld).isIntegratePage()) {
								content = ((IncludeField) fld).toHtmlTxt(
										params, user, runner);
							} else {
								content = fld.toHtmlTxt(params, user, runner,
										doc);
							}

							if (content != null && content.trim().length() > 0) {
								template.append(content);
							}
							template.append("</SPAN>");
						}
					} catch (Exception e) {
						e.printStackTrace();
					}
				} else {
					template.append(fld.toHtmlTxt(params, user, runner, doc)); // doc为null时是page
				}
			}
		}

		if (this instanceof Page) { // page模式不生成script
			return template.toString();
		}

		if (bRefreshScript) {
			template.append(addScript(doc, user, flowVO));
		}

		return template.toString();
	}

	/**
	 * 添加script
	 * 
	 * @param doc
	 * @param user
	 * @param flowVO
	 * @return
	 * @throws Exception
	 */
	public String addScript(Document doc, WebUser user, BillDefiVO flowVO)
			throws Exception {
		StringBuffer template = new StringBuffer();

		template.append("<script>");
		template.append("var dy_token = true;");

		template
				.append("function dy_lock(){document.all('loadingDiv').style.top=document.body.scrollTop;document.all('loadingDiv').style.left=document.body.scrollLeft;document.all('loadingDiv').style.display='';}");
		template
				.append("function dy_unlock(){document.all('loadingDiv').style.display='none';}");

		template.append("function dy_getFormid(){").append("return '").append(
				getId()).append("';}");

		template.append("function dy_getValuesMap(withParentid){");
		template.append("var valuesMap = {};");

		for (Iterator iter2 = deepSearchFields(getFields()).iterator(); iter2
				.hasNext();) {
			Object obj = iter2.next();
			if (obj instanceof FormField) {
				FormField field = (FormField) obj;
				if (field instanceof InputField
						|| field instanceof TextareaField) {
					template.append("if(document.all('" + field.getName()
							+ "')){valuesMap['" + field.getName()
							+ "']=document.all('" + field.getName()
							+ "').value;}");
				} else if (field instanceof RadioField) {
					template
							.append("if(document.all('"
									+ field.getName()
									+ "')){valuesMap['"
									+ field.getName()
									+ "']=(function(){var fields=document.getElementsByName('"
									+ field.getName()
									+ "');for(var i=0;i<fields.length;i++){if(fields[i].checked)return fields[i].value}}).call();}");
				} else if (field instanceof SelectField) {
					// template.append("if(document.all('" + field.getName()
					// + "')&&document.all('" + field.getName()
					// + "').options.length>0){valuesMap['"
					// + field.getName() + "']=document.all('"
					// + field.getName() + "').options[document.all('"
					// + field.getName() + "').selectedIndex].value;}");
					template.append("if(document.all('" + field.getName()
							+ "')){valuesMap['" + field.getName()
							+ "']=document.all('" + field.getName()
							+ "').value;}");
				} else if (field instanceof CheckboxField) {
					template
							.append("if(document.all('"
									+ field.getName()
									+ "')){valuesMap['"
									+ field.getName()
									+ "']=(function(){var rtn='';var fields=document.getElementsByName('"
									+ field.getName()
									+ "');for(var i=0;i < fields.length;i++){if(fields[i].checked)rtn+=fields[i].value+';';};return rtn;}).call();}");
				}
			}
		}

		template
				.append("if(document.all('parentid') && withParentid){valuesMap['parentid']=document.all('parentid').value;}");
		template
				.append("if(document.all('application')){valuesMap['application']=document.all('application').value;}");

		template.append("return valuesMap;");
		template.append("}");

		String flowid = "";
		if (flowVO != null) {
			flowid = flowVO.getId();
		}

		template.append("function dy_refresh(actfield){");
		template.append("if (dy_token){");
		template.append("dy_token=false;");
		template.append("dy_lock();");
		template.append("FormHelper.refresh('" + this.getId() + "',actfield,'"
				+ doc.getId() + "','" + user.getId()
				+ "' , dy_getValuesMap(true) , '" + flowid
				+ "' , function(str){eval(str);dy_token=true;dy_unlock();});");
		template.append("}}");

		template.append("</script>");

		return template.toString();
	}

	public Collection sortFields() {
		// Field 排序
		ArrayList tFields = new ArrayList();
		Collection fields = this.getFields();
		Iterator iter3 = fields.iterator();
		while (iter3.hasNext()) {
			FormField field = (FormField) iter3.next();
			if (field.getName().lastIndexOf("$") > 0) {
				tFields.add(field);
			}
		}
		for (int i = 0; i < tFields.size(); i++) {
			for (int j = i + 1; j < tFields.size(); j++) {
				FormField f1 = (FormField) tFields.get(i);
				FormField f2 = (FormField) tFields.get(j);
				if (f1.getSeq() > f2.getSeq()) {
					Object tmp = tFields.get(i);
					tFields.set(i, tFields.get(j));
					tFields.set(j, tmp);
				}
			}
		}
		return tFields;
	}

	public Collection compileCalctext(String content) {
		// _compiledElements.clear();

		// StringBuffer ready = new StringBuffer();

⌨️ 快捷键说明

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