package com.vci.server.omd.linktype.cache;
|
|
import java.io.IOException;
|
import java.sql.SQLException;
|
import java.util.ArrayList;
|
import java.util.HashMap;
|
import java.util.List;
|
import java.util.Map;
|
|
import org.apache.commons.lang3.StringUtils;
|
import org.dom4j.DocumentException;
|
import org.hibernate.Session;
|
|
import com.alibaba.fastjson.JSONObject;
|
import com.vci.common.exception.VciExceptionTool;
|
import com.vci.server.base.exception.ExceptionLocalHandler;
|
import com.vci.server.base.persistence.dao.HibernateSessionFactory;
|
import com.vci.server.base.utility.OmdHelper;
|
import com.vci.server.cache.CacheNames;
|
import com.vci.server.cache.redis.RedisUtil;
|
import com.vci.server.omd.linktype.service.LTService;
|
import com.vci.corba.common.VCIError;
|
import com.vci.corba.omd.ltm.LinkType;
|
|
public class LinkTypeCacheUtil {
|
private static volatile LinkTypeCacheUtil instance = null;
|
|
|
public static void initCache() {
|
try {
|
clearCache();
|
getInstance().initLintType();
|
} catch (SQLException e) {
|
// TODO Auto-generated catch block
|
e.printStackTrace();
|
} catch (IOException e) {
|
// TODO Auto-generated catch block
|
e.printStackTrace();
|
} catch (DocumentException e) {
|
// TODO Auto-generated catch block
|
e.printStackTrace();
|
}
|
}
|
|
public static void clearCache() {
|
RedisUtil.getInstance().del(CacheNames.LINKTYPES);
|
}
|
|
|
public static void setLinkType(LinkType item) {
|
if (item == null)
|
return;
|
|
String jsonObj = JSONObject.toJSONString(item);
|
|
RedisUtil.getInstance().hset(CacheNames.LINKTYPES, item.name.toLowerCase(), jsonObj);
|
}
|
|
|
public static void delLinkType(String name) {
|
if (StringUtils.isBlank(name))
|
return;
|
|
RedisUtil.getInstance().hdel(CacheNames.LINKTYPES, name.toLowerCase());
|
}
|
|
private LinkTypeCacheUtil() {
|
}
|
|
private static LinkTypeCacheUtil getInstance() {
|
if (instance == null) {
|
synchronized (LinkTypeCacheUtil.class) {
|
if (instance == null) {
|
instance = new LinkTypeCacheUtil();
|
}
|
}
|
}
|
|
return instance;
|
}
|
|
private void initLintType() throws SQLException, IOException, DocumentException {
|
LinkType[] lts = LTService.getInstance().getLinkTypes();
|
for (int i = 0; i < lts.length; i++) {
|
setLinkType(lts[i]);
|
}
|
}
|
|
public List<String> getAllLinkTables(){
|
List<String> tableNameList = new ArrayList<String>();
|
String sql = "select t.TABLE_NAME from user_tables t where t.TABLE_NAME like 'PLATFORMLT_%'";
|
Session session = HibernateSessionFactory.getSession();
|
List<?> list = session.createSQLQuery(sql).list();
|
for(int i = 0; i < list.size(); i++){
|
String tableName = (String) list.get(i);
|
tableNameList.add(tableName.toLowerCase());
|
}
|
return tableNameList;
|
}
|
|
/**
|
* tableName and columns Map
|
* @return
|
*/
|
public Map<String, List<String>> getTableAndCols(){
|
Map<String, List<String>> map = new HashMap<String, List<String>>();
|
int sysAbLength = OmdHelper.getLTSysAbItems().length;
|
String sql = "select t.TABLE_NAME, t.COLUMN_NAME from user_tab_columns t where t.TABLE_NAME like 'PLATFORMLT_%' and t.COLUMN_ID > " +
|
sysAbLength + " order by t.TABLE_NAME";
|
Session session = HibernateSessionFactory.getSession();
|
List<?> list = session.createSQLQuery(sql).list();
|
for(int i = 0; i < list.size(); i++){
|
Object[] o = (Object[]) list.get(i);
|
String tableName = ((String) o[0]).toLowerCase();
|
String colName = ((String) o[1]).toLowerCase();
|
List<String> colList = map.get(tableName);
|
if(colList == null){
|
colList = new ArrayList<String>();
|
colList.add(colName);
|
map.put(tableName, colList);
|
}else{
|
colList.add(colName);
|
}
|
}
|
return map;
|
}
|
|
|
|
protected VCIError getLocalVciError(String key, Throwable e) {
|
VCIError error = new VCIError(key, new String[]{VciExceptionTool.getExceptionStr(e), VciExceptionTool.getExceptionDetail(e)});
|
VCIError rsError = ExceptionLocalHandler.getInstance().getLocalString(error, "PLMLINK");
|
return rsError;
|
}
|
|
|
}
|