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

📄 metadataset.java

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

import java.util.*;

import org.w3c.dom.*;

import java.sql.*;

import com.primeton.tp.core.api.PersistenceBroker;
import com.primeton.tp.core.bizservice.EOSParameter;
import com.primeton.tp.core.bizservice.ProcessException;
import com.primeton.tp.core.dataservice.DBManagerException;

/**
 * @author wangkeqiang
 * 
 * @version 1.0
 * 
 * @date 2006-5-2 
 * @class_displayName MetaDataSet
 * 
 * 这个类负责管理“表的元数据”,“字段的元数据”,“角色和表的权限关系”,“角色和字段的权限关系”
 * 等数据的加载和使用 。
 */
public class MetaDataSet {
	
	private static MetaDataSet entitySet;
	
	HashMap entityList;
	HashMap fieldList;	//根据实体和字段名产生xpath为key   实体名/字段名
	HashMap fieldDescList;	//根据字段中文名描述字段创建的map 字段名称为  数据集中文名.字段中文名

	HashMap roleEntity;
	HashMap roleField;
	
	/**
	 * @return 返回 entityList。
	 */
	public HashMap getEntityList() {
		return entityList;
	}
	/**
	 * @return 返回 fieldList。
	 */
	public HashMap getFieldList() {
		return fieldList;
	}

	private MetaDataSet() {
		entityList = new HashMap();
		fieldList = new HashMap();
		fieldDescList = new HashMap();
		roleEntity = new HashMap();
		roleField = new HashMap();
	}
	
	/*
	 * 取得全局唯一的实体
	 */
	public synchronized static MetaDataSet getInstance() {
		if (entitySet == null) {
			entitySet = new MetaDataSet();
			entitySet.initEntity();
			entitySet.initRole();
		}
		return entitySet;
	}
	
	/**
	 * 
	 * 重新加载“表的元数据”信息
	 * 重新加载“字段的元数据”信息
	 * 重新加载“角色和表的权限关系”信息
	 * 重新加载“角色和字段的权限关系”信息
	 * 
	 */
	public synchronized void reload() {
		entityList = new HashMap();
		fieldList = new HashMap();
		roleEntity = new HashMap();
		roleField = new HashMap();
		initEntity();
		initRole();
	}
	
