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

📄 fieldbean.java

📁 EOS的一个很好的例子.包括页面构件、展现构件
💻 JAVA
📖 第 1 页 / 共 2 页
字号:
package com.primeton.eos.fbframe.fbmetadata.metadata;

import java.util.*;

import org.w3c.dom.Document;
import org.w3c.dom.Element;
import org.w3c.dom.Node;
import org.w3c.dom.NodeList;

import com.primeton.tp.common.xml.XmlUtil;

/**
 *@author wkq
 * @version 1.0
 * @date 2006-5-2
 * @class_displayName FieldBean
 * 这个类用于维护实体字段的元数据信息
 */
public class FieldBean implements Comparable {
	public FieldBean()
	{
	}

	/**
	 * 把字段元数据定义转换为XML节点对象
	 * @param e
	 */
	public void toXmlNode(Element e)
	{
		Document doc = e.getOwnerDocument();

		Node n = doc.createElement("FIELDNAME");
		XmlUtil.setNodeValue(n, FIELDNAME);
		e.appendChild(n);
		
		n = doc.createElement("ENTITYNAME");
		XmlUtil.setNodeValue(n, ENTITYNAME);
		e.appendChild(n);
		
		n = doc.createElement("FK_TABLENAME");
		XmlUtil.setNodeValue(n, FK_TABLENAME);
		e.appendChild(n);
		
		n = doc.createElement("FK_COLUMNNAME");
		XmlUtil.setNodeValue(n, FK_COLUMNNAME);
		e.appendChild(n);
		
		n = doc.createElement("FK_FIELDDESC");
		XmlUtil.setNodeValue(n, FK_FIELDDESC);
		e.appendChild(n);
		
		n = doc.createElement("COLUMNNAME");
		XmlUtil.setNodeValue(n, COLUMNNAME);
		e.appendChild(n);
		
		n = doc.createElement("FIELDDESC");
		XmlUtil.setNodeValue(n, FIELDDESC);
		e.appendChild(n);
		
		n = doc.createElement("DISPLAYORDER");
		XmlUtil.setNodeValue(n, String.valueOf(DISPLAYORDER));
		e.appendChild(n);
		
		n = doc.createElement("FIELDTYPE");
		XmlUtil.setNodeValue(n, FIELDTYPE);
		e.appendChild(n);
		
		n = doc.createElement("REFTYPE");
		XmlUtil.setNodeValue(n, REFTYPE);
		e.appendChild(n);
		
		n = doc.createElement("CHECKBOXVALUE");
		XmlUtil.setNodeValue(n, CHECKBOXVALUE);
		e.appendChild(n);
		
		n = doc.createElement("DOCLISTCODE");
		XmlUtil.setNodeValue(n, DOCLISTCODE);
		e.appendChild(n);
		
		n = doc.createElement("DISPLAYFORMAT");
		XmlUtil.setNodeValue(n, DISPLAYFORMAT);
		e.appendChild(n);
		
		n = doc.createElement("WIDTH");
		XmlUtil.setNodeValue(n, String.valueOf(WIDTH));
		e.appendChild(n);
		
		n = doc.createElement("DEFAULTVALUE");
		XmlUtil.setNodeValue(n, DEFAULTVALUE);
		e.appendChild(n);
		
		n = doc.createElement("MINVALUE");
		if (MINVALUE != null)
			XmlUtil.setNodeValue(n, MINVALUE.toString());
		e.appendChild(n);
		
		n = doc.createElement("MAXVALUE");
		if (MAXVALUE != null)
			XmlUtil.setNodeValue(n, MAXVALUE.toString());
		e.appendChild(n);
		
		n = doc.createElement("LENGTH");
		XmlUtil.setNodeValue(n, String.valueOf(LENGTH));
		e.appendChild(n);
		
		n = doc.createElement("PRECISION");
		XmlUtil.setNodeValue(n, String.valueOf(PRECISION));
		e.appendChild(n);
		
		n = doc.createElement("VALIDATETYPE");
		XmlUtil.setNodeValue(n, VALIDATETYPE);
		e.appendChild(n);
		
		n = doc.createElement("ISMODIFY");
		XmlUtil.setNodeValue(n, ISMODIFY);
		e.appendChild(n);
		
		n = doc.createElement("ISDISPLAY");
		XmlUtil.setNodeValue(n, ISDISPLAY);
		e.appendChild(n);
		
		n = doc.createElement("ISPK");
		XmlUtil.setNodeValue(n, ISPK);
		e.appendChild(n);
		
		n = doc.createElement("ISAUTOKEY");
		XmlUtil.setNodeValue(n, ISAUTOKEY);
		e.appendChild(n);
		
		n = doc.createElement("ISLOCK");
		XmlUtil.setNodeValue(n, ISLOCK);
		e.appendChild(n);
		
		n = doc.createElement("FK_INPUTURL");
		XmlUtil.setNodeValue(n, FK_INPUTURL);
		e.appendChild(n);
		
	}

