77 "strings"
88
99 "github.com/debricked/cli/internal/resolution/job"
10+ "github.com/debricked/cli/internal/resolution/pm/maven"
1011 "github.com/debricked/cli/internal/resolution/pm/util"
1112)
1213
@@ -20,50 +21,80 @@ const (
2021
2122type Job struct {
2223 job.BaseJob
23- cmdFactory ICmdFactory
24- buildService IBuildService
24+ cmdFactory ICmdFactory
25+ buildService IBuildService
26+ mavenPomService maven.IPomService
27+ mavenCmdFactory maven.ICmdFactory
2528}
2629
27- func NewJob (file string , cmdFactory ICmdFactory , buildService IBuildService ) * Job {
30+ func NewJob (file string , cmdFactory ICmdFactory , buildService IBuildService , mavenPomService maven. IPomService , mavenCmdFactory maven. ICmdFactory ) * Job {
2831 return & Job {
29- BaseJob : job .NewBaseJob (file ),
30- cmdFactory : cmdFactory ,
31- buildService : buildService ,
32+ BaseJob : job .NewBaseJob (file ),
33+ cmdFactory : cmdFactory ,
34+ buildService : buildService ,
35+ mavenPomService : mavenPomService ,
36+ mavenCmdFactory : mavenCmdFactory ,
3237 }
3338}
3439
3540func (j * Job ) Run () {
41+ if err := j .parseBuildFile (); err != nil {
42+ return
43+ }
44+
45+ if err := j .generatePomFile (); err != nil {
46+ return
47+ }
48+
49+ pomFile , err := j .locatePomFile ()
50+ if err != nil {
51+ return
52+ }
53+
54+ pomXml , err := j .convertToPomXml (pomFile )
55+ if err != nil {
56+ return
57+ }
58+
59+ if err := j .parseAndProcessWithMaven (pomXml ); err != nil {
60+ return
61+ }
62+ }
63+
64+ func (j * Job ) parseBuildFile () error {
3665 status := "parsing SBT build file"
3766 j .SendStatus (status )
3867
3968 file := j .GetFile ()
4069 _ , err := j .buildService .ParseBuildModules (file )
41-
4270 if err != nil {
4371 doc := err .Error ()
44-
4572 if doc == "EOF" {
4673 doc = "This file doesn't contain valid SBT build content"
4774 }
4875
4976 parsingError := util .NewPMJobError (err .Error ())
5077 parsingError .SetStatus (status )
5178 parsingError .SetDocumentation (doc )
52-
5379 j .Errors ().Critical (parsingError )
5480
55- return
81+ return err
5682 }
5783
84+ return nil
85+ }
86+
87+ func (j * Job ) generatePomFile () error {
88+ file := j .GetFile ()
5889 workingDirectory := filepath .Dir (filepath .Clean (file ))
5990 cmd , err := j .cmdFactory .MakePomCmd (workingDirectory )
6091 if err != nil {
6192 j .handleError (util .NewPMJobError (err .Error ()))
6293
63- return
94+ return err
6495 }
6596
66- status = "generating Maven POM file"
97+ status : = "generating Maven POM file"
6798 j .SendStatus (status )
6899
69100 output , err := cmd .CombinedOutput ()
@@ -75,14 +106,21 @@ func (j *Job) Run() {
75106
76107 cmdErr := util .NewPMJobError (errContent )
77108 cmdErr .SetStatus (status )
78-
79109 j .handleError (cmdErr )
110+
111+ return err
80112 }
81113
82- status = "locating generated POM file"
114+ return nil
115+ }
116+
117+ func (j * Job ) locatePomFile () (string , error ) {
118+ file := j .GetFile ()
119+ workingDirectory := filepath .Dir (filepath .Clean (file ))
120+ status := "locating generated POM file"
83121 j .SendStatus (status )
84122
85- pomFile , err := FindPomFile (workingDirectory )
123+ pomFile , err := j . buildService . FindPomFile (workingDirectory )
86124 if err != nil || pomFile == "" {
87125 errorMsg := "No pom file found in target directory"
88126 if err != nil {
@@ -91,27 +129,100 @@ func (j *Job) Run() {
91129
92130 cmdErr := util .NewPMJobError (errorMsg )
93131 cmdErr .SetStatus (status )
94-
95132 j .handleError (cmdErr )
96133
97- return
134+ return "" , err
98135 }
99136
100- status = "converting POM file to pom.xml"
137+ return pomFile , nil
138+ }
139+
140+ func (j * Job ) convertToPomXml (pomFile string ) (string , error ) {
141+ file := j .GetFile ()
142+ workingDirectory := filepath .Dir (filepath .Clean (file ))
143+ status := "converting POM file to pom.xml"
101144 j .SendStatus (status )
102145
103- pomXml , err := RenamePomToXml (pomFile , workingDirectory )
146+ pomXml , err := j . buildService . RenamePomToXml (pomFile , workingDirectory )
104147 if err != nil {
105148 cmdErr := util .NewPMJobError (err .Error ())
106149 cmdErr .SetStatus (status )
107-
108150 j .handleError (cmdErr )
109151
110- return
152+ return "" , err
153+ }
154+
155+ return pomXml , nil
156+ }
157+
158+ func (j * Job ) parseAndProcessWithMaven (pomXml string ) error {
159+ status := "parsing Maven POM file"
160+ j .SendStatus (status )
161+
162+ if err := j .parseMavenPom (pomXml ); err != nil {
163+ return err
164+ }
165+
166+ file := j .GetFile ()
167+ workingDirectory := filepath .Dir (filepath .Clean (file ))
168+ if err := j .createMavenDependencyGraph (workingDirectory , pomXml ); err != nil {
169+ return err
111170 }
112171
113172 status = fmt .Sprintf ("processing dependencies with Maven resolver using %s" , pomXml )
114173 j .SendStatus (status )
174+
175+ return nil
176+ }
177+
178+ func (j * Job ) parseMavenPom (pomXml string ) error {
179+ status := "parsing Maven POM file"
180+ j .SendStatus (status )
181+
182+ _ , err := j .mavenPomService .ParsePomModules (pomXml )
183+ if err != nil {
184+ doc := err .Error ()
185+ if doc == "EOF" {
186+ doc = "This file doesn't contain valid XML"
187+ }
188+
189+ parsingError := util .NewPMJobError (err .Error ())
190+ parsingError .SetStatus (status )
191+ parsingError .SetDocumentation (doc )
192+ j .Errors ().Critical (parsingError )
193+
194+ return err
195+ }
196+
197+ return nil
198+ }
199+
200+ func (j * Job ) createMavenDependencyGraph (workingDirectory string , pomXml string ) error {
201+ status := "creating Maven dependency graph"
202+ j .SendStatus (status )
203+
204+ cmd , err := j .mavenCmdFactory .MakeDependencyTreeCmd (workingDirectory )
205+ if err != nil {
206+ j .handleError (util .NewPMJobError (err .Error ()))
207+
208+ return err
209+ }
210+
211+ output , err := cmd .Output ()
212+ if err != nil {
213+ errContent := err .Error ()
214+ if output != nil {
215+ errContent = string (output )
216+ }
217+
218+ cmdErr := util .NewPMJobError (errContent )
219+ cmdErr .SetStatus (status )
220+ j .handleError (cmdErr )
221+
222+ return err
223+ }
224+
225+ return nil
115226}
116227
117228func (j * Job ) handleError (cmdError job.IError ) {
0 commit comments