github.com/TIBCOSoftware/flogo-lib@v0.5.9/core/activity/registry.go (about) 1 package activity 2 3 import ( 4 "sync" 5 6 "github.com/TIBCOSoftware/flogo-lib/logger" 7 ) 8 9 var ( 10 //todo do we need a mutex, all currently loaded at startup 11 activitiesMu sync.Mutex 12 activities = make(map[string]Activity) 13 ) 14 15 // Register registers the specified activity 16 func Register(activity Activity) { 17 activitiesMu.Lock() 18 defer activitiesMu.Unlock() 19 20 if activity == nil { 21 panic("cannot register 'nil' activity") 22 } 23 24 logger.Debugf("Registering activity [ %s ] which has version [ %s ]", activity.Metadata().ID, activity.Metadata().Version) 25 26 id := activity.Metadata().ID 27 28 if _, dup := activities[id]; dup { 29 panic("activity already registered: " + id) 30 } 31 32 // copy on write to avoid synchronization on access 33 newActivities := make(map[string]Activity, len(activities)) 34 35 for k, v := range activities { 36 newActivities[k] = v 37 } 38 39 newActivities[id] = activity 40 activities = newActivities 41 } 42 43 // Activities gets all the registered activities 44 func Activities() []Activity { 45 46 var curActivities = activities 47 48 list := make([]Activity, 0, len(curActivities)) 49 50 for _, value := range curActivities { 51 list = append(list, value) 52 } 53 54 return list 55 } 56 57 // Get gets specified activity 58 func Get(id string) Activity { 59 //var curActivities = activities 60 return activities[id] 61 }