1*ba677afaSXin Li// SPDX-License-Identifier: Apache-2.0 OR GPL-2.0-or-later 2*ba677afaSXin Li 3*ba677afaSXin Lipackage saver2v2 4*ba677afaSXin Li 5*ba677afaSXin Liimport ( 6*ba677afaSXin Li "fmt" 7*ba677afaSXin Li "io" 8*ba677afaSXin Li "sort" 9*ba677afaSXin Li "strings" 10*ba677afaSXin Li 11*ba677afaSXin Li "github.com/spdx/tools-golang/spdx/common" 12*ba677afaSXin Li "github.com/spdx/tools-golang/spdx/v2_2" 13*ba677afaSXin Li) 14*ba677afaSXin Li 15*ba677afaSXin Lifunc renderPackage2_2(pkg *v2_2.Package, w io.Writer) error { 16*ba677afaSXin Li if pkg.PackageName != "" { 17*ba677afaSXin Li fmt.Fprintf(w, "PackageName: %s\n", pkg.PackageName) 18*ba677afaSXin Li } 19*ba677afaSXin Li if pkg.PackageSPDXIdentifier != "" { 20*ba677afaSXin Li fmt.Fprintf(w, "SPDXID: %s\n", common.RenderElementID(pkg.PackageSPDXIdentifier)) 21*ba677afaSXin Li } 22*ba677afaSXin Li if pkg.PackageVersion != "" { 23*ba677afaSXin Li fmt.Fprintf(w, "PackageVersion: %s\n", pkg.PackageVersion) 24*ba677afaSXin Li } 25*ba677afaSXin Li if pkg.PackageFileName != "" { 26*ba677afaSXin Li fmt.Fprintf(w, "PackageFileName: %s\n", pkg.PackageFileName) 27*ba677afaSXin Li } 28*ba677afaSXin Li if pkg.PackageSupplier != nil && pkg.PackageSupplier.Supplier != "" { 29*ba677afaSXin Li if pkg.PackageSupplier.SupplierType == "" { 30*ba677afaSXin Li fmt.Fprintf(w, "PackageSupplier: %s\n", pkg.PackageSupplier.Supplier) 31*ba677afaSXin Li } else { 32*ba677afaSXin Li fmt.Fprintf(w, "PackageSupplier: %s: %s\n", pkg.PackageSupplier.SupplierType, pkg.PackageSupplier.Supplier) 33*ba677afaSXin Li } 34*ba677afaSXin Li } 35*ba677afaSXin Li if pkg.PackageOriginator != nil && pkg.PackageOriginator.Originator != "" { 36*ba677afaSXin Li if pkg.PackageOriginator.OriginatorType == "" { 37*ba677afaSXin Li fmt.Fprintf(w, "PackageOriginator: %s\n", pkg.PackageOriginator.Originator) 38*ba677afaSXin Li } else { 39*ba677afaSXin Li fmt.Fprintf(w, "PackageOriginator: %s: %s\n", pkg.PackageOriginator.OriginatorType, pkg.PackageOriginator.Originator) 40*ba677afaSXin Li } 41*ba677afaSXin Li } 42*ba677afaSXin Li if pkg.PackageDownloadLocation != "" { 43*ba677afaSXin Li fmt.Fprintf(w, "PackageDownloadLocation: %s\n", pkg.PackageDownloadLocation) 44*ba677afaSXin Li } 45*ba677afaSXin Li if pkg.FilesAnalyzed == true { 46*ba677afaSXin Li if pkg.IsFilesAnalyzedTagPresent == true { 47*ba677afaSXin Li fmt.Fprintf(w, "FilesAnalyzed: true\n") 48*ba677afaSXin Li } 49*ba677afaSXin Li } else { 50*ba677afaSXin Li fmt.Fprintf(w, "FilesAnalyzed: false\n") 51*ba677afaSXin Li } 52*ba677afaSXin Li if pkg.PackageVerificationCode.Value != "" && pkg.FilesAnalyzed == true { 53*ba677afaSXin Li if len(pkg.PackageVerificationCode.ExcludedFiles) == 0 { 54*ba677afaSXin Li fmt.Fprintf(w, "PackageVerificationCode: %s\n", pkg.PackageVerificationCode.Value) 55*ba677afaSXin Li } else { 56*ba677afaSXin Li fmt.Fprintf(w, "PackageVerificationCode: %s (excludes: %s)\n", pkg.PackageVerificationCode.Value, strings.Join(pkg.PackageVerificationCode.ExcludedFiles, ", ")) 57*ba677afaSXin Li } 58*ba677afaSXin Li } 59*ba677afaSXin Li 60*ba677afaSXin Li for _, checksum := range pkg.PackageChecksums { 61*ba677afaSXin Li fmt.Fprintf(w, "PackageChecksum: %s: %s\n", checksum.Algorithm, checksum.Value) 62*ba677afaSXin Li } 63*ba677afaSXin Li 64*ba677afaSXin Li if pkg.PackageHomePage != "" { 65*ba677afaSXin Li fmt.Fprintf(w, "PackageHomePage: %s\n", pkg.PackageHomePage) 66*ba677afaSXin Li } 67*ba677afaSXin Li if pkg.PackageSourceInfo != "" { 68*ba677afaSXin Li fmt.Fprintf(w, "PackageSourceInfo: %s\n", textify(pkg.PackageSourceInfo)) 69*ba677afaSXin Li } 70*ba677afaSXin Li if pkg.PackageLicenseConcluded != "" { 71*ba677afaSXin Li fmt.Fprintf(w, "PackageLicenseConcluded: %s\n", pkg.PackageLicenseConcluded) 72*ba677afaSXin Li } 73*ba677afaSXin Li if pkg.FilesAnalyzed == true { 74*ba677afaSXin Li for _, s := range pkg.PackageLicenseInfoFromFiles { 75*ba677afaSXin Li fmt.Fprintf(w, "PackageLicenseInfoFromFiles: %s\n", s) 76*ba677afaSXin Li } 77*ba677afaSXin Li } 78*ba677afaSXin Li if pkg.PackageLicenseDeclared != "" { 79*ba677afaSXin Li fmt.Fprintf(w, "PackageLicenseDeclared: %s\n", pkg.PackageLicenseDeclared) 80*ba677afaSXin Li } 81*ba677afaSXin Li if pkg.PackageLicenseComments != "" { 82*ba677afaSXin Li fmt.Fprintf(w, "PackageLicenseComments: %s\n", textify(pkg.PackageLicenseComments)) 83*ba677afaSXin Li } 84*ba677afaSXin Li if pkg.PackageCopyrightText != "" { 85*ba677afaSXin Li fmt.Fprintf(w, "PackageCopyrightText: %s\n", textify(pkg.PackageCopyrightText)) 86*ba677afaSXin Li } 87*ba677afaSXin Li if pkg.PackageSummary != "" { 88*ba677afaSXin Li fmt.Fprintf(w, "PackageSummary: %s\n", textify(pkg.PackageSummary)) 89*ba677afaSXin Li } 90*ba677afaSXin Li if pkg.PackageDescription != "" { 91*ba677afaSXin Li fmt.Fprintf(w, "PackageDescription: %s\n", textify(pkg.PackageDescription)) 92*ba677afaSXin Li } 93*ba677afaSXin Li if pkg.PackageComment != "" { 94*ba677afaSXin Li fmt.Fprintf(w, "PackageComment: %s\n", textify(pkg.PackageComment)) 95*ba677afaSXin Li } 96*ba677afaSXin Li for _, s := range pkg.PackageExternalReferences { 97*ba677afaSXin Li fmt.Fprintf(w, "ExternalRef: %s %s %s\n", s.Category, s.RefType, s.Locator) 98*ba677afaSXin Li if s.ExternalRefComment != "" { 99*ba677afaSXin Li fmt.Fprintf(w, "ExternalRefComment: %s\n", textify(s.ExternalRefComment)) 100*ba677afaSXin Li } 101*ba677afaSXin Li } 102*ba677afaSXin Li for _, s := range pkg.PackageAttributionTexts { 103*ba677afaSXin Li fmt.Fprintf(w, "PackageAttributionText: %s\n", textify(s)) 104*ba677afaSXin Li } 105*ba677afaSXin Li 106*ba677afaSXin Li fmt.Fprintf(w, "\n") 107*ba677afaSXin Li 108*ba677afaSXin Li // also render any files for this package 109*ba677afaSXin Li sort.Slice(pkg.Files, func(i, j int) bool { 110*ba677afaSXin Li return pkg.Files[i].FileSPDXIdentifier < pkg.Files[j].FileSPDXIdentifier 111*ba677afaSXin Li }) 112*ba677afaSXin Li for _, fi := range pkg.Files { 113*ba677afaSXin Li renderFile2_2(fi, w) 114*ba677afaSXin Li } 115*ba677afaSXin Li 116*ba677afaSXin Li return nil 117*ba677afaSXin Li} 118