ludc
2025-01-16 986aa62ed00bee39363bab41b4eeb8259d446efd
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
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;
    }
    
 
}