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  }