in pkg/util/source/inspector_yaml.go [89:211]
func (i YAMLInspector) parseStep(key string, content interface{}, meta *Metadata) error {
switch key {
case "bean":
if bean := i.catalog.GetArtifactByScheme("bean"); bean != nil {
meta.AddDependency(bean.GetDependencyID())
}
case "rest":
meta.ExposesHTTPServices = true
meta.RequiredCapabilities.Add(v1.CapabilityRest)
case "circuitBreaker":
meta.RequiredCapabilities.Add(v1.CapabilityCircuitBreaker)
case "marshal", "unmarshal":
if cm, ok := content.(map[interface{}]interface{}); ok {
if js, jsOk := cm["json"]; jsOk {
dataFormatID := defaultJSONDataFormat
if jsContent, jsContentOk := js.(map[interface{}]interface{}); jsContentOk {
if lib, libOk := jsContent["library"]; libOk {
dataFormatID = strings.ToLower(fmt.Sprintf("%s", lib))
}
}
if dfDep := i.catalog.GetArtifactByDataFormat(dataFormatID); dfDep != nil {
meta.AddDependency(dfDep.GetDependencyID())
}
}
}
case kamelet:
switch t := content.(type) {
case string:
AddKamelet(meta, kamelet+":"+t)
case map[interface{}]interface{}:
if name, ok := t["name"].(string); ok {
AddKamelet(meta, kamelet+":"+name)
}
}
}
var maybeURI string
switch t := content.(type) {
case string:
maybeURI = t
case map[interface{}]interface{}:
for k, v := range t {
if s, ok := k.(string); ok {
if dependency, ok := i.catalog.GetLanguageDependency(s); ok {
meta.AddDependency(dependency)
}
}
switch k {
case "steps":
if steps, stepsFormatOk := v.([]interface{}); stepsFormatOk {
if err := i.parseStepsParam(steps, meta); err != nil {
return err
}
}
case "uri":
if vv, isString := v.(string); isString {
builtURI := vv
// Inject parameters into URIs to allow other parts of the operator to inspect them
if params, pok := t["parameters"]; pok {
if paramMap, pmok := params.(map[interface{}]interface{}); pmok {
params := make(map[string]string, len(paramMap))
for k, v := range paramMap {
ks := fmt.Sprintf("%v", k)
vs := fmt.Sprintf("%v", v)
params[ks] = vs
}
builtURI = uri.AppendParameters(builtURI, params)
}
}
maybeURI = builtURI
}
case "language":
if s, ok := v.(string); ok {
if dependency, ok := i.catalog.GetLanguageDependency(s); ok {
meta.AddDependency(dependency)
}
} else if m, ok := v.(map[interface{}]interface{}); ok {
if err := i.parseStep("language", m, meta); err != nil {
return err
}
}
case "deadLetterUri":
if s, ok := v.(string); ok {
_, scheme := i.catalog.DecodeComponent(s)
if dfDep := i.catalog.GetArtifactByScheme(scheme.ID); dfDep != nil {
meta.AddDependency(dfDep.GetDependencyID())
}
if scheme.ID == kamelet {
AddKamelet(meta, s)
}
}
default:
// Always follow children because from/to uris can be nested
if ks, ok := k.(string); ok {
if _, ok := v.(map[interface{}]interface{}); ok {
if err := i.parseStep(ks, v, meta); err != nil {
return err
}
} else if ls, ok := v.([]interface{}); ok {
for _, el := range ls {
if err := i.parseStep(ks, el, meta); err != nil {
return err
}
}
}
}
}
}
}
if maybeURI != "" {
switch key {
case "from":
meta.FromURIs = append(meta.FromURIs, maybeURI)
case "to", "to-d", "toD", "wire-tap", "wireTap":
meta.ToURIs = append(meta.ToURIs, maybeURI)
}
}
return nil
}