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 getAllLinkTables(){ List tableNameList = new ArrayList(); 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> getTableAndCols(){ Map> map = new HashMap>(); 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 colList = map.get(tableName); if(colList == null){ colList = new ArrayList(); 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; } }