	String FIELDNAME;
	String ENTITYNAME;
	String FK_TABLENAME;
	String FK_COLUMNNAME;
	String FK_FIELDDESC;
	String FK_INPUTURL;
	String DESC_FIELDNAME;
	String COLUMNNAME;
	String FIELDDESC;
	int DISPLAYORDER;
	String FIELDTYPE;
	String REFTYPE;
	String CHECKBOXVALUE;
	String DOCLISTCODE;
	String DISPLAYFORMAT;
	int WIDTH;
	String DEFAULTVALUE;
	String MINVALUE;
	String MAXVALUE;
	int LENGTH;
	int PRECISION;
	String VALIDATETYPE;
	String ISMODIFY;
	String ISDISPLAY;
	String ISINPUT;
	String ISPK;
	String ISAUTOKEY;
	String ISLOCK;

	FieldBean descField = null;
	boolean isDesc = false;

	public String getDataCellEditor() {
		return getDataCellEditor(null, false);
	}

	/**
	 * 根据元数据定义输出字段对应的编辑器datacell的html文本,产生的数据形如:
	 * 	<td eos_displayname="生日" width="80" name="BIRTH" eos_isnull="true" format="yyyyMMdd" editor="calendarEditor"></td>
	 * 	<td eos_displayname="性别" width="80" name="SEX" eos_isnull="true" editor="CUST_SEX_select"></td>
	 * 	<td eos_displayname="地址" width="80" eos_maxsize="100" name="ADDRESS" eos_isnull="true" editor="textEditor"></td>
	 * 	0 字符串
	 * 	1 整数
	 * 	2 小数
	 * 	3 日期
	 * 	4 日期时间
	 * 	5 CHECKBOX
	 * 	6 引用
	 * @param session  sessionEntity
	 * @param isLock  是否为固定字段通常为表格最左边的标识列如编号,姓名等
	 * @return
	 */

	
	public String getDataCellEditor(Node session, boolean isLock)
	{
		StringBuffer buff = new StringBuffer("");
		String lock = "";
		if (isLock)
			lock = "background:buttonface; border-bottom:1px solid buttonshadow; LEFT: expression(this.parentElement.offsetParent.parentElement.scrollLeft); POSITION: relative;";
		int type = 0;
		if (FIELDTYPE != null && !FIELDTYPE.equals(""))
			type = Integer.parseInt(FIELDTYPE.trim());
		buff.append("<td nowrap style=\"white-space: nowrap;").append(lock).append("\" name=\"").append(FIELDNAME).append("\"");
		buff.append(" eos_displayname=\"").append(FIELDDESC).append("\"");
		buff.append(" width=\"").append(WIDTH).append("\"");
		if (notNull()) 
			buff.append(" eos_isnull=\"false\"");
		else
			buff.append(" eos_isnull=\"true\"");
		switch (type) {
			case 3:
			case 4:
				buff.append(" editor=\"calendarEditor\"");
				buff.append(" format=\"").append(DISPLAYFORMAT).append("\"");
				break;
			case 1:
				buff.append(" editor=\"textEditor\"");
				if (MAXVALUE == null || MAXVALUE.equals("") || MINVALUE == null || MINVALUE.equals(""))
					buff.append(" eos_datatype=\"integer\"");
				else {
					buff.append(" eos_datatype=\"interval(");
					if (MINVALUE == null || MINVALUE.equals(""))
						buff.append("-");
					else
						buff.append(MINVALUE);
					buff.append(",");
					if (MAXVALUE == null || MAXVALUE.equals(""))
						buff.append("+");
					else
						buff.append(MAXVALUE);
					buff.append(")\"");
				}
				break;
			case 5:
				buff.append(" editor=\"checkBoxEditor(").append(CHECKBOXVALUE).append(")\"");
				break;
			case 2:
				buff.append(" editor=\"textEditor\"");
				buff.append(" eos_datatype=\"double(").append(LENGTH).append(",").append(PRECISION).append(")\"");
				break;
			case 6:
				if (REFTYPE != null && REFTYPE.equals("0")) { // 引用类型是业务字典
					buff.append(" editor=\"").append(FIELDNAME).append("_dict_select\"");
					break;
				}
			default:
				buff.append(" editor=\"textEditor\"");
				buff.append(" eos_datatype=\"").append(VALIDATETYPE).append("\"");
				buff.append(" eos_maxsize=\"").append(LENGTH).append("\"");
				break;
		}
		if (DEFAULTVALUE != null && !DEFAULTVALUE.equals("")) 
			buff.append(" defaultValue=\"").append(DEFAULTVALUE).append("\"");
		if (session != null) {
			if (!isModify(session))
				buff.append(" modify=\"false\"");
		} else {
			if (!isModify())
				buff.append(" modify=\"false\"");
		}
		buff.append("></td>\n");
		return buff.toString();
	}
	
