github.com/TIBCOSoftware/flogo-lib@v0.5.9/core/mapper/exprmapper/expression/function/registry.go (about) 1 package function 2 3 import ( 4 "fmt" 5 "strings" 6 "sync" 7 8 "github.com/TIBCOSoftware/flogo-lib/logger" 9 ) 10 11 var log = logger.GetLogger("function-registry") 12 13 type Function interface { 14 GetName() string 15 GetCategory() string 16 } 17 18 var ( 19 functionsMu sync.Mutex 20 functions = make(map[string]Function) 21 ) 22 23 func Registry(f Function) { 24 functionsMu.Lock() 25 26 defer functionsMu.Unlock() 27 28 if f == nil { 29 log.Errorf("Cannot rregistry nil function") 30 return 31 } 32 33 log.Debugf("Registry function name %s tag %s", f.GetName(), f.GetCategory()) 34 35 var registeName string 36 if f.GetCategory() != "" && len(strings.TrimSpace(f.GetCategory())) > 0 { 37 registeName = f.GetCategory() + "." + f.GetName() 38 } else { 39 registeName = f.GetName() 40 } 41 functions[strings.ToLower(registeName)] = f 42 } 43 44 func GetFunction(name string) (Function, error) { 45 name = strings.ToLower(name) 46 f, ok := functions[name] 47 if ok { 48 return f, nil 49 } 50 for k, _ := range functions { 51 log.Debugf("function %s", k) 52 } 53 return nil, fmt.Errorf("No function %s found", name) 54 } 55 56 func GetFunctionByTag(name string, tag string) (Function, error) { 57 regName := strings.ToLower(getRegisteName(name, tag)) 58 f, ok := functions[regName] 59 if ok { 60 return f, nil 61 } 62 63 for k, _ := range functions { 64 log.Debugf("function %s", k) 65 } 66 return nil, fmt.Errorf("No function name %s tag %s found", name, tag) 67 } 68 69 func ListAllFunctions() []string { 70 var keys []string 71 for k, _ := range functions { 72 keys = append(keys, k) 73 } 74 return keys 75 } 76 77 func getRegisteName(name, tag string) string { 78 var registeName string 79 if tag != "" && len(strings.TrimSpace(tag)) > 0 { 80 registeName = tag + "." + name 81 } else { 82 registeName = name 83 } 84 return registeName 85 }