	/*
	 * 初始化“表的元数据”信息
	 * 初始化“字段的元数据”信息
	 */
	private void initEntity() {
		PersistenceBroker broker = null;
		PreparedStatement pstmt = null;
		ResultSet rs = null;
		try {
			broker = getBroker("-1");
			Connection conn = broker.getConnection();
			String sql = "select * from EOSENTITYDEF ";
			pstmt = conn.prepareStatement(sql);
			rs = pstmt.executeQuery();
			while (rs.next()) {
				EntityBean e = new EntityBean();
				e.setENTITYNAME(rs.getString("ENTITYNAME"));
				e.setTABLENAME(rs.getString("TABLENAME"));
				e.setENTITYDESC(rs.getString("ENTITYDESC"));
				e.setISADD(rs.getString("ISADD"));
				e.setISDEL(rs.getString("ISDEL"));
				e.setISMODIFY(rs.getString("ISMODIFY"));
				e.setISVIEW(rs.getString("ISVIEW"));
				e.setISPAGE(rs.getString("ISPAGE"));
				e.setPAGELEN(rs.getInt("PAGELEN"));
				e.setDISPLAYORDER(rs.getInt("DISPLAYORDER"));
				e.setCHECK_REF(rs.getString("CHECK_REF"));
				entityList.put(e.getENTITYNAME(), e	);
			}
			rs.close();
			pstmt.close();
			sql = "select * from EOSFIELDDEF";
			pstmt = conn.prepareStatement(sql);
			rs = pstmt.executeQuery();
			while (rs.next()) {
				FieldBean f = new FieldBean();
				f.setFIELDNAME(rs.getString("FIELDNAME"));
				f.setENTITYNAME(rs.getString("ENTITYNAME"));
				f.setFK_TABLENAME(rs.getString("FK_TABLENAME"));
				f.setFK_COLUMNNAME(rs.getString("FK_COLUMNNAME"));
				f.setFK_FIELDDESC(rs.getString("FK_FIELDDESC"));
				f.setFK_INPUTURL(rs.getString("FK_INPUTURL"));
				f.setDESC_FIELDNAME(rs.getString("DESC_FIELDNAME"));
				f.setCOLUMNNAME(rs.getString("COLUMNNAME"));
				f.setFIELDDESC(rs.getString("FIELDDESC"));
				f.setDISPLAYORDER(rs.getInt("DISPLAYORDER"));
				f.setFIELDTYPE(rs.getString("FIELDTYPE"));
				f.setREFTYPE(rs.getString("REFTYPE"));
				f.setCHECKBOXVALUE(rs.getString("CHECKBOXVALUE"));
				f.setDOCLISTCODE(rs.getString("DOCLISTCODE"));
				f.setDISPLAYFORMAT(rs.getString("DISPLAYFORMAT"));
				f.setWIDTH(rs.getInt("WIDTH"));
				f.setDEFAULTVALUE(rs.getString("DEFAULTVALUE"));
				f.setMINVALUE(rs.getString("MINVALUE"));
				f.setMAXVALUE(rs.getString("MAXVALUE"));
				f.setLENGTH(rs.getInt("LENGTH"));
				f.setPRECISION(rs.getInt("PRECISION"));
				f.setVALIDATETYPE(rs.getString("VALIDATETYPE"));
				f.setISMODIFY(rs.getString("ISMODIFY"));
				f.setISDISPLAY(rs.getString("ISDISPLAY"));
				f.setISINPUT(rs.getString("ISINPUT"));
				f.setISPK(rs.getString("ISPK"));
				f.setISAUTOKEY(rs.getString("ISAUTOKEY"));
				f.setISLOCK(rs.getString("ISLOCK"));
				String key = f.getENTITYNAME() + "/" + f.getFIELDNAME();
				fieldList.put(key, f);
				EntityBean entity = (EntityBean)entityList.get(f.getENTITYNAME());
				entity.getFieldList().add(f);
				String keyCn = entity.getENTITYDESC() + "." + f.getFIELDDESC();
				fieldDescList.put(keyCn, f);
			}
			rs.close();
			pstmt.close();
			Iterator iter = entityList.values().iterator();
			while (iter.hasNext()) {
				EntityBean entity = (EntityBean) iter.next();
				entity.sort();
				entity.buildDesc();
			}
		} catch (Exception e) {
			e.printStackTrace();
			System.out.println("Cann't init EOSENTITYDEF information to cache, exception reson is:" + e.toString());
		} finally {
			try {
				if (rs != null) rs.close();
				if (pstmt != null) pstmt.close();
				broker.close();
			} catch (Exception e1) {				
				e1.printStackTrace();
			}
		}
		
	}
	
	/**
	 * 
	 * 初始化“角色和表的权限关系”信息
	 * 初始化“角色和字段的权限关系”信息
	 */
	private void initRole() {
		PersistenceBroker broker = null;
		PreparedStatement pstmt = null;
		ResultSet rs = null;
		try {
			broker = getBroker("-1");
			Connection conn = broker.getConnection();
			
			String sql = "select * from EOSROLEENTITY";
			pstmt = conn.prepareStatement(sql.toString());
			rs = pstmt.executeQuery();
			while (rs.next()) {
				RoleEntity e = new RoleEntity();
				e.setROLEID(rs.getString("ROLEID"));
				e.setENTITYNAME(rs.getString("ENTITYNAME"));
				e.setISADD(rs.getString("ISADD"));
				e.setISDEL(rs.getString("ISDEL"));
				e.setISMODIFY(rs.getString("ISMODIFY"));
				e.setISVIEW(rs.getString("ISVIEW"));
				String key = e.getROLEID() + "." + e.getENTITYNAME();
				roleEntity.put(key, e);
			}
			rs.close();
			pstmt.close();
			
			sql = "select * from EOSROLEFIELD";
			pstmt = conn.prepareStatement(sql.toString());
			rs = pstmt.executeQuery();
			while (rs.next()) {
				RoleField f = new RoleField();
				f.setROLEID(rs.getString("ROLEID"));
				f.setFIELDNAME(rs.getString("FIELDNAME"));
				f.setENTITYNAME(rs.getString("ENTITYNAME"));
				f.setISMODIFY(rs.getString("ISMODIFY"));
				f.setISVIEW(rs.getString("ISVIEW"));
				String key = f.getROLEID() + "." + f.getENTITYNAME() + "/" + f.getFIELDNAME();
				roleField.put(key, f);
			}
			rs.close();
			pstmt.close();
		} catch (Exception e) {
			e.printStackTrace();
			System.out.println("Cann't init role entity set to cache, exception reson is:" + e.toString());
		} finally {
			try {
				if (rs != null) rs.close();
				if (pstmt != null) pstmt.close();
				broker.close();
			} catch (Exception e1) {				
				e1.printStackTrace();
			}
		}
		
	}
	