	/**
	 * 输出字段对应的datacell的html文本
	 * @param session
	 * @param isLock
	 * @return
	 */
	public String getDataCellTableCell(Node session, boolean isLock)
	{
		StringBuffer td = new StringBuffer("");
		String lock = "";
		if (isLock)
			lock = "background:buttonface; border-bottom:1px solid buttonshadow; LEFT: expression(this.parentElement.offsetParent.parentElement.scrollLeft); POSITION: relative;";

		if (isFK()) {  // 如果是外键引用的字段
			if (hasDescField()) {  //表中包含了当前字段的描述字段
				td.append(getDescField().getDataCellEditor(session, isLock));
				if (isModify(session)) // 当前字段是否可以修改
					td.append("<td name=\"").append(FIELDNAME).append("\"></td>\n");
			} else {
				if (FK_FIELDDESC != null && !FK_FIELDDESC.equals("")) {  //如果是外键字段是否有外键引用表的描述字段
					td.append("<td nowrap style=\"white-space: nowrap;").append(lock).append("\" width=\"").append(getWIDTH()).append("\"");
					td.append(" name=\"").append(getFK_FIELDDESC_ALIAS()).append("\" modify=\"false\"></td>\n");
					if (isModify(session)) // 当前字段是否可以修改
						td.append("<td name=\"").append(FIELDNAME).append("\"></td>\n");
				} else {
					td.append(getDataCellEditor(session, isLock));
				}
			}
		} else {
			td.append(getDataCellEditor(session, isLock));
		}
		return td.toString();
	}
	
	public String getDataCellTableHead(Node session, boolean isLock)
	{
		StringBuffer buff = new StringBuffer("");
		String lock = "";
		if (isLock)
			lock = " background:buttonface; LEFT: expression(this.parentElement.offsetParent.scrollLeft-1); POSITION: relative;";
		
		if (isFK()) {  // 如果是外键引用的字段
			if (hasDescField()) {  //表中包含了当前字段的描述字段
				buff.append("<th nowrap style=\"white-space: nowrap;").append(lock).append("\" name=\"").append(getDescField().getFIELDNAME()).append("\"");
				buff.append(" width=\"").append(WIDTH).append("\" class=\"fb_result_head\">").append(FIELDDESC).append("</th>\n");
				if (isModify(session)) // 当前字段是否可以修改
					buff.append("<th class=\"fb_result_head\" width=\"22\" style=\"white-space: nowrap;").append(lock).append("\" name=\"").append(FIELDNAME).append("\">&nbsp;</th>");
			} else {
				if (FK_FIELDDESC != null && !FK_FIELDDESC.equals("")) {  //如果是外键字段是否有外键引用表的描述字段
					buff.append("<th nowrap style=\"white-space: nowrap;").append(lock).append("\" name=\"").append(getFK_FIELDDESC_ALIAS()).append("\"");
					buff.append(" width=\"").append(WIDTH).append("\" class=\"fb_result_head\">").append(FIELDDESC).append("</th>\n");
					if (isModify(session)) // 当前字段是否可以修改
						buff.append("<th class=\"fb_result_head\" width=\"22\" style=\"white-space: nowrap;").append(lock).append("\" name=\"").append(FIELDNAME).append("\">&nbsp;</th>");
				} else {
					buff.append("<th nowrap style=\"white-space: nowrap;").append(lock).append("\" name=\"").append(FIELDNAME).append("\"");
					buff.append(" width=\"").append(WIDTH).append("\" class=\"fb_result_head\">").append(FIELDDESC).append("</th>\n");
				}
			}
		} else {
			buff.append("<th nowrap style=\"white-space: nowrap;").append(lock).append("\" name=\"").append(FIELDNAME).append("\"");
			buff.append(" width=\"").append(WIDTH).append("\" class=\"fb_result_head\">").append(FIELDDESC).append("</th>\n");
		}
		return buff.toString();
	}

