package com.ycsoft.report.query.datarole;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import com.ycsoft.commons.exception.ReportException;
import com.ycsoft.commons.helper.LoggerHelper;
import com.ycsoft.commons.helper.StringHelper;
import com.ycsoft.daos.core.JDBCException;
import com.ycsoft.report.bean.RepKeyLevel;
import com.ycsoft.report.commons.ReportConstants;
import com.ycsoft.report.dao.keycon.QueryKeyValueDao;
import com.ycsoft.report.dao.keycon.RepKeyLevelDao;
import com.ycsoft.report.query.key.Impl.QueryKeyValue;
import com.ycsoft.report.query.menory.MemoryCacheInit;
/**
* 报表数据权限定义管理器
*/
public class RepLevelManage implements MemoryCacheInit {
private static Map<String,RepKeyLevel> repkeylevelMap=new HashMap<String,RepKeyLevel>();
/**
* 报表字段权限取值
* Map(rep_key_level.key,Map<rep_key_level.s_data_right_type,Map<rule_id,rule取值>>>
*/
private static Map<String,Map<String,List<QueryKeyValue>>> sdatarightValueMap=new HashMap<String,Map<String,List<QueryKeyValue>>>();
public RepKeyLevel getKeyLevel(String key){
return repkeylevelMap.get(key);
}
public List<QueryKeyValue> getDatarightValues(String datatype,String rule_id){
return sdatarightValueMap.containsKey(datatype)?sdatarightValueMap.get(datatype).get(rule_id):null;
}
public String initAll() throws ReportException {
try {
List<RepKeyLevel> list=repKeyLevelDao.findAll();
Map<String,RepKeyLevel> temp_repkeylevelMap=new HashMap<String,RepKeyLevel>();
Map<String,Map<String,List<QueryKeyValue>>> temp_sdatarightValueMap=new HashMap<String,Map<String,List<QueryKeyValue>>>();
for(RepKeyLevel o:list){
temp_repkeylevelMap.put(o.getKey(), o);
if(StringHelper.isNotEmpty(o.getS_data_right_type())){
List<QueryKeyValue> rulesqllist=repKeyLevelDao.queryRuleSql(o.getS_data_right_type());
if(rulesqllist==null||rulesqllist.size()==0)
throw new ReportException(o.getS_data_right_type()+":s_data_right_type is undefined.");
Map<String,List<QueryKeyValue>> ruleValueMap=new HashMap<String,List<QueryKeyValue>>();
for(QueryKeyValue vo:rulesqllist){
ruleValueMap.put(vo.getId(), queryKeyValueDao.findList(ReportConstants.DATABASE_SYSTEM, vo.getName()));
}
temp_sdatarightValueMap.put(o.getS_data_right_type(), ruleValueMap);
}
}
repkeylevelMap=temp_repkeylevelMap;
sdatarightValueMap=temp_sdatarightValueMap;
return "";
} catch (ReportException e) {
throw e;
} catch (JDBCException e) {
throw new ReportException("初始化rep_key_level错误",e);
}
}
private RepKeyLevelDao repKeyLevelDao;
private QueryKeyValueDao queryKeyValueDao;
public QueryKeyValueDao getQueryKeyValueDao() {
return queryKeyValueDao;
}
public void setQueryKeyValueDao(QueryKeyValueDao queryKeyValueDao) {
this.queryKeyValueDao = queryKeyValueDao;
}
public RepKeyLevelDao getRepKeyLevelDao() {
return repKeyLevelDao;
}
public void setRepKeyLevelDao(RepKeyLevelDao repKeyLevelDao) {
this.repKeyLevelDao = repKeyLevelDao;
}
}