	private static PersistenceBroker getBroker(String requestID) throws DBManagerException, ProcessException
	{
		EOSParameter para = new EOSParameter();
		para.setUnitId("fbrole");
		para.setUnitId("0");
		para.setRequestID(requestID);
		
		return para.getDBBroker();
	}
	
	/*
	 * 将缓存中的实体定义转换成XML DOM形式 。
	 * 
	 */
	public void toXmlNode(Element list){
		
		List keyList = Collections.synchronizedList(new ArrayList(entityList.keySet()));
		Collections.sort(keyList);
		Iterator iter = keyList.iterator();
		Document doc = list.getOwnerDocument();
		int row = 0;
		while (iter.hasNext()) {
			String entityName = (String)iter.next();
			EntityBean entity = (EntityBean) entityList.get(entityName);
			Element e = doc.createElement("EOSENTITYDEF");
			e.setAttribute("rowNum", String.valueOf(row));
			entity.toXmlNode(e);
			list.appendChild(e);
			row++;
		}
		list.setAttribute("rowNum", String.valueOf(row));
	}
	
	/*
	 * 根据实体名称取得实体元数据的详细信息
	 * 
	 */		
	public EntityBean getEntity(String entityName) {
		if (entityName == null)
			return null;
		EntityBean entity = (EntityBean)entityList.get(entityName);
		return entity;
	}

	/*
	 * 根据实体名称和字段名称取得字段元数据的详细信息
	 * 
	 */		
	public FieldBean getField(String entityName, String fieldName) {
		if (entityName == null || fieldName == null)
			return null;
		String p = entityName + "/" + fieldName;
		FieldBean f = (FieldBean)fieldList.get(p);
		return f;
	}
	
	/*
	 * 根据字段描述取得字段元数据的详细信息
	 * 
	 */		
	public FieldBean getFieldByDesc(String entityDesc, String fieldDesc) {
		if (entityDesc == null || fieldDesc == null)
			return null;
		String p = entityDesc + "." + fieldDesc;
		FieldBean f = (FieldBean)fieldDescList.get(p);
		return f;
	}

	/*
	 * 根据实体的描述取得实体元数据的详细信息
	 * 
	 */	
	public FieldBean getFieldByDesc(String entityFieldDesc) {
		if (entityFieldDesc == null)
			return null;
		FieldBean f = (FieldBean)fieldDescList.get(entityFieldDesc);
		return f;
	}
	

	/*
	 * 判断指定角色是否有对指定实体的访问权限
	 * 
	 */
	public RoleEntity getRoleEntity(String role, String entityName) {
		if (role == null || entityName ==  null)
			return null;
		String k = role + "." + entityName;
		return (RoleEntity)roleEntity.get(k);
	}
	
	/*
	 * 判断指定角色是否有对指定字段的访问权限
	 * 
	 */
	public RoleField getRoleField(String role, String entityName, String fieldName) {
		if (role == null || entityName ==  null || fieldName == null)
			return null;
		StringBuffer k = new StringBuffer(role);
		k.append(".").append(entityName).append("/").append(fieldName);
		return (RoleField)roleField.get(k.toString());
	}
	