	public String getDataCellJS(Node session)
	{
		StringBuffer buff = new StringBuffer("");
		if (isFK()) {  // 如果是外键引用的字段
			if (hasDescField()) {  //表中包含了当前字段的描述字段
				if (isModify(session)) { // 当前字段是否可以修改
					buff.append("case \"").append(getFIELDNAME()).append("\":\n");
					buff.append("	var rIndex = cell.parentNode.rowIndex;\n");
					buff.append("	var cIndex = cell.cellIndex;\n");
					buff.append("	cell.innerHTML = \"<input type=button value='..' style='width:20px' onclick=\\\"javascript:showSelect(\"+rIndex+\",\"+cIndex+\",'");
					buff.append(FIELDNAME).append("', '").append(getDescField().getFIELDNAME()).append("', '").append(FK_INPUTURL).append("')\\\">\";\n");
					buff.append("	break;\n");
				}
			} else {
				if (FK_FIELDDESC != null && !FK_FIELDDESC.equals("")) {  //如果是外键字段是否有外键引用表的描述字段
					if (isModify(session)) { // 当前字段是否可以修改
						buff.append("case \"").append(getFIELDNAME()).append("\":\n");
						buff.append("	var rIndex = cell.parentNode.rowIndex;\n");
						buff.append("	var cIndex = cell.cellIndex;\n");
						buff.append("	cell.innerHTML = \"<input type=button value='..' style='width:20px' onclick=\\\"javascript:showSelect(\"+rIndex+\",\"+cIndex+\",'");
						buff.append(FIELDNAME).append("', '").append(getFK_FIELDDESC_ALIAS()).append("', '").append(FK_INPUTURL).append("')\\\">\";\n");
						buff.append("	break;\n");
					}
				}
			}
		}
		return buff.toString();
	}

	
	/**
	 * 创建时间: 2006-06-13
	 * 创建人:  caisy
	 * 获取session中的角色列表
	 * @param session
	 * @return ArrayList 
	 */
	private ArrayList getRoleList(Node session){
		ArrayList roleList = new ArrayList();
		try {
			NodeList nl = XmlUtil.findNodes(session, "SessionEntity/rolelist/EOSOperatorRole/roleID");
			for (int i=0; i<nl.getLength(); i++) {
				Node n = nl.item(i);
				if (n.getNodeType() == Node.ELEMENT_NODE) {
					String role = XmlUtil.getNodeValue(n);
					if (role != null && !role.equals("")) {
						roleList.add(role);
					}
				}
			}			
		} catch (Exception e) {
			e.printStackTrace();			
		}
	    return roleList;
	}
	
	/**
	 * 
	 * 根据session中的角色列表判断当前登陆人员是否对这个字段有修改的权限
	 * 修改日期 2006-06-13
	 * 修改人   caisy
	 * 修改原因 提取获取rolelist的为一个通用方法
	 * 
	 */
	public boolean isModify(Node session) {
		return isModify(getRoleList(session));		
	}
	
	/**
	 * 根据session中的角色列表判断当前登陆人员是否对这个字段有查看的权限
	 * 修改日期 2006-06-13
	 * 修改人   caisy
	 * 修改原因 提取获取rolelist的为一个通用方法
	 * 
	 */
	public boolean isDisplay(Node session) {
		return isDisplay(getRoleList(session));		
	}

	public boolean isModify(List roleList) {
		MetaDataSet entitySet = MetaDataSet.getInstance();
		Iterator iter = roleList.iterator();
		boolean hasRole = false;
		while (iter.hasNext()) {
			String role = (String) iter.next();
			RoleField roleField = entitySet.getRoleField(role, ENTITYNAME, FIELDNAME);
			if (roleField != null) {
				hasRole = true;
				if (roleField.isModify())
					return true;
			}
		}
		if (hasRole)
			return false;
		if (!entitySet.getEntity(ENTITYNAME).isModify(roleList))
			return false;
		return isModify();
	}

	public boolean isDisplay(List roleList) {
		MetaDataSet entitySet = MetaDataSet.getInstance();
		Iterator iter = roleList.iterator();
		boolean hasRole = false;
		while (iter.hasNext()) {
			String role = (String) iter.next();
			RoleField roleField = entitySet.getRoleField(role, ENTITYNAME, FIELDNAME);
			if (roleField != null) {
				hasRole = true;
				if (roleField.isView())
					return true;
			}
		}
		if (hasRole)
			return false;
		if (!entitySet.getEntity(ENTITYNAME).isView(roleList))
			return false;
		return isDisplay();
	}

	/**
	 * 字段是否运行修改
	 * @return
	 */
	public boolean isModify()
	{
		return (ISMODIFY != null && ISMODIFY.equalsIgnoreCase("Y"));
	}

	/**
	 * 字段是否显示
	 * @return
	 */
	public boolean isDisplay()

⌨️ 快捷键说明

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