xref: /aosp_15_r20/external/spdx-tools/tvsaver/saver2v3/save_package.go (revision ba677afa8f67bb56cbc794f4d0e378e0da058e16)
1*ba677afaSXin Li// SPDX-License-Identifier: Apache-2.0 OR GPL-2.0-or-later
2*ba677afaSXin Li
3*ba677afaSXin Lipackage saver2v3
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_3"
13*ba677afaSXin Li)
14*ba677afaSXin Li
15*ba677afaSXin Lifunc renderPackage2_3(pkg *v2_3.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.PrimaryPackagePurpose != "" {
46*ba677afaSXin Li		fmt.Fprintf(w, "PrimaryPackagePurpose: %s\n", pkg.PrimaryPackagePurpose)
47*ba677afaSXin Li	}
48*ba677afaSXin Li	if pkg.ReleaseDate != "" {
49*ba677afaSXin Li		fmt.Fprintf(w, "ReleaseDate: %s\n", pkg.ReleaseDate)
50*ba677afaSXin Li	}
51*ba677afaSXin Li	if pkg.BuiltDate != "" {
52*ba677afaSXin Li		fmt.Fprintf(w, "BuiltDate: %s\n", pkg.BuiltDate)
53*ba677afaSXin Li	}
54*ba677afaSXin Li	if pkg.ValidUntilDate != "" {
55*ba677afaSXin Li		fmt.Fprintf(w, "ValidUntilDate: %s\n", pkg.ValidUntilDate)
56*ba677afaSXin Li	}
57*ba677afaSXin Li	if pkg.FilesAnalyzed == true {
58*ba677afaSXin Li		if pkg.IsFilesAnalyzedTagPresent == true {
59*ba677afaSXin Li			fmt.Fprintf(w, "FilesAnalyzed: true\n")
60*ba677afaSXin Li		}
61*ba677afaSXin Li	} else {
62*ba677afaSXin Li		fmt.Fprintf(w, "FilesAnalyzed: false\n")
63*ba677afaSXin Li	}
64*ba677afaSXin Li	if pkg.PackageVerificationCode != nil && pkg.PackageVerificationCode.Value != "" && pkg.FilesAnalyzed == true {
65*ba677afaSXin Li		if len(pkg.PackageVerificationCode.ExcludedFiles) == 0 {
66*ba677afaSXin Li			fmt.Fprintf(w, "PackageVerificationCode: %s\n", pkg.PackageVerificationCode.Value)
67*ba677afaSXin Li		} else {
68*ba677afaSXin Li			fmt.Fprintf(w, "PackageVerificationCode: %s (excludes: %s)\n", pkg.PackageVerificationCode.Value, strings.Join(pkg.PackageVerificationCode.ExcludedFiles, ", "))
69*ba677afaSXin Li		}
70*ba677afaSXin Li	}
71*ba677afaSXin Li
72*ba677afaSXin Li	for _, checksum := range pkg.PackageChecksums {
73*ba677afaSXin Li		fmt.Fprintf(w, "PackageChecksum: %s: %s\n", checksum.Algorithm, checksum.Value)
74*ba677afaSXin Li	}
75*ba677afaSXin Li
76*ba677afaSXin Li	if pkg.PackageHomePage != "" {
77*ba677afaSXin Li		fmt.Fprintf(w, "PackageHomePage: %s\n", pkg.PackageHomePage)
78*ba677afaSXin Li	}
79*ba677afaSXin Li	if pkg.PackageSourceInfo != "" {
80*ba677afaSXin Li		fmt.Fprintf(w, "PackageSourceInfo: %s\n", textify(pkg.PackageSourceInfo))
81*ba677afaSXin Li	}
82*ba677afaSXin Li	if pkg.PackageLicenseConcluded != "" {
83*ba677afaSXin Li		fmt.Fprintf(w, "PackageLicenseConcluded: %s\n", pkg.PackageLicenseConcluded)
84*ba677afaSXin Li	}
85*ba677afaSXin Li	if pkg.FilesAnalyzed == true {
86*ba677afaSXin Li		for _, s := range pkg.PackageLicenseInfoFromFiles {
87*ba677afaSXin Li			fmt.Fprintf(w, "PackageLicenseInfoFromFiles: %s\n", s)
88*ba677afaSXin Li		}
89*ba677afaSXin Li	}
90*ba677afaSXin Li	if pkg.PackageLicenseDeclared != "" {
91*ba677afaSXin Li		fmt.Fprintf(w, "PackageLicenseDeclared: %s\n", pkg.PackageLicenseDeclared)
92*ba677afaSXin Li	}
93*ba677afaSXin Li	if pkg.PackageLicenseComments != "" {
94*ba677afaSXin Li		fmt.Fprintf(w, "PackageLicenseComments: %s\n", textify(pkg.PackageLicenseComments))
95*ba677afaSXin Li	}
96*ba677afaSXin Li	if pkg.PackageCopyrightText != "" {
97*ba677afaSXin Li		fmt.Fprintf(w, "PackageCopyrightText: %s\n", textify(pkg.PackageCopyrightText))
98*ba677afaSXin Li	}
99*ba677afaSXin Li	if pkg.PackageSummary != "" {
100*ba677afaSXin Li		fmt.Fprintf(w, "PackageSummary: %s\n", textify(pkg.PackageSummary))
101*ba677afaSXin Li	}
102*ba677afaSXin Li	if pkg.PackageDescription != "" {
103*ba677afaSXin Li		fmt.Fprintf(w, "PackageDescription: %s\n", textify(pkg.PackageDescription))
104*ba677afaSXin Li	}
105*ba677afaSXin Li	if pkg.PackageComment != "" {
106*ba677afaSXin Li		fmt.Fprintf(w, "PackageComment: %s\n", textify(pkg.PackageComment))
107*ba677afaSXin Li	}
108*ba677afaSXin Li	for _, s := range pkg.PackageExternalReferences {
109*ba677afaSXin Li		fmt.Fprintf(w, "ExternalRef: %s %s %s\n", s.Category, s.RefType, s.Locator)
110*ba677afaSXin Li		if s.ExternalRefComment != "" {
111*ba677afaSXin Li			fmt.Fprintf(w, "ExternalRefComment: %s\n", textify(s.ExternalRefComment))
112*ba677afaSXin Li		}
113*ba677afaSXin Li	}
114*ba677afaSXin Li	for _, s := range pkg.PackageAttributionTexts {
115*ba677afaSXin Li		fmt.Fprintf(w, "PackageAttributionText: %s\n", textify(s))
116*ba677afaSXin Li	}
117*ba677afaSXin Li
118*ba677afaSXin Li	fmt.Fprintf(w, "\n")
119*ba677afaSXin Li
120*ba677afaSXin Li	// also render any files for this package
121*ba677afaSXin Li	sort.Slice(pkg.Files, func(i, j int) bool {
122*ba677afaSXin Li		return pkg.Files[i].FileSPDXIdentifier < pkg.Files[j].FileSPDXIdentifier
123*ba677afaSXin Li	})
124*ba677afaSXin Li	for _, fi := range pkg.Files {
125*ba677afaSXin Li		renderFile2_3(fi, w)
126*ba677afaSXin Li	}
127*ba677afaSXin Li
128*ba677afaSXin Li	return nil
129*ba677afaSXin Li}
130