|
1 | 1 | package property |
2 | 2 |
|
3 | 3 | import ( |
4 | | - "encoding/json" |
5 | 4 | "github.com/project-flogo/core/support/log" |
6 | | - "io/ioutil" |
7 | | - "strings" |
8 | 5 | ) |
9 | 6 |
|
10 | 7 | func init() { |
@@ -36,69 +33,27 @@ func (m *Manager) GetProperty(name string) (interface{}, bool) { |
36 | 33 | return val, exists |
37 | 34 | } |
38 | 35 |
|
39 | | -func (m *Manager) AddExternalProperties(providerId string, overrides string, processors ...PostProcessor) error { |
| 36 | +func (m *Manager) Finalize(useExternalResolvers bool, processors ...PostProcessor) error { |
40 | 37 |
|
41 | | - provider := GetProvider(providerId) |
42 | | - newProps, err := loadExternalProperties(provider, overrides) |
43 | | - if err != nil { |
44 | | - return err |
45 | | - } |
46 | | - |
47 | | - for _, processor := range processors { |
48 | | - processor(newProps) |
49 | | - } |
50 | | - |
51 | | - for key, value := range newProps { |
52 | | - m.properties[key] = value |
53 | | - } |
54 | | - |
55 | | - return nil |
56 | | -} |
57 | | - |
58 | | -type PostProcessor func(properties map[string]interface{}) error |
| 38 | + logger := log.RootLogger() |
59 | 39 |
|
60 | | -func loadExternalProperties(provider Provider, overrides string) (map[string]interface{}, error) { |
| 40 | + if useExternalResolvers { |
| 41 | + for name := range m.properties { |
| 42 | + newVal, found := ResolveExternally(name) |
61 | 43 |
|
62 | | - props := make(map[string]interface{}) |
63 | | - |
64 | | - if overrides != "" { |
65 | | - if strings.HasSuffix(overrides, ".json") { |
66 | | - // Override through file |
67 | | - |
68 | | - propFile := overrides |
69 | | - file, e := ioutil.ReadFile(propFile) |
70 | | - if e != nil { |
71 | | - return nil, e |
72 | | - } |
73 | | - e = json.Unmarshal(file, &props) |
74 | | - |
75 | | - if e != nil { |
76 | | - return nil, e |
77 | | - } |
78 | | - } else if strings.ContainsRune(overrides, '=') { |
79 | | - // Override through P1=V1,P2=V2 |
80 | | - for _, pair := range strings.Split(overrides, ",") { |
81 | | - kv := strings.Split(pair, "=") |
82 | | - if len(kv) == 2 && kv[0] != "" { |
83 | | - key := strings.TrimSpace(kv[0]) |
84 | | - value := strings.TrimSpace(kv[1]) |
85 | | - props[key] = value |
86 | | - } else { |
87 | | - log.RootLogger().Warnf("'%s' is not valid override value. It must be in PropName=PropValue format.", pair) |
88 | | - } |
| 44 | + if !found { |
| 45 | + logger.Warnf("Property '%s' could not be resolved using external resolver(s) '%s'. Using default value.", name) |
| 46 | + } else { |
| 47 | + m.properties[name] = newVal |
89 | 48 | } |
90 | 49 | } |
91 | 50 | } |
92 | 51 |
|
93 | | - //look for properties that need to go to the provider |
94 | | - if provider != nil { |
95 | | - for key, value := range props { |
96 | | - if strVal, ok := value.(string); ok && strVal[0] == '$' { |
97 | | - val := provider.GetProperty(strVal[1:]) |
98 | | - props[key] = val |
99 | | - } |
100 | | - } |
| 52 | + for _, processor := range processors { |
| 53 | + processor(m.properties) |
101 | 54 | } |
102 | 55 |
|
103 | | - return props, nil |
| 56 | + return nil |
104 | 57 | } |
| 58 | + |
| 59 | +type PostProcessor func(properties map[string]interface{}) error |
0 commit comments