This is an automated email from the ASF dual-hosted git repository.

nferraro pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/camel-k.git


The following commit(s) were added to refs/heads/master by this push:
     new 28192de  camel-rest should load automatically for routes using Rest 
DSL #862
28192de is described below

commit 28192de135e5c50ee46ff21cfcfe3f8e224d84d5
Author: lburgazzoli <lburgazz...@gmail.com>
AuthorDate: Wed Jul 24 15:34:20 2019 +0200

    camel-rest should load automatically for routes using Rest DSL #862
---
 pkg/metadata/metadata.go                   |  49 ++++----
 pkg/metadata/metadata_dependencies_test.go | 193 ++++++++++++++++++++++++++---
 pkg/metadata/types.go                      |  16 ++-
 pkg/trait/dependencies.go                  |   2 +-
 pkg/trait/dependencies_test.go             |  21 +++-
 pkg/util/source/inspector.go               |  40 +++---
 pkg/util/source/inspector_groovy.go        |   3 +-
 pkg/util/source/inspector_java_script.go   |   3 +-
 pkg/util/source/inspector_java_source.go   |   3 +-
 pkg/util/source/inspector_kotlin.go        |   3 +-
 pkg/util/source/inspector_xml.go           |   6 +-
 pkg/util/source/inspector_yaml.go          |   9 +-
 pkg/util/source/types.go                   |   4 +-
 pkg/util/source/util.go                    |  18 ---
 14 files changed, 274 insertions(+), 96 deletions(-)

diff --git a/pkg/metadata/metadata.go b/pkg/metadata/metadata.go
index 89a9b55..dd73921 100644
--- a/pkg/metadata/metadata.go
+++ b/pkg/metadata/metadata.go
@@ -18,28 +18,23 @@ limitations under the License.
 package metadata
 
 import (
-       "sort"
-
-       "github.com/apache/camel-k/pkg/util/camel"
+       "github.com/scylladb/go-set/strset"
 
        "github.com/apache/camel-k/pkg/apis/camel/v1alpha1"
        "github.com/apache/camel-k/pkg/gzip"
+       "github.com/apache/camel-k/pkg/util/camel"
        "github.com/apache/camel-k/pkg/util/log"
+
        src "github.com/apache/camel-k/pkg/util/source"
 )
 
 // ExtractAll returns metadata information from all listed source codes
 func ExtractAll(catalog *camel.RuntimeCatalog, sources []v1alpha1.SourceSpec) 
