@@ -382,3 +382,119 @@ func (s *SPDX) PrintRels(np int) {
382382 table .Println ()
383383
384384}
385+
386+ func removeDuplicateStr (strSlice []string ) []string {
387+ allKeys := make (map [string ]bool )
388+ list := []string {}
389+ for _ , item := range strSlice {
390+ if _ , value := allKeys [item ]; ! value {
391+ allKeys [item ] = true
392+ list = append (list , item )
393+ }
394+ }
395+ return list
396+ }
397+
398+ // func (s *SPDX) getrelspdxelem(spdxID string) (string, Relationships) {
399+ // rels := s.Relationships
400+ // for _, rel := range rels {
401+ // if rel.SpdxElementID == spdxID {
402+ // return rel.RelatedSpdxElement, rel
403+ // }
404+ // }
405+ // return "", Relationships{}
406+ // }
407+ func (s * SPDX ) getdependson (d int , rel1 Relationships ) {
408+ pkgs := s .Packages
409+ var nextSPDXidDetail string
410+ var SPDXidDetail string
411+ // fmt.Println("===================DEPENDS_ON======================")
412+ for _ , pkg := range pkgs {
413+ if pkg .Spdxid == rel1 .SpdxElementID {
414+ SPDXidDetail = fmt .Sprintf ("%v %v version: %v" , blue (pkg .Name ), yellow ("|" ), blue (pkg .VersionInfo ))
415+ }
416+ if pkg .Spdxid == rel1 .RelatedSpdxElement {
417+ nextSPDXidDetail = fmt .Sprintf ("%v %v version: %v" , blue (pkg .Name ), yellow ("|" ), blue (pkg .VersionInfo ))
418+ }
419+
420+ }
421+
422+ fmt .Println (fmt .Sprintf ("%v =====> %v Pkg %v =====> %v" , SPDXidDetail , green ("DEPENDS_ON" ), blue (fmt .Sprintf ("%d" , d )), nextSPDXidDetail ))
423+ }
424+ func (s * SPDX ) getspdxpkg (d int , spdxID string , rel1 Relationships ) {
425+ pkgs := s .Packages
426+ var filespdxids []string
427+ var SPDXidDetail string
428+ // var nextSPDXid string
429+ // var rel Relationships
430+ for _ , pkg := range pkgs {
431+ if pkg .Spdxid == spdxID {
432+ SPDXidDetail = fmt .Sprintf ("%v | version: %v" , yellow (pkg .Name ), yellow (pkg .VersionInfo ))
433+ if len (pkg .HasFiles ) > 0 {
434+
435+ filespdxids = pkg .HasFiles
436+ for i , filespdx := range filespdxids {
437+ s .getspdxfile (i , filespdx , SPDXidDetail )
438+ }
439+ }
440+ // d++
441+ // nextSPDXid, rel = s.getrelspdxelem(spdxID)
442+ // if nextSPDXid != "" {
443+ // s.getspdxpkg(d, nextSPDXid, rel)
444+ // }
445+ }
446+ }
447+ }
448+ func (s * SPDX ) getspdxfile (i int , spdxID string , SPDXidDetail string ) {
449+ files := s .Files
450+ for _ , file := range files {
451+ if file .Spdxid == spdxID {
452+ i ++
453+ fmt .Println (green (fmt .Sprintf ("%v %v %v File %v %v %v" , SPDXidDetail , yellow ("---->" ), red ("CONTAINS" ), blue (fmt .Sprintf ("%d" , i )), yellow ("---->" ), red (file .FileName ))))
454+ }
455+
456+ }
457+ // n = 0
458+ // return ""
459+ }
460+
461+ func (s * SPDX ) PrintDigRels () {
462+ rels := s .Relationships
463+ var rel Relationships
464+ var n int
465+ _ = n
466+ lenrels := len (rels )
467+ var spdxids []string = make ([]string , lenrels )
468+ // var licenseinfo string
469+ //
470+ for id := 0 ; id < lenrels ; id ++ {
471+ rel = rels [id ]
472+ spdxids = append (spdxids , rel .SpdxElementID )
473+ }
474+ unique_spdxIDs := removeDuplicateStr (spdxids )
475+ len_unique_spdxIDs := len (unique_spdxIDs )
476+ fmt .Println ("No. of unique spdxID :" , len_unique_spdxIDs )
477+ // _ = len_unique_spdxIDs
478+ var d int
479+
480+ fmt .Println (red ("===================DESCRIBES======================" ))
481+ for _ , rel1 := range rels {
482+ switch rt := rel1 .RelationshipType ; rt {
483+ case "DESCRIBES" :
484+ d ++
485+ s .getspdxpkg (d , rel1 .RelatedSpdxElement , rel1 )
486+ }
487+
488+ }
489+ d = 0
490+ fmt .Println (red ("===================DEPENDS_ON======================" ))
491+ for _ , rel1 := range rels {
492+ switch rt := rel1 .RelationshipType ; rt {
493+ case "DEPENDS_ON" :
494+ d ++
495+ s .getdependson (d , rel1 )
496+ s .getspdxpkg (d , rel1 .RelatedSpdxElement , rel1 )
497+ }
498+ }
499+
500+ }
0 commit comments