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  }