IntegrationMetadata {
        // neutral metadata
-       meta := IntegrationMetadata{
-               Metadata: src.Metadata{
-                       FromURIs:     []string{},
-                       ToURIs:       []string{},
-                       Dependencies: []string{},
-               },
-               PassiveEndpoints:    true,
-               RequiresHTTPService: false,
-       }
+       meta := NewIntegrationMetadata()
+       meta.PassiveEndpoints = true
+       meta.RequiresHTTPService = false
+
        for _, source := range sources {
                meta = merge(meta, Extract(catalog, source))
        }
@@ -47,23 +42,21 @@ func ExtractAll(catalog *camel.RuntimeCatalog, sources 
[]v1alpha1.SourceSpec) In
 }
 
 func merge(m1 IntegrationMetadata, m2 IntegrationMetadata) IntegrationMetadata 
{
-       deps := make(map[string]bool)
-       for _, d := range m1.Dependencies {
-               deps[d] = true
-       }
-       for _, d := range m2.Dependencies {
-               deps[d] = true
-       }
-       allDependencies := make([]string, 0)
-       for k := range deps {
-               allDependencies = append(allDependencies, k)
-       }
-       sort.Strings(allDependencies)
+       d := strset.Union(m1.Dependencies, m2.Dependencies)
+
+       f := make([]string, 0, len(m1.FromURIs)+len(m2.FromURIs))
+       f = append(f, m1.FromURIs...)
+       f = append(f, m2.FromURIs...)
+
+       t := make([]string, 0, len(m1.ToURIs)+len(m2.ToURIs))
+       t = append(t, m1.ToURIs...)
+       t = append(t, m2.ToURIs...)
+
        return IntegrationMetadata{
                Metadata: src.Metadata{
-                       FromURIs:     append(m1.FromURIs, m2.FromURIs...),
-                       ToURIs:       append(m1.ToURIs, m2.ToURIs...),
-                       Dependencies: allDependencies,
+                       FromURIs:     f,
+                       ToURIs:       t,
+                       Dependencies: d,
                },
                RequiresHTTPService: m1.RequiresHTTPService || 
m2.RequiresHTTPService,
                PassiveEndpoints:    m1.PassiveEndpoints && m2.PassiveEndpoints,
@@ -80,7 +73,7 @@ func Extract(catalog *camel.RuntimeCatalog, source 
v1alpha1.SourceSpec) Integrat
 
        language := source.InferLanguage()
 
-       m := IntegrationMetadata{}
+       m := NewIntegrationMetadata()
 
        // TODO: handle error
        _ = src.InspectorForLanguage(catalog, language).Extract(source, 
&m.Metadata)
diff --git a/pkg/metadata/metadata_dependencies_test.go 
b/pkg/metadata/metadata_dependencies_test.go
index 08fcb96..f0ad794 100644
--- a/pkg/metadata/metadata_dependencies_test.go
+++ b/pkg/metadata/metadata_dependencies_test.go
@@ -45,8 +45,8 @@ func TestDependenciesJavaSource(t *testing.T) {
        assert.Nil(t, err)
 
        meta := Extract(catalog, code)
-       // assert all dependencies are found and sorted (removing duplicates)
-       assert.Equal(t, []string{"camel:amqp", "camel:log", "camel:telegram", 
"camel:timer", "camel:twitter"}, meta.Dependencies)
+
+       assert.ElementsMatch(t, []string{"camel:amqp", "camel:log", 
"camel:telegram", "camel:timer", "camel:twitter"}, meta.Dependencies.List())
 }
 
 func TestDependenciesJavaScript(t *testing.T) {
@@ -68,8 +68,7 @@ func TestDependenciesJavaScript(t *testing.T) {
 
        meta := Extract(catalog, code)
 
-       // assert all dependencies are found and sorted (removing duplicates)
-       assert.Equal(t, []string{"camel:amqp", "camel:log", "camel:telegram", 
"camel:timer"}, meta.Dependencies)
+       assert.ElementsMatch(t, []string{"camel:amqp", "camel:log", 
"camel:telegram", "camel:timer"}, meta.Dependencies.List())
 }
 
 func TestDependenciesGroovy(t *testing.T) {
@@ -93,8 +92,7 @@ func TestDependenciesGroovy(t *testing.T) {
 
        meta := Extract(catalog, code)
 
-       // assert all dependencies are found and sorted (removing duplicates)
-       assert.Equal(t, []string{"camel:amqp", "camel:log", "camel:telegram", 
"camel:timer", "camel:twitter"}, meta.Dependencies)
+       assert.ElementsMatch(t, []string{"camel:amqp", "camel:log", 
"camel:telegram", "camel:timer", "camel:twitter"}, meta.Dependencies.List())
 }
 
 func TestDependencies(t *testing.T) {
@@ -115,8 +113,7 @@ func TestDependencies(t *testing.T) {
 
        meta := Extract(catalog, code)
 
-       // assert all dependencies are found and sorted (removing duplicates)
-       assert.Equal(t, []string{"camel:http4", "camel:log", "camel:mock", 
"camel:twitter"}, meta.Dependencies)
+       assert.ElementsMatch(t, []string{"camel:http4", "camel:log", 
"camel:mock", "camel:twitter"}, meta.Dependencies.List())
 }
 
 func TestJacksonDependency(t *testing.T) {
@@ -135,8 +132,7 @@ func TestJacksonDependency(t *testing.T) {
 
        meta := Extract(catalog, code)
 
-       // assert all dependencies are found and sorted (removing duplicates)
-       assert.Equal(t, []string{"camel:http4", "camel:jackson", "camel:log"}, 
meta.Dependencies)
+       assert.ElementsMatch(t, []string{"camel:http4", "camel:jackson", 
"camel:log"}, meta.Dependencies.List())
 }
 
 func TestHystrixDependency(t *testing.T) {
@@ -159,8 +155,97 @@ func TestHystrixDependency(t *testing.T) {
 
        meta := Extract(catalog, code)
 
-       // assert all dependencies are found and sorted (removing duplicates)
-       assert.Equal(t, []string{"camel:http4", "camel:hystrix", "camel:log"}, 
meta.Dependencies)
+       assert.ElementsMatch(t, []string{"camel:http4", "camel:hystrix", 
"camel:log"}, meta.Dependencies.List())
+}
+
+func TestRestDependency(t *testing.T) {
+       code := v1alpha1.SourceSpec{
+               DataSpec: v1alpha1.DataSpec{
+                       Name: "Request.groovy",
+                       Content: `
+                rest()
+                    .get("/api")
+                    .to("direct:get")
+                           from("http4:test")
+                    .to("log:info")
+                   `,
+               },
+               Language: v1alpha1.LanguageGroovy,
+       }
+
+       catalog, err := test.DefaultCatalog()
+       assert.Nil(t, err)
+
+       meta := Extract(catalog, code)
+
+       assert.ElementsMatch(t, []string{"camel:http4", "camel:rest", 
"camel:direct", "camel:log"}, meta.Dependencies.List())
+}
+
+func TestRestWithPathDependency(t *testing.T) {
+       code := v1alpha1.SourceSpec{
+               DataSpec: v1alpha1.DataSpec{
+                       Name: "Request.groovy",
+                       Content: `
+                rest("/test")
+                    .get("/api")
+                    .to("direct:get")
+                           from("http4:test")
+                    .to("log:info")
+                   `,
+               },
+               Language: v1alpha1.LanguageGroovy,
+       }
+
+       catalog, err := test.DefaultCatalog()
+       assert.Nil(t, err)
+
+       meta := Extract(catalog, code)
+
+       assert.ElementsMatch(t, []string{"camel:http4", "camel:rest", 
"camel:direct", "camel:log"}, meta.Dependencies.List())
+}
+
+func TestRestConfigurationDependency(t *testing.T) {
+       code := v1alpha1.SourceSpec{
+               DataSpec: v1alpha1.DataSpec{
+                       Name: "Request.groovy",
+                       Content: `
+                restConfiguration()
+                    .component("undertow")
+                           from("http4:test")
+                    .to("log:info")
+                   `,
+               },
+               Language: v1alpha1.LanguageGroovy,
+       }
+
+       catalog, err := test.DefaultCatalog()
+       assert.Nil(t, err)
+
+       meta := Extract(catalog, code)
+
+       assert.ElementsMatch(t, []string{"camel:http4", "camel:rest", 
"camel:log"}, meta.Dependencies.List())
+}
+
+func TestRestClosureDependency(t *testing.T) {
+       code := v1alpha1.SourceSpec{
+               DataSpec: v1alpha1.DataSpec{
+                       Name: "Request.groovy",
+                       Content: `
+                rest {
+                }    
+                           from("http4:test")
+                    .to("log:info")
+                   `,
+               },
+               Language: v1alpha1.LanguageGroovy,
+       }
+
+       catalog, err := test.DefaultCatalog()
+       assert.Nil(t, err)
+
+       meta := Extract(catalog, code)
+
+       assert.ElementsMatch(t, []string{"camel:http4", "camel:rest", 
"camel:log"}, meta.Dependencies.List())
 }
 
 func TestXMLHystrixDependency(t *testing.T) {
@@ -186,6 +271,86 @@ func TestXMLHystrixDependency(t *testing.T) {
 
        meta := Extract(catalog, code)
 
-       // assert all dependencies are found and sorted (removing duplicates)
-       assert.Equal(t, []string{"camel:direct", "camel:hystrix", 
"camel:kafka", "camel:log"}, meta.Dependencies)
+       assert.ElementsMatch(t, []string{"camel:direct", "camel:hystrix", 
"camel:kafka", "camel:log"}, meta.Dependencies.List())
+}
+
+func TestXMLRestDependency(t *testing.T) {
+       code := v1alpha1.SourceSpec{
+
+               DataSpec: v1alpha1.DataSpec{
+                       Name: "routes.xml",
+                       Content: `
+                       <rest path="/say">
+                     <get uri="/hello">
+                       <to uri="direct:hello"/>
+                     </get>
+                     <get uri="/bye" consumes="application/json">
+                       <to uri="direct:bye"/>
+                     </get>
+                     <post uri="/bye">
+                       <to uri="mock:update"/>
+                     </post>
+                   </rest>
+               `,
+               },
+               Language: v1alpha1.LanguageXML,
+       }
+
+       catalog, err := test.DefaultCatalog()
+       assert.Nil(t, err)
+
+       meta := Extract(catalog, code)
+
+       assert.ElementsMatch(t, []string{"camel:direct", "camel:rest", 
"camel:mock"}, meta.Dependencies.List())
+}
+
+const yamlWithRest = `
+- rest:
+    path: "/"
+    steps:
+        - to: "log:info"
+        - to: "direct:hello"            
+`
+const yamlWithHystrix = `
+- from:
+    uri: "direct:start"
+    steps:
+        - hystrix:
+            todo: "not implemented"                    
+`
+
+func TestYAMLRestDependency(t *testing.T) {
+       code := v1alpha1.SourceSpec{
+
+               DataSpec: v1alpha1.DataSpec{
+                       Name:    "routes.yaml",
+                       Content: yamlWithRest,
+               },
+               Language: v1alpha1.LanguageYaml,
+       }
+
+       catalog, err := test.DefaultCatalog()
+       assert.Nil(t, err)
+
+       meta := Extract(catalog, code)
+
+       assert.ElementsMatch(t, []string{"camel:direct", "camel:rest", 
"camel:log"}, meta.Dependencies.List())
+}
+
+func TestYAMLHystrixDependency(t *testing.T) {
+       code := v1alpha1.SourceSpec{
+
+               DataSpec: v1alpha1.DataSpec{
+                       Name:    "routes.yaml",
+                       Content: yamlWithHystrix,
+               },
+               Language: v1alpha1.LanguageYaml,
+       }
+
+       catalog, err := test.DefaultCatalog()
+       assert.Nil(t, err)
+
+       meta := Extract(catalog, code)
+
+       assert.ElementsMatch(t, []string{"camel:direct", "camel:hystrix"}, 
meta.Dependencies.List())
 }
diff --git a/pkg/metadata/types.go b/pkg/metadata/types.go
index 538553f..934da27 100644
--- a/pkg/metadata/types.go
+++ b/pkg/metadata/types.go
@@ -17,7 +17,10 @@ limitations under the License.
 
 package metadata
 
-import "github.com/apache/camel-k/pkg/util/source"
+import (
+       "github.com/apache/camel-k/pkg/util/source"
+       "github.com/scylladb/go-set/strset"
+)
 
 // IntegrationMetadata contains aggregate metadata about all Camel routes in a 
integrations
 type IntegrationMetadata struct {
@@ -28,3 +31,14 @@ type IntegrationMetadata struct {
        // external calls, including HTTP (useful to determine if the 
integration can scale to 0)
        PassiveEndpoints bool
 }
+
+// NewIntegrationMetadata --
+func NewIntegrationMetadata() IntegrationMetadata {
+       return IntegrationMetadata{
+               Metadata: source.Metadata{
+                       FromURIs:     make([]string, 0),
+                       ToURIs:       make([]string, 0),
+                       Dependencies: strset.New(),
+               },
+       }
+}
diff --git a/pkg/trait/dependencies.go b/pkg/trait/dependencies.go
index 453806c..7a2b94b 100644
--- a/pkg/trait/dependencies.go
+++ b/pkg/trait/dependencies.go
@@ -73,7 +73,7 @@ func (t *dependenciesTrait) Apply(e *Environment) error {
                // main required by default
                util.StringSliceUniqueAdd(&dependencies, 
"mvn:org.apache.camel.k/camel-k-runtime-main")
 
-               for _, d := range meta.Dependencies {
+               for _, d := range meta.Dependencies.List() {
                        util.StringSliceUniqueAdd(&dependencies, d)
                }
        }
diff --git a/pkg/trait/dependencies_test.go b/pkg/trait/dependencies_test.go
index e795fa8..fd9ae24 100644
--- a/pkg/trait/dependencies_test.go
+++ b/pkg/trait/dependencies_test.go
@@ -80,7 +80,11 @@ func TestIntegrationDefaultDeps(t *testing.T) {
        assert.Nil(t, err)
        assert.ElementsMatch(
                t,
-               []string{"camel:direct", "camel:log", 
"mvn:org.apache.camel.k/camel-k-loader-java", 
"mvn:org.apache.camel.k/camel-k-runtime-main"},
+               []string{
+                       "camel:direct",
+                       "camel:log",
+                       "mvn:org.apache.camel.k/camel-k-loader-java",
+                       "mvn:org.apache.camel.k/camel-k-runtime-main"},
                e.Integration.Status.Dependencies,
        )
 }
@@ -121,7 +125,13 @@ func TestIntegrationCustomDeps(t *testing.T) {
        err = trait.Apply(e)
        assert.Nil(t, err)
        assert.ElementsMatch(t,
-               []string{"camel:direct", "camel:log", "camel:undertow", 
"org.foo:bar", "mvn:org.apache.camel.k/camel-k-loader-java", 
"mvn:org.apache.camel.k/camel-k-runtime-main"},
+               []string{
+                       "camel:direct",
+                       "camel:log",
+                       "camel:undertow",
+                       "org.foo:bar",
+                       "mvn:org.apache.camel.k/camel-k-loader-java",
+                       "mvn:org.apache.camel.k/camel-k-runtime-main"},
                e.Integration.Status.Dependencies,
        )
 }
@@ -168,7 +178,12 @@ func TestIntegrationAutoGeneratedDeps(t *testing.T) {
        assert.Nil(t, err)
        assert.ElementsMatch(
                t,
-               []string{"camel:direct", "camel:log", 
"mvn:org.apache.camel.k/camel-k-loader-java", 
"mvn:org.apache.camel.k/camel-k-loader-xml",
+               []string{
+                       "camel:direct",
+                       "camel:log",
+                       "camel:rest",
+                       "mvn:org.apache.camel.k/camel-k-loader-java",
+                       "mvn:org.apache.camel.k/camel-k-loader-xml",
                        "mvn:org.apache.camel.k/camel-k-runtime-main"},
                e.Integration.Status.Dependencies,
        )
diff --git a/pkg/util/source/inspector.go b/pkg/util/source/inspector.go
index fee4de6..65263cd 100644
--- a/pkg/util/source/inspector.go
+++ b/pkg/util/source/inspector.go
@@ -19,29 +19,29 @@ package source
 
 import (
        "regexp"
-       "sort"
        "strings"
 
        "github.com/apache/camel-k/pkg/apis/camel/v1alpha1"
        "github.com/apache/camel-k/pkg/util"
        "github.com/apache/camel-k/pkg/util/camel"
-       "github.com/scylladb/go-set/strset"
 )
 
 var (
-       singleQuotedFrom = 
regexp.MustCompile(`from\s*\(\s*'([a-z0-9-]+:[^']+)'`)
-       doubleQuotedFrom = 
regexp.MustCompile(`from\s*\(\s*"([a-z0-9-]+:[^"]+)"`)
-       singleQuotedTo   = 
regexp.MustCompile(`\.to\s*\(\s*'([a-z0-9-]+:[^']+)'`)
-       singleQuotedToD  = 
regexp.MustCompile(`\.toD\s*\(\s*'([a-z0-9-]+:[^']+)'`)
-       singleQuotedToF  = 
regexp.MustCompile(`\.toF\s*\(\s*'([a-z0-9-]+:[^']+)'`)
-       doubleQuotedTo   = 
regexp.MustCompile(`\.to\s*\(\s*"([a-z0-9-]+:[^"]+)"`)
-       doubleQuotedToD  = 
regexp.MustCompile(`\.toD\s*\(\s*"([a-z0-9-]+:[^"]+)"`)
-       doubleQuotedToF  = 
regexp.MustCompile(`\.toF\s*\(\s*"([a-z0-9-]+:[^"]+)"`)
+       singleQuotedFrom = 
regexp.MustCompile(`from\s*\(\s*'([a-zA-Z0-9-]+:[^']+)'`)
+       doubleQuotedFrom = 
regexp.MustCompile(`from\s*\(\s*"([a-zA-Z0-9-]+:[^"]+)"`)
+       singleQuotedTo   = 
regexp.MustCompile(`\.to\s*\(\s*'([a-zA-Z0-9-]+:[^']+)'`)
+       singleQuotedToD  = 
regexp.MustCompile(`\.toD\s*\(\s*'([a-zA-Z0-9-]+:[^']+)'`)
+       singleQuotedToF  = 
regexp.MustCompile(`\.toF\s*\(\s*'([a-zA-Z0-9-]+:[^']+)'`)
+       doubleQuotedTo   = 
regexp.MustCompile(`\.to\s*\(\s*"([a-zA-Z0-9-]+:[^"]+)"`)
+       doubleQuotedToD  = 
regexp.MustCompile(`\.toD\s*\(\s*"([a-zA-Z0-9-]+:[^"]+)"`)
+       doubleQuotedToF  = 
regexp.MustCompile(`\.toF\s*\(\s*"([a-zA-Z0-9-]+:[^"]+)"`)
 
        additionalDependencies = map[string]string{
-               ".*JsonLibrary\\.Jackson.*": "camel:jackson",
-               ".*\\.hystrix().*":          "camel:hystrix",
-               ".*<hystrix>.*":             "camel:hystrix",
+               `.*JsonLibrary\.Jackson.*`:      "camel:jackson",
+               `.*\.hystrix().*`:               "camel:hystrix",
+               `.*restConfiguration().*`:       "camel:rest",
+               `.*rest(("[a-zA-Z0-9-/]+")*).*`: "camel:rest",
+               `^\s*rest\s*{.*`:                "camel:rest",
        }
 )
 
@@ -102,30 +102,22 @@ func (i baseInspector) Extract(v1alpha1.SourceSpec, 
*Metadata) error {
 }
 
 // discoverDependencies returns a list of dependencies required by the given 
source code
-func (i *baseInspector) discoverDependencies(source v1alpha1.SourceSpec, meta 
*Metadata) []string {
+func (i *baseInspector) discoverDependencies(source v1alpha1.SourceSpec, meta 
*Metadata) {
        uris := util.StringSliceJoin(meta.FromURIs, meta.ToURIs)
-       candidates := strset.New()
-       candidates.Add(meta.Dependencies...)
 
        for _, uri := range uris {
                candidateComp := i.decodeComponent(uri)
                if candidateComp != "" {
-                       candidates.Add(candidateComp)
+                       meta.Dependencies.Add(candidateComp)
                }
        }
 
        for pattern, dep := range additionalDependencies {
                pat := regexp.MustCompile(pattern)
                if pat.MatchString(source.Content) {
-                       candidates.Add(dep)
+                       meta.Dependencies.Add(dep)
                }
        }
-
-       components := candidates.List()
-
-       sort.Strings(components)
-
-       return components
 }
 
 func (i *baseInspector) decodeComponent(uri string) string {
diff --git a/pkg/util/source/inspector_groovy.go 
b/pkg/util/source/inspector_groovy.go
index 62db629..4723956 100644
--- a/pkg/util/source/inspector_groovy.go
+++ b/pkg/util/source/inspector_groovy.go
@@ -46,7 +46,8 @@ func (i GroovyInspector) Extract(source v1alpha1.SourceSpec, 
meta *Metadata) err
 
        meta.FromURIs = append(meta.FromURIs, from...)
        meta.ToURIs = append(meta.ToURIs, to...)
-       meta.Dependencies = i.discoverDependencies(source, meta)
+
+       i.discoverDependencies(source, meta)
 
        return nil
 }
diff --git a/pkg/util/source/inspector_java_script.go 
b/pkg/util/source/inspector_java_script.go
index 87d53ea..0b23a6a 100644
--- a/pkg/util/source/inspector_java_script.go
+++ b/pkg/util/source/inspector_java_script.go
@@ -46,7 +46,8 @@ func (i JavaScriptInspector) Extract(source 
v1alpha1.SourceSpec, meta *Metadata)
 
        meta.FromURIs = append(meta.FromURIs, from...)
        meta.ToURIs = append(meta.ToURIs, to...)
-       meta.Dependencies = i.discoverDependencies(source, meta)
+
+       i.discoverDependencies(source, meta)
 
        return nil
 }
diff --git a/pkg/util/source/inspector_java_source.go 
b/pkg/util/source/inspector_java_source.go
index 938e75b..0bb0404 100644
--- a/pkg/util/source/inspector_java_source.go
+++ b/pkg/util/source/inspector_java_source.go
@@ -42,7 +42,8 @@ func (i JavaSourceInspector) Extract(source 
v1alpha1.SourceSpec, meta *Metadata)
 
        meta.FromURIs = append(meta.FromURIs, from...)
        meta.ToURIs = append(meta.ToURIs, to...)
-       meta.Dependencies = i.discoverDependencies(source, meta)
+
+       i.discoverDependencies(source, meta)
 
        return nil
 }
diff --git a/pkg/util/source/inspector_kotlin.go 
b/pkg/util/source/inspector_kotlin.go
index 9277f9b..1268455 100644
--- a/pkg/util/source/inspector_kotlin.go
+++ b/pkg/util/source/inspector_kotlin.go
@@ -42,7 +42,8 @@ func (i KotlinInspector) Extract(source v1alpha1.SourceSpec, 
meta *Metadata) err
 
        meta.FromURIs = append(meta.FromURIs, from...)
        meta.ToURIs = append(meta.ToURIs, to...)
-       meta.Dependencies = i.discoverDependencies(source, meta)
+
+       i.discoverDependencies(source, meta)
 
        return nil
 }
diff --git a/pkg/util/source/inspector_xml.go b/pkg/util/source/inspector_xml.go
index 923bd40..fbf13a2 100644
--- a/pkg/util/source/inspector_xml.go
+++ b/pkg/util/source/inspector_xml.go
@@ -43,6 +43,10 @@ func (i XMLInspector) Extract(source v1alpha1.SourceSpec, 
meta *Metadata) error
 
                if se, ok := t.(xml.StartElement); ok {
                        switch se.Name.Local {
+                       case "rest", "restConfiguration":
+                               meta.Dependencies.Add("camel:rest")
+                       case "hystrix":
+                               meta.Dependencies.Add("camel:hystrix")
                        case "from", "fromF":
                                for _, a := range se.Attr {
                                        if a.Name.Local == "uri" {
@@ -59,7 +63,7 @@ func (i XMLInspector) Extract(source v1alpha1.SourceSpec, 
meta *Metadata) error
                }
        }
 
-       meta.Dependencies = i.discoverDependencies(source, meta)
+       i.discoverDependencies(source, meta)
 
        return nil
 }
diff --git a/pkg/util/source/inspector_yaml.go 
b/pkg/util/source/inspector_yaml.go
index 64676d6..93e8781 100644
--- a/pkg/util/source/inspector_yaml.go
+++ b/pkg/util/source/inspector_yaml.go
@@ -47,12 +47,19 @@ func (inspector YAMLInspector) Extract(source 
v1alpha1.SourceSpec, meta *Metadat
                }
        }
 
-       meta.Dependencies = inspector.discoverDependencies(source, meta)
+       inspector.discoverDependencies(source, meta)
 
        return nil
 }
 
 func (inspector YAMLInspector) parseStep(key string, content interface{}, meta 
*Metadata) error {
+       switch key {
+       case "rest":
+               meta.Dependencies.Add("camel:rest")
+       case "hystrix":
+               meta.Dependencies.Add("camel:hystrix")
+       }
+
        var maybeURI string
 
        switch t := content.(type) {
diff --git a/pkg/util/source/types.go b/pkg/util/source/types.go
index 1b89b12..09f727a 100644
--- a/pkg/util/source/types.go
+++ b/pkg/util/source/types.go
@@ -17,6 +17,8 @@ limitations under the License.
 
 package source
 
+import "github.com/scylladb/go-set/strset"
+
 // Metadata --
 type Metadata struct {
        // All starting URIs of defined routes
@@ -24,5 +26,5 @@ type Metadata struct {
        // All end URIs of defined routes
        ToURIs []string
        // All inferred dependencies required to run the integration
-       Dependencies []string
+       Dependencies *strset.Set
 }
diff --git a/pkg/util/source/util.go b/pkg/util/source/util.go
deleted file mode 100644
index 63c5f51..0000000
--- a/pkg/util/source/util.go
+++ /dev/null
@@ -1,18 +0,0 @@
-/*
-Licensed to the Apache Software Foundation (ASF) under one or more
-contributor license agreements.  See the NOTICE file distributed with
-this work for additional information regarding copyright ownership.
-The ASF licenses this file to You under the Apache License, Version 2.0
-(the "License"); you may not use this file except in compliance with
-the License.  You may obtain a copy of the License at
-
-   http://www.apache.org/licenses/LICENSE-2.0
-
-Unless required by applicable law or agreed to in writing, software
-distributed under the License is distributed on an "AS IS" BASIS,
-WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-See the License for the specific language governing permissions and
-limitations under the License.
-*/
-
-package source

Reply via email to