	/**
	 * 
	 * @return Map 可供角色权限查看的数据实体列表
	 */
	public Map getViewableEntity(Node session){
		Map viewableList = new HashMap();
		
		Iterator iter = entityList.values().iterator();
		
		while (iter.hasNext()){
			EntityBean entity = (EntityBean) iter.next();
			
			if(entity.isView(session))
			{
				viewableList.put(entity.getENTITYNAME(),entity.getENTITYDESC());
			}
		}
		
		return viewableList;
	}
	
	
	/**
	 * 
	 * @return Map 可供角色权限查看的与某数据实体关联的实体列表
	 */
	public Map getReferEntity(Node session, String referEntity){
		Map viewableList = new HashMap();		
		Iterator iter = entityList.values().iterator();
		
		while (iter.hasNext()){
			EntityBean entity = (EntityBean) iter.next();
			
			List fieldList = entity.getFieldList();
			Iterator fieldIter = fieldList.iterator();
			
			if(entity.isView(session))
			{				
			    while(fieldIter.hasNext()){
				    FieldBean fieldBean = (FieldBean)fieldIter.next();
				    if(fieldBean.isReferEntity(referEntity)){				    	
					    viewableList.put(entity.getENTITYNAME(),entity.getENTITYDESC());
					    break;  
				    }
			    } 
		    }
	    }			
		return viewableList;
	}

	/**
	 * 返回有序的与某数据实体关联的实体列表
	 * @return Object[] 可供角色权限查看的与某数据实体关联的实体列表
	 */
	public Object [] getReferSortEntity(Node session, String referEntity){
		ArrayList viewableList = new ArrayList();
		Iterator iter = entityList.values().iterator();
		
		while (iter.hasNext()){
			EntityBean entity = (EntityBean) iter.next();
			
			List fieldList = entity.getFieldList();
			Iterator fieldIter = fieldList.iterator();
			
			if(entity.isView(session))
			{				
			    while(fieldIter.hasNext()){
				    FieldBean fieldBean = (FieldBean)fieldIter.next();
				    if(fieldBean.isReferEntity(referEntity)){
				    	viewableList.add(entity);					    
					    break;  
				    }
			    } 
		    }
	    }
		Object [] tmp = viewableList.toArray();		
		Arrays.sort(tmp);
		
		return tmp;
	}
	
	/**
	 * 获取对某角色未设置数据权限(并且此数据集可供外界查看)的数据集列表
	 * @param role  角色ID
	 * @return
	 */
	public Map getUnSetRoleEntity(String role)
	{
		Map unSetMap = new HashMap();
		
		Iterator iter = entityList.values().iterator();
		
		while (iter.hasNext()){
			EntityBean entity = (EntityBean) iter.next();
			
			//未设置角色权限、可供外界查看(未公开的数据集在此处同样过滤掉)
			if(!entity.isSetLimit(role) && entity.isView()) {				
				unSetMap.put(entity.getENTITYNAME(), entity.getENTITYDESC());
		    }	
	    }
		
		return unSetMap;
	}
	/**
	 * 获取对某角色未设置数据权限(并且此数据集可供外界查看)的数据集列表
	 * @param role  角色ID
	 * @return
	 */
	public Object [] getUnSetRoleSortEntity(String role)
	{
		ArrayList viewableList = new ArrayList();
		
		Iterator iter = entityList.values().iterator();
		
		while (iter.hasNext()){
			EntityBean entity = (EntityBean) iter.next();
			
			//未设置角色权限、可供外界查看(未公开的数据集在此处同样过滤掉)
			if(!entity.isSetLimit(role) && entity.isView()) {				
				viewableList.add(entity);
		    }	
	    }
		
		Object [] tmp = viewableList.toArray();		
		Arrays.sort(tmp);
		
		return tmp;
	}
	
}

⌨️ 快捷键说明

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