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