gitee.com/zhongguo168a/gocodes@v0.0.0-20230609140523-e1828349603f/datax/schemax/configs/ConfigMap.go (about) 1 package configs 2 3 import ( 4 "gitee.com/zhongguo168a/gocodes/datax/mapx" 5 "sync" 6 ) 7 8 var ( 9 maps = map[string]*ConfigMap{} 10 mutex sync.RWMutex 11 ) 12 13 func GetConfigMap(id string) *ConfigMap { 14 mutex.Lock() 15 defer mutex.Unlock() 16 return maps[id] 17 } 18 19 func GetOrNewConfigMap(id string) *ConfigMap { 20 mutex.Lock() 21 defer mutex.Unlock() 22 m, has := maps[id] 23 if has == false { 24 m = NewConfigMap() 25 } 26 27 return m 28 } 29 30 func RemoveConfigMap(id string) { 31 mutex.Lock() 32 defer mutex.Unlock() 33 delete(maps, id) 34 } 35 36 func NewConfigMap() (obj *ConfigMap) { 37 obj = &ConfigMap{ 38 datas: map[string]map[string]interface{}{}, 39 } 40 return 41 } 42 43 type ConfigMap struct { 44 key string 45 datas map[string]map[string]interface{} 46 mutex sync.RWMutex 47 } 48 49 func (cf *ConfigMap) GetDatas() map[string]map[string]interface{} { 50 return cf.datas 51 } 52 53 func (cf *ConfigMap) FindConfig(id string) (result map[string]interface{}) { 54 cf.mutex.RLock() 55 defer cf.mutex.RUnlock() 56 return cf.datas[id] 57 } 58 59 func (cf *ConfigMap) ResetConfigs(datas map[string]map[string]interface{}) { 60 cf.mutex.Lock() 61 defer cf.mutex.Unlock() 62 cf.datas = map[string]map[string]interface{}{} 63 } 64 65 func (cf *ConfigMap) AddConfig(id string, value map[string]interface{}) { 66 cf.mutex.Lock() 67 defer cf.mutex.Unlock() 68 cf.datas[id] = value 69 } 70 func (cf *ConfigMap) GetById(id string) map[string]interface{} { 71 cf.mutex.RLock() 72 defer cf.mutex.RUnlock() 73 74 return cf.datas[id] 75 } 76 77 func (cf *ConfigMap) FindByCatalog(catalog string) (result *ConfigMap) { 78 result = NewConfigMap() 79 cf.mutex.RLock() 80 defer cf.mutex.RUnlock() 81 for key, val := range cf.datas { 82 _catalog := mapx.String(val, "_catalog") 83 if _catalog == catalog { 84 result.AddConfig(key, val) 85 } 86 } 87 return 88 } 89 90 func (cf *ConfigMap) FindByType(typ string) (result *ConfigMap) { 91 result = NewConfigMap() 92 cf.mutex.RLock() 93 defer cf.mutex.RUnlock() 94 for key, val := range cf.datas { 95 _type := mapx.String(val, "_type") 96 if _type == typ { 97 result.AddConfig(key, val) 98 } 99 } 100 return 101 }