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  }