github.com/TIBCOSoftware/flogo-lib@v0.5.9/app/property.go (about) 1 package app 2 3 import ( 4 "errors" 5 "fmt" 6 "sync" 7 8 "github.com/TIBCOSoftware/flogo-lib/logger" 9 ) 10 11 var ( 12 propertyProvider *PropertyProvider 13 propValueResolvers = make(map[string]PropertyValueResolver) 14 lock = &sync.Mutex{} 15 ) 16 17 func init() { 18 propertyProvider = &PropertyProvider{properties: make(map[string]interface{})} 19 } 20 21 func RegisterPropertyValueResolver(relType string, resolver PropertyValueResolver) error { 22 lock.Lock() 23 defer lock.Unlock() 24 _, ok := propValueResolvers[relType] 25 if ok { 26 errMsg := fmt.Sprintf("Property value resolver is already registered for type - '%s'", relType) 27 logger.Errorf(errMsg) 28 return errors.New(errMsg) 29 } 30 propValueResolvers[relType] = resolver 31 return nil 32 } 33 34 func GetPropertyValueResolver(relType string) PropertyValueResolver { 35 return propValueResolvers[relType] 36 } 37 38 func GetPropertyProvider() *PropertyProvider { 39 return propertyProvider 40 } 41 42 type PropertyProvider struct { 43 properties map[string]interface{} 44 } 45 46 // PropertyValueResolver used to resolve value from external configuration like env, file etc 47 type PropertyValueResolver interface { 48 // Should return value and true if the given key exists in the external configuration otherwise should return nil and false. 49 LookupValue(key string) (interface{}, bool) 50 } 51 52 func (pp *PropertyProvider) GetProperty(property string) (interface{}, bool) { 53 prop, exists := pp.properties[property] 54 return prop, exists 55 } 56 57 func (pp *PropertyProvider) SetProperty(property string, value interface{}) { 58 pp.properties[property] = value 59 } 60 61 func (pp *PropertyProvider) SetProperties(value map[string]interface{}) { 62 pp.properties = value 63 }